ProjetosEstudo de caso

Produtos

Palpitaê 26

PWA mobile-first de palpites entre amigos para a Copa de 2026, com grupos privados, ranking determinístico, Pix e trilha de auditoria — desenhada para não ser um produto de aposta.

Status
Open source · arquivado
Atuação
Produto, arquitetura, backend Go, frontend React, operação e documentação do case study.
Stack principal
Go, React, TypeScript, PostgreSQL
Interface do projeto Palpitaê 26

Visão geral

O produto

Produto full-stack solo que substituiu bolões em planilha por um app web com grupos, palpites, ranking automático, pagamentos Pix e painel administrativo.

Para quem

Grupos de amigos e colegas que queriam palpitar a Copa juntos, sem prêmios, apostas ou sorteios.

Valor

Entrega uma vitrine de engenharia open source: domínio Go modular, SQL explícito, idempotência financeira e compliance tratado como regra de produto.

Problema e resposta

As decisões técnicas partiram do contexto operacional do produto.

O problema

Era preciso um app mobile-first de palpites com grupos privados, ranking confiável e acesso pago, sem cruzar a linha de produto de aposta.

A solução

Construí uma PWA React com API e worker em Go, PostgreSQL SQL-first, adapters para Pix e calendário, sessões no servidor e políticas determinísticas de pontuação e indicação.

O contexto

Toda Copa alguém organiza o bolão no chat e gasta o torneio copiando placares para planilha, com discussões sobre palpites atrasados e ranking recalculado na mão.

O Brasil regula apostas e promoções com prêmio. O produto precisava ser inequivocamente um jogo social — e essa restrição tinha que viver no modelo de dados, no vocabulário e na revisão de código.

Arquitetura

Responsabilidades explícitas, contratos claros e tecnologia escolhida pelo papel que cumpre.

Backend e domínio

Go 1.26 + chi

API HTTP com pacotes de domínio (identity, payments, groups, predictions, scoring, referrals, admin, audit) e regras explícitas de dependência.

PostgreSQL + pgx + sqlc + goose

SQL explícito sem ORM, migrations versionadas e acessos tipados — priorizando auditabilidade financeira sobre conveniência.

Worker dedicado

Binário separado para jobs agendados: sincronização de calendário, liberação de comissões e recálculo pós-partida.

Frontend e entrega

React 19 + Vite + TanStack

PWA mobile-first com Router, Query e Zod; fundação de rotas e contratos introduzida antes do checkout.

Sessões no servidor

Cookies HttpOnly com sessões no PostgreSQL e Argon2id — reembolso e bloqueio com efeito imediato.

Docker Compose + Caddy

Deploy em VPS única com HTTPS, estáticos e API atrás do Caddy; ambiente local offline com gateway Pix falso.

Integrações e qualidade

Adapters externos

Pix, calendário de jogos, e-mail e auditoria atrás de interfaces; o domínio nunca importa SDK de fornecedor.

Testes e CI

go test, Vitest, Testing Library e Playwright; CI com lint, testes, build e E2E em cada pull request.

Decisões de produto

Jogo social, não aposta

Ranking sem prêmio, plano pago compra acesso ao software, vocabulário controlado e checklist de compliance em toda mudança.

Idempotência como preocupação de primeira classe

Webhooks persistidos e reprocessáveis; pagamento confirmado dispara efeitos que não podem duplicar em reentrega.

Allowlist no provedor de jogos

O adapter importa só partidas, status, placares e times — excluindo odds e dados de bookmaker na fronteira de integração.

Entrega

As capacidades que chegaram à superfície do produto.

Contas e acesso

Auth e-mail/senha, aceite versionado de termos, rate limit e planos Free (1 grupo) ou Passe Mundial (Pix único).

Visão semanal e partidas

Painel que responde “tenho algo para palpitar agora?”, lista de jogos e detalhe com countdown e palpites do grupo.

Admin e auditoria

Painel operacional para pagamentos, resultados, comissões e saques, com trilha de auditoria em ações críticas.

Documentação open source

Case study, ADRs, glossário de domínio, CONTRIBUTING e LICENSE MIT para leitura e reuso do código.

Próximo projetoTransmutar