Race Control
We put a live grand prix inside WhatsApp.
- Timing updates a second, measured in a race
- ~12
- From the track to the database
- 1.5s
- Live pipe on its first race weekend, zero errors
- 23h
- People in the closed test
- 10
The brief
F1inTO fans already use the race-day app to enter the draw and play along in the room. The open question was the rest of the race day: the hour before doors, the laps when you are at the bar, the week until the next one. We wanted the room’s concierge to live in the app everyone already has open. That app is WhatsApp.
The build
Race Control is a WhatsApp number fans can talk to. A fan taps one button in the race-day app, WhatsApp opens with a code already typed, and they hit send. That message links their phone to their fan profile, with no form, and it counts as consent because they sent it.
From there it answers like someone who knows the race and knows you. Tickets for the next race day. How many draw entries you have. The live order and gaps while the cars are out. Your driver’s team radio, as it happens.
Under it is a live data pipe. F1’s timing feed changes more than three times a second; in our recording of the Dutch Grand Prix it averaged about twelve updates a second across thirteen feeds. One always-on process holds that stream open, merges every change into a single state and writes it to the database every 1.5 seconds. Everything Race Control says is read from that state.
The hard part
Moving data fast was the easy half. Saying only what the data supports was the hard half. On its first test weekend the pipe ran for 23 hours without an error, and the test showed us exactly where a conversation could get ahead of the data. So we built a truth layer: one answer to “what is happening right now”, decided by the session status and never by a lap counter or a clear track.
Facts like the leader, the lap or a flag are now answered by code in microseconds, before any model is involved. Anything conversational goes through a gate that blocks a number the feed does not support. Stale data is treated as absent, never as current. And the recording of that race, red flag and all, replays as a test before every change.
Where it stands
Race Control has run as a controlled test, not a public launch: a closed group of ten on a test allowlist for the Dutch Grand Prix weekend, then small groups at the races that followed. Consent, an opt-out that is honoured on the spot, a monthly spend cap and alarms that page a person were there from the first message.
Race Control on WhatsApp
The race, in your chat.
Fans message Race Control like they would message a friend at the track. It knows the race as it happens, and it knows them: their entries, their team, their driver.
- 01
Tickets
The next race day, one tap from the chat.
- 02
Draw entries
How many you have today, and how to earn more.
- 03
The tower
Live order and gaps while the cars are out.
- 04
Team radio
Your driver and his engineer, as it happens.
The tower in this phone runs live so you can see the feed underneath it. In WhatsApp, every answer is read from that same state at the moment you ask.
Illustrative conversation. Made-up messages, no real fans.
Race day
Morning. What time is lights out?
Lights out at 9:00. You are checked in, and you have 6 entries in today’s draw.
Race update right now
- 1NOR Interval
- 2PIA +0.842
- 3RUS +1.370
- 4VER +2.105
- 5LEC +0.611
- 6ANT +3.420
Team radio · car 81 to his engineer
wait is that a red flag??
Yes. Red flag on lap 24 and the race is suspended. Timing feed as of 9:31:08.
Need tickets for the next one
Here you go. Same room, next race.
How it is built
From the track to your phone in seconds.
Six parts and one rule: the worst thing the system can do is say something the data does not support. Scroll to build it.
- 01
The feed
F1’s live timing arrives over a websocket: thirteen feeds, from the timing tower to race control messages and team radio. In our recording of a race it changed about twelve times a second.
- 02
The always-on host
One small process on a home connection, because F1 turns cloud servers away. It merges every change into one state, writes it to the database every 1.5 seconds and records every frame for replay.
- 03
The database and the alarms
Supabase holds the race state, the fans, their entries and their consent. A watchdog checks the feed every minute of a session, and a 7am canary reports on race mornings.
- 04
The truth layer
One function answers what is happening right now. Session status decides, never a lap counter or a clear track, and stale data counts as absent, never as current.
- 05
WhatsApp and the model
Facts like the leader, the lap or a flag are answered by code in microseconds. Conversation goes to the model with the live state attached, and a gate blocks any number the feed does not support.
- 06
The fan
Tap once in the app, send the code WhatsApp has typed, and your phone is linked. No form. Tickets, entries, the tower and your driver’s radio arrive on the phone you already hold.
- 07
Guardrails, everywhere
One door for every message checks consent, the 24 hour window, the spend cap and the test allowlist. Opt-outs are honoured on the spot, and radio and boards stop at the flag.
The truth layer, replaying a real race
Fast is easy. True is the job.
The Dutch Grand Prix, as the feed told it. The pipe never missed a beat that weekend. The hard part was meaning: a lap counter that ticks before the start, a track that reads clear while the race is still stopped. This is how the truth layer reads the same signals now.
- 08:06 Feed
LapCount reads 1. SessionStatus is still Inactive.
We sayScheduled. A lap counter is not a race.
- 09:03 Feed
SessionStatus: Started.
We sayRunning.
- 09:05 Feed
SessionStatus: Aborted. Race control: RED FLAG.
We saySuspended. The red flag stays on the record.
- 09:23 Feed
TrackStatus: AllClear.
We sayStill suspended. A clear track is not a restart.
- 09:33 Feed
SessionStatus: Started.
We sayRunning again.
- 11:08 Feed
SessionStatus: Finished.
We sayFinished. Radio and boards stop at the flag.
- people
- 10A closed test group on the Dutch Grand Prix weekend, behind a test allowlist.
- zero errors
- 23hThe live pipe’s first race weekend, start to finish.
- recorded race
- 1Red flag, restart and chequered flag, now replayed as a test.
- guesses
- 0Stale or missing data is said out loud, never filled in.
Run as a controlled test, not a public launch: a closed group on a test allowlist for the Dutch Grand Prix weekend, then small groups at the races after. Every fan-facing switch stays with a person.
What this could do for your business
Same engine. Your live data.
Swap the timing feed for any number that moves: sales, stock, trucks, turnstiles, booth scans. Keep the host, the truth layer, the guardrails and the chat. These are concepts to show the shape, not client work.
- 01 Sales floorConcept
Deals closed today
37
Where are we against target?
At 84% with three hours left. The east team just passed the west.
- 02 LogisticsConcept
Deliveries on time
96.2%
Is the Mississauga drop on time?
Eleven minutes late, traffic on the 401. The new ETA is 2:40.
- 03 InventoryConcept
Units live across stores
18,240
Size 10 in black, anywhere near Yonge?
Two at Queen West, one at the Eaton Centre. Want one held?
- 04 StadiumConcept
Fans through the gates
31,480
Shortest food line near section 112?
Concourse B, about three minutes. Gate C is fastest out after the game.
- 05 Trade showConcept
Booth scans today
412
Who should I meet in the next hour?
Three people who scanned your booth are in Hall 2 now. Want an introduction?
- 06 Yours
Point it at your live data.
If the number matters to someone in the moment, it can live in their chat, with the same guardrails.
Talk to us
Illustrative concepts. Made-up numbers and messages, no client data.
Where this is going
From one community to a platform.
We are planning the multi-tenant version now: one engine for motorsport teams, tracks and series, each with its own fans, branding and data, a wallet pass as the credential and a back end that shows sponsors exactly who their activation reached. It is in planning, not live. The engine underneath is the one on this page.
We build this for you
Live data, in the chat your people already use.
- The integration. Your feed, API or database, held open and merged into one state.
- The truth layer. One answer to what is happening, so nothing contradicts the data.
- The channel. WhatsApp with consent, opt-out, spend caps and a test mode built in.
- The console. Live chats, a composer that previews before it sends, and alarms that page a person.
- The proof. Real days recorded and replayed as tests before every change.
F1inTO is an independent fan community run by Culture Cartel Live. It is not affiliated with Formula 1 or the FIA. Timing data shown is illustrative.
Race Controlnow