Files
radarsargasses/docs/roadmap.md

137 lines
4.0 KiB
Markdown

# 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)