A WarioWare Culture Quizz minigames to play with friends
Find a file
AyoubBenziza 7093ce8cd9 feat(web): victory confetti on the end screen
canvas-confetti burst (center pop + side jets) fired once when the game-end
screen appears.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-10 17:54:23 +02:00
apps feat(web): victory confetti on the end screen 2026-06-10 17:54:23 +02:00
packages feat: end-of-game track recap, no self-vote in who_added, festive home + icons 2026-06-10 16:04:14 +02:00
.gitignore feat(shared,server): scaffold @nerdware/shared types + Fastify/Socket.IO server 2026-06-08 14:55:52 +02:00
.npmrc feat: initial commit 2026-06-07 18:45:52 +02:00
.prettierignore feat: initial commit 2026-06-07 18:45:52 +02:00
.prettierrc feat: initial commit 2026-06-07 18:45:52 +02:00
ARCHITECTURE.md chore: initial scaffold (Turborepo + Vite/React + shadcn) 2026-06-08 14:24:04 +02:00
bun.lock feat(web): victory confetti on the end screen 2026-06-10 17:54:23 +02:00
CLAUDE.md chore: initial scaffold (Turborepo + Vite/React + shadcn) 2026-06-08 14:24:04 +02:00
docker-compose.yml feat(server): Drizzle + PostgreSQL schema + Open Trivia DB seed 2026-06-10 12:24:17 +02:00
package.json feat(server): generic game engine — GameRound interface + orchestration loop 2026-06-08 15:29:49 +02:00
README.md feat(admin): manual quiz back-office + rewrite README 2026-06-10 16:43:19 +02:00
tsconfig.json feat: initial commit 2026-06-07 18:45:52 +02:00
turbo.json feat(server): generic game engine — GameRound interface + orchestration loop 2026-06-08 15:29:49 +02:00

NerdWare

Party game web multi-épreuves, ambiance WarioWare, centré culture geek (jeux vidéo, manga, pop culture). Chaque joueur joue sur son propre PC/téléphone, les rooms sont synchronisées en temps réel via Socket.IO.

V1 : Quiz culture + Blindtest (YouTube), mélangeables dans une même partie.

Architecture détaillée : ARCHITECTURE.md · consignes de dev : CLAUDE.md.

Stack

Couche Choix
Langage TypeScript (strict, front + back)
Runtime / package manager Bun
Monorepo Turborepo
Backend Fastify + Socket.IO
DB PostgreSQL + Drizzle ORM (contenu quiz + historique ; rooms en mémoire)
Frontend Vite + React, wouter, Zustand, TanStack Query (back-office)
UI Tailwind v4 + shadcn/ui, Framer Motion, Lucide
Audio YouTube IFrame Player API
Avatars DiceBear (style lorelei), générés en local

Structure

apps/
  web/      Client Vite + React (jeu + back-office)
  server/   Fastify + Socket.IO + Drizzle (moteur de jeu autoritaire)
packages/
  shared/   Types de domaine + events WS partagés (@nerdware/shared)
  ui/       Composants shadcn/ui (@workspace/ui)

Le serveur est autoritaire : timer, scores, ordre des manches et tirage du DJ sont tranchés côté serveur ; le client n'affiche que l'état reçu. Chaque épreuve implémente l'interface GameRound (start / submitAnswer / reveal / score) — ajouter un mode = un module, sans toucher à la plomberie.

Démarrer

Prérequis : Bun ≥ 1.3, et Docker pour la base (optionnel — sans DB, le quiz tourne sur une banque en dur).

bun install

# (optionnel) base de données
docker compose up -d
cd apps/server && cp .env.example .env
bun run db:migrate      # applique les migrations
bun run db:seed         # seed Open Trivia DB (~1 req/5s) + banque FR
cd ../..

# config client
cd apps/web && cp .env.example .env && cd ../..

# tout lancer (Turborepo)
bun run dev

Crée une room, choisis ton pseudo, partage le lien d'invitation, et lancez une partie (quiz, blindtest ou mixte).

Scripts (racine)

bun run dev         # tout en dev
bun run build       # build complet
bun run lint        # lint
bun run typecheck   # type-check
bun run test        # tests (bun test)
bun run format      # prettier

Serveur (apps/server) : db:generate, db:migrate, db:seed, db:studio.

Modes de jeu

  • Quiz — QCM, vrai/faux, et réponse libre (matching tolérant). Bonus de rapidité. Questions issues d'Open Trivia DB (seed) ou du back-office.
  • Blindtest — chaque joueur soumet des liens YouTube ; un DJ neutre pilote la lecture, les autres devinent (titre/artiste, qui l'a ajouté, ou mixte). Nécessite ≥ 3 joueurs. Récap des titres + liens en fin de partie.
  • Mixte (défaut) — séquence mélangée de manches quiz et blindtest.

Back-office quiz

Page protégée /admin pour écrire des questions manuelles (QCM, vrai/faux, réponse libre). Définir ADMIN_TOKEN dans apps/server/.env et une DATABASE_URL valide. Le jeton est demandé à la connexion sur /admin.