Sistema de gestão de tempos de uso da palavra nas sessões de um órgão deliberativo municipal, com dois ecrãs sincronizados em tempo real: uma consola de controlo para o secretariado e uma projeção (16:9, 4K) para a sala.
┌────────────────────┐ ┌────────────────────┐
│ Consola controlo │ Socket.io │ Projeção 4K │
│ (secretariado) │ ◀───── rooms ──────▶ │ (sala · 16:9) │
└─────────┬──────────┘ estado em tempo │ oradores + │
│ real │ cronómetros │
▼ └────────────────────┘
Node.js · Socket.io · Prisma/MySQL · JWT
O estado — quem tem a palavra, em que ponto da ordem de trabalhos, pausas com justificação — é propagado instantaneamente entre a consola e a projeção através de Socket.io. Construído sobre Node.js + TypeScript, com Prisma/MySQL e dois frontends Next.js; autenticação JWT com sessões por utilizador.
Inclui temporizadores por interveniente, avisos visuais e sonoros nos últimos minutos, histórico de sessões e exportação (PDF/CSV). Um problema aparentemente simples — contar tempo — que na prática exige sincronização fiável, estado partilhado e uma interface à prova de erro num ambiente formal.