O problema
Todo mundo acha que sabe adivinhar o tempo. A ideia por trás do Totometeo era transformar isso em um jogo disputado em ligas, no estilo do bolão de futebol TotoMondiale: os jogadores preveem o tempo de uma cidade em um horário definido, e os dados reais decidem quem pontua. O jogo precisa funcionar sozinho: fechar os palpites na hora certa, buscar o tempo real, calcular os pontos e atualizar as classificações, sem ninguém fazendo isso à mão.
O que eu construí
Construí o Totometeo, um jogo online de previsão do tempo com ligas públicas e privadas e pontuação automática a partir de dados meteorológicos reais.
- Ligas — os jogadores criam ligas públicas ou privadas e convidam amigos com um código de 6 caracteres que exclui caracteres parecidos, como I, O, 0 e 1. Uma liga geral reúne todos.
- Rodadas e palpites — cada rodada contém eventos meteorológicos com cidade, horário e prazo. Para cada evento, o jogador prevê a condição do céu, a temperatura, se vai chover ou não, os milímetros de chuva, a velocidade do vento e, opcionalmente, um evento raro como granizo ou vento forte. Os palpites podem ser alterados até o prazo; depois, ficam travados.
- Dados meteorológicos reais — após o evento, o app lê os valores horários do Open-Meteo e recorre ao arquivo histórico se faltarem os dados de previsão. Os códigos meteorológicos da WMO são mapeados para as 7 condições do jogo, e os eventos raros são detectados a partir dos dados, por exemplo vento de 50 km/h ou mais.
- Motor de pontuação — 10 regras de pontuação e 2 tolerâncias, de 5 pontos pela condição exata a um bônus de 10 pontos por evento raro. Cada pontuação é salva com seu detalhamento, para que o jogador veja exatamente de onde vieram os pontos.
- Automação — um job agendado fecha os eventos vencidos a cada minuto; outro, a cada 15 minutos, busca o tempo real e pontua até 25 eventos por ciclo.
- Classificações e administração — classificações por liga, geral e histórica, e um painel de administração para rodadas, eventos, coleta de dados meteorológicos, pontuação, regras, usuários e ligas, com um log das ações administrativas.
Com o que foi feito
Node.js e Express com páginas EJS renderizadas no servidor. MySQL ou MariaDB via o ORM Prisma, com 10 modelos de dados. Sessões com express-session e senhas com hash bcrypt. Jobs agendados com node-cron, processos gerenciados pelo PM2 atrás do Nginx. Os dados meteorológicos vêm do Open-Meteo, que não exige chave de API.
Por que foi feito assim
As regras de pontuação ficam no banco de dados, não no código. Os valores padrão da especificação do jogo são carregados uma vez na instalação, e depois o administrador pode alterar pontos e tolerâncias pelo painel, sem um novo release. Como cada pontuação guarda o seu detalhamento, qualquer mudança nas regras continua transparente para os jogadores.


