Indice UV géolocalisé, statique, hors-ligne. Aucun backend, aucune clé API.
- Données : Open-Meteo — gratuit, sans clé, licence CC-BY, couverture mondiale (Vietnam, Cambodge et le reste inclus).
- Géolocalisation du navigateur, avec repli sur une recherche de ville (géocodage Open-Meteo) si la position est refusée.
- Prévisions préchargées sur 3 jours + courbe horaire du jour, mises en cache pour l'usage hors-ligne. Le cache est rafraîchi à chaque ouverture.
- Échelle pédagogique OMS (celle de Météo-France) : 5 niveaux, couleurs et recommandations de protection.
- PWA installable, fonctionne hors-ligne.
- L'état (lieu) est encodé dans le hash de l'URL :
#48.85,2.35,Paris. Chaque lieu = un marque-page.
Chaque lieu = une URL, par exemple :
…/indice-uv/#21.03,105.85,Hanoï…/indice-uv/#13.36,103.86,Siem Reap…/indice-uv/#11.56,104.92,Phnom Penh
L'app met le hash à jour toute seule quand on change de lieu — il suffit de re-bookmarker pour figer une nouvelle position. Sans hash, elle reprend le dernier lieu connu, sinon demande la géolocalisation.
- Indice UV courant, maximum du jour, horaire, et maximum des 3 jours suivants, via l'endpoint
forecastd'Open-Meteo (current,hourly,daily=uv_index_max,timezone=auto,forecast_days=4). - Le fuseau horaire du lieu observé est fourni par l'API : « maintenant » et le pic du jour sont calculés à l'heure locale du lieu, pas à celle de l'appareil.
Échelle mondiale de l'OMS, reprise par Météo-France :
- 0-2 Faible (vert) — pas de protection nécessaire.
- 3-5 Modéré (jaune) — chapeau, lunettes, crème SPF 30, ombre à midi.
- 6-7 Élevé (orange) — SPF 30-50+, éviter le soleil 11h-17h.
- 8-10 Très élevé (rouge) — SPF 50+, vêtements couvrants, éviter le soleil 11h-17h.
- 11+ Extrême (violet) — éviter toute exposition, protection maximale.
Le dépôt se déploie tout seul sur GitHub Pages depuis main (Settings → Pages → Deploy from a branch → main / (root)). Chaque push sur main redéploie.
L'URL est : https://<pseudo>.github.io/indice-uv/
Les chemins sont relatifs (
sw.js,manifest.json,start_url: "."), donc l'app fonctionne dans le sous-dossier/indice-uv/. Ne les passe pas en absolus (/sw.js) sinon la PWA casse.
indice-uv/
├── index.html app + logique (géoloc, fetch, rendu, courbe, échelle)
├── manifest.json PWA
├── sw.js service worker (offline)
├── icons/ icônes PWA (soleil)
├── scripts/ icône source (SVG) + serveur statique de test
└── tests/ suite Playwright
npm install
npm testDonnées indicatives (modèle météo). À ne pas utiliser comme mesure médicale.
Code sous licence MIT. Données Open-Meteo sous licence CC-BY 4.0.