← Tous les projets
Product DesignTemps réelPrototypage IA

Casa des Buzzer Un buzzer de quiz équitable à la milliseconde.

Un buzzer de quiz qui tourne sur de simples téléphones : un téléphone arbitre, sans compte et sans serveur de jeu. Projet personnel, conçu et piloté seul en 72 heures.

Casa des Buzzer : visuel principal

Fiche du projet

Client
Projet personnel
Rôle
Product Designer · Direction artistique · Pilotage technique
Équipe
Conçue et pilotée seul, de bout en bout, avec Claude Code pour le développement
Périmètre
Cadrage · règles d’équité · design · direction artistique · pilotage du développement · tests sur appareils
Période
Octobre 2026
Durée
72 heures.
Support
Application web installable (PWA), temps réel multi-appareils : un téléphone anime, les autres jouent, un écran central affiche
Statut
Terminée : tests concluants, sans bug. Projet privé pour l’instant.
Problème
Sur un wifi, deux appuis à quelques millisecondes d’écart arrivent dans le désordre : qui a vraiment buzzé en premier ?
Solution
Un téléphone arbitre, avec une horloge commune, la latence compensée et des égalités tranchées par l’animateur.
Résultat
Un buzzer équitable, sans compte et sans serveur de jeu, joué en direct sur de simples téléphones.

Impact

3,4 s
pour détecter une coupure de wifi
Au lieu de 8 à 10 s. Mesuré avec un lien volontairement coupé : 3,4 s sur l’animateur et l’écran central, 3,5 s sur le joueur.
0
compte, 0 serveur de jeu
Un pseudo et un animal, rien d’autre. Aucune donnée de jeu ne passe par un serveur.
50 ms
plafond de compensation de latence
Un appareil lent ne peut pas se faire passer pour rapide.
01Contexte

Contexte

Des soirées blindtest et quiz entre amis : un arbitre, mais parfois des contestations et de la mauvaise foi. Ces débats m’ont donné envie de créer une app de buzzer simple, que tout le monde pourrait utiliser, et surtout un écran central pour l’animation.

Les buzzers physiques coûtent cher et se transportent mal ; les applications existantes demandent souvent un compte, un serveur ou une installation. Je voulais quelque chose d’immédiat : on scanne un QR code, on joue.

Le projet est aussi une expérience de méthode : comment piloter un assistant IA (Claude Code) pour livrer un produit propre, et pas seulement du code qui marche.

02Problème

Problème

Sur un réseau wifi, deux appuis à quelques millisecondes d’écart arrivent dans le désordre. Le vrai défi n’est donc pas l’interface : c’est l’équité. Il faut un arbitre fiable, une horloge commune, et des règles claires pour les égalités.

03Objectifs

Objectifs

  • Aucun compte, aucune donnée personnelle : un pseudo et un animal, rien d’autre.
  • Aucun serveur central pour le jeu : pas de coût qui grimpe avec les parties, pas de données à protéger.
  • iPhone et Android, sans installation obligatoire.
  • Réactivité avant tout : les animations ne gênent jamais l’appui.
  • Un design vivant, pas un énième écran générique d’application.
04Démarche et enseignements

Démarche et enseignements

Poser les règles d’équité avant le design. Puis choisir chaque effet en l’essayant : une démonstration jouable et jetable compare deux ou trois variantes (un décompte ou un éclair au départ de manche, trois mises en scène de fin de partie…), et je tranche en jouant. Une fonctionnalité, une pull request, relue, testée, puis validée sur de vrais appareils.

05Solution

Solution

Un téléphone sert de serveur et d’arbitre : le moteur de jeu tourne dans le navigateur de l’animateur. Les autres appareils lui envoient des intentions (« j’ai buzzé ») et reçoivent des événements (« Léa a la main »). Une seule source de vérité : l’ordre des buzz et les scores ne peuvent pas diverger.

Les appareils se parlent en direct (WebRTC). Un relais minuscule ne sert qu’à la mise en relation : il ne voit jamais de pseudos, de buzz ni de scores. Aucune adresse IP n’est exposée, et il n’y a ni compte ni service tiers.

06Design 1/3

Un arbitre, une horloge, des règles claires

Chaque joueur est pingué chaque seconde et l’heure de son buzz est corrigée d’une demi-latence, plafonnée à 50 ms. Un buzz reste admis 150 ms après le premier arrivé. Sous un écart réglable (15 ms par défaut), deux équipes différentes sont à égalité : l’animateur tranche, avec un écran de duel « VS ».

