01Overview
A cellular bracelet on each pilgrim streams GPS and vitals into one event pipeline. Three clients read from it — a company dashboard, a supervisor app, and a family app — each seeing exactly what its role needs.
Captured from the running supervisor build; the DEBUG ribbon is Flutter's debug banner.
02Problem
Hajj concentrates millions of people into a few square kilometres. A pilgrim separated from their group is at real risk, and the bracelet's own silence is ambiguous — it can mean nothing is wrong, or that the one message that mattered never arrived.
03Solution
Telemetry lands on a message queue, not in a database write. Independent workers subscribe for alerting, geofencing, and offline detection — so a bracelet going quiet raises an alert of its own instead of leaving an empty screen. Supervisors draw safe zones directly on the map.
04Alerts
Every alert names its cause — device offline, AI-detected anomaly, or a pressed panic button — and carries a state through delivered, escalated, and acknowledged. An unanswered alert is a visible condition, not a message nobody happened to see.
05Family view
Families sign in with a phone number and a one-time code and see one thing — their pilgrim, safe, on a map — with a single button to call the supervisor. No operational controls, because reassurance was the whole requirement.
06Result
The system runs end-to-end across all three clients on OpenStreetMap tiles, with no per-request map billing anywhere in the stack, and container images that fail the delivery pipeline on vulnerability scans rather than shipping unpatched.