Files
courtside/CHANGELOG.md
T
bkvargyasandClaude Fable 5.1 ae44014e22 Tentative next-up for bracket matches waiting on live courts; per-court score keeper QR codes
Matches whose opponent comes from a live match now show in the queue and under
courts as 'X vs winner on Court 2 · ready ~time', which is what double
elimination needed. Score keeper access is a QR per court on the desk plus a
printable page; the copy-link button is gone. Release 0.4.1.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
Claude-Session: https://claude.ai/code/session_01MB7nCCAscYsb3zzkT6LHZi
2026-09-04 02:28:04 +00:00

110 lines
5.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.4.1] - 2026-09-03
### Added
- Bracket matches that are waiting on a live match now appear in the queue and under each
court as "Net Gains vs winner on Court 2 · ready ~2:33", so double elimination and late
single elimination rounds still show a next-up time. These are tentative (no on-deck
alert until both teams are known).
- Score keeper access is a QR code per court, shown on each court card of the desk, plus a
printable page with all courts' codes (`/admin/t/<slug>/keeper-qr`). The copy-link button
is gone; "Open on this device" remains for the organizer's own phone.
- Idle courts show their next-up match too.
## [0.4.0] - 2026-09-03
### Added
- **Courtside Manager**, a score keeper page per court (`/keeper/<slug>/<court>?k=…`). Big
+/ buttons, undo, sets for best-of-3, and a Finalize step with confirmation that appears
once a side has won under the tournament's rules. It follows whatever match is on the court
and moves to the next one automatically. The link is opened or copied from the court card
on the desk; it can only score and finalize, never edit a finished result.
- Court cards on the public board show the estimated finish time of the current match.
### Changed
- Organizer desk: the Phase section now sits below Courts and Queue, so the score pads
are at the top during play.
- Multi-set running scores (`liveSets`) show on the public board while a keeper is scoring.
- Match durations outside 290 minutes are ignored for the ETA average.
## [0.3.1] - 2026-09-03
### Added
- Every team name on the public board (courts, up-next, bracket tree and list, pool
standings, team schedules) links to that team's page at `/t/<slug>/teams/<id>`, which
shows their next match, court, record and schedule. Team pages by private code still work.
- Court cards show the running average game time and minutes played, and a "Next up" line
with the match predicted for that court and the clock time it should be ready.
- Up-next queue shows the expected clock time as well as minutes.
- Footer links to the organizer desk.
### Fixed
- A team's schedule on its page shows scores from that team's point of view.
## [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.