# ROADMAP — Sargasse-Sentry > Checklist permanente d'avancement projet. > Mettre à jour au fil des implémentations. --- ## Légende - [ ] À faire - [~] En cours - [x] Terminé --- ## Phase 0 — Fondations ### Infrastructure & environnement - [ ] Initialisation dépôt Git - [ ] Configuration Docker (FrankenPHP + PostgreSQL/PostGIS + Redis) - [ ] Configuration Traefik (domaine, SSL) - [ ] Variables d'environnement (Sentinel Hub API key, NOAA, DB, Redis) - [ ] Initialisation projet Symfony - [ ] Installation API Platform (ou controllers JSON manuels) - [ ] Initialisation projet React - [ ] Configuration MapLibre GL JS + react-map-gl ### Base de données - [ ] Extension PostGIS activée - [ ] Migration : `SargassumObservation` - [ ] Migration : `SargassumForecast` - [ ] Migration : `DataIngestionJob` - [ ] Migration : `CoastalPoint` - [ ] Migration : `ImpactScore` - [ ] Migration : `UserFeedback` - [ ] Index spatiaux (GIST) + index BTREE définis --- ## Phase 1 — MVP (Antilles, observations uniquement) ### Pipeline d'ingestion - [ ] Cron Symfony toutes les 3h - [ ] Appel API Sentinel Hub (bandes B04, B08, B11) - [ ] Création `DataIngestionJob` (pending → success/failed) - [ ] Retry automatique + logging erreurs - [ ] Filtrage nuages (seuil configurable, défaut 60%) - [ ] Calcul AFAI (formule complète avec ratio longueurs d'onde) - [ ] Rasterisation → raster binaire sargasse/non - [ ] Vectorisation (raster → polygones, Douglas-Peucker, suppression bruit) - [ ] Persistance `SargassumObservation` - [ ] Génération vector tiles (Tippecanoe → `.pbf`) ### API Backend - [ ] `GET /api/spots` — liste CoastalPoints - [ ] `GET /api/spots/{id}` — détail - [ ] `GET /api/observations?bbox=&date=` — observations par zone ### Frontend React - [ ] Carte de base (MapLibre GL JS) - [ ] Affichage vector tiles observations - [ ] Sélection d'un CoastalPoint (Spot Mode) - [ ] Affichage polygones observés ### Données initiales - [ ] Seed `CoastalPoint` zone Antilles (plages, ports, spots surf, zones pêche) --- ## Phase 2 — Dérive & Score ### Pipeline — simulation de dérive - [ ] Accès NOAA GRIB (vent + courant) - [ ] Échantillonnage polygone (centroids + random sampling) - [ ] Application vecteur dérive par point - [ ] Reconstruction polygone (convex hull / alpha shape) - [ ] Génération horizons H+6, H+12, H+24, H+48 - [ ] Persistance `SargassumForecast` - [ ] Génération vector tiles prédictions (Tippecanoe) ### Calcul ImpactScore - [ ] Calcul score par `CoastalPoint` (distance, densité, vitesse d'approche, tendance) - [ ] Persistance `ImpactScore` - [ ] Mise en cache Redis (TTL 3h) ### API Backend - [ ] `GET /api/spots/{id}/score` — score courant + horizons - [ ] `GET /api/spots/{id}/score?at={datetime}` — score à un instant - [ ] `GET /api/forecasts?observationId=` — prédictions par observation - [ ] `GET /api/forecasts?bbox=&horizon=` — prédictions par zone + horizon ### Frontend React - [ ] Spot Mode complet (OK / Risque / Impact par horizon) - [ ] Slider temporel (Now → +6h → +12h → +24h → +48h) - [ ] Mise à jour dynamique polygones + score sur slider - [ ] Gradients radiaux densité - [ ] Animation légère sur polygones de prédiction - [ ] Vue mobile optimisée --- ## Phase 3 — Feedback & Alertes ### Boucle d'apprentissage - [ ] Bouton "Je confirme présence de sargasses" - [ ] `POST /api/feedback` — persistance `UserFeedback` anonyme - [ ] Intégration feedback dans calcul score (pondération) ### Alertes push - [ ] Définir modalité d'inscription légère (push token navigateur ou email) - [ ] Système d'abonnement par `CoastalPoint` - [ ] Worker Symfony — envoi alertes si score dépasse seuil - [ ] Interface d'inscription (friction minimale) --- ## Transversal (continu) - [ ] Rate limiting endpoints publics - [ ] Monitoring pipeline (alertes si ingestion échoue > N fois) - [ ] Logs structurés - [ ] Fallback Sentinel-2 → Sentinel-3 - [ ] Configuration Cloudflare free tier (cache tiles statiques) - [ ] Tests fonctionnels pipeline (ingestion → score)