O problema
Os torcedores de futebol querem um jogo para disputar com os amigos durante a temporada inteira. Não deve ser aposta, nem uma planilha que circula por e-mail. Criei o TotoCampionato pela primeira vez para a temporada 2006/2007 da Serie A, em ASP clássico, e depois fiz uma versão que funcionava dentro do Facebook. Em 2026 eu o reconstruí do zero, para que uma única plataforma possa gerenciar competições de clubes durante uma temporada inteira, e não apenas um torneio.
O que eu construí
Um jogo de palpites em Node.js em que os jogadores preenchem uma cartela para cada partida e competem em ligas criadas por eles mesmos.
- 9 palpites por partida: resultado final, resultado do primeiro tempo, gol/sem gol, menos/mais de 2,5 gols, total de pênaltis, intervalo/final, par/ímpar, placar exato e total de gols. Os pontos seguem as odds, então um acerto ousado vale mais do que um óbvio.
- Ligas em qualquer competição: 8 competições já vêm prontas, da Serie A e da Premier League à Champions League e à Copa do Mundo de 2026. Os administradores da liga gerenciam membros, prêmios, um banner, um letreiro de notícias e um chat.
- Camada de fantasy: times de fantasy montados com jogadores e técnicos reais, com regras de pontuação e eventos das partidas gerenciados pelo painel de administração. Os jogadores aparecem como cartas no estilo colecionável.
- Tarefas de patrocinadores: o patrocinador de uma liga pode definir tarefas, os membros enviam uma captura de tela como prova e o administrador da liga faz a avaliação. Assim, até as ligas pequenas conseguem encontrar prêmios.
- Fluxo automático das partidas: a cada minuto o app bloqueia as partidas que já começaram; a cada 30 segundos busca dados ao vivo na API-Football; os pontos são calculados sem que ninguém precise digitar resultados.
- Cinco idiomas: italiano, inglês, francês, alemão e espanhol.
- Painel de administração: usuários, ligas, odds, resultados, modelos de e-mail em massa, uma caixa de entrada de e-mails e backups agendados do banco de dados e do app.
Com o que foi feito
Node.js 20, Express 4, templates EJS, MySQL, Passport com login do Google, bcrypt, Nodemailer e ImapFlow para o e-mail, Multer para os uploads. Roda no Phusion Passenger em hospedagem compartilhada cPanel, com dados das partidas da API-Football.
Por que foi feito assim
Não escrevi um app novo. Fiz um fork do TotoMondiale, meu jogo da Copa do Mundo, porque o motor de pontuação, o sistema de ligas e o painel de administração dele já davam conta de um torneio inteiro. Assim pude dedicar o tempo ao que uma temporada exige: várias competições ao mesmo tempo, um jogo de fantasy e ferramentas para patrocinadores.


