§1O problema
Organizar uma pelada toda semana (quem vem, times parelhos, placar e histórico) era feito em conversa de grupo e de cabeça.
§2O que eu construí
- PWAApp web instalável com 4 abas: jogadores, jogo, histórico e estatísticas.
- Nível do jogadorVisível no app, mas oculto nos cards compartilhados.
- Sorteio de timesNível sugerido por heurística explicável (nunca aplicado sozinho).
- Importar elencoA partir das mensagens do grupo, com um modelo de IA.
- CompartilharCard de jogo para compartilhar (imagem) e vídeo com cortes, como no match.day.
- App do relógioApple Watch e iPhone (gravar, marcar gols); mock do servidor para testar sem relógio.
§3As partes difíceis
5 itens- 01
Reescrita em monorepo no mesmo padrão do match.day
Servidor, web e tipos compartilhados, por fases com testes.
- 02
Migração de banco
Backup antes de migrar e hash de cada migração.
- 03
Offline
Service worker, fila e cópia local, com reenvio seguro em lote.
- 04
Duas câmeras
O iPhone procura a outra câmera ao abrir.
- 05
Guarda de acesso local
Lista de hosts permitidos, recusa de requisições cross-site e IPs validados por inteiro.
§4Resultado
Em produção no meu servidor em casa (web e API). Todas as etapas do plano, incluindo o app do relógio e as duas câmeras, foram concluídas e testadas com quem usa o relógio. O compartilhamento do card já foi testado num iPhone de verdade e funciona.
§5Stack
- Next.js 16
- React 19
- TypeScript 7
- Tailwind 4
- Zustand
- SQLite (better-sqlite3)
- ffmpeg
- SwiftUI / watchOS
- pm2
- Tailscale