A system for managing speaking times in the sessions of a municipal deliberative body, with two screens synchronised in real time: a control console for the secretariat and a projection (16:9, 4K) for the room.
┌────────────────────┐ ┌────────────────────┐
│ Control console │ Socket.io │ 4K projection │
│ (secretariat) │ ◀───── rooms ──────▶ │ (room · 16:9) │
└─────────┬──────────┘ real-time shared │ speakers + │
│ state │ timers │
▼ └────────────────────┘
Node.js · Socket.io · Prisma/MySQL · JWT
State — who holds the floor, which point of the agenda, justified pauses — is propagated instantly between the console and the projection over Socket.io. Built on Node.js + TypeScript, with Prisma/MySQL and two Next.js frontends; JWT authentication with per-user sessions.
It includes per-speaker timers, visual and audible warnings in the final minutes, session history and export (PDF/CSV). A seemingly simple problem — counting time — that in practice demands reliable synchronisation, shared state and a fail-proof interface in a formal setting.