Public-facing tournament viewer for the CourtHive platform. Displays published tournament data — draws, schedules, results — with real-time score updates via Socket.IO.
Built with vanilla TypeScript (no framework). Deployed as a static web app to courthive.net/pub/.
- Node.js >= 20
- pnpm >= 8
- A running competition-factory-server instance for live data
pnpm install
pnpm start # Vite dev server (opens browser)| Command | Description |
|---|---|
pnpm start |
Vite dev server |
pnpm build |
Production build (tsc + vite build) |
pnpm preview |
Preview production build locally |
pnpm check-types |
TypeScript type check (tsc --noEmit) |
pnpm lint |
ESLint with auto-fix |
pnpm format |
Prettier on src/ |
pnpm test |
Vitest (UTC timezone) |
Hash-based SPA routing via Navigo.
| Route | Page |
|---|---|
/#/ |
Splash / default |
/#/tournaments |
Tournament list |
/#/:tournamentId |
Tournament view (draws, schedule, results) |
/#/:tournamentId/:eventId |
Event-scoped view |
/#/:tournamentId/:eventId/:drawId |
Draw-scoped view |
src/
components/ DOM components (tables, scorecard, formatters)
config/ App initialization
pages/ Route-level renderers
courthive/ Splash page
tournament/ Single tournament view
tournaments/ Tournament list
track/ Interactive scoring practice
router/ Navigo hash-based SPA router
services/ API clients, live updates, theme
svelte/ Svelte components (scorecard)
i18n/ Internationalization
assets/ CSS, icons
Connects to the competition-factory-server via Socket.IO, joining tournament-specific rooms. Receives liveScore events for real-time score display and liveBoltScores for INTENNSE bolt scoring.
| Package | Purpose |
|---|---|
| tods-competition-factory | Tournament data queries and types |
| courthive-components | Shared UI components |
| navigo | Hash-based SPA router |
| tabulator-tables | Data tables |
| socket.io-client | Real-time server communication |
Private — not published to npm.