Enter the organiser password to continue.
Incorrect password.
or
Pick the event below - this updates live.
Live results from all checkers.
Last updated: -
Ended checker sessions, detour sessions and leg switch sessions. Each can be permanently deleted (along with every pass it recorded) using the × - handy for clearing out test/mistaken sessions, but not reversible, so use with care.
One row per checker, summed across every session they've run for the selected event (or across all events, if none is selected). "Flagged questionable" and "Deleted/corrected" are both signals worth a second look, not automatic marks against a checker - a rider recording after their own finish, or a genuine mis-tap, can happen to anyone.
Every pass removed from here or undone on a checker's tracker - restoring one brings it back into totals, the map, and lap/progress matching exactly as if it had never been deleted.
Every "not recorded" checkpoint gap dismissed from the Reports tab (e.g. the route prediction picked the wrong leg) - restoring one just brings it back on the Reports tab, exactly as if it had never been dismissed.
Use with caution: bypasses a real checker's scan or detour spotter's tracker entirely - only use this for a rider that genuinely couldn't be recorded at the time (phone died, no signal, missed in a crowd, or reported by phone/radio instead).
Riders currently eligible for a manual leg switch: their current leg, and the last checkpoint they were recorded at. "Switch to" only ever lists legs whose own Start checkpoint matches that last checkpoint - the same requirement Rider Progress itself uses to confirm a switch automatically once a real pass on the new leg comes in, so this always agrees with it. Riders with no eligible switch right now (no passes yet, or their last checkpoint isn't any leg's Start) aren't shown here.
Upload one or more photos of a checker's paper (or spreadsheet) checklist, all for the SAME checkpoint, and each is read automatically into a table of rider × lap times, matched against what's already been recorded by tracker for that checkpoint. A sheet may include passes already entered via tracker - matching is by rider number and closest recorded time (not lap position), so it still works even if the sheet's own lap numbering doesn't line up exactly with tracker's. Nothing on a sheet is saved automatically - right-click any "not recorded" (red) cell to either add that sheet time to the database (as an estimated pass, same as "Manually add a pass") or mark it ignored. Every upload (and its comparison against tracker) stays here for you to come back and action later - it isn't cleared until you delete it. Applies to the event selected at the top of the page.
Each marker is a checkpoint. Hover or tap one to see which riders' most recent recorded pass was there, and when.
When on, logs a snapshot of every rider who currently has an estimate, at the rider location refresh rate (Developer settings), while this tab stays open - a way to watch the whole field move over time. Ticks with no riders currently estimated are skipped. The log, its filter, and the copy/clear buttons appear at the bottom of this tab.
Estimated rider positions are switched off in Admin.
Newest at the bottom; clears when you reload the page. Turn this off with the checkbox above the map.
Real GPS positions reported by the 24hr Rider mobile app, for whichever riders currently have it running - not every rider will have one, and this is separate from the pace-based estimates on Rider Map. A pin fades once its last fix is more than 10 minutes old.
Turn off to exclude just the event selected above, without affecting any other event.
How often the separate 24hr Rider mobile app sends a GPS fix - applies to every rider/event using it, not per-event. A phone already tracking picks this up automatically within a few minutes, without needing to reopen the app.
On Android, whichever condition is met first triggers a fix. iOS doesn't support a time-based trigger at the OS level at all (the phone only wakes the app on real movement) - on iPhone this distance setting instead controls how far a rider needs to move before their position updates on the map, and the app enforces "at least every…" itself in software so a genuinely stationary rider (e.g. resting at a checkpoint) still gets reported on schedule from ordinary GPS drift, without needing the OS's own (Android-only) timer. A shorter time/distance means more up-to-date positions but faster battery drain and more mobile data use.
While an iPhone's GPS trail is within the radius below of any of this event's checkpoints, the app sends fixes at the tighter interval below instead of the ordinary Tracking cadence above - fewer/narrower gaps right where a checkpoint pass actually needs to be pinned down, for the few minutes it takes to pass through, not the whole ride. iOS only - Android's own update interval already wakes it correctly on schedule (see the note above), so this has no effect there.
A tighter interval near a checkpoint means more accurate pass timing there, at the cost of extra battery/mobile data for however long each approach takes - bounded to just those few minutes, not the whole event.
While a rider is on a leg with a significant real distance between its own checkpoints (e.g. Battlefield), the app widens its GPS interval to the values below - a genuine reduction in how often the phone's GPS wakes at all, not just a send-side filter, for a real battery saving on a long, open stretch. Legs with checkpoints close together (e.g. Finishing Circuit) are never affected. Which legs count as "sparse" is worked out automatically from each event's own route data, below.
A wider interval on a sparse leg means less precise positioning for however long that stretch takes, in exchange for real battery savings - the app returns to the ordinary Tracking cadence (and Approach cadence, if enabled) automatically the moment a rider nears a checkpoint again.
When on, every phone currently tracking automatically stops sending its location once it's been tracking for the duration below - counted from when THAT phone individually started, not from when this was switched on. Use this for a real test run so a phone left tracking by accident doesn't quietly run (and drain battery/data) for a full event.
When on, a rider whose reported GPS position comes within the distance below of a checkpoint's pinned location gets a pass logged automatically, timed at their closest approach - marked "automatic" everywhere a pass is shown, so it's never mistaken for a real checker scan. Off by default - only ever adds a pass where none already exists nearby for that rider/checkpoint. Applies to the event selected above only; switching events shows and edits that event's own setting.
When on, a rider whose recent GPS trail sits close to a leg's own detour-only track (the fork section that actually diverges from the base route) for at least the number of minutes below, in real consecutive updates, gets the same live "on the detour" flag a spotter would set by hand - shown as "on detour (via GPS)" wherever a spotter's own flag would normally show, badged distinctly so it's never mistaken for a human's report. Only ever sets a flag where the rider has no existing one (never overwrites a real spotter's flag), and only for a leg that has both a detour point and an uploaded detour GPX track to compare against. Uses the same distance threshold as Automatic checkpoint passes above. Off by default. Applies to the event selected above only; switching events shows and edits that event's own setting.
Sends a push notification to every approved helper registered for a rider whenever that rider is manually flagged onto a different leg or a detour, or is automatically detected as having moved to a different leg from their checkpoint passes. Requires the helper to have granted notification permission in the app's Helper mode. Off by default. Applies to the event selected above only; switching events shows and edits that event's own setting.
Leave blank to show every rider currently on the map.
Newest at the bottom - one row per NEW fix actually received from a rider's phone (not repeated on every refresh, so a gap in the log is a gap in real updates). Clears when you reload the page.
How far each rider has covered against the route configured for the event selected above. Completed Leg Distance is real distance from laps/legs they've actually completed (including any detour taken) - it's based on whichever legs are fully finished, not simply "distance to their last checkpoint": the "Last checkpoint" column is just the most recent tap on record, which may be partway through a leg that hasn't finished yet and so isn't counted here at all. It only ever grows once a lap/leg is actually completed, and stays provisional since a tap can still be corrected or removed later. Estimated and Total only appear when estimated rider positions are switched on in Settings: Estimated is the extra distance projected since that last confirmed checkpoint, from the same GPX-route + pace calculation behind the Rider Map - not a real position, and blank wherever no estimate is currently available (e.g. the rider hasn't started, is between legs, or their current leg has no GPX route uploaded). Total is simply Completed Leg Distance + estimated. With estimated positions switched off, this table shows Completed Leg Distance only.
Where each rider is against the configured route for the event selected above, worked out from their checkpoint passes. This is a best-effort match, not a live tracker - it can only place a rider as accurately as their most recent recorded pass, and it doesn't flag anyone as off-route (yet).
Every checkpoint, detour, lap and split for one rider, with any discrepancies flagged - checkpoints not recorded, questionable passes, duplicate taps, or an implausibly fast split that suggests a wrong-rider mixup.
Hover a pin - or a checkpoint in the list on the left - to see this rider's own passes there and highlight it here. One pin per physical checkpoint, not one per lap.
None of this event's checkpoints have a map location set yet - add one on Manage events to see this rider's passes plotted here.
Every pass for the event selected above that isn't a plain, ordinary checker scan - an estimated pass (backfilled by an Admin, a checksheet upload, or automatically to credit a skipped leg's mileage - never a real checker scan), or a questionable one (recorded after that rider was already marked finished). Worth a quick check before relying on final results.
Cases where a rider tapped one checkpoint of a repeating leg for real, but the app couldn't find a matching close for that lap - either too many of the leg's other checkpoints are missing, or the time since their last confirmed lap is too short to be physically plausible - and later evidence shows they'd genuinely moved on regardless. Usually just a checker missing a scan; occasionally it means a checker-sheet entry is missing or wrong (as with rider 12's Prees Heath gap). Worth a quick check against the paper sheet.
A checkpoint that only ever occurs once on the whole route (not a repeating leg, not shared with another leg) has been tapped more than once by the same rider. Usually a duplicate/mis-scan; occasionally genuine evidence the rider backtracked. Worth a quick check.
Every checkpoint's recorded passes for the event selected above, one sheet per checkpoint (riders, and the same passes again in time order), as a single Excel workbook.
Signs logged from the Signage app - where each one's been put, its GPS location, and whether it's been collected. Logging is done from that app out in the field; this tab is for viewing progress and marking signs collected as they come back in.
Loading...
No signs logged for this event yet.
Photos checkers have taken or added on the tracker for this event, optionally tagged to a rider number. Click a photo to view it full-size or delete it.
Loading...
No photos for this event yet.
Set up an event step by step, from top to bottom: register it, set its start/duration and organiser email, set the number of riders, upload rider names, then import its route. Checkpoints and legs themselves are built in the Course Library tab, not here.
This event's start time has already passed, so it can no longer be changed here. Use Admin → Danger zone → "Start Time" if it genuinely needs correcting.
Rider 1 is deemed to start one minute after the event start time, rider 2 two minutes after that, and so on. Each rider's nominal finish time is their own start time plus the duration above. As soon as they pass a checkpoint after that time, they're automatically marked finished on the Progress page. Leave either field blank to turn this off for this event.
Where finished shift and detour spotting data gets sent from the tracker. Shown there read-only, so checkers and spotters can't send it somewhere else by mistake.
Set once here instead of by every checker on the tracker, so everyone's button grid matches. Doesn't have to start at 1 - if riders are numbered e.g. 7 to 126, enter that range and the tracker will only show those buttons. If left blank, the tracker falls back to a default range of 1-200. Uploading a rider names file below overwrites this automatically, to that file's own lowest/highest rider number - only set it by hand here if you're not uploading names.
Upload a CSV file with one rider per line: rider number, name, then optionally (in this order) their club, category, age, machine type, and VTTA membership - e.g. "47,Jo Smith" or "47,Jo Smith,Nantwich CC,Open,34,Bicycle,Yes". Leave a column blank rather than skipping it if you need a later one (e.g. "47,Jo Smith,,Open,34,Tandem,Yes" to set category/age/machine type/VTTA membership without a club). Category must be Open or Female; machine type must be Bicycle, Trike, or Tandem; VTTA membership must be Yes or No - anything else blocks the whole upload until it's fixed. No header row needed - if there is one, it's skipped automatically. Applies to the event selected above, and re-uploading replaces the whole roster for that event. Saved to the database, so everyone viewing this dashboard sees the same names. Any rider number in the event's rider range with no name yet shows up as its own row below the upload - click it to enter that one rider's details by hand instead of re-uploading the whole file. Right-click any rider's row to mark them DNS/DNF.
Marks a rider's own button on the tracker as unavailable, so a checker can't accidentally log a pass for someone who's scratched (Did Not Start) or withdrawn (Did Not Finish). Right-click a rider's row in the table above and choose Mark DNS/Mark DNF/Clear status - applies to the event selected above.
Adds an "Age Adjusted Distance" column on the Leaderboard tab for the event selected above. Filled in for any rider 40 or over who has a category (Open/Female) and age recorded here - their real distance so far plus the matching VTTA age adjustment for their category, age, machine type and this event's duration (12hr/24hr), updating live as they ride and settling once they're marked finished.
Anyone can download the rider-tracker app and sign in with Apple/Google, but they can't start tracking (or a named helper see anything) until you confirm their registration here - ties their sign-in email to a rider number for this event. Confirming a rider also confirms every helper email they named at the same time.
Riders (and their helpers) currently able to use the app for this event. Revoke removes their access - they'll need to be confirmed again to get back in.
Registrations you've turned down. Re-approve confirms them the same as a fresh registration.
The order checkpoints and legs are completed in for this event. Documents the intended course for reference - it doesn't affect what checkers record.
Imports every checkpoint, leg, GPX track, lap distance and detour point from a route saved in the Course Library tab straight into this event, in one go. Checkpoints/legs are no longer added or edited directly here - build and adjust them in the Course Library tab, then (re-)import. The library route itself is left untouched, so it can be imported into as many events as needed.
The real, measured distance for a lap can vary slightly from a leg's official distance above - e.g. exactly where a roundabout is measured to and from can differ a little the first time round versus later on. Record an override here for any lap known to differ; any lap with no override here just uses its leg's normal distance. If the distance only varies for the first lap or two and then settles down, only add overrides for those early laps - there's no separate "onwards" setting, since leaving every later lap without an override already achieves exactly that.
Lets an Admin/Organiser account use the Tracker app's Leg switch mode to flag a rider as moving onto a different leg, for the event selected above. Needed because some routes have two legs sharing the same physical path for a stretch (e.g. two legs both passing through the same checkpoint), so real checkpoint evidence alone can't always tell which leg a rider is actually on - this lets someone who knows better resolve that by hand. Turn off to hide that option from the Tracker app entirely for this event - it still won't show if the account isn't an Admin/Organiser, or the event has no legs, regardless of this setting.
Lets the Leg Advisor tab give closing-time-risk and leader-sync recommendations for the event selected above. Turn off to exclude just this event, without affecting any other event. Only shown here at all while Leg Advisor itself is switched on for the whole system in Admin > Advanced Options.
Lets a rider's own support crew flag them as resting or DNF from their phone - no sign-in needed - via a private link generated per rider below. "Resting" applies immediately and can be undone from the same link at any time; a reported DNF is only a proposal - it raises an alert here for an organiser to confirm or dismiss before it becomes the rider's official DNF status. Turn off to exclude just this event, without affecting any other event - this also immediately disables every link already handed out for it, not just new ones. Only shown here at all while Rider helper links is switched on for the whole system in Admin > Advanced Options.
A helper's DNF report is only a proposal - Confirm sets the rider's official DNF status (same as marking it directly above); Dismiss clears the report with no other effect.
A read-through of the full route above, top to bottom, for a final check before the event.
Marks this event as finished. Riders stay exactly where they are from this point on - even with estimated positions switched on in Admin, nobody keeps moving on the Rider Map once their event is ended. Checkers and detour spotters can no longer start (or continue) recording checkpoints for this event from the tracker apps, though photo upload there stays available; the dashboard can still make corrections here as normal. This cannot be undone.
Checkpoints, legs and whole routes that aren't tied to any one event - build a course once, then reuse it every time this event runs again, or swap pieces between events, without retyping anything. Detour points always travel along with their leg automatically, so there's no separate list for them here.
Every checkpoint in the system - genuinely unassigned ones (left behind after their event was deleted, or created directly below), AND ones a live event is currently using, clearly marked as such. A checkpoint currently in use by an event is the SAME row that event's own route reads - there's no separate copy - so editing, moving the pin on, or deleting one that's marked in use changes that event's live data immediately, with a warning first. Click a checkpoint below to view or move its pin on a map.
Every leg in the system - genuinely unassigned ones (left behind after their event was deleted, or created directly below), AND ones a live event is currently using, clearly marked as such. A leg currently in use by an event is the SAME row that event's own route reads - there's no separate copy - so editing or deleting one that's marked in use changes that event's live route immediately, with a warning first. A leg is a sequence of library checkpoints, its own base distance and (if it has an optional checkpoint) extra distance and a detour point - a GPX track for its base route and, if it has a detour point, a separate detour variant, can be uploaded directly here too.
Where this leg actually begins, rather than assuming it starts wherever the previous route step happened to end - lets a manual "rider is now on this leg" flag be checked against whether they've actually been seen here recently. Leave unset if this leg doesn't need that check.
This leg has an optional checkpoint, so it needs a detour point - where a detour spotter signs in, separate from the checkpoints riders actually pass through. Choose any checkpoint to use as this leg's detour point; it's flagged as the leg's detour point rather than as one of the checkpoints above.
Puts existing checkpoints and legs (see above) into an order and saves that as a reusable named route. To use a saved route in an event, choose it from "Import a route from the library" on Manage events - routes aren't copied across from here.
"Checkpoint" is only for the route's own Start point step (the very first thing on the route, before any distance has been covered) - it has no GPX track or distance of its own. Everything else, even a short simple transfer with nothing else along it, needs a "Leg" - that's what carries a distance and (optionally) a GPX track for the Rider Map.
Saves a named snapshot of an event's whole route (its checkpoints, legs, GPX tracks, lap distances, detour points and route order) into the library above, ready to copy into any event later. This is a COPY - the source event's own route is left exactly as it is.
Downloads every saved route, plus every unassigned checkpoint and leg (with their GPX tracks, lap distances and detour points), as one backup file - handy before a risky change, or to move the whole library into another copy of this app. Importing adds to what's already here; anything whose name matches an existing library route, checkpoint or leg is skipped rather than duplicated.
These settings apply to every checker using the tracker app, straight away. This tab is visible to anyone with the dashboard password, and via Google sign-in only to accounts with the Admin role.
When off, the tracker still captures and records GPS as normal - it just won't warn a checker or ask them to confirm if they seem to be in the wrong place, and shifts won't be flagged here either.
How far a checker's GPS can be from a checkpoint's pin before it's treated as a mismatch.
Used on the Progress page as an extra sanity check on flagged missed-checkpoint gaps: the known distance for a skipped stretch, divided by this assumed pace, gives an expected time even before any other rider has ridden that stretch to compare against. Riding faster than this is treated as a strong sign something's wrong. Also the fallback estimated pace for a rider with no history of their own yet. One shared value for every event - not per rider or per event.
Sets an assumed pace for one specific rider's estimated position, used only until they have a real confirmed average of their own (from a previous leg, or a previous lap of this same leg) - which always takes over once available. Until then it replaces the flat pace-range midpoint above, for just this rider. Works for any rider number, real or from the Testing & Simulation tab - handy for testing, or for a better early estimate when you know a real rider is running faster or slower than assumed. Shared across every browser/device viewing the dashboard, same as everything else on this tab - a rider's estimated position is calculated the same way for everyone, not just on the browser that set the override.
Applies for everyone viewing the dashboard. While off, the slider and active overrides below are hidden, and any overrides already set are cleared straight away for everyone - turning it back on starts from empty, not from whatever was there before.
Active overrides (click Remove to clear one):
How far a checkpoint's pin can be from the nearest point on an uploaded GPX leg route before they're still treated as the same place. A checkpoint's pin is rarely exactly on the route line, so this is usually more forgiving than the on-site GPS threshold above.
How often estimated rider positions are recalculated/redrawn while the relevant tab is open, using data already fetched - no extra network requests either way. Drives three things: the Rider Map's markers, the Leaderboard tab's Estimated column, and the estimated position log on the Rider Map tab. Faster makes the movement between real checkpoint taps more visible, handy when testing. Takes effect immediately. Only affects this browser - saved locally, not shared with anyone else viewing the dashboard.
Replace the logo shown on the Main Menu, this Dashboard, the Tracker, and Finish Circuit Timing. Takes effect for everyone next time they load each app. Leave unset to use each app's own built-in logo.
Optional - lets a checkpoint's pin be set by typing a what3words address (e.g. ///filled.count.soap) in the Course Library checkpoint editor, as an alternative to searching by place name or clicking the map. Get a free API key from what3words.com. Leave blank to hide the what3words field there.
Controls the checker/spotter's "End session & email data" button on the tracker - shared by checkpoint duty, detour spotting and leg switch alike. Takes effect immediately. On (default): tries the device's native share sheet, which attaches the CSV automatically, falling back to a plain email with a summary asking the checker/spotter to attach the CSV that's just downloaded to their device. Off: skips the share sheet and opens an email with all the recorded data already typed into the body, ready to send with no attach step to remember - simplest on any device, though a very large rider list could be truncated by some mail apps' length limits. A CSV is always downloaded to the device as a backup either way.
Compares how long a rider has been between checkpoints against how long that known stretch was expected to take - their own confirmed average pace so far if they've ridden enough to have one, otherwise the rider pace range's midpoint above. Works from the leg/checkpoint distances entered on Manage events - doesn't need a GPX route uploaded, unlike the estimated positions feature below. A leg with a detour option assumes the ordinary (non-detour) route by default, switching to the detour's distance only once a checker's tap or a live detour-spotting flag confirms the rider's actually on it. Riders marked DNS or DNF are never alerted on.
25% over expected (i.e. 1.25× the expected time before an alert)
Periodically re-runs the Reports tab's own review checks - estimated/automatic/flagged/questionable passes, concerning repeat taps, concerning missing runs, ambiguous checkpoint gaps, and repeated taps of a once-only checkpoint - across every event that hasn't ended yet, and lists any current findings in the bell's dropdown alongside the other alerts here, so nothing needs a separate trip to Reports to be noticed. Each item still links straight to that rider's own Reports timeline, and can be dismissed the same way as any other alert in this list.
VTTA age-graded adjustment standards - the fixed lookup table Leaderboard uses to add each finished 40+ rider's age adjustment onto their real distance, per category, machine type and event duration. Static reference data shared across every event, not tied to any one of them - see "Show VTTA Age Adjusted Distances" on Manage events to turn the Leaderboard column on for a specific event.
Upload the CTT's standards spreadsheet (.xlsx) directly - it reads the "All Solo Adjustments" sheet, using column A for age and columns H/I (Open Bicycle 12/24hr), P/Q (Female Bicycle 12/24hr), X/Y (Open Trike 12/24hr) and AF/AG (Female Trike 12/24hr). Or upload a CSV with one row per category/machine/duration/age combination, in this order: category, machine, duration (hours), age, distance - e.g. "Open,Bicycle,24,50,25.27". Category must be Open or Female; machine must be Bicycle, Trike, or Tandem; duration must be 12 or 24; age and distance must be numbers (distance can't be negative). Anything else blocks the whole upload until it's fixed. No header row needed for CSV - if there is one, it's skipped automatically. Either way, rows are added to (or updated in) whatever's already stored - re-uploading only touches the exact category/machine/duration/age combinations present in the file, so uploading new Trike data doesn't remove existing Bicycle data.
Quick on/off switches for optional tabs and features - each takes effect immediately, for everyone viewing the dashboard.
Each of these adds (or hides) a whole tab in the bar above.
Adds a "Testing & Simulation" tab for simulating rider passes at any checkpoint, without needing a phone physically on site.
Adds a "Finish Circuit Timing" tab - a separate finish-line lap-counting app, embedded here.
Adds a "Signage" tab for a public-facing, on-site leaderboard-style display.
Adds an "Activity log" tab recording who changed what, and when, across the whole system.
Adds a "Race Updates" tab for AI-generated hourly summaries of how the race is going - the summaries themselves still need switching on separately, on that tab.
Adds a "Photo Gallery" tab for photos uploaded from the event.
Adds a "Leg Advisor" tab giving closing-time-risk and leader-sync recommendations for moving riders between legs.
Adds a "Rider GPS" tab showing live rider positions from the phone app on a map.
Each of these turns a feature on or off without adding a tab of its own.
Lets a checker raise an emergency alert from the Tracker app, showing a banner here and ringing the alert bell.
Estimates each rider's live position between checkpoints, shown on the Map and as an Estimated column on the Leaderboard.
Lets an Admin/Organiser account use the Tracker app to flag a rider as moving onto a different leg by hand.
Lets a rider's own support crew flag them as resting or DNF from their phone, via a private link - no sign-in needed.
Adds an AI-generated suggestion button next to flagged items on the Reports tab's validation list.
Lets a recorded time be corrected directly on the Reports tab, instead of only via the checkpoint it was logged at.
Used by all three actions below.
Once an event's start time has passed, Manage events locks it to stop it being casually changed after riders may already be out on course. If it genuinely needs correcting, this unlocks it for one more edit - you'll be asked whether to also delete this event's already-recorded rider passes, since they were logged against the old start time.
For testing purposes - stops Manage events' start time field from auto-locking once an event's start time has passed at all, for every event, instead of needing "Unlock start time for this event" above every time while running through a test repeatedly. Takes effect immediately, for everyone viewing the dashboard. Turn off for a real, live event so its start time locks normally.
Deletes every shift and recorded pass, finished-rider marker, DNS/DNF status, live detour flag, and detour spotter shift logged against the selected event, plus its activity log entries if that's switched on. Its checkpoints, legs, GPX routes, route and event registration are left untouched - handy for wiping test/practice data (or resetting after a real run) so the same course can be used again with a clean slate. This cannot be undone.
Permanently deletes this event's registration and route order, plus every shift and recorded pass logged against it. Its checkpoints and legs are NOT deleted - they're kept, unassigned, ready to reuse for another event (see the Course Library tab). This cannot be undone.
Empties the whole database back to a blank installation: every event and everything recorded against it (checkers, passes, photos, activity log), the whole Library (saved routes, unassigned checkpoints and legs), uploaded rider name lists and age standards, and race-update history - plus every Admin setting is reset back to its default. This is not scoped to one event - it affects everything in this database. This cannot be undone.
This page is visible to anyone with the dashboard password, and via Google or Apple sign-in only to accounts with the Admin role.
Add, remove, or change access for the Google or Apple accounts allowed to sign in here and on the Tracker. Adding someone by email pre-authorizes them - they're matched up automatically the first time they sign in with that Google or Apple account (whichever they use), no invite email needed.
Off by default - the Tracker app (checkpoint-tracker.html) requires a signed-in, authorized Google account, same as this Dashboard. Turn this on to let checkers straight in via a plain link instead, no Google account needed. Doesn't affect this Dashboard or the front page, which always require sign-in.
A running log of what's happened, from every source - checker taps, dashboard changes, detour flags and more. Scoped to the event selected in the toolbar above; entries not tied to a specific event (like settings changes) always show too. Only collects anything while "Enable activity log" is switched on in Admin.
Newest at the bottom. Clear removes it from the database for everyone, not just this screen - there's no undo.
An hourly AI-generated summary of how the race is going, plus the settings behind it. Applies to the event selected in the toolbar above.
Shows a live updates timeline below (and the "last year's results" section above it), and turns on the dashboard's own periodic leaderboard snapshot writes that feed it. While on, an hourly AI-generated summary (who's leading Open/Female/Tandem, distances, what's changed, the weather) is posted automatically, as long as at least one dashboard has been open recently enough to keep the underlying data fresh. Takes effect immediately. While off, no snapshots are written and the sections below are hidden. Requires the ANTHROPIC_API_KEY secret to be set on the Supabase project - see the handoff notes.
The exact instructions sent to Claude every hour to write the update below. Use these placeholders anywhere in the text - each is swapped for the real data at the moment the summary is generated: {{event_name}}, {{duration_hours}}, {{standings}}, {{field_status}}, {{previous_leaders}}, {{weather}}, {{previous_year_results}}. Leaving this blank (or "Reset to default") falls back to the built-in wording shown here. Changes take effect on the next hourly summary.
Optional - if this event ran last year and there's a results page for it, the hourly AI summary above can use it as extra context (e.g. how this year's pace compares). The page is fetched once and saved as plain text below when you click "Fetch results" - not on every hourly summary, so a slow or unreachable page never holds up or fails that hour's update. Uses the {{previous_year_results}} placeholder in the prompt above. Applies to the event selected in the toolbar above.
Recommends moving riders between legs so nobody's still out on a leg once its marshals are due to leave, and so the leading riders stay on a fair, matching course as each other. Applies to the event selected in the toolbar above. Purely advisory - nothing here moves a rider until you click Apply.
Quickly simulate rider passes at any checkpoint, for testing without needing a phone physically at every location. Recorded under a checker named "Test harness" so it's obvious it's not real - use Admin → Danger zone to clear it out afterwards.
Adds a "30 minutes" option to the Duration dropdown on Manage events (Start date & duration), alongside 12/24 hours - handy for running a whole event lifecycle (start, finishes, an age-adjusted distance or two) through quickly while testing, without waiting hours. Takes effect immediately, for everyone viewing the dashboard. Turn off once you're done - a real event should stick to a real duration.
Deems the rider to have finished at their most recently recorded checkpoint pass, for the selected event above - not the time you tap this button. Requires at least one pass already recorded. Shows up on the Progress page. Riders whose event has a start time and duration set (Manage events, step 2) get marked finished automatically instead, once their own nominal finish time has passed - use this manual button for testing, or for events not using that automatic rule.
Load a schedule of checker shifts, rider passes, and detour-spotting activity (detour shifts and rider detour flags) into an already-configured event, as offsets from that event's own start time (Manage events: Start date & duration). Once loaded, the system injects each item automatically the moment it's due - live, exactly as if a checker or detour spotter had just tapped it in, with no browser tab needing to stay open.
Upload a file previously produced by "Export as file" below (or hand-built in the same {"shifts":[...],"passes":[...],"detour_shifts":[...],"rider_detours":[...]} shape - the two detour keys are optional).
Export any event's real recorded shifts/passes as a file - to keep as a backup, or import into another event later:
Simulation events (created via this tool):
No simulation events yet.