Começou numa noite de jogos
Eu queria jogar algo no estilo impostor com os amigos, com cada pessoa vendo o próprio papel no próprio celular. Não encontrei nada que funcionasse bem para o grupo, então construí o Duplizen para a gente.
O problema não era inventar mais um conjunto de regras. Era manter salas, papéis secretos, rodadas, votos e resultados sincronizados sem fazer ninguém pensar no software.
A rodada não podia atrapalhar
Desenhei a sessão em torno de um ciclo curto: criar ou entrar numa sala, revelar um papel, discutir a palavra secreta, votar e jogar de novo. O app precisava funcionar nos navegadores que já estavam na sala e sumir assim que a conversa começasse.
Fui responsável pelo produto, pelos fluxos da aplicação, pelo modelo de dados multiplayer e pelas transições de estado por trás desse ciclo.
Mantendo a sala em sincronia
O Duplizen usa Next.js, React e TypeScript com Supabase e PostgreSQL. Assinaturas em tempo real empurram as mudanças da sala para os jogadores conectados, enquanto funções no banco coordenam as transições compartilhadas perto da fonte da verdade.
Row-level security limita quais registros cada participante pode tocar. Isso mantém as regras do multiplayer centralizadas, mas também torna reconexão e consistência mais interessantes do que seriam num jogo de um único dispositivo.
O que fez funcionar para a gente
Hoje é um jogo de navegador que roda no desktop e no celular, suporta inglês, português e espanhol, e pode ser instalado como PWA. Um grupo consegue passar por uma rodada completa sem ficar passando um aparelho de mão em mão.
Para mim, também virou um estudo prático de estado em tempo real e consistência multiplayer. Não uso essa experiência para afirmar escala de produção ou número de jogadores; o resultado útil é um produto jogável e um entendimento bem menos teórico dos tradeoffs.
Feito com
Next.js / React / TypeScript / Supabase / PostgreSQL / Zustand
.png)