Création d'une plateforme de gestion pour une association sportive
AGFC
Football corporatif, Genève
Championnat, sanctions, qualifications de joueurs, indemnités d'arbitrage : le fonctionnement de l'association tient dans cinq documents et environ 127 articles, appliqués de tête par des bénévoles. Nous en avons fait le comportement du logiciel.
Logiciel de gestion sur mesure
Multilingue et conformité suisse
Tests automatisés de bout en bout
Django REST Framework
React
PostgreSQL / PostGIS
Celery
WeasyPrint
Contexte et enjeux
L'association fait vivre un championnat avec ses feuilles de match, ses suspensions, ses protêts, ses qualifications de joueurs et ses indemnités d'arbitrage. Tout est écrit : règlement de jeu, statuts, football à 7, tournoi en salle, instructions diverses.
Écrit, donc à retrouver. Chaque décision supposait qu'un bénévole remette la main sur le bon article, l'applique correctement, puis répercute la conséquence dans le classement, les indemnités et les convocations.
Une erreur en début de chaîne se propageait sans que personne ne la voie passer, et se rattrapait des semaines plus tard, quand un club s'en apercevait.
S'ajoutait une contrainte suisse : trois langues officielles, des données qui restent dans le pays, et des documents officiels à produire au format attendu.
Ce qu'on a fait
Faire du règlement la source unique
Approche : spécifier chaque règle à partir de son article
Les cinq documents de l'association servent de référence. Chaque règle est écrite à partir de son article, codée, puis couverte par des tests qui échouent si elle se casse. Quand l'article change, la règle change, et non l'interprétation retenue l'an dernier.
Construire des chaînes plutôt que des écrans
Focus : la conséquence part avec l'événement
Une feuille de match validée termine le match, met à jour le classement, déclenche les indemnités d'arbitrage et prévient les clubs. Une licence suspendue bloque l'alignement du joueur partout où il pourrait être aligné. Une équipe placée dans une ligue recalcule le classement et garde la trace de la demande.
Héberger en Suisse et parler trois langues
Technologies : Django 5, React, PostgreSQL avec PostGIS, WeasyPrint
Interface en français, allemand et italien, du serveur jusqu'aux écrans. Cartographie des terrains, documents officiels générés en PDF, hébergement suisse et conformité nLPD.
Vérifier les chaînes au lieu de les supposer
Durée : chantier pluriannuel, livré par vagues
Un audit interne mené en août 2026 a cherché les enchaînements rompus entre deux écrans, et nous les avons réparés un par un. La suite compte 1 589 tests automatisés au vert.
Conclusion
Le comité constate au lieu de recalculer. Le travail du bénévole redevient de la décision, plus de la saisie.
Le point qui compte à long terme est ailleurs : le règlement écrit est devenu le comportement du logiciel. Une association gouvernée par des bénévoles ne peut pas reposer sur la mémoire de trois personnes, et celle-ci n'en dépend plus.
La plateforme est construite pour accueillir d'autres associations du même type. Les règles changent, la charpente reste.
Ce que ça a changé
Quand le comité change, l'association ne repart pas de zéro. Les règles qu'elle applique sont écrites, testées, et ne dépendent plus de qui était là l'année d'avant.
Détails techniques
Django 5 et Django REST Framework côté serveur, React et TanStack Query côté interface.
PostgreSQL avec PostGIS pour la géolocalisation des terrains, Redis et Celery pour les traitements différés.
Traductions français, allemand et italien côté serveur comme côté interface.
Documents officiels générés en PDF avec WeasyPrint.
Hébergement en Suisse, conformité nLPD.
Un projet similaire ?
Discutons de vos enjeux et voyons ce qui pourrait vous faire gagner du temps chez vous.