02Selected system

Voltar aos sistemas

Açã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.

Mesa real de uma partida de PMR Truco com cartas, jogadores e placar
Partida em ambiente de teste
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

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.

Ação para estado autoritativo. Ações de dois lados passam por um estado autoritativo antes de voltar validadas aos jogadores.

Três decisões que sustentam o produto.

  1. 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.

  2. 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.

  3. 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.

O sistema em uso.

Capturas reais da versão analisada, sem mockups de dispositivo e sem dados sensíveis.

Partidas1×1 e 2×2Mesas individuais ou em dupla
SincroniaEstado autoritativoAções processadas no servidor
ExperiênciaPWA com retomadaContinuidade entre sessões

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

Demo pública

Estado atual, sem promessas artificiais.

A demonstração está disponível publicamente. O código-fonte do projeto permanece privado.