尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗Une plateforme de quiz multijoueur en temps réel, façon Kahoot. Le présentateur affiche les questions sur la TV / le vidéoprojecteur, les invités jouent depuis leur téléphone en scannant un QR code.
La plateforme héberge plusieurs quiz indépendants (chacun avec sa propre salle, son code PIN et son QR) :
/) : présentation + choix du quiz./quiz/<id>/host) : QR code, code PIN, liste des joueurs,
questions, compte à rebours, classement et podium final avec confettis./quiz/<id>) : on saisit son prénom, on touche une des 4 tuiles
colorées, on voit la bonne réponse, son score et son classement.(identifiants <id> : parents, blind, blind80, blindfilm, blinddisney, culture, clement)
Le dépôt contient un blueprint render.yaml : clique le bouton, connecte ton
compte Render, valide → tu obtiens une URL publique stable
https://quiz-julien.onrender.com (accueil sur /, puis choix du quiz).
Prérequis : Node.js 18+.
npm install
npm start
Le serveur démarre sur le port 3000 (configurable via PORT). La console
affiche les adresses à utiliser, par exemple :
Accueil : http://192.168.1.42:3000/
• Stéphane & Marie → http://192.168.1.42:3000/quiz/parents/host (code ABC123)
• Clément & Charlotte → http://192.168.1.42:3000/quiz/clement/host (code XYZ789)
Ouvre / (accueil) pour choisir un quiz, ou va directement sur
/quiz/<id>/host pour l'écran de présentation. Les joueurs, eux, scannent
simplement le QR code affiché.
npm start.http://<IP-DE-TON-PC>:3000/ (accueil) et choisis un quiz → écran
présentateur (l'IP est affichée dans la console au démarrage, ex. 192.168.1.42).http://<IP>:3000 + saisir
le code PIN.)💡 Pour trouver ton IP locale manuellement :
- macOS / Linux :
ipconfig getifaddr en0ouhostname -I- Windows :
ipconfig→ « Adresse IPv4 »
Le QR code encode automatiquement l'URL de connexion. Le serveur détecte
host/port tout seul ; tu peux forcer l'URL avec la variable d'environnement
PUBLIC_URL (voir ci-dessous).
Si les invités ne sont pas tous sur le même Wi-Fi (ou pour éviter les soucis de réseau), expose l'appli sur Internet. Deux options :
Lance d'abord l'appli (npm start), puis dans un second terminal :
Avec Cloudflare Tunnel (cloudflared) — recommandé, gratuit, sans compte :
# Installation (macOS) : brew install cloudflared
# Installation (Linux) : voir https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/downloads/
cloudflared tunnel --url http://localhost:3000
Cloudflared affiche une URL publique du type https://xxx-yyy-zzz.trycloudflare.com.
Relance alors le serveur en lui passant cette URL pour que le QR code pointe au
bon endroit :
PUBLIC_URL="https://xxx-yyy-zzz.trycloudflare.com" npm start
Avec ngrok (sans compte pour un usage rapide) :
# Installation : https://ngrok.com/download
ngrok http 3000
ngrok affiche une URL https://xxxx.ngrok-free.app. De même :
PUBLIC_URL="https://xxxx.ngrok-free.app" npm start
ℹ️ L'ordre conseillé : ouvrir le tunnel d'abord pour connaître l'URL, puis relancer
npm startavecPUBLIC_URLafin que le QR encode la bonne adresse publique. Garde le terminal du tunnel ouvert pendant toute la soirée.
Idéal si tu veux une URL stable préparée à l'avance.
Render (https://render.com) :
Nodenpm installnpm starthttps://ton-quiz.onrender.com. Le serveur détecte
automatiquement l'URL publique (en-têtes du proxy), donc le QR code sera bon.
Au besoin, ajoute une variable d'environnement PUBLIC_URL avec cette URL.https://ton-quiz.onrender.com/ (accueil), puis choisis un quiz.Railway (https://railway.app) :
npm install / npm start).https://ton-quiz.up.railway.app.PUBLIC_URL = cette URL.https://ton-quiz.up.railway.app/ (puis choix du quiz).⚠️ Sur l'offre gratuite de Render, le service peut se « mettre en veille » après inactivité : ouvre la page quelques minutes avant la soirée pour le réveiller.
Dans le lobby, le bouton « ✏️ Questions » ouvre l'éditeur : énoncé, 2 à 4 réponses, bonne réponse cochée, durée (et artiste/titre pour un blind test). Ajout, suppression, réordonnancement, puis « 💾 Enregistrer ».
✱ quand des questions personnalisées sont actives.Chaque quiz a son propre fichier de questions, facile à éditer :
questions.js → quiz Stéphane & Marie (parents)questions-clement.js → quiz Clément & Charlotte (clement) (exemples à remplacer)Chaque question a un énoncé, 4 options et l'index de la bonne réponse :
{
text: "Ma question ?",
options: ["Réponse A", "Réponse B", "Réponse C", "Réponse D"],
correct: 2, // 0 = A, 1 = B, 2 = C, 3 = D
time: 40, // durée en secondes (optionnel, 40 par défaut)
}
L'ordre des options détermine la couleur/forme de la tuile :
0 → 🔺 rouge, 1 → 🔷 bleu, 2 → 🟡 rond jaune, 3 → 🟩 carré vert.
🔀 L'ordre des questions est mélangé aléatoirement à chaque partie. En revanche, l'ordre des réponses reste fixe (celui du fichier) : pratique pour les réponses récurrentes (ex. « Stéphane » toujours à gauche, « Marie » à droite). Tu peux mettre 2, 3 ou 4 options par question (une question à 2 options s'affiche avec 2 tuiles, comme un vrai/faux).
La playlist est dans questions-blind.js. Chaque entrée est une question normale,
plus un bloc music qui sert à retrouver l'extrait :
music: { artist: "Indochine", title: "L'Aventurier" }
Le serveur interroge le catalogue iTunes (gratuit, sans compte) et récupère un extrait de 30 s, joué automatiquement sur l'écran présentateur uniquement (les téléphones restent muets). La lecture vocale des questions est désactivée sur ce quiz.
Pour forcer un morceau précis, dépose un fichier dans public/audio/ et ajoute :
music: { artist: "…", title: "…", audio: "/audio/ma-chanson.mp3" }
Il existe quatre blind tests : questions-blind.js (variété), questions-blind80.js,
questions-blindfilm.js et questions-blinddisney.js.
✅ À faire avant la soirée : ouvre
/api/blind-checkpour vérifier que chaque chanson trouve bien son extrait — la page teste tous les blind tests et liste les morceaux introuvables (/api/blind-check?quiz=blind80pour n'en tester qu'un). Si un extrait manque, le présentateur affiche un avertissement et la question reste jouable.
Crée un fichier questions-monquiz.js, puis déclare-le dans server.js (objet
QUIZ_DEFS) avec un id, les deux prénoms et le fichier de questions. Il apparaîtra
automatiquement sur la page d'accueil.
500 points + jusqu'à 500 points de bonus selon la
rapidité (plus tu réponds vite, plus le bonus est élevé).0 point.L'écran présentateur demande un code, une seule fois par appareil. Sans lui, impossible de piloter la partie — et le serveur vérifie que chaque commande (démarrer, révéler, exclure…) vient bien du présentateur : un invité ne peut rien déclencher depuis son téléphone. Après 8 codes faux en 10 minutes depuis une même adresse, les essais sont bloqués 10 minutes ; le présentateur déjà connecté n'est jamais concerné.
⚠️ Le dépôt GitHub est public : le code par défaut (
mirabelle) y est visible. Pour un vrai secret, définis la variableHOST_CODEdans Render (service → Environment → Add Environment Variable).
Bouton « 👥 Équipes » dans le lobby : 2 à 6 équipes de couleur, renommables. Chaque invité choisit son équipe sur son téléphone (effectifs affichés en direct) ; ceux qui n'ont pas choisi — et les retardataires — sont placés automatiquement dans l'équipe la moins nombreuse. Le classement se fait à la moyenne de points par joueur, pour qu'une grande table ne gagne pas d'office. Il apparaît à chaque révélation, au podium, sur les téléphones et dans le PDF.
Au podium, les trophées de la partie s'affichent sous les marches, calculés automatiquement d'après les réponses de chacun : 🏆 Numéro 1, 🎯 Sniper (meilleure précision), ⚡ Gâchette (bonnes réponses les plus rapides), 🔥 Série en or, 🚀 Remontada, 🤔 Mûre réflexion, 💥 Tête brûlée, 👥 Équipe championne.
Le bouton « 📊 Analyse de la partie » (podium) ou « 📊 Mémoire » (lobby) ouvre la mémoire des quiz :
Les parties au-delà des 3 dernières non épinglées sont effacées à l'enregistrement de la partie suivante (un avertissement prévient dans la mémoire). Une partie où personne n'a répondu n'est pas gardée.
À la fin de la partie, l'écran podium propose « 📄 Résultats en PDF » : chiffres clés, podium, équipes, trophées, film de la partie, faits marquants, classement complet (avec bonnes réponses et précision) et le détail de chaque question (taux de réussite, temps moyen, réponse piège). Le PDF de chaque partie en mémoire se retélécharge depuis la mémoire (bouton « 📄 PDF »).
ℹ️ La mémoire est propre à ce navigateur et à cet ordinateur. Le serveur, lui, ne garde rien de façon durable (offre gratuite Render) : pense donc à utiliser toujours le même poste pour présenter, ou à télécharger le PDF après la partie.
Disponible aussi en API : /api/results?quiz=<id> (JSON) et /api/results.pdf?quiz=<id>.
Un joueur qui ferme le site par erreur peut rejoindre en cours de partie :
| Variable | Rôle | Défaut |
|---|---|---|
PORT | Port d'écoute du serveur | 3000 |
PUBLIC_URL | Force l'URL publique encodée dans le QR code | (auto) |
HOST_CODE | Code présentateur (insensible à la casse) | mirabelle |
Bonne soirée ! 🥂