Une application de jeu Jeopardy moderne, interactive et temps réel, conçue pour des animations en direct avec buzzer, gestion sonore avancée et résilience des connexions.
- Écran Géant (Board) : Une interface immersive pour afficher la grille de questions, les scores et les animations.
- Interface Maître du Jeu : Contrôle total sur le flux du jeu, validation des réponses, gestion de l'audio et éditeur de questions intégré.
- Interface Joueurs : Buzzer ultra-réactif sur smartphone/tablette avec gestion de pénalités configurables en cas de buzz prématuré.
- Bibliothèque Audio : Système complet de gestion de sons (Jeu et Buzzers) avec ensemencement automatique.
- Résilience : Reconnexion automatique et transparente des joueurs après un rafraîchissement ou une perte de connexion.
- Compte à Rebours : Minuteur configurable globalement ou par salon.
L'application est conteneurisée avec Docker pour un déploiement simple et rapide.
-
Cloner le projet :
git clone https://github.com/jlequen/Crypt-0n_jeopardy.git cd Crypt-0n_jeopardy -
Lancer avec Docker Compose :
docker compose up --build -d
L'application sera accessible sur : http://localhost:3300
Vous pouvez configurer le mot de passe Super Admin dans le fichier docker-compose.yml ou via une variable d'environnement :
environment:
- ADMIN_PASSWORD=votre_mot_de_passe/client: Application Vue.js 3 (Vite, Tailwind CSS, Socket.io)./server: Serveur Node.js / TypeScript (Express, Socket.io, SQLite)./data: Persistance de la base de données SQLite.
- Accès Admin : Rendez-vous sur
/adminpour créer des salles et gérer la bibliothèque sonore. - Création de Salle : Le Maître du Jeu crée une salle avec un code et un mot de passe.
- Rejoindre le Jeu : Les joueurs scannent le QR code ou entrent l'URL de la salle pour rejoindre une équipe.
- C'est parti ! : Le Maître du Jeu lance les questions depuis son panneau de contrôle.
L'UI repose sur un design system « flat terminal » (vert sur noir, police mono) :
- Tokens : définis dans
client/src/style.cssvia@theme(Tailwind v4). Couleurs (surface-1/2/3,accent, rôlesrole-player/master/admin, sémantiquesuccess/warn/danger/info, textefg/muted/faint), typo fluide enclamp(--text-xs … --text-display), radius plats, lueurs réservées aux états « live ». - Composables (
client/src/composables/) : logique partagée —useGameSocket(cycle socket + reconnexion),useGameTimer(compte à rebours + resync skew),useSounds,useGameComputeds, typesuseGameState. - Composants (
client/src/components/) : primitivesui/(Button, Card, Input, Badge, ProgressBar…) et domainegame/(Buzzer, QuestionBoardGrid, Scoreboard, Timer, Podium, QrJoin, CurrentQuestion). - Responsive : fluide du téléphone (portrait/paysage) à la TV 4K. L'effet CRT (scanlines)
est opt-in par rôle (activé sur l'écran géant, désactivé sur le téléphone) via
client/src/App.vue.
cd client
npm install # installe Tailwind v4, @tailwindcss/postcss, vite-plugin-pwa
npm run dev # serveur Vite (HMR)
npm run build # build de production -> client/dist (servi par le serveur Node)L'app est installable sur l'écran d'accueil et s'ouvre en plein écran « standalone »
(buzzer immersif, wake-lock plus fiable).
- iOS : « Ajouter à l'écran d'accueil » fonctionne dès maintenant, même en HTTP
(manifest + meta apple présents —
client/index.html,client/public/manifest.webmanifest). - Android / install prompt + service worker : nécessite un contexte sécurisé (HTTPS).
Terminer le TLS au Nginx Proxy Manager existant (le serveur Node reste en HTTP en interne).
Configuration SW :
client/vite.config.ts(vite-plugin-pwa).
Une icône SVG est fournie (client/public/icons/icon.svg).
Pour les PNG (apple-touch-icon iOS + maskable Android) :
cd client
npx pwa-asset-generator public/icons/icon.svg public/icons \
--background "#050505" --padding "12%" --type png
# puis pointer /icons/apple-touch-icon.png dans index.html si le nom diffèreDéveloppé avec ❤️ pour des soirées mémorables.