Informations
- Client
- Union Romande de Gymnastique
- Catégories
- Applications Web Création Web
- Technologies
- Laravel 13 Livewire 4 Alpine.js Tailwind CSS 4 MariaDB Redis DOMPDF QR Bill suisse Maatwebsite Excel SortableJS Vite
L'Union Romande de Gymnastique (URG) organise chaque année des dizaines de concours réunissant des clubs de toute la Suisse romande. Cette plateforme couvre l'intégralité du cycle de vie d'un concours : de sa création par l'organisateur jusqu'à la remise des classements et des diplômes, en passant par la facturation. Quatre rôles distincts structurent l'application : gestionnaire de club, organisateur, caissier et administrateur.
Les clubs s'inscrivent via un assistant en 4 étapes, gèrent leur fichier de gymnastes (avec suppression logique pour préserver l'historique), constituent des groupes et uploadent leurs musiques directement sur la plateforme. L'application applique automatiquement les règles d'éligibilité du règlement FSG : critères d'âge et de genre, règle du tiers toléré pour les groupes, calcul de catégorie pour les couples basé sur la gymnaste la plus âgée. La durée de chaque morceau est extraite automatiquement du fichier audio. Les musiques sont stockées sur un disque privé et streamées de manière sécurisée, authentification requise.
Les organisateurs disposent d'un tableau de bord complet. L'architecture supporte les concours mixtes (container/enfant) : un concours parent regroupe un concours individuel et un concours société, avec héritage des paramètres de configuration. Les catégories intègrent les tests FSG prédéfinis (T1–T8, deux fédérations), les tarifications par paliers et les critères d'éligibilité fins. Des co-organisateurs peuvent être invités par email pour partager la gestion. Les inscriptions validées déclenchent automatiquement un email de confirmation avec récapitulatif.
Le planning se construit par drag & drop avec recalcul automatique des horaires à chaque déplacement. Un ordonnanceur automatique peut générer une proposition de planning initiale. Les exports couvrent toutes les parties prenantes : PDF planning pour les clubs, ZIP des musiques par bloc pour la régie son, feuilles de notation pour les juges, listes des passages, vérification des gaps entre blocs, récapitulatifs journaliers.
Le module de scoring permet la saisie des notes par des collèges de 3 ou 5 juges, organisés en panneaux configurables par drag & drop. L'interface de saisie est optimisée pour le clavier (tabindex, auto-correction). La formule FSG est appliquée intégralement : NOTE-T (critères techniques pondérés), NOTE-P (critères de présentation), déductions incidents, trimmed mean à 5 juges. Les classements par catégorie et généraux sont mis en cache et actualisés à chaque nouveau score. Des écrans défilants peuvent être projetés en salle.
Pour les salles sans connexion, un package offline portable est généré et téléchargeable : un ZIP auto-extractible contenant PHP portable, SQLite et une interface web locale. Le scoring s'effectue hors ligne et les résultats sont réimportés sur la plateforme dès le retour de la connexion.
La facturation génère des factures par club avec QR bill suisse (norme ISO 11649) intégré. Les lignes de facturation distinguent passages, frais d'inscription et garantie, avec paliers de tarification pour les sociétés et pivot adultes/enfants. Les factures sont envoyées par email de manière asynchrone. Un rôle caissier dédié offre une vue restreinte à la seule gestion de la facturation. Les diplômes sont générés automatiquement à partir de templates personnalisables (fond, typographies, champs variables).
Les clubs et organisateurs reçoivent des rappels automatiques par email : musiques manquantes 7 jours avant la deadline, relances facturation. Les inscriptions juges sont collectées via un formulaire public (sans compte), avec gestion admin et calcul des besoins par catégorie. Un système d'impersonation permet à l'administration d'intervenir en support directement dans le compte d'un utilisateur.
L'application est construite sur Laravel 13 / PHP 8.5 avec Livewire 4 pour les composants réactifs, Alpine.js pour l'interactivité légère et Tailwind CSS 4 pour le style. La politique de sécurité des contenus (CSP) est appliquée en mode strict : aucun script inline, nonces par requête, tous les composants Alpine enregistrés centralement. L'application tourne en production sur hébergement mutualisé (sans Redis), avec scheduler déclenché par webhook externe et files d'attente sur base de données. Une suite de tests Feature et Unit couvre les modèles, services et composants Livewire.
Ce que ce projet illustre de notre expertise
- Application intégrale du règlement FSG : critères d'éligibilité (âge, genre, règle du tiers toléré), formule de scoring NOTE-T/NOTE-P avec trimmed mean à 5 juges
- Architecture multi-concours parent/enfant avec héritage de configuration et gestion de 4 rôles distincts
- Planning drag & drop avec recalcul automatique des horaires et ordonnanceur automatique
- Mode offline portable : ZIP auto-extractible (PHP + SQLite) pour scorer sans connexion, réimport différé
- Facturation QR bill suisse (ISO 11649) générée et envoyée par email de façon asynchrone
- Politique CSP stricte en production : aucun script inline, nonces par requête, composants Alpine enregistrés centralement
- Streaming sécurisé des musiques depuis un disque privé et extraction automatique de la durée audio
Galerie