Skip to content

Commit 2575754

Browse files
authored
Merge pull request #1603 from netalertx/main
sync
2 parents 16e2249 + c40d04b commit 2575754

File tree

31 files changed

+5615
-126
lines changed

31 files changed

+5615
-126
lines changed

.github/workflows/mkdocs.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ jobs:
2525
pip install \
2626
mkdocs==1.6.0 \
2727
mkdocs-material==9.5.21 \
28-
mkdocs-github-admonitions-plugin==0.1.1
28+
mkdocs-github-admonitions-plugin==0.1.1 \
29+
mkdocs-glightbox
2930
3031
- name: Build MkDocs
3132
run: mkdocs build

CONTRIBUTING.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,22 @@ Before opening a new issue:
1515
- [Check Common Issues & Debug Tips](https://docs.netalertx.com/DEBUG_TIPS#common-issues)
1616
- [Search Closed Issues](https://github.com/netalertx/NetAlertX/issues?q=is%3Aissue+is%3Aclosed)
1717

18+
---
19+
20+
## Contributing without coding knowledge
21+
22+
Writing code is not the only way how you can contribute to the project. Here are some ideas how you can help out otherwise:
23+
24+
- Help improving the documentation (text, typos, use cases, screenshots - all this makes things better)
25+
- Share your favorite project on socials (see [Growth ideas](./GROWTH.md))
26+
- Write a blog post, or a how-to set-up guide
27+
- Write how it helped you to achieve something fun or interesting to simplify your personal or work life
28+
- Help with the translation effort
29+
- Running a nightly or dev build to test for bugs before they make it to the production release
30+
- Report bugs and features with sufficient detail and care (super important to ease everyone's maintenance burden and minimize back-and-forth)
31+
- running a projects test suite
32+
33+
1834
---
1935

2036
## Use of AI

GROWTH.md

Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
# 📈 NetAlertX Growth Playbook
2+
3+
If you like NetAlertX and want to help it grow, this is how.
4+
5+
This isn’t about spam or "growth hacks." It’s just getting the tool in front of people who already have the problem (manual network docs, blind spots, messy networks).
6+
7+
---
8+
9+
## 🎯 Who this is for
10+
11+
* **Homelabbers** → Proxmox, Unraid, Raspberry Pi setups
12+
* **Self-hosters** → moving away from cloud / want local-first
13+
* **Sysadmins / MSPs** → need visibility + fast onboarding
14+
15+
---
16+
17+
## 💬 Where to post (and how)
18+
19+
### Reddit (main channel)
20+
21+
Reddit works *if* you don’t sound like marketing.
22+
23+
**Subreddits**
24+
25+
* r/homelab
26+
* r/selfhosted
27+
* r/sysadmin
28+
* r/networking
29+
30+
**What works**
31+
32+
* "Show r/homelab" / "I built this"
33+
* Problem → solution
34+
* Real screenshots or short GIFs
35+
36+
**Example**
37+
38+
> Tired of keeping network diagrams up to date?
39+
> I deployed something that does it automatically.
40+
41+
**Avoid**
42+
43+
* Over-explaining
44+
* Buzzwords
45+
* "Check out my project!!!" energy
46+
47+
**Timing (rough guide)**
48+
49+
* Tue–Thu mornings (US time)
50+
51+
---
52+
53+
### Hacker News (Show HN)
54+
55+
Good fit because NetAlertX is:
56+
57+
* local-first
58+
* privacy-focused
59+
* actually useful
60+
61+
**Title**
62+
63+
> Show HN: NetAlertX – network documentation that updates itself
64+
65+
Be ready to answer:
66+
67+
* stack (Python / PHP / JS)
68+
* how discovery works
69+
* privacy / local scanning
70+
71+
---
72+
73+
### Awesome Lists
74+
75+
Low effort, long-term visibility.
76+
77+
Target:
78+
79+
* awesome-selfhosted
80+
* awesome-homelab
81+
82+
Keep it simple:
83+
84+
> NetAlertX – automated network discovery and documentation with alerting
85+
86+
---
87+
88+
## 🎥 Content / creators
89+
90+
If you or someone else makes videos, these angles work:
91+
92+
* **First 5 minutes** → "it already found everything"
93+
* **Before vs after** → manual vs NetAlertX
94+
* **Docker setup** → show how easy it is
95+
96+
No need for overproduction—real usage > polished demos.
97+
98+
---
99+
100+
## ⚖️ Positioning (keep it simple)
101+
102+
When explaining NetAlertX, this is the mental model:
103+
104+
| | Manual Docs | Basic Scanners | NetAlertX |
105+
| ------- | ----------------- | -------------- | ------------------------- |
106+
| Updates | Manual / outdated | On demand | **Automatic** |
107+
| Alerts | None | Limited | **New / unknown devices** |
108+
| History | None | None | **Device timeline** |
109+
| Effort | High | Medium | **Set & forget** |
110+
111+
---
112+
113+
## 🧑‍💻 MSP / professional angle
114+
115+
If you’re using it in real environments:
116+
117+
* Faster client onboarding
118+
* Better visibility
119+
* Less "what changed?" guessing
120+
121+
That’s the value—keep it grounded. And share your experience 🙏
122+
123+
---
124+
125+
## 🛠 Easy ways to help
126+
127+
* Star the repo
128+
* Post a screenshot of your network
129+
* Mention it when someone asks "how do you track devices?" or "how do you detect presence?"
130+
* Write a quick "how I use it" post
131+
132+
---
133+
134+
## Final note
135+
136+
Authenticity matters more than reach.
137+
138+
If it feels like marketing, people ignore it.
139+
If it feels like "this solved my problem," people pay attention.
140+
141+
Thanks a lot in advance!
142+
- jokob

docs/PLUGINS.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ Device-detecting plugins insert values into the `CurrentScan` database table. T
5757
| `DHCPSRVS` | [dhcp_servers](https://github.com/netalertx/NetAlertX/tree/main/front/plugins/dhcp_servers/) || DHCP servers | | |
5858
| `DIGSCAN` | [dig_scan](https://github.com/netalertx/NetAlertX/tree/main/front/plugins/dig_scan/) | 🆎 | Dig (DNS) Name resolution | | |
5959
| `FREEBOX` | [freebox](https://github.com/netalertx/NetAlertX/tree/main/front/plugins/freebox/) | 🔍/♻/🆎 | Pull data and names from Freebox/Iliadbox | | |
60+
| `FRITZBOX` | [fritzbox](https://github.com/netalertx/NetAlertX/tree/main/front/plugins/fritzbox/) | 🔍 | Fritz!Box device scanner via TR-064 | | |
6061
| `ICMP` | [icmp_scan](https://github.com/netalertx/NetAlertX/tree/main/front/plugins/icmp_scan/) || ICMP (ping) status checker | | |
6162
| `INTRNT` | [internet_ip](https://github.com/netalertx/NetAlertX/tree/main/front/plugins/internet_ip/) | 🔍 | Internet IP scanner | | |
6263
| `INTRSPD` | [internet_speedtest](https://github.com/netalertx/NetAlertX/tree/main/front/plugins/internet_speedtest/) || Internet speed test | | |

docs/REMOTE_NETWORKS.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,27 +33,27 @@ VPNs use virtual interfaces (e.g., `tun0`, `tap0`) to encapsulate traffic, bypas
3333

3434
> **Possible workaround**: Configure the VPN to bridge networks instead of routing to enable ARP, though this depends on the VPN setup and security requirements.
3535
36-
# Other Workarounds
36+
## Other Workarounds
3737

3838
The following workarounds should work for most complex network setups.
3939

40-
## Supplementing Plugins
40+
### Supplementing Plugins
4141

4242
You can use supplementary plugins that employ alternate methods. Protocols used by the `SNMPDSC` or `DHCPLSS` plugins are widely supported on different routers and can be effective as workarounds. Check the [plugins list](./PLUGINS.md) to find a plugin that works with your router and network setup.
4343

44-
## Multiple NetAlertX Instances
44+
### Multiple NetAlertX Instances
4545

4646
If you have servers in different networks, you can set up separate NetAlertX instances on those subnets and synchronize the results into one instance using the [`SYNC` plugin](https://github.com/netalertx/NetAlertX/tree/main/front/plugins/sync).
4747

48-
## Manual Entry
48+
### Manual Entry
4949

5050
If you don't need to discover new devices and only need to report on their status (`online`, `offline`, `down`), you can manually enter devices and check their status using the [`ICMP` plugin](https://github.com/netalertx/NetAlertX/blob/main/front/plugins/icmp_scan/), which uses the `ping` command internally.
5151

5252
For more information on how to add devices manually (or dummy devices), refer to the [Device Management](./DEVICE_MANAGEMENT.md) documentation.
5353

5454
To create truly dummy devices, you can use a loopback IP address (e.g., `0.0.0.0` or `127.0.0.1`) or the `Force Status` field so they appear online.
5555

56-
## NMAP and Fake MAC Addresses
56+
### NMAP and Fake MAC Addresses
5757

5858
Scanning remote networks with NMAP is possible (via the `NMAPDEV` plugin), but since it cannot retrieve the MAC address, you need to enable the `NMAPDEV_FAKE_MAC` setting. This will generate a fake MAC address based on the IP address, allowing you to track devices. However, this can lead to inconsistencies, especially if the IP address changes or a previously logged device is rediscovered. If this setting is disabled, only the IP address will be discovered, and devices with missing MAC addresses will be skipped.
5959

docs/SUBNETS.md

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,15 @@ You need to specify the network interface and the network mask. You can also con
88
> If you don't see all expected devices run the following command in the NetAlertX container (replace the interface and ip mask):
99
> `sudo arp-scan --interface=eth0 192.168.1.0/24`
1010
>
11-
> If this command returns no results, the network is not accessible due to your network or firewall restrictions (Wi-Fi Extenders, VPNs and inaccessible networks). If direct scans are not possible, check the [remote networks documentation](./REMOTE_NETWORKS.md) for workarounds.
12-
11+
> If this command returns no results:
12+
>
13+
> - ✅ If you see output like `IPv4: (none)` or `Using 0.0.0.0`:
14+
> - The interface was not detected correctly.
15+
> - Fix: explicitly set the interface using `--interface=<name>`.
16+
>
17+
> - ❌ If the scan runs correctly but still finds no devices:
18+
> - The network may not be accessible due to firewall, VLAN, or network restrictions (Wi-Fi extenders, VPNs, etc.).
19+
> - If direct scans are not possible, check the [remote networks documentation](./REMOTE_NETWORKS.md) for workarounds.
1320
1421
## Example Values
1522

docs/WORKFLOWS.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
# Workflows Overview
22

3-
The workflows module in allows to automate repetitive tasks, making network management more efficient. Whether you need to assign newly discovered devices to a specific Network Node, auto-group devices from a given vendor, unarchive a device if detected online, or automatically delete devices, this module provides the flexibility to tailor the automations to your needs.
3+
The workflows module allows to automate repetitive tasks, making network management more efficient. Whether you need to assign newly discovered devices to a specific Network Node, auto-group devices from a given vendor, unarchive a device if detected online, or automatically delete devices, this module provides the flexibility to tailor the automations to your needs.
44

55
![Workflows diagram](./img/WORKFLOWS/workflows_diagram.png)
66

7-
Below are a few examples that demonstrate how this module can be used to simplify network management tasks.
7+
You can find a couple of use case examples in [Workflow Examples](WORKFLOW_EXAMPLES.md).
88

99
## Updating Workflows
1010

front/js/app-init.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ function isAppInitialized() {
126126

127127
lang_shouldBeCompletedCalls = getLangCode() == 'en_us' ? 1 : 2;
128128

129-
// check if each ajax call completed succesfully
129+
// check if each ajax call completed successfully
130130
for (const call_name of completedCalls_final) {
131131
if (getCache(CACHE_KEYS.initFlag(call_name)) != "true") {
132132
_isAppInitLog(`[isAppInitialized] waiting on ${call_name} (value: ${getCache(CACHE_KEYS.initFlag(call_name))})`);
@@ -268,7 +268,7 @@ setTimeout(() => {
268268
// page refresh if configured
269269
const refreshTime = getSetting("UI_REFRESH");
270270
if (refreshTime && refreshTime !== "0" && refreshTime !== "") {
271-
console.log("Refreshing page becasue UI_REFRESH setting enabled.");
271+
console.log("Refreshing page because UI_REFRESH setting enabled.");
272272
newTimerRefreshData(clearCache, parseInt(refreshTime)*1000);
273273
}
274274

front/js/ui_components.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -590,6 +590,7 @@ function addOptionFromModalInput() {
590590
* A MAC is considered fake if it starts with:
591591
* - "FA:CE" (new synthetic devices)
592592
* - "00:1A" (legacy placeholder devices)
593+
* - "02:" (legacy placeholder devices)
593594
*
594595
* The check is case-insensitive.
595596
*
@@ -600,8 +601,8 @@ function isFakeMac(macAddress) {
600601
// Normalize to lowercase for consistent comparison
601602
macAddress = macAddress.toLowerCase();
602603

603-
// Check if MAC starts with FA:CE or 00:1a
604-
return macAddress.startsWith("fa:ce") || macAddress.startsWith("00:1a");
604+
// Check if MAC starts with FA:CE or 00:1a or 02:
605+
return macAddress.startsWith("fa:ce") || macAddress.startsWith("00:1a") || macAddress.startsWith("02:");
605606
}
606607

607608

front/php/templates/language/ar_ar.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -805,4 +805,4 @@
805805
"settings_system_label": "نظام",
806806
"settings_update_item_warning": "قم بتحديث القيمة أدناه. احرص على اتباع التنسيق السابق. <b>لم يتم إجراء التحقق.</b>",
807807
"test_event_tooltip": "احفظ التغييرات أولاً قبل اختبار الإعدادات."
808-
}
808+
}

0 commit comments

Comments
 (0)