Refonte totale du site Ufolep84.org vers Ufolep84.fr
Refonte complète du site web de mon entreprise d'alternance Ufolep 84 pour améliorer l'expérience utilisateur, la performance et la communication des employés ainsi que des associations affiliées.
Quelques réalisations sélectionnées (pro, école, perso). Chaque carte détaille le contexte et la stack.
Refonte complète du site web de mon entreprise d'alternance Ufolep 84 pour améliorer l'expérience utilisateur, la performance et la communication des employés ainsi que des associations affiliées.
Site web pour le jardin partagé de l'association L'Espelido
Site web pour gérer les inscriptions aux formations Ufolep 84
Portail institutionnel PHP multi-rôles · Juin 2025 – Mai 2026 (11 mois)
L'UFOLEP 84 (Union Française des Œuvres Laïques d'Éducation Physique, Vaucluse) est une association loi 1901 labellisée Qualiopi proposant des formations sportives certifiées (PSC1, GQS, CQP ALS) à destination des licenciés et du grand public.
La mission confiée lors de mon alternance : concevoir, développer et déployer une plateforme web PHP multi-tiers pour remplacer le site vieillissant, couvrir les besoins de communication externe et de gestion administrative interne. Projet mené en développement individuel de juin 2025 à mai 2026 (11 mois).
ufolep84.fr/admin//API/ (consommée par l'app MAUI)/app//API/README.mdArchitecture générale : Application PHP procédurale organisée en modules (includes, pages, admin) avec séparation stricte des couches présentation / métier / données. Un système de variables globales $base_dir, $extra_head permet l'injection CSS spécifique par module dans l'entête HTML commun. Déploiement sur hébergement Apache mutualisé PHP 8.4, avec fichier .env hors Git pour les secrets (clé API, SMTP).
SEO & accessibilité : Chaque page déclare PAGE_NAME et PAGE_DESCRIPTION injectés dans <title>, <meta description>, Open Graph et Twitter Cards. Sitemap XML dynamique (sitemap.xml.php), URLs canoniques automatiques, Schema.org JSON-LD, balisage PSH (personne en situation de handicap).
.htaccess mod_rewriteincludes/header.php, footer.php, headeradmin.php (topbar sticky, $extra_head)includes/auth.php, permissions.php, functions.php, mailer.php, db.php/API/index.php (router REST), /API/lib/bootstrap.php (HMAC auth), psc.php, gqs.php, ufostreets.php
session_start / session_write_close)/uploads/documents/ · /assets/images/ · /assets/doc/
/API/ (Réalisation n°2)/API/auth/login · /API/psc/sessions · /API/gqs/sessions · /API/ufostreets/* · /API/admin/formations
Gestion complète des sessions Premiers Secours Citoyen
GET /psc/sessions, PUT /attendanceSessions Gestes Qui Sauvent avec gestion tarifaire
GET /gqs/sessions, participantsArborescence de dossiers complète pour les documents UFOLEP
Navigation dans l'intégralité de l'arborescence du projet
Tableau de bord centralisé avec statistiques en temps réel
Pages publiques formations avec accordéons et formulaires
CRUD complet pour tous les contenus éditoriaux
Gestion complète du circuit UfoStreet (sport urbain)
/ufostreets/*Tables supplémentaires : actualites · evenements · equipe · offres_emploi · vie_asso_articles · espace_sportif_articles · ufostreet_seasons · ufostreet_venues · ufostreet_teams · ufostreet_members · ufostreet_events
L'API interne (/API/index.php) expose des endpoints publics et authentifiés pour alimenter l'application mobile .NET MAUI et la SPA web staff. L'authentification utilise un Bearer Token signé par HMAC avec la clé UFOLEP_API_SECRET définie en variable d'environnement, sans dépendance JWT externe. Un mécanisme de rate-limiting côté client (HTTP 429 → retry avec backoff exponentiel, 3 tentatives max) protège contre les surcharges.
| Méthode | Route | Auth | Description |
|---|---|---|---|
| POST | /auth/login | Non | Authentification → retourne Bearer JWT |
| GET | /me | Bearer | Profil utilisateur courant, rôle, permissions |
| GET | /psc/sessions | Bearer | Liste des sessions PSC avec compteurs présence |
| GET | /psc/sessions/{id}/participants | Bearer | Participants d'une session PSC |
| PUT | /psc/participants/{id}/attendance | Bearer | Marquer présent / absent (present|absent) |
| GET | /gqs/sessions | Bearer | Sessions GQS publiées avec places restantes |
| GET | /gqs/sessions/{id}/participants | Bearer | Participants + infos tarifaires GQS |
| PUT | /gqs/participants/{id}/attendance | Bearer | Appel de présence GQS |
| GET | /admin/formations | Bearer | Liste des formations administrables |
| GET | /ufostreets/seasons | Bearer | Liste des saisons UfoStreet |
| POST | /ufostreets/seasons | Bearer | Créer une nouvelle saison |
| GET | /ufostreets/teams | Bearer | Liste des équipes UfoStreet |
| POST | /ufostreets/teams | Bearer | Créer une équipe |
| GET | /ufostreets/events | Bearer | Liste des événements UfoStreet |
| PUT | /ufostreets/events/{id}/attendance | Bearer | Appel présence événement UfoStreet |
| GET | /associations | Non | Liste publique des associations affiliées |
| GET | /actualites | Non | Dernières actualités publiques |
| GET | /evenements | Non | Calendrier des événements publics |
| GET | /health | Non | Ping — vérification disponibilité API |
{
"success": true,
"data": { ... },
"message": "OK",
"count": 12
}
Toutes les réponses sont enveloppées dans cette structure JSON normalisée. Les erreurs retournent "success": false avec un code HTTP approprié (400, 401, 403, 404, 429).
session_start, session_regenerate_id)password_hash() / password_verify()superadmin → admin_ufolep → admin_associationpermissions.php avant d'afficher le contenusession_destroy() + setcookie() expirationhtmlspecialchars() (anti-XSS)UFOLEP_API_SECRET en .env).env hors dépôt Git (.gitignore).htaccess (X-Frame-Options, X-Content-Type-Options)/admin/ et /API/.env