← All posts

The Live Web Dashboard: Real-Time RF Monitoring in the Browser

Until today the only way to watch the geolocation engine work was through the Android app or by tailing log files. That changed with the addition of a full live web dashboard served directly from the engine’s FastAPI backend. The dashboard connects via a dedicated read-only WebSocket endpoint and streams PIN_DROPs, status updates, and RF observation metrics in real time.

The implementation uses Leaflet with CartoDB dark tiles for the map, matching the visual language of the Android app. PIN_DROP markers appear on the map as color-coded circles (blue for police, red for EMS, amber for fire, gray for other) and auto-expire after five minutes. A live alert table below the map shows recent detections with search and category filtering, and a metrics strip across the top displays connection status, GPS age, jurisdiction, and processing statistics.

Foxhunt web dashboard alert history
Alert History view with category filtering and confidence scores
Foxhunt Command Console
Command Console with OP25 status and device telemetry
Foxhunt web dashboard alert history
Alert History view with category filtering and confidence scores
Foxhunt Command Console
Command Console with OP25 status and device telemetry

The backend changes were more involved than the frontend. A new set of dashboard-specific WebSocket clients is tracked separately from Android clients — dashboard connections don’t trigger queue flushes on disconnect, and dashboard clients receive timestamped versions of PIN_DROPs with additional server-side metadata. A REST endpoint at /api/alerts provides paginated access to a ring buffer of the last 500 detections, filterable by category. A /api/dashboard endpoint returns a full state snapshot including server status, device GPS, jurisdiction, subsystem health, and cumulative statistics.

The dashboard also serves as a field monitoring tool. During test drives, a second screen running the dashboard shows what the engine is doing without needing to touch the phone. The auto-reconnecting WebSocket client handles the inevitable network interruptions during mobile testing, and the status_update messages (every 10 seconds) provide a heartbeat that confirms the engine is alive even when no RF activity is occurring.

The entire dashboard is a single HTML file with inline CSS and JavaScript — no build step, no dependencies beyond Leaflet’s CDN. It lives at sicario-local/web/index.html and is served automatically when the engine starts, accessible at http://localhost:8000/dashboard.

← The Cavity Filter Arrives...The Diversity Gate Breakthrough... →