Loading event...
Event Not Found
{{ error }}
← Back to Live Tracking
← Back to Events
{{ event.name }}
{{ event.location }}
{{ event.loopDistance }} mi loops
{{ event.loopMinutes }} min
{{ formatElapsed(elapsedMs) }}
{{ raceStatus === 'running' ? 'Race in Progress' : raceStatus === 'paused' ? 'Paused' : 'Not Started' }}
{{ raceStatus === 'paused' ? '▶' : '▶' }}
{{ raceStatus === 'paused' ? 'Resume' : 'Start Race' }}
⏸
Pause
Reset
Undo Last
{{ runners.length }}
Runners
{{ activeRunners }}
Active
{{ finishedRunners }}
Finished
{{ dnfRunners }}
DNF
{{ totalLapsLogged }}
Total Laps
{{ cat.name }}
({{ runnersInCategory(cat.id).length }})
💡 Long-press runner for notes
{{ runner.name }}
{{ runner.displayNote }}
#{{ runner.bib }}
{{ runner.laps || 0 }}
laps
{{ formatLapTime(runner.lastLapTime) }}
→ {{ getPredictedLaps(runner) }} laps
{{ lastStandingCategory.name }} - Lap {{ currentLapNumber }}
{{ checkedInCount }}/{{ activeLastStandingRunners.length }} checked in
{{ formatElapsed(lapElapsedMs) }}
✓
✕
{{ runner.name }}
{{ runner.displayNote }}
{{ runner.laps || 0 }} laps
Start Lap {{ currentLapNumber + 1 }}
({{ uncheckedCount }} will DNF)
Undo
Recent Activity
No activity yet
{{ activity.message }}
{{ formatTime(activity.timestamp) }}
📤 Export Race Data
📋
Export JSON
🏆
Results CSV
⏱️
Lap Splits CSV
{{ notesModalRunner.name }}
×
Laps completed:
{{ notesModalRunner.laps || 0 }}
Avg lap time:
{{ getAverageLapTime(notesModalRunner) }}
Predicted finish:
{{ getPredictedLaps(notesModalRunner) }} laps
Display Note (shown on button)
Short identifier to help spot this runner
Race Notes