02Selected system
Voltar aos sistemasAção → estado autoritativo
PMR Truco
Truco Paulista em tempo real com estado público, mãos privadas e uma mesa sincronizada por um servidor autoritativo.

- Contexto
- Jogo web de Truco Paulista em tempo real para partidas individuais ou em dupla, com continuidade entre sessões.
- Papel
- Concepção e desenvolvimento do produto
- Estado
- Demo pública
- Restrições
- Código-fonte privado · Regras de partida processadas no servidor · Estado público separado das mãos privadas
Problema / sistema
Do problema à estrutura.
Problema
Uma partida online precisa manter a mesa sincronizada sem revelar mãos privadas ou permitir que clientes decidam regras conflitantes.
Solução
Um Truco Paulista em tempo real com estado público, mãos privadas e processamento central das ações para partidas 1×1 e 2×2.
Decisões / trade-offs
Três decisões que sustentam o produto.
- 01
Uma fonte de verdade
Toda ação relevante é processada por uma camada autoritativa, em vez de cada navegador decidir o resultado localmente.
Trade-off O round-trip adicional custa latência, mas evita regras divergentes entre participantes.
- 02
Estado público, mãos privadas
Placar, rodada e ações compartilhadas ficam no estado público; cartas permanecem acessíveis apenas a quem deve vê-las.
Trade-off A separação torna o modelo e as políticas mais complexos, em troca da integridade da mesa.
- 03
Regra separada da tela
O motor de regras em TypeScript puro pode ser exercitado sem interface e validado por testes unitários e E2E.
Trade-off Modelar o domínio exige trabalho inicial, mas torna cada jogada mais fácil de provar e evoluir.
Evidências / produto real
O sistema em uso.
Capturas reais da versão analisada, sem mockups de dispositivo e sem dados sensíveis.



Stack / uso
Tecnologia explicada pela função.
A stack não é uma coleção de badges: cada escolha ocupa um lugar verificável no sistema.
- Next.js · TypeScript
- Entrega a aplicação web, a navegação e as interfaces da mesa com contratos tipados.
- Supabase · Realtime · RLS
- Sincroniza partidas e protege a separação entre dados públicos e privados.
- Three.js
- Compõe a mesa visual sem transferir a autoridade das regras para a camada gráfica.
- Vitest · Playwright
- Exercitam o motor isolado e os fluxos completos de uma partida no navegador.
Funcionalidades confirmadas
- Partidas 1×1 e 2×2
- Sincronia com Supabase Realtime
- Separação entre estado público e mãos privadas
- Motor de regras em TypeScript puro
- Testes unitários e E2E
- PWA com retomada de partida
Estado / limites
Demo pública
Estado atual, sem promessas artificiais.
A demonstração está disponível publicamente. O código-fonte do projeto permanece privado.