Il problema
Chi segue il calcio vuole un gioco da fare con gli amici per tutta la stagione. Non deve essere una scommessa, e nemmeno un foglio di calcolo che gira per email. Ho creato TotoCampionato la prima volta per la stagione di Serie A 2006/2007, in ASP classico, e in seguito ne ho fatto una versione che girava dentro Facebook. Nel 2026 l’ho rifatto da zero, perché una sola piattaforma possa gestire le competizioni per club di un’intera stagione, non un solo torneo.
Cosa ho costruito
Un gioco di pronostici in Node.js: i giocatori compilano una schedina per ogni partita e si sfidano in leghe che creano loro stessi.
- 9 coupon per partita: risultato finale, risultato del primo tempo, goal/no goal, under/over 2,5, rigori totali, primo tempo/finale, pari/dispari, risultato esatto e gol totali. I punti seguono le quote, quindi un pronostico coraggioso azzeccato vale più di uno scontato.
- Leghe su qualsiasi competizione: 8 competizioni sono già pronte, dalla Serie A e dalla Premier League alla Champions League e ai Mondiali 2026. Gli amministratori di lega gestiscono iscritti, premi, un banner, una barra di notizie e una chat.
- Fantacalcio: squadre fantasy composte da giocatori e allenatori veri, con regole di punteggio ed eventi delle partite gestiti dal pannello di amministrazione. I giocatori compaiono come figurine da collezione.
- Missioni degli sponsor: lo sponsor di una lega può proporre delle missioni, gli iscritti caricano uno screenshot come prova e l’amministratore della lega lo verifica. Così anche le leghe piccole trovano dei premi.
- Partite gestite in automatico: ogni minuto l’app blocca le partite iniziate; ogni 30 secondi scarica i dati live da API-Football; i punti si calcolano senza che nessuno debba inserire i risultati.
- Cinque lingue: italiano, inglese, francese, tedesco e spagnolo.
- Pannello di amministrazione: utenti, leghe, quote, risultati, modelli per invii email di massa, una casella di posta e backup programmati del database e dell’app.
Con cosa è fatto
Node.js 20, Express 4, template EJS, MySQL, Passport con accesso Google, bcrypt, Nodemailer e ImapFlow per la posta, Multer per i caricamenti. Gira su Phusion Passenger in un hosting cPanel condiviso, con i dati delle partite presi da API-Football.
Perché è fatto così
Non ho scritto un’app nuova. Sono partito da TotoMondiale, il mio gioco per i Mondiali, perché il suo motore di punteggio, il sistema delle leghe e il pannello di amministrazione avevano già retto un torneo intero. Così ho potuto dedicare il tempo a quello che serve per una stagione: più competizioni insieme, il fantacalcio e gli strumenti per gli sponsor.


