4.0 KiB
4.0 KiB
ROADMAP — Sargasse-Sentry
Checklist permanente d'avancement projet. Mettre à jour au fil des implémentations.
Légende
- À faire
- [~] En cours
- 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 CoastalPointsGET /api/spots/{id}— détailGET /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
CoastalPointzone 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 + horizonsGET /api/spots/{id}/score?at={datetime}— score à un instantGET /api/forecasts?observationId=— prédictions par observationGET /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— persistanceUserFeedbackanonyme- 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)