142bc0c9df
Même problème que la carte d'observation : le globe des 13 villes de la
diaspora dessinait des continents à main levée sur un canvas vide. Remplacé
par la même carte Leaflet + OSM, marqueurs colorés (or pour la Caraïbe,
turquoise ailleurs), popup nom + date au clic. Le chunk Leaflet est partagé
entre les deux îlots (un seul téléchargement).
Supprime les polygones de continents simplifiés devenus inutiles
(src/islands/globe/world.js) et la classe CSS .island-canvas orpheline.
Corrige aussi le texte d'aide ("glisser pour tourner" → "glisser pour
déplacer", plus juste pour une carte plate que pour un globe 3D).
Bump CACHE_NAME du service worker (v1 → v2) : découvert pendant le debug
que la stratégie stale-while-revalidate servait l'ancien composant aux
visiteurs déjà passés sur le site malgré le nouveau déploiement.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
4.4 KiB
4.4 KiB
Notes sur le Projet Sirius en Guadeloupe
📋 Vue d'ensemble
Refonte complète (v2) : passage d'une SPA Vite+Svelte 4 à un site 11ty statique avec Svelte 5 en îlots, un design system CSS natif (oklch, @layer, container queries) et une i18n compilée (Paraglide/inlang). Conforme à la doctrine UI/UX OKI : nav à 5 entrées, fonctionne sans JavaScript pour tout le contenu éditorial, budget JS minimal.
🏗️ Architecture
- Contenu : pages Nunjucks (
src/*.njk), chacune paginée sur les 3 langues (fr/en/ht) viapagination.data: locales. - Données :
src/_data/sites.js(7 sites d'observation, dates interpolées Jean Meeus / Jeffrey L. Hunt),src/_data/nav.js,src/_data/nextRising.js(calculé au build). - i18n : catalogues
messages/{fr,en,ht}.json, compilés par@inlang/paraglide-jsensrc/paraglide/avant chaque build (npm run messages).htretombe automatiquement surfrpour les clés non traduites (contenu long, cf. portée d'origine). - Îlots Svelte 5 (3 seulement, le reste est HTML/CSS pur) :
PredictionsCalculator— hydratation immédiate, améliore le tableau statique des 7 sitesObservationMap— vraie carte Leaflet + fond OSM, marqueurs/popups pour les 7 sites, hydratation différée (IntersectionObserver). Leaflet est utilisé directement (pas de wrapper Svelte type Sveaflet/svelte-openlayers — évalués mais écartés : le premier cible une prérelease de Svelte 5 et vient d'être publié, le second embarque OpenLayers, bien plus lourd que nécessaire pour 7 marqueurs)SiriusGlobe— vague planétaire du lever héliaque (13 villes), carte canvas schématique (continents simplifiés), hydratation différée
- Onglets (Science, Dogon) : 100 % CSS (
input[type=radio]+label), zéro JS. - Build :
@11ty/eleventy-plugin-vitefait passer la sortie 11ty par Vite (bundling CSS/JS, compilation Svelte). Un plugin maison recopie les assets passthrough après le build Vite (voir commentaire danseleventy.config.js—emptyOutDirde Vite les efface sinon).
⚠️ Points d'attention connus
<link>etvite-ignore: Vite traite tout<link href>comme une référence d'asset à résoudre, y comprisrel="alternate"/rel="icon"/rel="preload". Unhref="/"ouhref="/en/"(URL de répertoire) fait planter le build (EISDIR, cf. issue amont). Toujours ajoutervite-ignoresur ces<link>de métadonnées danslayouts/base.njk.- Alias
/src:eleventy-plugin-vitefait tourner Vite avec pour racine une copie du dossier de sortie (_site), pas la racine du projet. Toute référence absolue à un fichier source (/src/styles/app.css,/src/islands/.../mount.js) nécessite l'aliasresolve.alias["/src"]défini danseleventy.config.js. - Dates ISO sans heure :
new Date("2026-07-22")est interprété en UTC ; formaté en heure locale Guadeloupe (UTC-4), ça peut reculer d'un jour. Toujours parser les composants (year, month, day) et construire la date en local — voir le filtreformatDateetPredictionsCalculator.svelte. - Slinkity est abandonné (son créateur travaille sur Astro) : ne pas l'utiliser pour l'intégration 11ty+Svelte,
eleventy-plugin-vite(officiel) est la voie robuste. - Service worker et cache obsolète : la stratégie stale-while-revalidate de
public/sw.jspeut servir une version périmée des îlots (vécu pendant le debug de la carte : un visiteur déjà passé sur le site voyait l'ancien composant malgré un déploiement). Toujours incrémenterCACHE_NAMEdanssw.jsquand un îlot ou un asset critique change, sinon les visiteurs récurrents restent bloqués sur l'ancienne version jusqu'à revalidation.
🔄 Améliorations possibles
- Traduire le contenu long en Kreyòl (actuellement chrome/labels uniquement, contenu de fond en français)
- Mettre à jour chaque année les informations d'événements associatifs (
associations.njk, données à vérifier auprès des organisateurs) - Le chunk Leaflet (~44 Ko gzip) n'est chargé qu'au scroll sur la carte (
observer/), mais reste le plus lourd du site ; envisager des tuiles vectorielles/un fournisseur plus léger si le budget JS devient un problème
📦 Build pour production
npm run build
# Sortie dans _site/
🌐 Déploiement
GitHub Pages via .github/workflows/deploy.yml (upload de _site/), déclenché sur push vers main.