Il problema
Per organizzare una serata quiz servono spesso strumenti separati: domande su un computer, timer improvvisati, telefoni usati come buzzer e una classifica aggiornata a mano. Il risultato funziona solo finché qualcuno tiene insieme tutti i passaggi.
BuzzRoom nasce per riunire questa regia in un unico sistema locale, senza account per i giocatori e senza dipendere da un servizio cloud.
La soluzione
L'app divide l'esperienza in tre superfici coordinate:
- Master — crea il quiz, avvia la stanza, sceglie il round e assegna i punti;
- Screen — mostra domande, media, QR code, stato del buzzer e classifica su TV o proiettore;
- Player — permette a ogni squadra di entrare dal proprio smartphone e rispondere o prenotarsi.
La partita resta sulla stessa rete Wi‑Fi: il server Node gestisce la sessione realtime e i client ricevono uno stato coerente mentre il gioco procede.
Cosa ho costruito
Il prodotto supporta sei modalità di round: buzzer, scelta multipla, vero/falso, list guessing, clue reveal e image slide. Il seed incluso prepara un quiz demo “Serata Italiana”, così il flusso può essere provato senza dover creare subito tutti i contenuti.

La parte difficile: lo stato realtime
Il client non decide chi ha premuto per primo e non assegna punti localmente. Gli eventi come BUZZ e SUBMIT_ANSWER arrivano al server, che valida la richiesta, aggiorna lo stato della stanza e lo invia agli altri dispositivi.
Questa scelta evita due problemi tipici dei giochi realtime:
- race condition tra telefoni con latenza diversa;
- interfacce divergenti tra pannello del master, schermo e giocatori.
Lo stato caldo vive in memoria per rispondere rapidamente; quiz e stanze vengono persistiti in JSON con LowDB per sopravvivere ai riavvii.

Stack e vincoli
Il progetto usa Next.js 16 e React per le interfacce, TypeScript per condividere i tipi tra client e server, Socket.io per il trasporto realtime e un custom Node server perché le connessioni WebSocket richiedono un processo persistente.
Ho aggiunto anche sessioni admin firmate, protezione delle route di scrittura, controlli sugli upload e una pipeline CI con lint, type-check e build.

Stato del progetto
BuzzRoom è pubblicato come progetto open source con licenza MIT e può essere eseguito in locale su una LAN. Non lo presento come demo cloud: il requisito tecnico è un server Node persistente e tutti i dispositivi devono poter raggiungere l'IP del computer host.
