A mobile-first PWA for basketball coaches to manage equal playing time across their roster during a game.
- Configure your roster, period format, and rotation order before the game
- Automatically calculates a substitution schedule guaranteeing every player equal court time within each period
- Live sideline screen with a countdown to each substitution showing exactly who swaps
- Recalculates the schedule in real time when a sub runs late or a player is injured
- Equal time, every period — circular rotation algorithm divides court time fairly across all active players
- Live sub countdown — big countdown timer with player names (and custom labels like "T-Rex" or "Runner")
- Smart recalculation — confirm a late swap and the schedule adjusts automatically for the rest of the period
- Injury removal — mark a player out mid-game; equal time redistributes to the remaining players
- Timeout counter — track your remaining timeouts on the live screen
- Between-period editor — reorder the rotation before each new quarter or half
- No-sub mode — works cleanly with exactly 5 players (no substitutions)
- Offline-first PWA — install to your home screen; works without Wi-Fi
- Persisted config — your last roster pre-fills setup for the next game
Planning phase complete. See:
CONTEXT.md— canonical domain glossaryplans/2026-05-11-basketball-substitution-app.md— approved implementation plan.scratch/basketball-substitution-app/PRD.md— full PRD with user stories and module breakdown
| Layer | Choice |
|---|---|
| Framework | Next.js 14 (App Router) + TypeScript |
| Styling | Tailwind CSS + shadcn/ui |
| Animation | Framer Motion |
| State | Zustand + persist middleware |
| Drag-and-drop | dnd-kit |
| PWA | next-pwa |