Overview
Beacon Mode turns any mobile browser into a field terminal. Operators activate it from the dashboard — it sends periodic GPS pings, allows photo capture with location, and lets operators fire alert signals with one tap. No native app required. PWA-installable on Android and iOS.How it works
- Operator opens the dashboard and taps the
[+]FAB - Taps START BEACON — GPS permission requested
- Every 30 seconds, a
beaconsignal is POSTed to/v1/signals - Signal fans out via SSE to all War Room viewers in real time
- War Room map shows a live dot for each active beacon with accuracy ring
- Operator taps CAPTURE to attach a photo to the current location
- Operator taps ALERT to fire a high-priority signal to all org members
- Tap STOP or navigate away —
DELETE /v1/signals/beaconfires, War Room removes the dot
Device identity
Each device gets a stable UUID stored inlocalStorage under schedkit-device-id. Format: dev-xxxxxx-xxxxxxxx. This ID is included in every beacon payload as meta.device_id and shown in the War Room.
Capture flow
- Browser
getUserMediawith{video:{facingMode:'environment'}} - Canvas resize to max 1280px, JPEG at 0.82 quality (~150KB)
- Upload to
/v1/upload→ returnsimage_url - POST
/v1/signalswithtype: "capture"+image_url+ coordinates - War Room drops a purple capture pin — persists permanently on the map
Wake Lock
Beacon mode acquires aWakeLock to prevent the screen sleeping mid-operation. Re-acquired on visibilitychange if released by the OS.
Display modes in the field
The beacon screen follows the global display mode:- DARK — default dark interface
- NITE — deep red palette for dark-adapted human eyes
- NVG — near-black blue-grey, minimal luminance for I2 night vision goggles
API calls made by beacon mode
| Action | Endpoint |
|---|---|
| Start beacon | POST /v1/signals {type:"beacon",...} |
| Periodic ping | POST /v1/signals {type:"beacon",...} every 30s |
| Photo capture | POST /v1/signals {type:"capture", image_url, lat, lng} |
| Fire alert | POST /v1/signals {type:"alert", note} |
| Stop beacon | DELETE /v1/signals/beacon |
API Reference → Signals
Full endpoint docs including the SSE stream.