Self-service docs
Help
SplitSync provides live situational awareness and unofficial results for grassroots velodrome and cyclocross racing. It is not an official certified timing system.
For spectators
Following live results
- No sign-in is required. Live and results pages are public and read-only.
- A live race board shows real-time laps, gaps, and positions as riders cross the line, updated automatically.
- A results page shows the classification after a race finishes.
- An announcer view (open a race's live board and switch to it, or visit
/announce/<raceId>) gives a large-text, high-contrast layout for a race announcer or venue screen: current leader, latest crossings, and a bib/name rider lookup. Its TV mode auto-scrolls the full standings and suits an unattended screen. - Positions and gaps are derived live from timing crossings and may be corrected as more crossings are recorded. Treat all results as unofficial.
- A finished race can briefly return to live if the organizer reopens it to fix a scoring mistake. Standings refresh automatically once it is corrected and finished again.
- Once an organizer reviews a finished race and publishes it, the board reads Final classification instead of "live" — still unofficial, but no longer expected to change. If the organizer later reopens a published race to fix something, the board instead reads Results under revision until it is published again.
- A rider marked DNS (did not start), DNF (did not finish), or DSQ (disqualified) by the organizer stays listed with that badge instead of a rank, rather than showing a misleading "0 laps".
- A points race shows a second board below the main classification: a sprint-lap banner when the field reaches a scoring sprint (the final sprint is called out separately, at double points), that sprint's own 1st–4th result, and a cumulative points classification ranked by total points, not laps. A rider who breaks away and completes an extra lap on the rest of the field also picks up a lap-gain bonus.
- A time trial live board replaces the lap-count standings with an elapsed-time view. The top hero shows the rider currently on course with a live elapsed timer and a progress bar relative to the best finished time so far. Once the reference time exists, the bar turns red when a rider goes over it. An Up Next queue lists the riders yet to start in bib order. Below that, the Results table ranks finishers by elapsed time ascending, with the leader highlighted in yellow and gap times shown for every other finisher. Riders with a Review badge had more than two crossings recorded — their best elapsed time is used but the organizer should verify the data. DNS/DNF/DSQ riders appear below the ranked finishers with their status badge.
- A red Penalty badge next to a rider's name means an official applied a time penalty, lap penalty, or relegation. Hover or tap the badge to see the reason. The rider's position and gap already reflect the penalty — the underlying crossing times are never changed.
For spectators
Color indicators
- Red means something critical: a race is LIVE (actively running), a rider has been disqualified (DSQ), or a penalty has been applied. These indicators always include a text label — color is never the only signal.
- Yellow highlights the current leader. The leader row is shown in yellow with the rank numeral “1” and the word “Leader” in the gap column.
- Blue labels indicate context or section headers (for example, “Unofficial live standings” or “Live ranking by time”) and marks interactive controls such as buttons and links.
- Muted grey text is used for secondary information: timestamps, team names, and metadata that are less important than the primary standings.
For organizers
Setting up an event
- Sign in with a magic link sent to your email — no password needed.
- Create an event once, then build its roster of participants. Races are created under an event and pull their entries from that same roster.
- For fields with many riders (like a CX event), use Import from CSV in the roster section instead of entering racers one at a time. Columns:
bib,first_name/last_name(or a singlenamecolumn),team,category, and optionalsex. The preview shows which rows are ready and which are skipped (missing bib/name, duplicate bib in the file, or a bib already on the roster). You can optionally map each category in the file to an upcoming race so imported riders are assigned to their race in the same step. Day-of registrations can still be added one at a time with the regular add-racer form. - Running a recurring series? Use Clone event on an existing event to start a new draft with the same details, categories, and race structure. Optionally include a copy of the participant roster. Cloning never copies race-day data — the new event starts as a draft with no entries, crossings, or results, and its races always start upcoming.
- Tap Assign on a race card to open its entry list. Search by bib, name, or category, or pick a category from the filter to narrow a large roster. Selecting a category also enables Assign all in [category] / Unassign all in [category] so you can put a whole field into a race in one action.
- A race can only be edited (name, entries) while it is upcoming. Starting a race locks its entry list.
- Publish an event before race day so spectators can find its live and results pages. Draft events are only visible to you.
- From your event setup page's Check-in section, tap Check in next to a racer as they arrive and collect their bib. Search or filter by category or check-in status to find them quickly on a busy morning. Check-in is per-event, so it applies across every race a racer is entered in.
- Each race has a Start list link (next to Score) showing its entries — bib, name, team, category, and check-in status — sorted by bib or category. Toggle Checked-in only to see just the racers ready to start, and use Print for a paper copy at the start line.
- To run a velodrome points race, check Points race when adding it (the "Velodrome points race" template turns this on by default) and set how many laps between sprints. Sprints are scored automatically from the same crossings you're already recording — there's nothing extra to tap at a sprint lap. The final lap is always a scoring sprint at double points, even if it doesn't land on your sprint interval.
- To run a time trial, check Time trial when adding the race (or use the "Time trial" template) and optionally set the countdown seconds. The scorer screen replaces the bib grid with a dedicated Up Next / On Course / Finished workflow:
- Up Next lists all riders who haven't started yet, in natural bib order. The top entry is marked NEXT.
- To send a rider, tap Start now (immediate) or Start countdown (visual + audible countdown, cancelable). The countdown plays beep tones through your device speaker and fires the start crossing automatically at zero. If countdown seconds is set to 0, only "Start now" is shown.
- Only one rider can be on course at a time. While someone is running, the start controls are hidden.
- The On Course panel shows a live elapsed timer and a progress bar against the current best time. When the rider exceeds the best time, an "over best" indicator appears. Tap Finish to record their finish crossing.
- Finished lists ranked results in most-recent first order, with elapsed time and gap to leader.
- DNS/DNF/DSQ riders are excluded from the queue but remain on the live and results boards with their badge.
- To correct a start or finish crossing, use Undo in the recent crossings list below the scorer — the rider returns to the appropriate state immediately (to On Course if only start removed, to Up Next if both removed).
- For mass-start races, use the scorer screen to record crossings by tapping a rider's bib as they cross the line. Free-form bib entry is intentionally not supported — only assigned entries appear as tiles. For large fields, use the Find bib / rider search box above the grid to narrow the tiles to a matching bib number or name — the rest of the field is hidden while you search but their lap counts and state are unaffected. Clear the box to restore the full grid instantly.
- Crossings can only be recorded while a race is active. Tap Start race once riders are on the line, and Finish once the final crossing is recorded — this is enforced by the database, not just the screen.
- Finished a race too early, or need to add a missed crossing? Tap Reopen race on the finished race screen and enter a reason — this is required and kept in the race's audit history. Reopening clears the finish time and returns the race to active so you can correct it, then finish it again.
- Once a race finishes, tap Review & publish to open a checklist before locking in results: riders with no crossings, unusually slow last laps (or, for a time trial, riders still on course or flagged for review), unresolved DNS/DNF/DSQ statuses, and any penalties applied. The checklist is advisory — SplitSync results stay unofficial either way — but tapping Finalize & publish timestamps the race as final for spectators. Reopening a published race clears that timestamp and marks results under revision until you publish again.
- An accidental crossing can be removed without reopening: use Undo next to it in the scorer's recent list. This works whether the race is active or finished.
- Tapped the wrong bib, or the time looks off? Use Edit next to a recent crossing to correct its bib or time. A reason is required and is kept in the crossing's audit history; the crossing's identity (used for offline sync) is never changed, so standings update live from the correction.
- Undid a crossing by mistake? Find it under Recently removed below the recent list and tap Restore. A reason is required, same as editing.
- Mark a rider DNS, DNF, or DSQ from the rider detail sheet — tap the ••• button on a rider's tile to open it. You can do this at any time: before the race starts (DNS), mid-race (DNF/DSQ), or even after it finishes to correct a mistake. Statused riders are excluded from ranked position on the live/results boards but stay visible with their badge, and can't record further crossings. You'll be asked for an optional reason, which is kept with the change.
- Tap ••• on a rider's tile to open their detail sheet, then tap + Add penalty to apply a time penalty (added seconds), a lap penalty (dropped laps), a relegation, or a plain note — a reason is required for every one. The penalty adjusts that rider's position and gap on the live/results boards without ever touching their recorded crossing times; spectators see a Penalty badge with the reason. A yellow penalty count badge on the rider's tile in the grid signals that penalties are active. Remove a mistaken entry with Remove inside the detail sheet.
For organizers
Volunteer roles & invites
You don't have to run an event alone. From your event setup page's Volunteers section you can generate a single-use invite link for each helper and pick their role:
- Organizer — everything you can do except delete the event: roster, races, publishing, and inviting/revoking other volunteers.
- Scorer — records and undoes crossings, and starts/finishes races. Cannot edit the roster or event details.
- Check-in — can view the private roster before publish and one-tap check racers in as they arrive, without being able to edit their bib, name, team, or category.
- Official — can view the event, roster, races, and crossings, and is the only role (besides organizer) that can apply penalties and adjustments to a rider on the scorer screen. Cannot otherwise edit the roster, races, or crossings.
Send the generated link directly to that person (text, email, whatever's easiest) — generate one link per person rather than sharing a single link with a group. Links expire after 14 days or as soon as they're used once. Revoking a volunteer or an unused invite in the Volunteers section takes effect immediately, at the database level, not just in the app.
Solo timer
Using the stopwatch
- The solo stopwatch is available at
/stopwatch— free, with no ads, no subscription, and no account required. It works fully offline; no data is sent to any server. - Tap Start to begin timing, Stop to pause. Tap Reset while stopped to return to zero.
- Delayed start (optional): before starting, pick a countdown of 3, 5, or 10 seconds (default is OFF for instant start). Tapping Start then shows a get-ready countdown before timing begins — handy for timing yourself. Tap Cancel during the countdown to abort without starting. Resuming after a Stop keeps your accumulated time either way.
- Countdown timer mode: use the MODE toggle above the dial to switch between STOPWATCH (count up) and TIMER (count down). Set a duration as MM:SS or H:MM:SS, then tap Start. When the timer reaches zero it resets to the value you set, ready to restart with a single tap — ideal for rest intervals, kitchen timing, or study blocks. The completion alert (sound if enabled, plus vibration if enabled, where supported — both toggleable under Alert) repeats a few times and then goes quiet on its own; one tap on Dismiss (or Start) silences it immediately. A running timer survives tab switches, page refreshes, and closing the browser — it counts against a wall-clock anchor and is restored when you come back. The same timer mode exists in the Android Stopwatch app. A session can contain multiple independent timer rows when you need to time more than one activity.
- Repeat mode (Pomodoro / intervals): enable the Repeat mode toggle (visible below the duration input in idle state) to configure a rest duration and an optional repeat count (leave blank for infinite loops). Once started, the timer automatically transitions from the work phase to the rest phase and back again — no manual tap is needed between phases. The current phase (WORK or REST) and cycle number are shown near the dial while running. After the configured number of cycles completes, the final alert fires as usual. Stop is always available to end the cycle at any point. The rest and repeat-count settings are remembered per session so they survive a page refresh.
- While running, tap Lap to record a split. Each lap shows its own duration and the cumulative time. The best (shortest) lap is highlighted in yellow. Laps are shown newest-first.
- Once you have two or more laps, a stats strip shows your best, worst, and average lap, plus a bar chart of lap-time trend.
- Keyboard shortcuts: Space = start / stop, L = lap.
- Sound cues are optional and off by default. Under the Alert section below the stopwatch, enable Beep on start / stop / lap for a short audible confirmation of each press. The beeps are synthesized in your browser — nothing is downloaded and no permission is needed. Your choice is remembered on this device.
- Enable the target-time beep and set a target (MM:SS) to hear a single distinct two-tone beep when the elapsed time reaches it. The stopwatch keeps running — once past the target, the time over it is shown in red below the dial so you can measure exactly how far you overran. Changing the target re-arms the beep.
- In the Android Stopwatch app, the same options live behind the ♪ button in the top bar — for both the solo stopwatch and shared sessions — and haptic feedback follows the Vibration toggle in the ♪ panel. Cues are guaranteed while the app is on screen; with the app backgrounded or the phone locked they are best-effort, as the system may pause the app's timers.
- Once you have laps, use Copy laps to put the lap table on your clipboard as text, or Download CSV to save it as a spreadsheet-ready file (lap number, split, cumulative time — in both clock and millisecond form).
- Timing stays accurate while the tab is in the background — the stopwatch anchors to a monotonic clock (`performance.now()`), not accumulated intervals.
- Tap Large display to enlarge the timer so it is readable from a distance (the browser goes fullscreen where supported). Press Esc or tap Exit large display to return.
- While the stopwatch is running, the screen is kept awake in browsers that support the wake lock API — no need to fight the screen-off timeout during a long effort.
- Tap 🔓 to lock Stop and Reset against accidental taps — Lap keeps working while locked. Press and hold 🔒 for about 1.5 seconds to unlock.
- Your timer survives a page refresh. The running or stopped state, elapsed time, and all recorded laps are saved on this device and restored when the page reloads — a running timer keeps counting from a wall-clock anchor while the page is closed. Tap Reset to clear the saved state. The same applies in the SplitSync Stopwatch app: the solo timer is restored even if the app is killed or the phone reboots.
- Sessions and timers (web only): tap the session name in the top-right corner of the stopwatch header to open the Sessions panel. You can keep up to 10 independent local sessions on this device — each with its own timer rows, names, modes (stopwatch or timer), and saved state. Switching sessions immediately loads the other session exactly as you left it; a running session is preserved in the background and picks up from the correct wall-clock time when you switch back.
- Create: click “+ New session” in the panel, give it a name, and tap Create.
- Rename: click the pencil icon next to a session name, type a new name, and press Enter (or click ✓).
- Reorder: drag the ≡ handle on the left of any row up or down to rearrange the list. The order is saved immediately and persists across browser restarts.
- Delete: click the trash icon, then confirm with Yes. A confirmation is always required. Deleting the active session automatically switches to the next available one (or creates a fresh session if none remain).
- Switch: click any session row to make it active and close the panel.
- Sessions are stored on this device only (no cloud sync). Clearing your browser's site data will remove them.
Shared timing
Time Together — shared sessions
The SplitSync Stopwatch supports shared sessions — multiple devices collaboratively controlling the same named timer rows in real time. Like the local stopwatch, it is free with no ads and no subscription; only the person creating a session signs in, and everyone else joins with just a display name.
- Sharing a whole session requires a SplitSync account. Sign in with email/password or Google, then click Share session from a local session (or create a shared session), enter a display name, and share the link. Every timer row and its recorded history is shared; joiners do notneed an account.
- The share link looks like
https://splitsync.org/stopwatch/s/AB3K9X. Send it to anyone at the other end of the course. - Joining is frictionless — tap the link, enter a display name, and you're in. No sign-in required.
- View-only rider screen: add
/liveto the shared link (for example,/stopwatch/s/AB3K9X/live) to show the live clock, laps, and participants without joining. It has no timing controls and does not use a participant slot. - Any participant can press START, LAP,STOP, or RESET on any timer. Each row is independent, while every participant sees the same session and updates. Only the session creator can add, rename, reorder, or delete rows.
- Each timer's lap table shows its splits and who pressed LAP. The participant strip shows who is in the session.
- Closing a session (creator only, from My Sessions on the web, the in-session menu, or the app's session list) ends it immediately — no one can join or record new laps afterward, but its results stay viewable. Anyone still connected is notified right away.
- Deleting a session (creator only) permanently removes it and all its laps. This cannot be undone.
- Sessions expire after 4 hours. A stopped session cannot be resumed — create a new one.
- If you disconnect, the app catches up automatically — laps are never lost due to a brief connection drop.
- Signed-in users see their session history below the stopwatch and can rejoin or share past sessions at any time.
- After a session stops, its results live at a permanent link:
https://splitsync.org/stopwatch/s/AB3K9X/results. Anyone with the code can open it — no account, read-only — and it keeps working after the session expires. The page shows the total time and the full lap table (split, cumulative, best lap, and who recorded each lap), with Copy laps and Download CSV buttons. - In the app, a stopped session's Share Result button shares the lap summary and that results link, and Share CSV sends the lap table as CSV through your device's share sheet. The solo stopwatch has the same Share Laps / Share CSV options while stopped.
- While a stopwatch is running (solo or shared), the Android app shows an ongoing notification with the session name and the ticking elapsed time, so you can switch to other apps without losing sight of the clock. Tap it to return to the stopwatch; it disappears on stop or reset. The app asks for notification permission once — declining it never blocks timing and you won't be asked again.
- Rotate the phone to landscape for a larger display readable from a distance — the LCD digits grow to fill the width while the buttons and lap list stay usable. Works on both the shared session and solo stopwatch screens.
- Tap 🔓 to lock Stop and Reset against accidental taps — Lap keeps working while locked. Press and hold 🔒 for about 1.5 seconds to unlock. In shared sessions the lock is local to your device only; it never affects other participants.
For mobile trackers
Using the tracker app
- The SplitSync tracker app records start/finish crossings with a single tap and works alongside this website.
- Tap a rider's tile on the scorer screen as they cross the line. The tile flashes red to confirm the recording.
- A Recent Crossings panel appears below the rider grid during an active race. It shows the last few crossings (bib and time). Tap UNDO next to any crossing to remove it immediately — this soft-deletes the crossing so it is excluded from lap counts and standings, matching the web scorer's behavior.
- Undo works whether the crossing has already synced to the server or is still pending in the offline queue. If the crossing hasn't synced yet (you're offline or the upload is still in progress), it is removed from the local queue directly — no round-trip needed.
- Undo on mobile is intended for immediate mis-tap correction. To restore a removed crossing, correct a bib or time, or manage older crossings, use the web scorer at splitsync.org — those tools require an audit reason and are kept in the crossing's history.
- For a time trial race, the tracker shows an Up Next / On Course / Finished workflow instead of the bib grid. Tap Start now to send the next rider immediately, or Start countdown for a haptic countdown before the start crossing fires automatically. Tap Finish when the rider crosses the finish line. Only one rider can be on course at a time.