Real-time location, a strict order state machine, payments and AI with guardrails.
Transitions run through one server function, transition_order_state. A repeat call is ignored.
| from | to | actor | at |
|---|---|---|---|
| driver_at_pickup | picked_up | driver · Marcus D. | 6:42:08 PM |
| picked_up | driver_nearby | system · 0.3 mi | 6:48:12 PM |
| driver_nearby | delivered | driver · Marcus D. | 6:51:30 PM |
| Capability | Android / iOS | Web |
|---|---|---|
| Customer ordering, tracking | Full | Full |
| Driver location | Real GPS, foreground + background | Simulated along real routes |
| Notifications | Push (Firebase Cloud Messaging) | Live in-app updates |
| Proof-of-delivery photo | Camera | File picker or pre-made image |
| Voice ordering | Device speech-to-text | Web Speech in Chrome and Edge |
| Dispatcher console | - | Full |
Only publishable keys, restricted by domain or app ID. AI, payments and routing run server-side.
Customers see their own orders. Drivers see only offered or assigned jobs. Dispatch sees all.
Ordering 40/day, support 40/day, photo checks 2 per delivery, dispatch summaries 30/day.
User, feature, model and tokens, in ai_usage.
Location pings are deleted after a week. Showcase data resets nightly.
Fictional stores, menus and images. Public drop points, never private homes.