Help & Operating Guide
CHANGELOG
- The full FCC GMRS licence database is now held locally — 605,527 records, 450,807 active — so GMRS call sign lookups during a net resolve instantly without an external API call.
- Updated daily from the FCC's published transaction files, with a full rebuild monthly.
- The daily update verifies the FCC actually published that day's file before applying it. The FCC skipped three days in the eight to 18 Aug; without the check, a skipped day silently reapplies a week-old file and reverts good records.
- Outgoing mail (account approvals, password resets, net reminders) now sends through this server's mail relay.
- The domain is DKIM-signed, so messages are authenticated and far less likely to be filtered as spam.
- Fixed: outgoing mail could not be enabled at all on a local relay, because the app required an SMTP username and password — a relay on the same machine has neither.
- This is a local instance running at nets.buckscountyham.org, on our own server and database. Nothing here is shared with any other site.
- Rebranded throughout, and every off-site link, tracker and donation button from the upstream project has been removed.
- The page font is served from this server rather than fetched from Google, so visiting these pages does not hand your address to a third party.
- Built on the open-source Ham Net Tracker project, with the local changes listed above. Feature history before this date is upstream's and has been trimmed from this page.
QUICK START
1. Create a Net under My Nets — give it a name and frequency.
2. Open the net and click ▶ Start New Session to begin.
3. Use the Check-In form or Expected Stations list to log stations as they call in.
4. Click ■ End Session when the net closes — a session summary card will appear automatically.
Keyboard shortcut: Press / anywhere on the session page to instantly focus the callsign input.
SESSION CLOCK & TIMER
While a session is live, a clock bar appears showing local time, UTC time, and the elapsed session time. The timer starts from when the session was opened and updates every second.
The clock disappears automatically when the session ends.
CALLSIGN LOOKUP & SEARCH
Full callsign (e.g. W7KOL) — type it in and the system looks up the licensee name, class, state, and grid from the FCC database, auto-filling the Name field.
Suffix search (e.g. KOL) — type letters without a district number and the system searches your net's check-in history for matching callsigns. A dropdown appears sorted by suffix. Click any result to select it and trigger a full FCC lookup.
Suffix search only finds callsigns already in your net's history. For a brand-new station, type their full callsign.
STATION REMARKS
After looking up a callsign, a small 📝 Remark pill appears in the lookup info bar. Click it to add or edit a persistent note about that station (e.g. "portable op", "relay to W7NET", "hearing impaired — use Winlink").
Remarks are saved per net and appear every time that station is looked up during any future session on that net.
MANUAL CHECK-IN FORM
Fill in callsign, name (auto-filled from FCC), signal report, and optional comments. Check Has Traffic before clicking Check In or pressing Enter.
Duplicate callsigns in the same session are automatically rejected.
NET CONTROL SCRIPT
Net owners can attach a script to a net from its Edit form — the Net Script field below Description. When set, a collapsible 📜 NET SCRIPT panel is pinned to the top of the live check-in screen, open by default, so you can read from it without a second window or a printed sheet — even while scrolling through check-ins.
MARKUP
A small, deliberately limited set of formatting is supported:
**bold**,
*italic*,
# / ## / ### heading,
- item bullet lists, and
--- / === as a horizontal rule (alone on its own line). Everything else — blank lines, indentation, plain text — renders exactly as typed; this is not full Markdown or HTML, so unrecognized syntax (including literal </>) always shows as plain text rather than being interpreted.
VARIABLES
{{variable}} placeholders are filled in with live session info wherever the script is shown:
{{net_name}} | The net's name |
{{net_control}} | Net Control name — callsign |
{{net_control_callsign}} / {{net_control_name}} | Just the callsign / just the name |
{{broadcaster}} | Broadcaster name — callsign (Additional Broadcast nets only) |
{{broadcaster_callsign}} / {{broadcaster_name}} | Just the callsign / just the name |
{{broadcast_label}} | The net's custom broadcast name (e.g. "Amateur Radio Newsline") |
{{net_control_next}} | Next week's Net Control name — callsign |
{{net_control_next_callsign}} / {{net_control_next_name}} | Just the callsign / just the name |
{{broadcaster_next}} | Next week's Broadcaster name — callsign |
{{broadcaster_next_callsign}} / {{broadcaster_next_name}} | Just the callsign / just the name |
Net Control falls back to whoever started the session if no one signed up on the Schedule tab for that date; Broadcaster only fills in from a Schedule sign-up. The _next variables look one week ahead and are never filled by fallback — they stay blank until someone actually signs up on the Schedule tab for that date. An unrecognized {{...}} is left as-is rather than silently dropped, so a typo is easy to spot. For example:
# Monday Night Net Script
Good evening, this is **{{net_control}}**, your net control operator
for the {{net_name}}.
Coming up: tonight's {{broadcast_label}} segment, read by {{broadcaster}}.
- If you would like to check in, please call now with your callsign.
- Traffic? Let us know when you check in.
---
Next week's net control will be {{net_control_next}}.
Thank you all for checking in. This net is now closed.
Leave the field blank to hide the panel entirely. Click the panel header any time to collapse or reopen it during a session.
GMRS NETS
When creating a net, select GMRS as the net type. GMRS nets behave like ham nets with a few differences:
Shared callsigns — a GMRS licence covers an entire family. The same callsign can check in multiple times in a single session. Use the Name field to identify each individual operator (e.g. "Dad", "Mom", "Mobile 1").
Callsign lookup — GMRS callsigns (format: 3–4 letters followed by 3–4 digits, e.g. WSMC512) are looked up in a local copy of the FCC ULS GMRS database. The database is refreshed daily; new licences may take up to 24 hours to appear.
ARES mode and DMR integration are not available for GMRS nets and are hidden automatically.
EXPECTED STATIONS
Click Expected Stations to expand the panel. Set the minimum check-in count and lookback window (weeks), then click Load List.
Each row shows two checkboxes: Check In to log them immediately, and Traffic to pre-flag traffic before they're formally logged. On ARES nets, a 📍 zone badge shows their last known evacuation zone.
Already-checked-in stations are greyed out and the list refreshes automatically.
TRAFFIC MANAGEMENT
When any station has traffic, a red 📢 TRAFFIC banner appears listing them as interactive chips. Once you've called a station to pass their traffic, tick the checkbox on their chip — it strikes through and dims to show it's been handled. Unchecked chips remain prominent so nothing gets missed.
Pre-flagged stations from Expected Stations appear with a ⏳ badge until formally checked in. Their checkbox is disabled until they call in.
In the check-ins table, click the 📢 / ○ button in the Traffic column to toggle the flag on any station.
TRAFFIC MESSAGE LOG
Click 📋 TRAFFIC MESSAGE LOG to expand the panel. Use it to record individual traffic messages handled during the session — message number, origin, destination, type (Formal / Informal / Health & Welfare), and notes.
The Status dropdown on each row lets you track progress: Received → Relayed → Delivered (or Undeliverable). Changes save immediately.
The message log is included in the ICS-205 export.
SESSION SUMMARY & ICS-205
When you end a session, a Session Summary card pops up showing total check-ins, session duration, traffic count, and new stations (first-time visitors to this net).
Click 📄 ICS-205 / Net Log to open a printable net log in a new tab. It includes the ICS-205 header (net name, frequency, NCS callsign, operational period) plus the full check-in roster and traffic message log. Use your browser's Print function to save as PDF.
You can also export the raw check-in data as a CSV for logging or upload to other systems.
ARES/ACES MODE
Enable ARES/ACS Net in the net settings to activate evacuation zone tracking. An Evac Zone field appears in the check-in form — enter the station's zone (e.g. "Zone A") when they check in.
The zone is saved automatically to a per-net zone table. In future sessions, the station's last known zone appears as a 📍 badge in the Expected Stations list and is pre-filled when checking them in.
The Zone Roster panel shows all known zones grouped by zone name with their callsigns, sorted by callsign suffix. The Zone column also appears in the check-in table and the ICS-205 export.
SESSION HISTORY
The History view shows every callsign that has checked into the selected net, with check-in counts for the past 2 weeks, 4 weeks, and all time.
Use the filter dropdown to find: Last Net, Missed Last Net, Active (2 wks), Regular (4 wks, ≥2), Frequent (4 wks, ≥3), or Inactive (4 wks).
Combine the dropdown with the text search box for further filtering. Use ⬇ Download CSV to export the current view.
NET SHARING
Net owners can share a net with other registered operators. Open the net's Edit form and expand the 🔗 Sharing section at the bottom.
Choose Share with all registered users to give every active account access, or select individual users from the list. Click Save Sharing to apply — this is separate from the main Save button.
Shared nets appear in other operators' net lists with a Shared badge and show the owner's callsign. Shared users can start sessions and add check-ins, but cannot edit the net configuration or manage sharing.
Admins can see and open all nets on the system regardless of sharing settings.
SCHEDULING
In the Schedule tab of a net, add weekly repeating time slots (day, time, timezone). These appear as a calendar of upcoming dates.
The Timezone field auto-fills to your browser's detected timezone when you open the form, and autocompletes from the full IANA timezone list — you're rarely typing it from scratch. It only affects entry, though: change it if the net actually runs somewhere else.
Every schedule time shown anywhere — the Schedule tab, the Upcoming list, and the public /directory page — includes a (H:MM your time) conversion whenever your browser's timezone differs from the one the schedule was declared in, so you don't have to do the math yourself.
Operators can click Sign Up next to any future date to claim the Net Control slot. The net owner can instead click 👤 Assign to put a registered operator on the schedule.
If the net has Additional Broadcast enabled in its Edit form (e.g. for a segment like Amateur Radio Newsline), each date also shows a separate Broadcaster sign-up slot — a different operator can claim it, or one operator can click + Cover Both Roles to take both for that date. Whoever is signed up is shown, callsign and name, on the live check-in screen and the public /live page.
SCHEDULED NET REMINDERS
Enable Reminder Emails in a net's Edit form and set a lead time (in minutes) to have whoever's signed up as Net Control or Broadcaster on the Schedule tab emailed shortly before their net starts. Each role is reminded independently, at the email address they gave when signing up.
If nobody has signed up for a date, no reminder goes out — there's no one to email. This depends on the server having SMTP configured and a reminders cron job running; ask your administrator if you enable this and don't receive anything.
PUBLIC NET DIRECTORY
Enable List in Public Net Directory in a net's Edit form to show it at /directory — a public page, no login required, separate from the real-time /live check-in view. Listed nets show their name, net type, frequency, description, weekly schedule, and your callsign as the host.
Nets are unlisted by default — opt in per net. There's currently no integration with external ham radio net directories (no such site offers a public API to publish to); this is a self-contained directory within your instance only.
ADMIN PANEL
The first user to register automatically becomes admin. Additional registrations require approval before login is permitted.
Admins can approve/deactivate accounts, grant admin privileges, delete accounts, and opt in to email notifications for new registrations using the ✉/📧 toggle in the Notify column.
Newly approved operators receive an automatic confirmation email if SMTP is configured in .env.
DATABASE MIGRATIONS
Schema migrations are managed by migrate.py in the app directory.
It is safe to re-run at any time — every step uses IF NOT EXISTS.
./deploy.sh now runs it automatically as part of every deploy, before the service restarts — no manual step needed if you use it.
To run it by hand:
sudo -u netcontrol python3 /opt/netcontrol/migrate.py
Fresh installs: new tables are created automatically on first startup — no migration needed.
Run migrate.py only when upgrading an existing instance after a code update.
GMRS licence database
Seed the local GMRS callsign database on first install, then let the daily cron keep it current:
# Initial seed (full ~54 MB download) python3 /opt/netcontrol/gmrs_sync.py --mode full # Routine update (runs automatically via cron — daily transaction file) python3 /opt/netcontrol/gmrs_sync.py --mode update
Scheduled net reminders
Net owners enable reminders per-net in the Edit form, but sending them requires send_reminders.py running frequently via cron (it's idempotent, safe to run every few minutes):
*/5 * * * * /opt/netcontrol/venv/bin/python3 /opt/netcontrol/send_reminders.py >> /var/log/nettracker/reminders.log 2>&1