nerdware/apps/web
AyoubBenziza 1e5ef2be90 feat(web): i18n (FR/EN) — homemade typed dictionary
- lightweight, dependency-free i18n: typed fr/en dictionaries (fr is the source
  of truth, en must match its shape → compile error on drift), I18nProvider +
  useI18n hook, browser detection + localStorage persistence
- FR/EN language switcher (home + room header)
- translated the whole player-facing flow: home, join, pseudo, room shell,
  lobby (incl. settings, categories, bots, track submission, history),
  quiz, blindtest, player-cards, round transitions, end screen (podium, awards,
  tracks, rounds recap), and server-error messages (mapped by code)
- history dates localized to the active language

Content (questions/categories) intentionally left as-is. Back-office (admin)
not translated yet — internal, token-gated tool.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-11 19:03:28 +02:00
..
src feat(web): i18n (FR/EN) — homemade typed dictionary 2026-06-11 19:03:28 +02:00
.env.example feat(server,web): first real-time cycle — room create/join + lobby 2026-06-08 15:16:26 +02:00
components.json feat: initial commit 2026-06-07 18:45:52 +02:00
eslint.config.js feat: initial commit 2026-06-07 18:45:52 +02:00
index.html feat: "Images" as a distinct mode, refined lobby settings, upload button, app title 2026-06-10 23:31:30 +02:00
package.json feat(web): victory confetti on the end screen 2026-06-10 17:54:23 +02:00
tsconfig.app.json refactor(web): generate DiceBear avatars locally instead of via HTTP API 2026-06-09 10:58:23 +02:00
tsconfig.json feat: initial commit 2026-06-07 18:45:52 +02:00
tsconfig.node.json feat: initial commit 2026-06-07 18:45:52 +02:00
vite.config.ts feat: initial commit 2026-06-07 18:45:52 +02:00