← Tous les projets
// étude de cas · 2026
La compagnie des archers des Albères
Symfony
PHP
PostgreSQL
Doctrine ORM
Docker
PHPUnit
GitHub
Twig
PHPStan
PHP-CS-Fixer
Railway
FrankenPHP
01Le besoin
La Compagnie des Archers des Albères est un club de tir à l'arc associatif, fondé en 1991 à Sorède. Son ancien site était devenu difficile à maintenir : une interface vieillissante, et surtout aucune administration simple. Chaque actualité ou nouvelle photo demandait de passer par quelqu'un qui savait coder.
L'objectif : un site moderne que les bénévoles du club mettent à jour eux-mêmes, sans moi.
02Mes choix techniques
- Symfony 7.4 / PHP 8.4, PostgreSQL et Twig : un site vitrine rendu côté serveur, rapide et bien référencé, sans complexité inutile pour un club.
- Back-office EasyAdmin 5, au thème sombre aux couleurs du club : actualités par catégorie (podiums, événements, vie du club), albums photo, partenaires, horaires, tarifs, histoire du club et documents PDF (statuts, inscription, santé, règlement).
- Import groupé de photos pour la galerie : au retour d'une compétition, le club envoie toutes ses photos en une fois.
- Pages publiques pensées pour mobile : menu hamburger, slider d'accueil qui gère photos portrait et paysage avec un fond flou, partenaires en pied de page sur toutes les pages.
- Sécurité : rôles, limitation des tentatives de connexion, réinitialisation du mot de passe par e-mail en français.
03La difficulté
La mise en production sur Railway, où tout ce qui marchait en local a cassé l'un après l'autre.
- Les e-mails de réinitialisation de mot de passe ne partaient pas : Railway bloque le SMTP sortant. Je suis passé par l'API HTTP de Brevo, qui passe là où le SMTP est filtré.
- L'envoi de plusieurs photos d'un coup déconnectait l'administrateur. La cause était un simple avertissement PHP (limite max_file_uploads atteinte) envoyé avant les en-têtes HTTP, ce qui empêchait la session de s'enregistrer. J'ai fixé les limites d'upload dans l'image Docker (nombre de fichiers, taille, mémoire) pour que l'import groupé tienne la route.
- Les photos disparaissaient à chaque redéploiement : elles vivaient dans le conteneur. Je les ai déplacées sur un volume persistant Railway.
- Les liens générés sortaient en http derrière le proxy Railway : réglé en déclarant les proxies de confiance.
Chaque problème a donné un commit dédié et lisible, ce qui rendra le prochain déploiement beaucoup plus simple.
04Le résultat
- En ligne sur archers-des-alberes.fr, livré à un vrai client et administré par le club en autonomie.
- PHPStan niveau 7, une soixantaine de tests PHPUnit (fonctionnels, contrôleurs, dépôts), Rector et php-cs-fixer.
- CI GitHub Actions avec les tests exécutés sur une vraie base PostgreSQL.