El problema
Los aficionados al fútbol quieren un juego para disfrutar con sus amigos durante toda la temporada. No debe ser una casa de apuestas ni una hoja de cálculo que circula por correo electrónico. Creé TotoCampionato por primera vez para la temporada 2006/2007 de la Serie A en ASP clásico, y más tarde hice una versión que funcionaba dentro de Facebook. En 2026 lo reconstruí desde cero para que una sola plataforma pueda gestionar competiciones de clubes durante toda una temporada, no solo un torneo.
Lo que construí
Un juego de pronósticos en Node.js en el que los jugadores rellenan una quiniela para cada partido y compiten en ligas que crean ellos mismos.
- 9 cupones por partido: resultado final, resultado al descanso, gol/no gol, más/menos de 2,5, total de penaltis, descanso/final, par/impar, resultado exacto y total de goles. Los puntos siguen las cuotas, así que un acierto valiente vale más que uno obvio.
- Ligas sobre cualquier competición: 8 competiciones listas desde el primer momento, de la Serie A y la Premier League a la Champions League y el Mundial 2026. Los administradores de cada liga gestionan miembros, premios, un banner, un teletipo de noticias y un chat.
- Capa de fantasy: equipos fantasy formados con jugadores y entrenadores reales, con reglas de puntuación y eventos de partido gestionados desde el panel de administración. Los jugadores aparecen como cromos coleccionables.
- Tareas de patrocinadores: el patrocinador de una liga puede proponer tareas, los miembros suben una captura de pantalla como prueba y el administrador de la liga la revisa. Así las ligas pequeñas tienen una forma de conseguir premios.
- Flujo automático de partidos: cada minuto la app bloquea los partidos que han empezado; cada 30 segundos descarga datos en directo de API-Football; los puntos se calculan sin que nadie tenga que introducir resultados.
- Cinco idiomas: italiano, inglés, francés, alemán y español.
- Panel de administración: usuarios, ligas, cuotas, resultados, plantillas de correo masivo, una bandeja de entrada y copias de seguridad programadas de la base de datos y de la app.
Con qué está hecho
Node.js 20, Express 4, plantillas EJS, MySQL, Passport con inicio de sesión de Google, bcrypt, Nodemailer e ImapFlow para el correo, Multer para las subidas. Funciona sobre Phusion Passenger en un alojamiento compartido cPanel, con datos de partidos de API-Football.
Por qué se hizo así
No escribí una app nueva. Partí de un fork de TotoMondiale, mi juego del Mundial, porque su motor de puntuación, su sistema de ligas y su panel de administración ya habían gestionado un torneo completo. Eso me permitió dedicar el tiempo a lo que necesita una temporada: varias competiciones a la vez, un juego fantasy y herramientas para patrocinadores.


