Monodyssée — Plateforme web solidaire
Plateforme web pour un tour d'Europe à vélo de 7 800 km streamé sur Twitch — vitrine solidaire, bingo du live et statistiques du voyage.
La Monodyssée est un tour d'Europe à vélo de 7 800 km sur 4 mois, streamé quotidiennement sur Twitch par Mono. L'objectif : lever des fonds pour la Ligue contre le cancer et sensibiliser à la cause, notamment l'accompagnement des aidant·es. Chaque jour de live, une communauté de viewers suit l'aventure, fait des dons et participe à des animations interactives. J'ai conçu et déployé la plateforme web qui soutient cette opération : vitrine du projet, outils d'engagement du tchat et tableau de bord des statistiques du voyage.
Mon rôle
Développement full-stack de l'application Symfony hébergée en production derrière nginx, de la conception des fonctionnalités à l'infrastructure Docker et aux scripts de déploiement.
Points clés
- Site en production sur monodyssee.fr
- Bingo collaboratif en temps réel pour des centaines de viewers Twitch
- Statistiques du voyage sur 121 jours de stream et 7 800 km
- Stack conteneurisée avec scripts de déploiement et bootstrap automatisés
Stack technique
- PHP 8.4, Symfony 7.4, typage strict PHPStan niveau max
- Doctrine ORM 3, migrations versionnées, EasyAdmin
- Twitch OAuth (authenticator custom), Steam OpenID
- Cache dédié pour l'état du bingo (grilles, bans, activité)
- Docker Compose (dev + prod), MySQL 8, Elasticsearch, nginx
- Twig, CSS custom, Chart.js, HTMX
Intégrations tierces
- Twitch OAuth — authentification des participants au bingo (state CSRF, provisioning utilisateur, session dédiée)
- API externe de leaderboard — classement des équipes solidaires
- Steam OpenID — modules personnels (calendrier de jeux, liste d'amis, wishlist)
Front-office (entreprises)
- Vitrine solidaire — présentation du périple, de la cause et liens vers la cagnotte, Twitch et le bingo du live (SEO et accessibilité)
- Bingo du live — grille unique quotidienne (25 cases), régénérée à minuit (fuseau Europe/Paris), connexion via compte Twitch
- Bingo du live — API REST collaborative (/bingoBot/api/state, /bingoBot/api/toggle) pour cocher/décocher les cases en temps réel
- Bingo du live — modération (exclusion temporaire d'un joueur), journal d'activité, état persisté en cache avec versioning
- Statistiques du voyage — profil de progression sur 7 800 km (dénivelé), viewers quotidiens, heures vues cumulées (Chart.js)
- Classement solidaire — intégration d'une API externe de leaderboard pour les équipes participantes à la collecte
Back-office (administration)
- EasyAdmin — gestion des entités de l'application
Développements majeurs
- Architecture backend modulaire — services, DTO typés, repositories Doctrine
- Intégration Twitch OAuth — flux complet pour l'authentification des participants au bingo
- Mise en production — stack Docker autonome, rotation des secrets BDD, reverse proxy nginx
- Interface responsive — charte Monodyssée (ruban orange, identité Ligue contre le cancer)
- Application multi-contexte — routage par host (monodyssee.fr) pour la vitrine publique et modules internes sur la même codebase
Enjeux & défis
- État partagé en live — bingo collaboratif où des centaines de viewers modifient la même grille sans conflit, avec invalidation journalière et gestion des abus
- Authentification Twitch sans friction — flux OAuth complet (state CSRF, provisioning utilisateur, session dédiée au bingo)
- Déploiement production — stack conteneurisée derrière nginx, secrets BDD générés, scripts de diagnostic et bootstrap automatisés
- Séparation des contextes — une seule codebase Symfony pour le site public Monodyssée et les outils internes, avec matchers de host et firewalls distincts