Context
Mario captured several race-day requests. This issue translates each note into an implementation-ready item with practical guidance.
1) Reverse sort registration and heats pages
Meaning
- Show newest racers/heats first so volunteers can immediately confirm recent changes.
Suggested implementation
- Default registration and heats queries to descending order (
created_at DESC or heat_number DESC).
- Add a visible sort toggle (Newest/Oldest) in each table header.
- Preserve sort in URL state (example:
?sort=newest) to keep behavior after refresh.
Acceptance criteria
- Newly added racer or heat appears at the top by default.
- Sort choice remains stable after reload/navigation.
2) Show more nuance on places on display page
Meaning
- Current place display is too binary; we need ties, movement, and confidence/precision cues.
Suggested implementation
- Display tied placements clearly (e.g., "T-2") when points/times are equal.
- Add small deltas like
+1 / -1 since last heat to show movement.
- Include tie-break context (best time, head-to-head, total points) as a compact subtitle or tooltip.
Acceptance criteria
- Display page differentiates unique ranks vs ties.
- Spectators can understand why one racer is ahead.
3) Add editing rights so others can check/update standings
Meaning
- Multiple volunteers need access; not everyone should need full admin privileges.
Suggested implementation
- Introduce simple roles:
viewer (read-only standings) and editor (can correct standings-related data).
- Gate edit actions behind role checks while leaving standings display public/read-only.
- Add quick role assignment in event settings (optimized for offline/local network usage).
Acceptance criteria
- A non-admin editor can make approved corrections.
- A viewer can open standings but cannot modify data.
4) Clicking on a racer should show full win/loss record
Meaning
- Operators need complete racer performance details without hunting across screens.
Suggested implementation
- Make racer names clickable in standings/heats.
- Open a dialog or detail page with: total heats, wins, losses, ties, lane history, average time, best time, and recent results.
- Include per-opponent summary if available (head-to-head).
Acceptance criteria
- One click from standings reveals complete record.
- Record updates immediately as new heats are entered.
5) Heat and registration pages should live reload during active periods
Meaning
- During check-in/racing, pages must reflect updates without manual refresh.
Suggested implementation
- Add live updates via WebSocket (preferred) or short polling fallback (3-5 seconds).
- Push events for racer add/edit/remove, heat result updates, and schedule changes.
- Show "Last updated" timestamp and reconnect state for reliability.
Acceptance criteria
- Multiple devices stay in sync during registration and race operations.
- If connection drops, UI auto-recovers and backfills missed changes.
6) Support removing broken/missing cars
Meaning
- Cars can break or no-show; app needs a safe way to withdraw racers mid-event.
Suggested implementation
- Add racer status values:
active, withdrawn, dns (did not start), dnf if needed.
- Provide a "Withdraw racer" action with confirmation + reason.
- On withdraw, update pending heats (scratch/bye logic) and recompute standings transparently.
Acceptance criteria
- Operators can remove a racer without corrupting heat flow.
- Audit trail records who withdrew the racer and why.
7) Enable printing results as certificates
Meaning
- Need ready-to-print certificates for winners/participants at event end.
Suggested implementation
- Create a print-friendly certificate template route (A4/Letter aware).
- Include event name/date, racer name, placement/award, and signature lines.
- Add "Print certificate" action from final standings and racer detail views.
Acceptance criteria
- Certificates print cleanly from standard browser print dialog.
- Layout remains readable in grayscale and on common school printers.
8) Tablet display: always show next two heats for track prep
Meaning
- Staging volunteers need constant visibility into upcoming racers/lane assignments.
Suggested implementation
- Add a dedicated tablet mode with oversized text and high contrast.
- Persistently show: current heat + next two heats, lane assignments, and ready indicators.
- Auto-advance after result entry; optional manual next/previous for race officials.
Acceptance criteria
- Tablet view stays focused on prep workflow with no deep navigation.
- Volunteers can prep cars continuously without asking announcer for next heat.
Suggested rollout order
- Live reload + tablet upcoming-heats view (biggest real-time operations gain)
- Broken/missing car withdrawal flow (prevents race-day stalls)
- Racer detail modal and nuanced placements
- Role-based standings access
- Certificate printing polish
Context
Mario captured several race-day requests. This issue translates each note into an implementation-ready item with practical guidance.
1) Reverse sort registration and heats pages
Meaning
Suggested implementation
created_at DESCorheat_number DESC).?sort=newest) to keep behavior after refresh.Acceptance criteria
2) Show more nuance on places on display page
Meaning
Suggested implementation
+1/-1since last heat to show movement.Acceptance criteria
3) Add editing rights so others can check/update standings
Meaning
Suggested implementation
viewer(read-only standings) andeditor(can correct standings-related data).Acceptance criteria
4) Clicking on a racer should show full win/loss record
Meaning
Suggested implementation
Acceptance criteria
5) Heat and registration pages should live reload during active periods
Meaning
Suggested implementation
Acceptance criteria
6) Support removing broken/missing cars
Meaning
Suggested implementation
active,withdrawn,dns(did not start),dnfif needed.Acceptance criteria
7) Enable printing results as certificates
Meaning
Suggested implementation
Acceptance criteria
8) Tablet display: always show next two heats for track prep
Meaning
Suggested implementation
Acceptance criteria
Suggested rollout order