Matches are positioned per round with SVG connector lines between feeder and next match, winners in bold, live matches tagged with their court, empty slots labelled with what fills them (W R1.4, L R2.1), and the viewer's team highlighted along its path. Double elimination renders winners, losers and finals trees. Narrow screens default to a scaled fit-to-width view; a round-by-round list is also available. Seed script gains --stage=bracket|double. Release 0.3.0. Co-Authored-By: Claude Fable 5.1 <[email protected]> Claude-Session: https://claude.ai/code/session_01MB7nCCAscYsb3zzkT6LHZi
68 lines
3.2 KiB
Markdown
68 lines
3.2 KiB
Markdown
# Changelog
|
|
|
|
All notable changes to Courtside are recorded here. The format follows
|
|
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and versions follow
|
|
[Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
|
The running version is reported at `GET /healthz` and shown in the page footer,
|
|
so you can always tell what a deployment is actually serving.
|
|
|
|
## [Unreleased]
|
|
|
|
## [0.3.0] - 2026-09-03
|
|
|
|
### Added
|
|
- Bracket is drawn as a real tree: matches positioned per round with connector lines
|
|
between feeder and next match, winners in bold, live matches tagged with their court,
|
|
empty slots labelled with what fills them ("W R1.4", "L R2.1"), and the viewer's own
|
|
team highlighted along its path. Double elimination shows winners bracket, losers
|
|
bracket and finals as separate trees.
|
|
- Three bracket views: full tree with sideways scrolling, "Fit to screen" (scaled to the
|
|
phone's width, the default on narrow screens), and a round-by-round list. The choice is
|
|
remembered per device.
|
|
- `scripts/seed-demo.js --stage=bracket|double` seeds the demo mid-bracket.
|
|
|
|
### Changed
|
|
- Public state now includes `loserFeeds`/`loserFeedsSide` on bracket matches so the
|
|
page can label upcoming slots.
|
|
|
|
## [0.2.0] - 2026-09-03
|
|
|
|
First deployed release. Courtside now runs as a managed stack rather than a
|
|
`docker compose up` on someone's laptop.
|
|
|
|
### Added
|
|
- `docker-compose.komodo.yml` — deployment compose for a host that already sits
|
|
behind a shared Cloudflare Tunnel. Publishes a host port instead of bundling a
|
|
`cloudflared` sidecar, so there is one tunnel to operate rather than one per app.
|
|
- Version reporting: `server/version.js` reads the version from `package.json`;
|
|
`GET /healthz` returns it as `version`, and the footer renders `Courtside v<x.y.z>`.
|
|
- This changelog.
|
|
- Push-to-deploy: a push to `main` triggers a rebuild and redeploy of the stack.
|
|
|
|
### Notes
|
|
- The original `docker-compose.yml` (app + its own `cloudflared`) is unchanged and
|
|
still the right choice for a standalone install, as documented in `docs/DEPLOY.md`.
|
|
- No database migration. State is JSON documents in SQLite created with
|
|
`CREATE TABLE IF NOT EXISTS`; upgrading is a container replacement.
|
|
|
|
## [0.1.0] - 2026-09-03
|
|
|
|
Initial MVP.
|
|
|
|
### Added
|
|
- Tournament engine with no I/O (`engine/`): round-robin pools, single and double
|
|
elimination with bracket reset, pools-then-bracket, configurable rally scoring
|
|
(points, win-by, cap, best-of), standings with tiebreaks, and a court engine that
|
|
assigns matches as courts free up and maintains an "up next" queue with ETAs.
|
|
- One-QR-code public flow: `/t/<slug>` is the sign-up form during check-in, then the
|
|
roster, then the live board, then the results page — no re-scanning.
|
|
- Per-team pages at `/t/<slug>/team/<code>` with on-deck and up-now alerts.
|
|
- Organizer desk at `/admin`: create tournaments, manage teams, generate pools and
|
|
brackets, score matches, correct results, withdraw teams, pause and swap courts,
|
|
broadcast messages, print QR codes.
|
|
- TV display mode at `/t/<slug>/display`.
|
|
- Live updates over a WebSocket at `/ws/<slug>`, with a state re-fetch as a fallback.
|
|
- Docker image and compose files, deploy/architecture/organizer/API docs,
|
|
engine unit tests, an HTTP smoke test, and a full-day simulator.
|