Technology
From antenna to broadcast, deterministically.
A look inside the pipeline for technical evaluators: how a position fix becomes a live classification, a split time, and a replay — in under a second.
01 · Ingestion
A full field, in parallel
Each runner carries an RTK GNSS receiver streaming 100 position fixes per second. Telemetry arrives over 20+ parallel UDP channels — the entire field ingested simultaneously, with no contention between runners.
The backend is Rust: memory-safe, predictable latency, no garbage-collection pauses under load. Burst traffic is handled with backpressure and graceful degradation — a missed packet degrades smoothness, never correctness.
NMEA fusion · per fix
- GGA position + fix quality (RTK 4/5)
- VTG speed + heading over ground
- GST per-fix accuracy estimate
- → fused into a single coherent data point, at centimeter-level RTK precision
02 · Race engine
The system knows the race state
Start-line trigger, live classification, finish detection — no human input. Line crossings are computed with PostGIS geometry for exact timestamps at the start, finish, and every intermediate timing line. Multi-lap distance math stays correct even when the finish line isn’t the start line.
- scheduled
- warmup
- active
- finished
- official
Splits & sectionals
Per-runner crossing timestamps at every timing line, live — sectionals as the race unfolds, not after it.
Live classification
Positions, gaps in time and distance, instantaneous and average speeds — recomputed continuously for the whole field.
Conditions in the feed
Live odds and weather conditions are integrated directly into the race feed.
03 · Persistence & audit
Every fix stored. Every race auditable.
All telemetry persists to PostgreSQL + PostGIS. Any race can be replayed fix-by-fix, and any classification or split can be traced back to the raw positions that produced it.
Replays load through a compact trajectory API — server-side sampling makes them 10–20× faster to load, with smooth client-side interpolation between fixes.
04 · API surface
Clean REST + WebSocket API
Live data streams over WebSocket with per-device and per-race subscriptions, pushed to unlimited concurrent viewers. Historical data, replays, and analytics are served over REST. The whole system deploys as a single binary — backend and frontend in one artifact.
Talk integration →