Add user
Existing users
| Username | Role | Groups | Team | Active | Last login | Actions |
|---|
Add team
Existing teams
| Name | Car # | Colour | Contact | Members | Actions |
|---|
System settings
Changes to most settings take effect immediately. Settings marked ↺ restart require a server restart to take effect.
SMS Emergency Fallback (Twilio)
This toggle enables the SMS emergency fallback and sets the default events. Twilio credentials — Account SID, Auth Token, phone number, and webhook URL — are entered in the Runtime Configuration section above, under ”SMS / Twilio.” (The server uses the Auth Token to validate inbound webhook signatures; the tracker sends emergency SMS directly via its own modem.) The tracker's own phone number (MSISDN) is reported in its status heartbeat and shown in the Cellular tab's SIM inventory — no manual entry needed, though you can override it there.
APRS Source Callsign (control operator)
Outbound APRS messages are sent from this control-operator callsign to each unit's callsign — so they appear as an inbound message in the recipient's APRS log. Setting it requires an amateur-radio licence acknowledgement, and sending an APRS message also still requires per-unit APRS-send to be enabled (Cars tab).
- Current
- Loading…
APRS-IS Connection
APRS positions are received via a persistent TCP connection to an APRS-IS tier-2 server
(default: rotate.aprs2.net). The server maintains a real-time packet stream
filtered to the configured callsigns — no API key required. Connection settings
(APRS_IS_SERVER, APRS_IS_PORT, APRS_IS_PASSCODE)
are managed in the Settings tab.
- Status
- Loading…
Callsigns
| Callsign | Label | Added | Actions |
|---|
Firmware Staging
Stage a firmware binary then push it to connected trackers via MQTT. The tracker must be connected to WiFi and the operator must confirm on-device (secret menu → OTA Update → C button).
- Staged binary
- Loading…
GitHub Releases
| Version | Published | Size | Action |
|---|---|---|---|
| Loading… | |||
Upload binary
Device Firmware Status
Auto-refreshes every 30 s. Push is enabled for online devices that need an update.
| Car # | Device ID | Platform | Online | Version | Status | Debug Mode | Action |
|---|---|---|---|---|---|---|---|
| Loading… | |||||||
OTA Event Log
Per-device update history. Updates in real time via SSE. Shows the last 50 events across all devices.
| Time | Device | Event | Target version | Detail |
|---|---|---|---|---|
| Loading… | ||||
Flash via USB
Flash the staged binary directly to a USB-connected tracker from this browser. Requires Chrome or Edge on a PC — no PlatformIO needed.
A normal flash overwrites only the app partition and preserves the bootloader, partition table, and NVS (WiFi credentials, calibration). To recover a device that no longer boots, use Full Device Recovery below.
Set WiFi credentials
Writes WiFi credentials into the connected tracker's two NVS slots (slot 1 = primary, tried first). The tracker must be running normally (not in bootloader mode). Leave a slot blank to skip it. Other NVS data (emergency state, calibration) is preserved.
⚠ Full Device Recovery
Erases the entire flash chip and re-writes the bootloader, partition table, and the staged app binary. Use this only when a device is bricked or unbootable.
This wipes NVS — WiFi credentials and all stored preferences/calibration. The device must be reconfigured (WiFi setup) afterwards.
Push WiFi Credentials
Push WiFi credentials to a tracker over MQTT. The tracker stores them in the chosen slot (NVS Slot 1, NVS Slot 2, or SD card) and the auto-connect state machine picks them up immediately.
Self-service HTTPS setup
Stand up a domain with a free Let's Encrypt certificate and switch the site to HTTPS — no command line. First point your domain's DNS A record at this server, then run the pre-flight check below.
The site keeps serving over HTTP throughout. The forced HTTP→HTTPS redirect is only enabled after an HTTPS request is verified working, so you can never be locked out. Let's Encrypt limits issuance per week — this tool refuses doomed attempts (bad DNS / closed ports) and rate-limits retries.
TLS Certificate
Certificates are managed automatically by the certbot sidecar via Let's Encrypt.
Requires LETSENCRYPT_DOMAIN and LETSENCRYPT_EMAIL in the server environment and port 80 reachable from the internet.
- Loading…
Fleet storage
SD card usage per tracker. Low storage = less than 10% free.
| Device | Online | SD | Used / Total | Cache | Queued | Actions |
|---|
Hardware Details
The authoritative Trackers list (#481) — every detected device, with the registry car it's assigned to (or Unassigned with a quick-assign affordance) plus device-level diagnostics (board type, firmware, heap, SD, battery). Cars are sourced from the Cars registry; this is the trackers.
| Car | Assigned car | Device | Online | Hardware | Firmware | Mode | SD | Free heap | Min free | Largest block | Battery | Uptime | Last reset | Reboot forensics |
|---|
Server status
Database
Tables
| Table | Size | Rows |
|---|
Recent errors
| When | Source | Message |
|---|
Audit log
| When | Actor | Action | Target | Details |
|---|
Event log archive
"Clear" on the operator Event Log panel archives rows (sets archived=TRUE);
it does not delete. This Purge button is the only path that actually
DELETEs archived tracker_messages rows. Two-step typed-yes
confirmation required.
System Resets ⚠
Clean up event-specific data to start a new event. Each reset is irreversible and double-confirmed. These do NOT delete the Cars registry, users/teams, track config (sections / quiet zones / service parks) or settings — only event data.
tracker_messages (incl. archived) + hazard warnings.RESET to confirm.User wishes 🪔
Feature requests submitted by users from the operator UI.
| When | User | Wish |
|---|
Car registry 🏎
The single source of truth for every car in the event — competitors, course cars, sweep, medical, officials and service crew. Cars live here whether or not a tracker is assigned, and the operator Cars panel renders from this registry (an active car shows even when no tracker is detected). Trackers no longer create cars; detected-but-unassigned trackers appear on the Devices tab.
| Number | Crew | Vehicle | Class | Role | Device | APRS | Status | Seed | Active | Actions |
|---|
Cellular data accounting 📶
Real-time per-device cellular byte counting. Simulated cellular lets you flip a WiFi-connected M5Stack tracker into the accounting subtotal so you can see what the existing fleet WOULD cost on cellular before the LilyGO platform ships. Rates are configurable below.
Per-device usage
| Device | Car | Sim | Bytes today | Bytes MTD | Cost MTD | Cap | Reconnects | Last seen | Status |
|---|---|---|---|---|---|---|---|---|---|
| Loading… | |||||||||
Tracker cellular state 📶 Refreshing every 5s
Live cellular state for every LilyGO tracker. Tap a row to expand the full diagnostic — SIM identity, carrier, modem, network registration, data bearer, transport, and the last manual AT command response. Read-only mirror of the firmware's status payload (refreshed every 5 s by the tracker).
SIM inventory 📱
One row per SIM card. Provider-truth (SIMbase API) usage is the canonical bill; drift compares that against our in-house byte estimate. Auto-linked to a tracker when the firmware reports its ICCID.
| ICCID | Phone | Label | Plan | Assigned | MTD used | Renewal | Drift | Status | Synced |
|---|---|---|---|---|---|---|---|---|---|
| Loading… | |||||||||
Rate settings
Cost = (bytes / 1 MiB) × rate per MB + active days × daily active charge.
All values in cents. Sysadmin only — changes are recorded in the audit log.
SIMbase settings (sysadmin)
SIMbase provides provider-truth for SIM inventory + plan + usage.
The API key is write-only — once set, the field shows
••••••••;
blank means "no change", clear with the Clear button. Changes are
recorded in the audit log.
Last sync: —