Loading race day...
Spectating is not available for this runner.
{{ spectatorRunnerName ? spectatorRunnerName.charAt(0).toUpperCase() : '?' }}
{{ spectatorRunnerName }}
Lap {{ currentLap - 1 > 0 ? currentLap - 1 : 0 }}
/ {{ targetLaps }}
{{ formatRaceClock(raceElapsedSeconds) }}
{{ spectatorMoodDisplay.icon }} {{ spectatorMoodDisplay.label }}
{{ spectatorNutritionStatus }}
Dashboard
Feed
⏱
■
{{ raceStatus === 'dnf' ? 'DNF' : 'Race Ended' }}
— {{ laps.length }} laps completed
Back to Command Center
End Race
How would you like to mark this race?
Mark as Finished
Mark as DNF
Cancel
Race Day Dashboard
{{ formatRaceClock(raceElapsedSeconds) }}
Lap {{ currentLap }}
of {{ targetLaps }} target
Next lap in
{{ formatCountdown(countdownSeconds) }}
{{ isOnline ? 'Connected' : 'Offline' }}
Race Nutrition
{{ macro.label }}
{{ macro.cumulative }} / {{ macro.target }}{{ macro.unit }}
Last lap: {{ macro.lastLap }}{{ macro.unit }} / {{ macro.perLapTarget }}{{ macro.unit }}
Last Lap (Lap {{ lastLap.lapNumber }})
{{ lastLap.split }}
Split
{{ lastLap.rest }}
Rest
{{ moodLabel(lastLap.mood) }}
Mood
{{ lastLap.carbs }}g
Carbs
{{ lastLap.fluids }}ml
Fluids
Intake Trend (3-Lap Avg)
{{ trend.label }}
{{ trend.avg }}{{ trend.unit }}
{{ trend.arrow }}
Per-Lap Breakdown
▼
Lap {{ lap.lapNumber }}
{{ lap.carbs }}g / {{ lap.fluids }}ml / {{ lap.sodium }}mg
Carbs
Fluids
Sodium
Runner In
Dashboard
Race Feed
👏
{{ totalCheers }}
👏
Send Cheer
📷
Post Photo
Post a Photo
×
Choose Photo from Gallery
×
Lap {{ currentLap }} · {{ photoFile.name }}
{{ photoUploadError }}
{{ photoUploading ? 'Uploading...' : 'Post Photo' }}
{{ feedNewActivityCount }} new {{ feedNewActivityCount === 1 ? 'item' : 'items' }} ↑
Loading feed...
No activity yet. Send a cheer to get things started!
{{ feedEntryIcon(entry) }}
{{ feedEntryText(entry) }}
{{ entry.payload.summary.totalLaps }} laps
·
{{ entry.payload.summary.elapsedFormatted }}
· Mood {{ entry.payload.summary.avgMood }}/5
· {{ entry.payload.summary.totals.carbs }}g carbs
· {{ entry.payload.summary.totals.fluids }}ml fluids
{{ feedTimestamp(entry) }}
👏
{{ getReactionText(entry.id) }}
{{ feedLoading ? 'Loading...' : 'Load More' }}
Offline — feed frozen at last known state
{{ formatClockTime(lapClockElapsed) }}
{{ lapClockRunning ? 'Pause' : (lapClockElapsed > 0 ? 'Resume' : 'Start') }}
Lap
Reset
Lap
Split
Elapsed
{{ entry.lap_number }}
{{ formatClockTime(entry.split_seconds) }}
{{ formatClockTime(entry.elapsed_seconds) }}
No laps recorded yet. Start the clock and tap Lap to record splits.
👏
💪
🔥
...
Send
Slow down — you can cheer again in a moment
{{ reaction.emoji }}
👏
Send Cheer
👏
{{ cheerToastMessage }}
×
🏆
{{ milestoneToastData?.label }}
×
{{ milestoneToastData.message }}
{{ milestoneToastSummaryText() }}
◀
Crew Panel
Lap {{ currentLap }} · Rest:
{{ formatRestTimer(restSeconds) }}
×
⚙ Sections
{{ crewSectionLabel(key) }}
☑
Prep Checklist
{{ checklistProgress.done }}/{{ checklistProgress.total }}
{{ checklistProgress.percent }}%
Loading checklist...
No checklist items configured. Add items in the Plan wizard.
{{ item.label }}
{{ item.completed_by }}
⚠
Alerts
{{ crewAlerts.filter(a => !isAlertFaded(a.id)).length }}
No alerts. All metrics within target range.
{{ alertSeverityIcon(alert.severity) }}
{{ alert.title }}
{{ alert.severity }}
{{ alert.message }}
🌎
GPS Map
{{ gpxTrackDistance }}
~{{ Math.round(gpxEstimatedPosition.fractionComplete * 100) }}% through lap
Tap to expand map
No GPX track uploaded
Loading map...
Collapse Map
📝
Previous Lap Notes
No laps completed yet.
Lap {{ lap.lapNumber }}
{{ getMoodIcon(lap.mood) }}
✎
{{ tag }}
{{ lap.voiceNote || lap.notes }}
No notes for this lap
Save
Cancel
Show More Laps
🏃
RUNNER IN
Lap {{ crewRunnerInFlashLap }}
Rest timer started
Open Crew Panel
Dismiss
Logging Lap {{ currentLap }}
{{ formatCountdown(countdownSeconds) }}
Runner In
Starts rest timer & notifies crew
Lap {{ currentLap }}
Rest:
{{ formatRestTimer(restSeconds) }}
{{ target.current }}{{ target.unit }}
/ {{ target.total }}{{ target.unit }}
{{ projectedText(target) }}
{{ target.label }}
{{ guidanceHint }}
Quick Log Presets
{{ preset.name }}
{{ preset.summary }}
{{ preset.carbs }}g / {{ preset.fluids }}ml
{{ cat.name }}
{{ displayQty(item.id) }}
{{ item.name }}
{{ item.macroLabel }}
−
+
+
Add Custom Item
(food, drink, or supplement)
Custom Item
×
Save to menu
{{ cat.charAt(0).toUpperCase() + cat.slice(1) }}
−
{{ customValues[field.key] }}
+
Add to Lap
Mood
{{ m.icon }}
{{ m.label }}
Add Crew Notes
▼
{{ group.label }}
{{ tag }}
{{ voiceText }}
{{ voiceDuration }}
{{ voiceTranscript }}
{{ displayQty(id) }}
{{ item.name }}
Tap items above to build your lap
{{ total.value }}{{ total.unit }}
/ {{ total.target }}{{ total.unit }} target
{{ total.label }}
⚠
{{ summaryNudge }}
Confirm & Log Lap
Lap {{ successData.lap }} Logged
{{ successData.carbs }}g
carbs
{{ successData.fluids }}ml
fluids
{{ successData.sodium }}mg
sodium
Rest time:
{{ successData.rest }}
Back to Dashboard
Lap logged.
Undo?
Undo