ProjectsFebruary 4, 2026

Real-Time Multiplayer Quiz Platform

Real-Time Multiplayer Quiz Platform - Image 1
Real-Time Multiplayer Quiz Platform - Image 2
Real-Time Multiplayer Quiz Platform - Image 3
Real-Time Multiplayer Quiz Platform - Image 4

Overview

A production-grade real-time multiplayer quiz platform built as a multi-tenant architecture, designed to handle 100+ concurrent users across multiple simultaneous game rooms. Currently running two production sites:
  • PistolQuiz (general knowledge: culture, science, history, sports)
  • FreestyleQuiz (freestyle football trivia: battles, events, champions, legends)
The platform features a competitive 3-phase elimination format (Buzz Race, QCM Streaks, Head-to-Head Finale), supporting 2-8 players per room with live spectator mode, and a database of 3,000+ curated questions.
Une plateforme de quiz multijoueur en temps réel de qualité production construite sur une architecture multi-tenant, conçue pour gérer 100+ utilisateurs simultanés répartis sur plusieurs salles de jeu en parallèle. Deux sites de production sont actuellement en ligne :
  • PistolQuiz (culture générale : culture, science, histoire, sport)
  • FreestyleQuiz (trivia freestyle football : battles, événements, champions, légendes)
La plateforme propose un format compétitif d'élimination en 3 phases (Course au Buzz, Séries QCM, Finale en Duel), supportant 2 à 8 joueurs par salle avec un mode spectateur en direct, et une base de données de 3 000+ questions sélectionnées.

Production Architecture

Scalability & Performance

The system is built for production workloads with a focus on low-latency, high-concurrency real-time communication:
  • Socket.IO WebSockets with sub-100ms event delivery across all connected clients
  • Event-driven game engine processing buzz events, answer submissions, and state transitions with zero blocking I/O
  • In-memory game state for instant read/write (no database round-trips during gameplay)
  • Per-room isolation ensures game logic is independent, allowing 20+ rooms running simultaneously
  • Graceful shutdown with full timer cleanup, socket disconnection, and state persistence

Infrastructure

ComponentTechnologyRole
Frontend CDNVercel + CloudflareGlobal edge caching, SSL termination, DDoS protection
BackendHetzner VPS (Node.js)WebSocket server, game engine, JWT auth
Process ManagerPM2Auto-restart, log management, zero-downtime reloads
CI/CDGitHub ActionsAutomated lint, type-check, build, and test pipeline
MonitoringCustom /stats endpointReal-time room count, player count, memory usage

Security

  • JWT authentication with per-room scoped tokens and host privilege escalation
  • Server-side state authority prevents client-side tampering (scores, answers, timers all server-authoritative)
  • Sanitized spectator data strips all answer fields before broadcasting to spectators
  • Rate limiting on all socket events with IP-based throttling
  • Input validation with XSS sanitization via DOMPurify on all user inputs
  • CORS whitelisting per-site with origin validation

Multi-Tenant Architecture

A single codebase serves multiple quiz brands with full isolation:
  • Site resolution via HTTP Origin or X-Site-ID header on every request
  • Per-site configuration: timers, categories, themes, branding, SEO metadata, OG images
  • Shared game logic with site-specific data directories (questions, assets)
  • Dynamic asset pipeline: prebuild script generates site-specific index.html, copies branded assets

Real-Time Features

  • Reconnection resilience: 30s grace period with cancellable forfeit timers, auto-reconnect with exponential backoff
  • Fuzzy answer matching: Levenshtein distance + Jaro-Winkler similarity with adaptive thresholds based on answer length
  • Live spectator mode: Real-time game viewing with server-side answer sanitization
  • Bilingual support: Full French/English i18n with 346 translation keys

Scalabilité & Performance

Le système est conçu pour des charges de production avec un accent sur la communication temps réel à faible latence et haute concurrence :
  • Socket.IO WebSockets avec une livraison des événements en moins de 100ms à tous les clients connectés
  • Moteur de jeu événementiel traitant les événements de buzz, les soumissions de réponses et les transitions d'état sans aucune I/O bloquante
  • État de jeu en mémoire pour des lectures/écritures instantanées (aucun aller-retour base de données pendant le gameplay)
  • Isolation par salle garantissant une logique de jeu indépendante, permettant 20+ salles simultanées
  • Arrêt gracieux avec nettoyage complet des timers, déconnexion des sockets et persistance de l'état

Infrastructure

ComposantTechnologieRôle
CDN FrontendVercel + CloudflareCache en edge global, terminaison SSL, protection DDoS
BackendHetzner VPS (Node.js)Serveur WebSocket, moteur de jeu, auth JWT
Gestionnaire de ProcessusPM2Redémarrage automatique, gestion des logs, rechargement sans interruption
CI/CDGitHub ActionsPipeline automatisé de lint, vérification de types, build et tests
MonitoringEndpoint /stats personnaliséNombre de salles, de joueurs et utilisation mémoire en temps réel

Sécurité

  • Authentification JWT avec tokens scopés par salle et élévation de privilèges hôte
  • Autorité d'état côté serveur empêchant toute altération côté client (scores, réponses, timers entièrement gérés par le serveur)
  • Données spectateur nettoyées supprimant tous les champs de réponse avant diffusion aux spectateurs
  • Rate limiting sur tous les événements socket avec throttling basé sur l'IP
  • Validation des entrées avec sanitisation XSS via DOMPurify sur toutes les saisies utilisateur
  • Liste blanche CORS par site avec validation d'origine

Architecture Multi-Tenant

Un seul codebase dessert plusieurs marques de quiz avec une isolation complète :
  • Résolution du site via l'Origin HTTP ou le header X-Site-ID sur chaque requête
  • Configuration par site : timers, catégories, thèmes, branding, métadonnées SEO, images OG
  • Logique de jeu partagée avec répertoires de données spécifiques par site (questions, assets)
  • Pipeline d'assets dynamique : le script prebuild génère un index.html spécifique au site et copie les assets de marque

Fonctionnalités Temps Réel

  • Résilience à la reconnexion : période de grâce de 30s avec timers de forfait annulables, reconnexion automatique avec backoff exponentiel
  • Correspondance floue des réponses : distance de Levenshtein + similarité de Jaro-Winkler avec seuils adaptatifs basés sur la longueur de la réponse
  • Mode spectateur en direct : visionnage du jeu en temps réel avec sanitisation des réponses côté serveur
  • Support bilingue : i18n complète français/anglais avec 346 clés de traduction

Tech Stack

LayerTechnologies
FrontendReact 18, TypeScript, Vite, Tailwind CSS, Framer Motion, Zustand, i18next
BackendNode.js, Express, Socket.IO, JWT, Zod
InfrastructureVercel, Cloudflare, Hetzner VPS, PM2, Docker
CI/CDGitHub Actions (lint, build, test)
TestingJest (unit), Playwright (E2E)
SecurityHelmet, CORS, DOMPurify, rate limiting, JWT
CoucheTechnologies
FrontendReact 18, TypeScript, Vite, Tailwind CSS, Framer Motion, Zustand, i18next
BackendNode.js, Express, Socket.IO, JWT, Zod
InfrastructureVercel, Cloudflare, Hetzner VPS, PM2, Docker
CI/CDGitHub Actions (lint, build, test)
TestsJest (unitaires), Playwright (E2E)
SécuritéHelmet, CORS, DOMPurify, rate limiting, JWT