
Why it exists
Race day phones are outdoors, in bright sun, on flaky LTE, and often handed to volunteers who aren’t org admins. Live Timing is built around those constraints:- Offline-first. Finishes are written to IndexedDB before they ever hit the network. Network is a sync target, not a dependency.
- Idempotent. Every event has a client-generated UUID; resending the same event is a no-op.
- Absolute timestamps. We never store “seconds since start”; we store wall-clock + clock-offset and reduce later.
- Multi-device. Four phones on the same session merge cleanly because the reducer is the same client-side and server-side.
- Audit-friendly. The event log is append-only, including deletes.
How to navigate the docs
- New volunteer? Start with Operator quickstart.
- Setting up your first session? Read Concepts first.
- Running a bracket? See Dual slalom and Brackets.
- Using an RFID pad? See RFID.
- Done racing? See Finalize & publish.