Astro 5 SSR + ioredis cache Valkey, déployable sur shared-net. - Vigilance temps réel via Opendatasoft (no-auth, LOv2) - Carte SVG des 96 départements (gregoiredavid/france-geojson) - Climato T° 30j par dept (CSV.GZ Météo France, cache 24h) - Conseils officiels par phénomène (7 types Vigilance) - /api/health (UptimeRobot) + /api/vigilance (JSON public CORS *) - Dockerfile multi-stage, CI Forgejo deploy.yml (pattern Reteno) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
3.2 KiB
3.2 KiB
CLAUDE.md — info-canicule
Objectif
Site d'utilité publique qui affiche en temps réel la Vigilance Météo France par département
- les conseils officiels (canicule, orages, vent, pluie, neige, avalanches, vagues-submersion).
Hébergé sur le VPS Nocleus partagé (réseau shared-net, cache Valkey ACL info-canicule).
Stack
- Astro 5 SSR (
output: 'server', adapter@astrojs/nodemode standalone) - TailwindCSS 3 (via
@astrojs/tailwind) - ioredis pour le cache Valkey
- TypeScript strict
- Pas de DB Postgres (le snapshot Vigilance vit en cache, refresh toutes les 15 min)
Source de données
- Provider par défaut :
weatherref-france-vigilance-meteo-departementchez Opendatasoft.- URL :
https://public.opendatasoft.com/api/explore/v2.1/catalog/datasets/weatherref-france-vigilance-meteo-departement/records - Pas d'auth, JSON propre, ~1 000 records par snapshot (départements × phénomènes × échéances J/J1)
- Licence Ouverte 2.0
- URL :
- Migration possible : API Vigilance Météo France officielle (portail-api.meteofrance.fr) si fraîcheur Opendatasoft insuffisante. Nécessite un token sur le portail Météo France. Abstraction
vigilance.tsà découper en deux implémentations le jour venu.
Schéma cache
| Clé Valkey | TTL | Contenu |
|---|---|---|
info-canicule:vigilance:snapshot |
VIGILANCE_CACHE_TTL (défaut 900s) |
VigilanceSnapshot complet (fetchedAt + productDatetime + alerts[]) |
Le prefix info-canicule: est injecté par ioredis (keyPrefix), donc la clé réelle côté Valkey est info-canicule:info-canicule:vigilance:snapshot. Compatible avec l'ACL ~info-canicule:* côté VPS.
Pièges connus / à surveiller
product_datetimechange 2× par jour (~06h et 16h Paris). Tant que Météo France n'a pas publié le suivant, le snapshot Opendatasoft renvoie les valeurs J→J1 du bulletin courant. Inutile de poll plus vite que 15 min.- Echéance "J" = aujourd'hui, "J1" = demain. Ne pas confondre avec un horizon en heures.
phenomenon_id: 1=vent, 2=pluie, 3=orages, 5=neige/verglas, 6=canicule, 8=avalanches, 9=vagues-submersion. Pas de 4 ni 7.- Andorre (
domain_id = 99) est inclus dans le flux Vigilance mais n'est pas un département français. Mappé comme99 — Andorre (zone Vigilance)côté front pour ne pas l'écarter silencieusement. - Corse : codes
2Aet2B, pas20. - DROM : pas (encore) inclus dans le mapping
departements.tscôté front. Vigilance Métropole only pour le MVP. Pour ajouter Outre-mer : étendreDEPARTEMENTS+ tester sidomain_idcorrespond aux codes 971-978. - Conseils par phénomène (
advice.ts) : texte curated depuis sante.gouv.fr et meteofrance.fr. À relire / actualiser périodiquement (au moins 1× par an). - Cache miss au boot : si Valkey est down,
cacheOrFetchlog un warning mais re-fetch à chaque requête — pas de fallback persistant. Acceptable pour un service stateless, mais surveiller la latence Opendatasoft.
Déploiement
Pattern Reteno : push main → CI Forgejo SSH au VPS → git fetch && reset --hard && make env && docker compose up -d --build --wait.
Le .env.tmpl est commit, le .env réel est matérialisé par make env (pass-cli, vault Infra).