nerdware/apps/server/src/game
AyoubBenziza 7a41bbf8c1 feat: DJ can be contributor, volume, theme switch, clock sync, 90s blindtest
Playtest feedback round 2:
- blindtest DJ can now be anyone incl. the track's contributor (pickDj only
  excludes bots) — no more "immunity" for whoever isn't picked
- blindtest rounds last 90s (longer listen + typing)
- per-player volume slider (persisted), YT player setVolume + origin/enablejsapi
- theme switcher (light/dark/system) on home + room header
- clock sync: clients estimate the server-clock offset (time:sync) so the
  countdown is identical across devices (was off by each device's clock skew);
  also used for blindtest media sync

Note on duplicates: anti-repeat is per room code (quiz_played) — it works when
you replay in the SAME room, but a new room starts fresh. Verified e2e: two
chained games in one room share 0 questions.

Verified: typecheck 4/4, lint 4/4, 24 server tests, web build; e2e dedup (0
overlap) and clock/DJ behavior.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-12 00:39:02 +02:00
..
modes feat: DJ can be contributor, volume, theme switch, clock sync, 90s blindtest 2026-06-12 00:39:02 +02:00
bot.ts feat: blindtest needs 2 real players + bot difficulty setting 2026-06-11 18:03:03 +02:00
engine.test.ts feat: bots — virtual players to fill a game 2026-06-11 17:48:33 +02:00
engine.ts feat: bots — virtual players to fill a game 2026-06-11 17:48:33 +02:00
match.ts feat: mixed games by default, free-text quiz, mode-aware transitions 2026-06-10 13:41:29 +02:00
registry.ts feat(server): generic game engine — GameRound interface + orchestration loop 2026-06-08 15:29:49 +02:00
round.ts feat: bots — virtual players to fill a game 2026-06-11 17:48:33 +02:00