Ligue 1 Pronos
Le jeu de pronostics de 20 amis, sur toute la saison. Le tableur Excel rempli à la main est devenu une application : chacun joue sur son téléphone, les scores et le classement arrivent seuls.



- 20
- joueurs, tous amis
- 34
- journées de championnat
- 306
- matchs pronostiqués dans la saison
- 2 min
- entre deux mises à jour des scores
Un tableur Excel rempli à la main
Avant l’application, je faisais jouer le groupe avec un tableur Excel que j’avais construit moi-même. Les formules calculaient les points et le classement. Tout le reste passait par moi.
- Saisir à la main les pronostics de chaque joueur, match après match
- Saisir à la main les résultats après chaque rencontre
- Programmer la publication des pronostics avant chaque coup d’envoi, pour que personne ne puisse tricher ni modifier son choix après coup, au risque d’un retard ou d’un oubli
- Construire le tableur : colonnes, logos des équipes, formules de points et de bonus
- Envoyer le classement au groupe une fois la journée calculée


Pour la Coupe du monde 2026, j’ai franchi une première étape avec Google Sheets et un script Google, branchés sur une API de scores. Cela marchait bien. Mais une saison entière de Ligue 1 représente plus de 6 000 pronostics, et un tableur n’est pas fait pour servir une application. J’ai donc choisi Firebase, une base de données conçue pour ça.
Ce qui a changé
Ce que les joueurs utilisent
Des pronostics simples
Trois boutons 1, N ou 2 pour 8 matchs de la journée, et un score exact pour le match du dimanche soir. Quelques journées de la saison restent en score exact.
Le joker et les bonus
Un joker qui double les points d’une journée, des bonus de 1 à 10 points pour 6, 7, 8 ou 9 bons pronostics, un bonus de fin de saison sur le top 4, et des points doublés sur le match spécial pour les derniers du classement.
Un classement vivant
Podium, courbe d’évolution des positions, flèches de progression et séries. Le classement bouge pendant les matchs.
Comparer et se chambrer
Comparer ses pronostics avec ceux des autres, duel entre deux joueurs, chat du groupe avec réactions.
Le calendrier des 34 journées
Les horaires reflètent automatiquement les matchs avancés ou reportés. Si le match du dimanche soir est décalé, je choisis en un clic quel match devient le match spécial.
Installable sur le téléphone
Connexion avec un compte Google, icône sur l’écran d’accueil, notifications de fin de journée.
L’application en images
Cliquez sur une capture pour l’agrandir.
Une journée de match
- Avant le coup d’envoiChacun pronostique les matchs. Chaque match se verrouille tout seul à son coup d’envoi, le joker aussi.
- Pendant les matchsLes scores arrivent toutes les 2 minutes. Le classement provisoire se met à jour et chaque bon pronostic s’affiche en direct.
- Quand les 9 matchs sont terminésL’application calcule les points de tous les joueurs. Je n’ai rien à lancer.
- Dans la fouléeLe chat annonce le vainqueur de la journée et les joueurs qui profitent du bonus de relégation, et les téléphones reçoivent une notification.
Comment c’est construit
- Interface
- HTML, CSS et JavaScript, sans framework
- Comptes et données
- Firebase : connexion Google et base de données Firestore
- Hébergement
- Netlify, avec une fonction planifiée toutes les 2 minutes pour les scores
- Matchs et scores
- API football-data.org
- Mobile
- Application installable et notifications chiffrées (Web Push)
- Sécurité
- La clé de l’API de scores reste côté serveur, jamais dans le navigateur. Des règles d’accès empêchent un joueur de modifier les pronostics des autres
- Tests
- 68 vérifications des règles d’accès à la base, 13 scénarios de récupération des scores rejoués, et des tests du calcul des points
- Versions
- Plus de 100 mises à jour publiées depuis le lancement
Ce que ce projet m’a appris
- Tester sur le terrain. Une fois en ligne, les joueurs ont fait remonter des cas que je n’avais pas imaginés : un match joué à l’envers, un score refusé, un pronostic laissé vide. J’ai ajouté des outils pour les corriger sans toucher à la base.
- Associer les données par identifiant. Lors de la 8e journée, la base a dépassé son quota gratuit de lectures. La récupération des scores est alors revenue à l’ordre de la liste, et des scores ont atterri dans les mauvais matchs. Désormais, chaque match est reconnu par son identifiant propre, et ce scénario est rejoué dans les tests.
- Économiser ce qui est gratuit. La vérification tourne toutes les 2 minutes. Quand aucun match n’a commencé, elle ne fait qu’une lecture. Une journée déjà terminée en demande 2 au lieu de 11.
- Prévoir les ratés de la source. Il arrive que l’API laisse un match « en cours » bien après la fin. Un match qui a un score et dont le coup d’envoi date de plus de 2 h 30 est alors considéré comme terminé. Les matchs reportés ou arrêtés ne sont jamais forcés.
- Penser à l’écran du téléphone. Sur iPhone, un champ de saisie trop petit déclenche un zoom. Tous les champs sont réglés pour l’éviter.
- Regrouper les mises en ligne. Publier 17 fois dans la même journée a épuisé le quota gratuit de l’hébergeur. Je regroupe maintenant les changements.