Club Subaquatique des Vénètes : Application web

Réalisé en 2026

Calendrier des sorties et événements

Calendrier des sorties et événements

Catégorie

Sur-Mesure

Client

Club subaquatique des Vénètes

Technologies

Symfony 8, PHP 8.4, MySql, PWA (Service Worker), Web Push (VAPID), Matomo Analytics

Description

Un club de plongée fondé en 1960 dont le site WordPress était devenu ingérable : plugins obsolètes, conflits bloquant les mises à jour, failles de sécurité, EcoIndex F (13/100) et des pages de 13 Mo. J'ai construit une application métier complète en Symfony 8 pour tout remplacer. Gestion des adhérents avec brevets FFESSM et CACI, calendrier d'événements avec inscriptions et liste d'attente automatique, 9 rôles fonctionnels combinés à 16 permissions granulaires, chat intégré par sortie, notifications push, listes de diffusion email avec modération et envoi throttlé, et PWA installable. Le nouveau site obtient un Lighthouse Performance de 99/100 et un EcoIndex A (81/100).

Contexte & Besoin

Le club subaquatique des Vénètes est l'un des plus anciens clubs de plongée de Bretagne, fondé le 1er mars 1960 à Vannes. Il propose plongée bouteille, apnée, sorties en mer dans le Golfe du Morbihan, et créneaux piscine hebdomadaires.


Le club avait un site WordPress qui était devenu ingérable : accumulation de plugins, conflits entre extensions rendant toute mise à jour impossible, vulnérabilités de sécurité non corrigeables. Les performances étaient catastrophiques :

  • 13,3 Mo par page, 207 requêtes HTTP, 1 313 éléments DOM
  • Speed Index de 21,7 secondes
  • Lighthouse Performance : 61/100, SEO : 54/100
  • EcoIndex : F (13/100), Website Carbon : F (plus polluant que 98% du web)

Mais le vrai problème n'était pas le site en lui-même. Le club avait besoin d'une application de gestion : gérer les adhérents, les inscriptions aux sorties, les certificats médicaux, les licences FFESSM, les cotisations, la communication interne. L'ancien site ne permettait pas de gérer les participants ni les places.


Pourquoi pas VPDive ?
VPDive est l'outil gratuit le plus répandu pour gérer un club de plongée FFESSM. Il couvre les bases : membres, documents, calendrier. Mais beaucoup de clubs se heurtent aux mêmes limites : interface datée, pas de version mobile installable, pas de notifications push, pas de chat entre participants, personnalisation très limitée. Le cahier des charges des Vénètes allait bien au-delà.





Solutions apportées

J'ai développé une application métier complète en Symfony 8, avec du CSS sur mesure.

Gestion complète des adhérents


