nerdware/apps/server/src
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
..
admin feat: game history + question lang/active management 2026-06-11 17:12:07 +02:00
db fix(server): connect via PG* vars (robust to special chars in password) 2026-06-11 23:54:56 +02:00
game feat: DJ can be contributor, volume, theme switch, clock sync, 90s blindtest 2026-06-12 00:39:02 +02:00
env.ts feat(quiz): image_reveal format (progressive blur) end-to-end 2026-06-10 21:41:34 +02:00
handlers.ts feat: DJ can be contributor, volume, theme switch, clock sync, 90s blindtest 2026-06-12 00:39:02 +02:00
index.ts feat: game history + question lang/active management 2026-06-11 17:12:07 +02:00
rooms.ts feat: bots — virtual players to fill a game 2026-06-11 17:48:33 +02:00
socket.ts feat(server,web): first real-time cycle — room create/join + lobby 2026-06-08 15:16:26 +02:00