Start with the question “What is happening next?” Keep event identity separate from sessions and store the source timezone alongside the display timezone. A postponed session should remain the same identifiable session rather than appearing as a duplicate.
A useful first version
A practical first version includes a dated schedule, explicit session state, a source observation label, and a clear empty state. Only call it live when the selected source and integration actually support live updates.
Define what makes two laps comparable before placing their traces on the same chart. Keep original samples and transformations separate, and distinguish missing observations from an actual zero.
A useful first version
Prototype with a handful of inspectable laps. Write down how the interface handles a pit lap, an incomplete sector, an out-of-order sample, and a corrected record. The bundled fixture is a starting point, not a telemetry streaming service.
Build around stable meeting, race, and entry identities rather than matching runners by name. A horse profile and a declaration in a particular race are separate records. Retain revision context for a changed assignment.
A useful first version
Keep an as-of label beside the racecard, preserve non-participation states, and avoid presenting a scheduled declaration as a guaranteed starter. This use case is informational; wagering and market feeds are not part of this site.
Decide which timing basis the organizer publishes, and label it. A split records an accepted checkpoint observation; it does not establish a runner’s location between timing points. Keep estimates separate from observed data.
A useful first version
A useful first screen shows a participant entry, supplied position, clearly named time, result state, and source context. Do not infer a withdrawal from a missing checkpoint alone.
Start with the chosen game’s documented access method and exact supported version. A local game packet stream, an HTTP endpoint, and an online leaderboard are different integration surfaces.
A useful first version
Keep the collector separate from the browser display. Validate the record shape, document unit conversions, and expose gaps. This static website does not listen to local game packets or connect to a title.
Identify whether your experience concerns a powerboat race, a sailing fleet, or another competition format. Elapsed time and published score must remain separate fields when they mean different things.
A useful first version
Publish source-attributed results with their rule context and class. A spectator display is not a marine navigation, emergency, or collision-avoidance system.
Write the user question, minimum required fields, accepted source age, correction behavior, and failure display before selecting a provider. Then verify the provider’s actual coverage, access method, and permissions. A polished interface cannot create a field or a right that the source does not provide.
Use the sample data model to rehearse the frontend contract. Treat every field conversion as an explicit design choice, not a universal racing convention.
TAKE THE NEXT LAP
Your next racing project starts here.
Pick a discipline. Explore the data model. Build something worth following.