Chaque membre a un profil avec ses niveaux de plongée, d'apnée et d'encadrement (hiérarchies entièrement configurables par l'admin), son numéro de licence FFESSM, et son certificat médical (CACI).

  • Certificats médicaux (CACI) : le membre uploade son certificat, le référent CACI le valide ou le rejette depuis un tableau de bord dédié avec 5 statuts visuels. Les rappels d'expiration sont envoyés automatiquement 30 jours avant. Les fichiers sont chiffrés au repos.
  • Licences FFESSM par QR code : le membre photographie sa carte de licence, l'application interroge le site fédéral et extrait automatiquement les données. Le référent voit 5 vérifications de conformité automatiques (nom, club, date, niveau, assurance) avant de valider.
  • Cotisations : suivi saisonnier calé sur le calendrier FFESSM (septembre-août), validation individuelle ou en lot.

Calendrier d'événements avec inscriptions


Les événements sont typés (sortie mer, piscine, théorie, baptême, social) avec des champs adaptés à chaque type. Une sortie en mer inclut le bateau, le pilote, et les conditions d'éligibilité par niveau.

  • Liste d'attente automatique : quand une sortie est complète, les inscriptions suivantes passent en liste d'attente. Si quelqu'un annule, le suivant est automatiquement promu et notifié.
  • Éligibilité par niveau : un N1 ne peut pas s'inscrire à une sortie réservée aux N2+. Les conditions sont dynamiques et configurables.
  • Événements récurrents : un créneau piscine hebdomadaire se configure une fois et génère les occurrences automatiquement.
  • Chat intégré par événement pour se coordonner (matériel, covoiturage, météo).

Listes de diffusion email


Un vrai gestionnaire de listes de diffusion intégré. Le président envoie un email à liste@plongee-venetes.fr, le système le distribue aux membres de la liste. Deux types de listes (discussion ou diffusion), trois politiques de publication (tout le monde, membres, expéditeurs sélectionnés), modération optionnelle.


Les listes se remplissent automatiquement selon le profil des membres : tous les plongeurs actifs, tous les apnéistes, tous les moniteurs, etc. Quand un membre change de statut ou de rôle, ses abonnements se mettent à jour automatiquement.

Notifications push et PWA


L'application est installable comme une app native sur téléphone (Android et iOS 16.4+). Les notifications push couvrent 7 types d'événements. Chaque utilisateur configure ses heures calmes (par défaut 22h-8h), les notifications sont mises en file d'attente et envoyées au réveil.


Les référents (CACI, licences, gestionnaire) reçoivent chaque matin un récapitulatif de ce qui attend leur action. S'il n'y a rien à faire, pas d'email.

9 rôles et 16 permissions


Pas juste "admin" et "membre". L'application distingue 9 rôles fonctionnels (super-admin, admin, directeur de plongée, gestionnaire, référent CACI, référent licences, rédacteur, gestionnaire de pages, membre), chacun avec des permissions précises. Un admin peut aussi attribuer des permissions individuellement, indépendamment du rôle.


Chaque rôle dispose d'un guide utilisateur intégré dans l'application, illustré et pas-à-pas.

CMS et blog


Un éditeur de pages par blocs (12 types de blocs : texte, image, galerie, vidéo, accordéon, CTA, widgets...), un blog avec catégories et tags, des galeries photos. La partie publique présente le club, ses formations, les tarifs (dynamiques par année) et un formulaire de contact.

Résultats obtenus

L'application est en production depuis le 11 mars 2026.

Performances mesurées (avant/après)

  • Lighthouse Performance : 61 vers 99/100
  • Lighthouse SEO : 54 vers 100/100
  • EcoIndex : F (13/100) vers A (81/100)
  • Website Carbon : F (pire que 98% du web) vers A+ (meilleur que 95%)
  • Poids de page : 13,3 Mo vers 0,322 Mo (divisé par 41)
  • Requêtes HTTP : 207 vers 16 (divisé par 13)
  • Speed Index : 21,7 s vers 1,3 s (divisé par 17)
  • First Contentful Paint : 4,3 s vers 0,9 s
  • Largest Contentful Paint : 5,6 s vers 1,4 s

Mesures Lighthouse sur la même machine, même connexion. Rapports PDF conservés.

Ce que ça a changé pour le club

  • Le référent CACI est notifié chaque matin des certificats à traiter. Les rappels d'expiration partent automatiquement. Plus de risque d'oubli avant une sortie.
  • Le calendrier avec inscriptions intégrées et liste d'attente automatique remplace la gestion manuelle des participants. Les désistements se gèrent tout seuls.
  • Les listes de diffusion email structurent la communication (bureau, moniteurs, plongeurs actifs) sans manipuler des listes de destinataires à la main.
  • Les plongeurs consultent le planning et s'inscrivent depuis la PWA sur leur téléphone. Le chat par événement remplace les SMS et messages WhatsApp de dernière minute.

Stack technique


Symfony 8, PHP 8.4, MySQL, Doctrine ORM, PWA, Web Push (VAPID), IndexNow, Matomo. 34 entités, 51 controllers, 29 services. CSS sur mesure, pas de framework CSS.

Galerie

Voir le projet en ligne

Visiter le site