Files
radarsargasses/docs/roadmap.md
Gwadaking e5e729c487 Phase 0 : entités, migrations, API Platform, PostGIS
- API Platform + Doctrine ORM + jsor/doctrine-postgis installés
- 6 entités Symfony (SargassumObservation, SargassumForecast,
  DataIngestionJob, CoastalPoint, ImpactScore, UserFeedback)
- Migration initiale manuelle avec CREATE EXTENSION postgis,
  toutes les tables, index GIST et BTREE
- doctrine.yaml configuré pour PostgreSQL 16 + types PostGIS
- Roadmap Phase 0 complète

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 02:37:27 -04:00

4.1 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 (bare repo VPS + hook post-receive)
  • Configuration Docker (FrankenPHP + PostgreSQL/PostGIS + Redis)
  • Configuration Traefik (domaine radarsargasses971.com, SSL Let's Encrypt)
  • Variables d'environnement (.env.example)
  • Initialisation projet Symfony (symfony new backend)
  • Installation API Platform
  • Initialisation projet React (npm create vite@latest frontend)
  • Configuration MapLibre GL JS + react-map-gl

Base de données

  • Extension PostGIS activée (dans la migration)
  • 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)