feat: migration complète 11ty → SvelteKit (v3)
Deploy to GitHub Pages / build (push) Failing after 23s
Deploy to GitHub Pages / deploy (push) Has been skipped

- SvelteKit 2 + Svelte 5 runes + TS, adapter-static, paths.base '/gwada-sirius' (relative: false)
- 5 pages × 3 locales (/, /en/, /ht/) : catalogues inlang repris tels quels, routeur i18n maison avec fallback ht→fr
- Îlots → composants natifs avec fallback SSR (calculateur, carte Leaflet, globe) ; Leaflet en import dynamique
- Dette corrigée : aria-current (bug legacy), polices en double, SEO complet (Seo, hreflang ×3, OG, Twitter, robots, sitemap 15 URLs)
- PWA : manifest + service-worker v3 (stale-while-revalidate)
- CI GitHub Pages mise à jour (build/), README et NOTES_PROJET réécrits
- Lighthouse mobile : 98/95/100/100 — svelte-check 0/0, Leaflet vérifié (2 cartes, tuiles OSM), no-JS vérifié
This commit is contained in:
sucupira
2026-07-21 14:41:04 -04:00
parent 542323ceaa
commit 2947482f50
97 changed files with 3493 additions and 4926 deletions
-5
View File
@@ -1,5 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">
<circle cx="32" cy="32" r="32" fill="#141a33"/>
<circle cx="32" cy="30" r="5" fill="#e8c766"/>
<path d="M32 30 L26 46 L38 46 Z" fill="#e8c766" opacity="0.85"/>
</svg>

Before

Width:  |  Height:  |  Size: 234 B

-12
View File
@@ -1,12 +0,0 @@
{
"name": "Sirius en Guadeloupe — Wep Ronpet",
"short_name": "Sirius Gwada",
"description": "Lever héliaque de Sirius en Guadeloupe : astronomie, culture et observation.",
"start_url": ".",
"display": "standalone",
"background_color": "#141a33",
"theme_color": "#141a33",
"icons": [
{ "src": "favicon.svg", "sizes": "any", "type": "image/svg+xml" }
]
}
-36
View File
@@ -1,36 +0,0 @@
// Service worker minimal : résilience réseau (3G/4G irrégulier) et usage
// hors-ligne des pages déjà visitées. Stratégie stale-while-revalidate.
const CACHE_NAME = "gwada-sirius-v2";
self.addEventListener("install", (event) => {
self.skipWaiting();
});
self.addEventListener("activate", (event) => {
event.waitUntil(
caches.keys().then((keys) =>
Promise.all(keys.filter((key) => key !== CACHE_NAME).map((key) => caches.delete(key)))
)
);
self.clients.claim();
});
self.addEventListener("fetch", (event) => {
if (event.request.method !== "GET") return;
const url = new URL(event.request.url);
if (url.origin !== self.location.origin) return;
event.respondWith(
caches.open(CACHE_NAME).then(async (cache) => {
const cached = await cache.match(event.request);
const network = fetch(event.request)
.then((response) => {
if (response.ok) cache.put(event.request, response.clone());
return response;
})
.catch(() => cached);
return cached || network;
})
);
});