No description
  • TypeScript 94.2%
  • JavaScript 2.8%
  • Shell 1.1%
  • CSS 1%
  • Nix 0.9%
Find a file
2026-08-31 21:21:13 -07:00
apps feat: style game screens and simplify host auth 2026-08-31 21:21:13 -07:00
docs feat: style game screens and simplify host auth 2026-08-31 21:21:13 -07:00
packages feat: style game screens and simplify host auth 2026-08-31 21:21:13 -07:00
scripts feat: style game screens and simplify host auth 2026-08-31 21:21:13 -07:00
.env.example feat: build playable local game 2026-08-31 20:51:38 -07:00
.gitignore feat: build playable local game 2026-08-31 20:51:38 -07:00
flake.lock feat: build playable local game 2026-08-31 20:51:38 -07:00
flake.nix feat: style game screens and simplify host auth 2026-08-31 21:21:13 -07:00
package.json feat: style game screens and simplify host auth 2026-08-31 21:21:13 -07:00
pnpm-lock.yaml feat: style game screens and simplify host auth 2026-08-31 21:21:13 -07:00
pnpm-workspace.yaml feat: build playable local game 2026-08-31 20:51:38 -07:00
README.md feat: style game screens and simplify host auth 2026-08-31 21:21:13 -07:00
tsconfig.base.json feat: build playable local game 2026-08-31 20:51:38 -07:00

Jeopardy

A self-hosted, team-based Jeopardy-style browser game. Its current StyleX theme takes its layout, screen colors, hard monitor grid, score displays, and studio framing from the televised game while continuing to use only system fonts until the intended font files are supplied.

What works

  • Username/password host accounts through Better Auth, with an explicit local-development bypass.
  • Draft, edit, validate, publish, save, and reuse games with exactly six categories, five clues per category, one Daily Double, and one Final Jeopardy clue.
  • Shareable join links and QR codes; accountless players receive a recoverable browser credential and a unique animal name.
  • Team creation, deletion, naming, self-service joining, host moves and kicks, and random team mixing.
  • Separate host, audience, and player views backed by one authoritative match state machine.
  • Standard clue selection, host-controlled buzzer unlock, ordered buzz records, scoring, and reopening after an incorrect response.
  • Daily Double wagering before the clue is revealed, with the documented wager bounds.
  • Final Jeopardy eligibility, one host-selected representative per team, hidden wager and response entry, locking, timed reveal, judging, and final scoring.
  • PostgreSQL persistence, command/event history, REST CRUD and commands, and PostgreSQL notifications for realtime projections.
  • WebTransport support when local TLS certificate paths are supplied. Plain-HTTP development uses a WebSocket transport on port 5111 because browsers require a secure context for WebTransport; periodic projection refresh is also retained for recovery.

Run locally

The repository flake supplies Node.js, pnpm, and PostgreSQL. Project data stays under .data/ and is ignored by Git.

nix develop
pnpm install
pnpm db:start
pnpm db:setup
pnpm dev

Open http://devbox:5100. The web app binds to 0.0.0.0:5100; PostgreSQL remains on 127.0.0.1:54329, and the local realtime WebSocket server binds to port 5111.

Use Fill demo content in a new game to populate all required fields for a quick walkthrough. To stop the database:

pnpm db:stop

No pg_dump or backup automation is included at this stage.

There is intentionally no migration history while the project is pre-release. After a baseline-schema change, recreate the disposable local database with pnpm db:reset; this targets only the jeopardy database on the project PostgreSQL port and then applies the application and Better Auth schemas from scratch.

Checks

pnpm check
pnpm build
pnpm smoke

The smoke command expects the development services to be running. It creates disposable database records and exercises authoring, publishing, two player sessions, team operations, a normal clue, buzzing, a Daily Double, all Final Jeopardy phases, and player recovery.

Production transport

Set WEBTRANSPORT_CERTIFICATE_FILE, WEBTRANSPORT_PRIVATE_KEY_FILE, and optionally WEBTRANSPORT_PORT (default 5112) for the native HTTP/3/WebTransport listener. The public deployment still needs its NixOS service/module and TLS topology completed; the current flake is a reproducible development shell, not a production deployment.

Research and architecture

The repository does not include proprietary fonts, logos, episode captures, or other Jeopardy production assets.