Casa des Buzzer : Un arbitre, une horloge, des règles claires
07Design 2/3

Un téléphone comme serveur

Le moteur de jeu vit dans le navigateur de l’animateur. Les joueurs et l’écran central se connectent en direct ; un relais minuscule fait seulement la mise en relation, sans jamais voir de données de jeu.

Casa des Buzzer : Un téléphone comme serveur
08Design 3/3

Une direction artistique « Pop »

Fond indigo, contours épais et sombres, gros boutons 3D en relief, avatars d’animaux. Le buzzer est un énorme bouton jaune qui s’enfonce quand on l’appuie. Le rouge est réservé à la connexion perdue ; les équipes sont des tuiles colorées.

Casa des Buzzer : Une direction artistique « Pop »
09Principes

Principes de conception

Le buzzer s’ouvre sur l’annonce de l’animateur, pas à la fin de l’animation locale : une animation lente ne peut désavantager personne. Sur les téléphones, aucune animation ne s’exécute pendant que le buzzer est actif.

On ne reste jamais bloqué : un joueur qui perd le wifi retrouve exactement sa place (même score, même équipe) grâce à un jeton de session, et chaque alerte offre une sortie vers l’accueil.

La vie privée est un principe de conception, pas une option : pas de compte, pas d’adresse IP exposée, pas de script ni de police tiers.

10Fonctionnalités

Fonctionnalités clés

Une manche

  1. L’animateur ouvre la manche ; tous les téléphones jouent un départ synchronisé de 0,9 s, pendant lequel les buzz sont ignorés.
  2. Le premier à buzzer prend la main. L’animateur valide ou refuse la réponse.
  3. Après une erreur, la manche se rouvre aux autres joueurs, ou se clôt sans point, ou retire des points.

Les réglages

  1. Un joueur qui s’est trompé peut rebuzzer ou non ; s’il ne reste qu’un joueur, il reçoit la main directement.
  2. Temps pour buzzer (aucun, 10, 20, 30 ou 60 s) et temps pour répondre (aucun, 5, 10 ou 20 s), avec pause et « +5 s » équitable.
  3. Égalité : jamais, 15, 30, 60 ou 100 ms.

La fin de partie

  1. Remise des trophées sur l’écran central : le plus souvent premier au buzz, le meilleur taux de bonnes réponses, la plus longue série.
  2. Chaque téléphone joue une animation différente selon le rang, avec un mot bienveillant pour le dernier.
  3. Tout reste lisible en version fixe si l’appareil demande de réduire les animations.
012e édition
Les dés : 2e édition
02Invader
Les dés : Invader

Les dés rebondissent sur le bitume en 2e édition, et se matérialisent en fil de fer phosphore dans Invader.

11Résultats

Résultats

Un buzzer équitable jusqu’à la milliseconde, qui s’ouvre avec un QR code. Il gère 2 à 8 joueurs, des équipes, un temps pour buzzer et pour répondre, la reprise après coupure de wifi, et une vraie fin de partie avec remise de trophées.

Le projet compte 885 tests automatisés et 56 pull requests relues. Une coupure de wifi est détectée en 3,4 secondes, contre 8 à 10 secondes au départ.

12Réflexions

Réflexions

  • La contrainte d’équité structure tout le reste. Une fois la règle « le buzzer s’ouvre sur l’annonce de l’animateur » posée, les animations peuvent être aussi riches qu’on veut : elles n’influencent plus le résultat.
  • Les démos battent les descriptions. Choisir un effet en l’essayant a évité des allers-retours, et m’a laissé la main sur chaque décision produit.
  • Un essai réel vaut cent tests. Couper le wifi d’un téléphone a révélé trois manques que la suite de tests ne voyait pas : pas de retour possible, détection trop lente, alerte invisible. Les trois sont devenues des fonctionnalités.
13Et ensuite

Et ensuite

Le projet reste privé : mon relais Cloudflare ne peut pas accueillir beaucoup de connexions. Si la demande est présente, je pourrais en faire une version publique. Le jeu hors du même wifi a été construit, puis abandonné : il demandait un service payant, contraire à ma contrainte de départ.

Product Designer. Design System, prototypage IA.

Disponibilité
Dès janvier 2027
CDI temps plein · contrat de 16 mois minimum · Montréal, QC
© 2026 Florian HumeniukFRENMentions légalesCGVMontréal, QC