Application web et mobile complète de gestion d'un club de football amateur. 4 espaces utilisateurs distincts, une API REST partagée, une app Flutter native.
Arceaux FC est une association loi 1901 basée à Montpellier, regroupant 54 licenciés répartis sur 5 équipes (U11 à Seniors). La gestion du club reposait entièrement sur du papier et des tableurs Excel. J'ai conçu et développé de A à Z une solution numérique complète pour moderniser leur fonctionnement.
Le projet se compose d'une application web Symfony 8 avec 4 espaces distincts selon le profil utilisateur, et d'une application mobile Flutter consommant la même API REST. Chaque espace est pensé pour les besoins spécifiques de ses utilisateurs : administration, entraîneurs, joueurs et le grand public.
Une seule application, quatre interfaces — chacune adaptée aux besoins de son profil.
Vitrine du club accessible sans connexion.
Tableau de bord complet pour la direction du club.
Interface dédiée aux 5 entraîneurs du club.
Interface mobile-first pour les 54 licenciés et leurs parents.
Le tableau de bord centralise les indicateurs clés du club : joueurs actifs, cotisations, prochains matchs et graphique Chart.js des présences.
L'interface coach permet de gérer l'effectif de son équipe, saisir les présences, suivre les blessures et rédiger des notes tactiques par joueur.
Interface mobile-first dédiée aux 54 licenciés : convocations, résultats, cotisation et gestion du profil. Accessible aussi nativement via l'application Flutter.
L'application mobile offre un accès natif Android et iOS à l'espace joueur, connectée à la même API REST que l'application web.
Envoi de notifications Firebase (FCM) lors des convocations aux matchs et entraînements.
Cache local via Hive pour consulter les convocations et résultats sans connexion internet.
Gestion d'état avec Riverpod, routing avec GoRouter, appels API asynchrones avec Dio.
Un projet de grande envergure construit de A à Z en solo.
Une stack moderne full-stack — Symfony 8 côté web, Flutter côté mobile, tout connecté via API Platform.
Les deux situations professionnelles présentées lors de l'épreuve E6 sont disponibles en téléchargement.
Développement d'une application web complète pour l'Arceaux FC Montpellier, association loi 1901 comptant plus de 300 licenciés répartis en 13 catégories (U6 à Sénior Féminine). L'objectif : remplacer la gestion papier et les tableurs Excel par une solution numérique centralisée.
4 espaces : Public, Joueur/Parent (ROLE_PLAYER), Entraîneur (ROLE_COACH), Back-office Admin (ROLE_ADMIN + ROLE_TREASURER).
Hiérarchie : ROLE_PRESIDENT → ROLE_ADMIN → [ROLE_COACH, ROLE_TREASURER]. Invitations par token unique.
Consentement parental obligatoire pour les mineurs. Droit à l'oubli (suppression ou anonymisation des données). Journal des consentements horodaté.
Génération automatique de convocations par match. Envoi batch d'emails avec confirmation de lecture. 770+ convocations générées en fixtures.
Calendrier interactif avec drag & drop pour reprogrammer les matchs. Vue mensuelle/hebdomadaire. Synchronisation temps réel avec la base de données.
Historique complet des modifications sur les entités critiques (joueurs, cotisations). Traçabilité des actions admin avec horodatage.
Export CSV et PDF de la liste des joueurs. Dashboard avec graphique Chart.js des présences aux entraînements par équipe.
Extension mobile native développée en Flutter/Dart pour Android et iOS. L'application consomme l'API REST Symfony 8 via authentification JWT et Firebase Cloud Messaging pour les notifications push, offrant aux licenciés un accès natif à leur espace depuis leur smartphone.
Firebase Cloud Messaging (FCM) pour les alertes en temps réel : nouvelles convocations, événements du club, messages et mises à jour importantes.
Messagerie interne entre licenciés du club. Communication directe entre joueurs, parents et entraîneurs au sein de l'application.
Actualités du club, calendrier des événements et suivi des blessures. Centralisation de l'information sportive pour joueurs et entraîneurs.
Les technologies clés utilisées dans ce projet, expliquées dans le contexte d'Arceaux FC.
Symfony est un framework PHP open-source qui suit le pattern MVC (Modèle-Vue-Contrôleur). Il structure le code en couches séparées, accélère le développement grâce à ses composants réutilisables et impose de bonnes pratiques (injection de dépendances, services, événements).
Bootstrap est un framework CSS/JS qui fournit un système de grille responsive et des composants UI pré-stylisés (boutons, modals, tableaux, alertes…). Il accélère le développement frontend en évitant d'écrire du CSS répétitif.
Docker permet d'empaqueter une application et toutes ses dépendances dans un conteneur isolé,
garantissant un comportement identique en développement, en test et en production.
Le fichier docker-compose.yml orchestre plusieurs services ensemble.
php (PHP 8.4-FPM),
nginx (serveur web), mariadb (base de données),
mailcatcher (emails en dev).Le RGPD encadre le traitement des données personnelles dans l'Union Européenne depuis mai 2018. Pour Arceaux FC, gérant des données de mineurs (joueurs U11-U15), la conformité était une exigence non négociable du projet.
Une API REST (Representational State Transfer) expose les ressources de l'application via des endpoints HTTP standardisés. L'application Flutter consomme cette API pour accéder aux mêmes données que l'app web, sans dupliquer la logique métier.
GET /api/players,
GET /api/matches, GET /api/convocations/me,
PATCH /api/players/{id}. Chaque ressource est paginée et filtrée./api/docs, permettant de tester tous les endpoints directement dans le
navigateur.JWT (JSON Web Token) est un standard d'authentification stateless : le serveur génère un token signé contenant les informations de l'utilisateur, que le client envoie à chaque requête API. Contrairement aux sessions, le serveur n'a pas besoin de stocker l'état de connexion.
POST /api/login_check avec email+password. 2. Symfony valide et retourne
{"token": "eyJ..."}. 3. Flutter stocke le token (flutter_secure_storage). 4.
Chaque requête inclut Authorization: Bearer {token}.security.yaml avec les
firewalls et access_control.