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.
PARTICIPAÇÃO
Concepção e desenvolvimento do produto
ESTADO
Demo pública

CONTEXTO & SOLUÇÃO

O ponto de partida.

O problema

Uma partida online precisa manter a mesa sincronizada sem revelar mãos privadas ou permitir que clientes decidam regras conflitantes.

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

PRODUTO & ENGENHARIA

Escolhas que
fazem diferença.

  1. Uma fonte de verdade

    Toda ação relevante é processada por uma camada autoritativa, em vez de cada navegador decidir o resultado localmente.

    O compromissoO round-trip adicional custa latência, mas evita regras divergentes entre participantes.

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

    O compromissoA separação torna o modelo e as políticas mais complexos, em troca da integridade da mesa.

  3. Regra separada da tela

    O motor de regras em TypeScript puro pode ser exercitado sem interface e validado por testes unitários e E2E.

    O compromissoModelar o domínio exige trabalho inicial, mas torna cada jogada mais fácil de provar e evoluir.

NA PRÁTICA

O que o produto faz.

  • 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

POR DENTRO

Cada tecnologia,
uma função.

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.

LEITURA TÉCNICA

O que o projeto ensina.

Separar as regras da interface permite testar jogadas sem renderizar a mesa. O estado compartilhado e as cartas privadas precisam de contratos diferentes.

ESTADO DO PROJETO

Onde o projeto está.

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

  • Código-fonte privado
  • Regras de partida processadas no servidor
  • Estado público separado das mãos privadas