- Données PeerTube (GADE), Castopod (KUTE) et Mastodon (BOKANTE) bakées au build via +page.server.ts (throttle + retry 429 + déduplication) - Charte OKI complète : tokens, thème sombre par défaut (clair opt-in, anti-FOUC), Archivo/Inter self-hébergées, flag-bar, sprite SVG (zéro emoji en interface, zéro Font Awesome/CDN) - i18n FR/EN par routage [[locale]], bundles JSON, hreflang, %lang% serveur - Pages : accueil, /video/[uuid] (embed, téléchargements, partage, commentaires, JSON-LD VideoObject), /categories/[id], /recherche (index JSON baké, recherche client), /direct (live + annonce multi-fuseaux), /dons, /mentions-legales, /offline + 404 kréyòl - Motion gwoka : KineticText (scrub view()), ScrollProgressBar, FlagChip, reveal syncopé, View Transitions, gate prefers-reduced-motion unique - PWA : manifest + Workbox generateSW (fallback /offline/), registerSW statique - Sécurité : CSP par page en <meta> (SHA-256 des inline via scripts/postbuild-csp.mjs) + headers globaux (_headers Cloudflare et .htaccess o2switch), redirections des anciennes URLs PHP - Doc : docs/DEPLOIEMENT-SVELTEKIT.md
8.1 KiB
PROMPT KIMI CLI — Transformation de o-k-i.net en SvelteKit
Mode d'emploi : copie l'intégralité du bloc ci-dessous (entre les lignes
---) dans Kimi CLI, en joignant les deux documents de référence :recette-sveltekit-playbook-agent.md(la méthode) etcharte-oki-design-system.md(la marque). Ajuste la section « Périmètre de cette session » selon ce que tu veux faire en une passe.
MISSION : Migrer o-k-i.net vers SvelteKit selon la recette et la charte OKI
Tu es un agent de code senior. Ta mission : reconstruire le site o-k-i.net (ORGANISATION KA INTERNATIONALE) en SvelteKit, en suivant à la lettre le playbook recette-sveltekit-playbook-agent.md (méthode, budgets, DoD) et la charte charte-oki-design-system.md (couleurs, typo, voix, iconographie — elle prime pour tout ce qui est marque).
1. Contexte du site existant (audit réel, juillet 2026)
Identité : association tech militante guadeloupéenne — « Le numérique au service de vos luttes ». Applis web sur mesure à tarifs solidaires pour associations, collectifs et organisations militantes. Positionnement souveraineté numérique : indépendance des GAFAM, logiciels libres, hébergement éthique. L'identité visuelle est afrofuturiste caribéenne : drapeau panafricain (noir/or/vert/rouge), thème sombre par défaut.
Écosystème lié (liens externes à préserver, ne pas migrer) :
- bokante.o-k-i.net → instance Mastodon
- gade.o-k-i.net → instance PeerTube
- mizik.o-k-i.net → instance Funkwhale
- niyaj.o-k-i.net → Nextcloud
- kute.o-k-i.net → application PHP maison
- labola.o-k-i.net → forge (code source public, dont celui du site)
- fediverse.o-k-i.net → portail fédivers
- pawol.nu + djangokam.pawol.nu + nyyoka.pawol.nu → paroles/traductions/karaokés (projet DJANGOKAM, artiste IA caribéen)
Stack actuelle mesurée : HTML statique + CSS vanilla (~44 KB) + 3 petits JS vanilla (main.js, theme.js, lang-redirect.js). Hébergement o2switch (mutualisé FR). Images via BunnyCDN (organisationka.b-cdn.net). Headers de sécurité exemplaires à conserver à l'identique ou renforcer : CSP default-src 'self' (+ style 'unsafe-inline' + fonts.googleapis.com), HSTS, X-Frame-Options: DENY, X-Content-Type-Options: nosniff, Referrer-Policy: strict-origin-when-cross-origin, Permissions-Policy restrictive.
Bugs et défauts de production confirmés (à corriger dans la migration) :
- CRITIQUE — Toutes les images renvoient 403 (pull zone BunnyCDN cassée) : logo header, logos partenaires, portrait DJANGOKAM, pochettes, logos clients, og:image. Décision cible : self-héberger toutes les images dans
static/images/(AVIF/WebP générés au build via vite-imagetools), supprimer toute dépendance à BunnyCDN, retirerhttps://organisationka.b-cdn.netde la CSP. - Google Fonts chargé (fonts.googleapis.com + gstatic.com) alors que le site revendique l'indépendance des GAFAM → self-héberger Archivo (600-900) et Inter (400-800) en woff2, retirer les deux domaines de la CSP.
- Aucun
prefers-reduced-motionnulle part. - Iconographie 100 % emoji (✊🏿🔓🤝🏿🛡️💼🏛️) → set SVG conforme à la charte (angles nets, stroke 2 px, or sur noir).
- Les 3 cards « publics » (Militants / Associations & Collectifs / Entreprises) apparaissent en double dans la page → une seule occurrence.
- Lazy-loading d'images partiel (4/~14) → systématique hors LCP.
Contenu éditorial (conserver tel quel, sauf mention contraire) : one-page FR à ancres — Hero (« ORGANISATION KA INTERNATIONALE », 3 badges, 2 CTA) · Solutions ×3 publics · Projets web · Partenaires (Joukawouvè, Aktivist Vybz #AKV, cyber-mawonaj) · DJANGOKAM (artiste IA caribéen, lore Wanakaera/Karukera, liens pawol.nu, plateformes musicales, presse) · Mission + 4 valeurs (Engagement, Liberté, Solidarité, Souveraineté) · Développement web sur mesure · Clients (KA UBUNTU kaubuntu.com, KA UBUNTU Hub kaubuntu.re PWA, KBM kbm.gp) · Services hébergés (BOKANTE, GADE, NIYAJ, etc.) · FAQ « Qu'est-ce que le Ka ? » · CTA final + contact (kontak@o-k-i.net, WhatsApp, Telegram, Discord, forge) · footer avec mentions légales. Pages satellites : /dons/ (Stripe + Liberapay), /en/ (version anglaise complète), /mentions-legales/.
2. Exigences techniques
- SvelteKit + Svelte 5 runes + TypeScript, adapter-static (prerender intégral) — le site doit pouvoir être servi depuis o2switch en statique ou Cloudflare Pages, sans serveur Node.
- i18n FR/EN : FR par défaut, EN sur
/en/comme actuellement ; attributslangcorrects ; pas de lib lourde si un routage par dossier suffit. - Thème sombre par défaut (identité de marque), thème clair en opt-in persisté en localStorage, appliqué sans FOUC via snippet dans
app.html. - Conserver toutes les URLs existantes (/, /dons/, /en/, /mentions-legales/, ancres #solutions #projets #partenaires #djangokam #hebergement #contact).
- Headers de sécurité : reproduire la CSP et les headers actuels (via
_headersCloudflare ou doc d'htaccess o2switch), en retirant les domaines devenus inutiles (Google Fonts, BunnyCDN). - PWA légère : manifest + service worker de cache du shell (vite-plugin-pwa) — le site doit rester lisible hors-ligne.
- OpenGraph complet (10 balises actuelles) reconduit, og:image self-hébergée.
- Budgets du playbook §4 : JS initial ≤ 170 KB, page d'accueil ≤ 2 MB, Lighthouse mobile ≥ 90/95/95/95.
3. Motion & composants (sélection depuis la bibliothèque du playbook §5)
Applique la sélection suivante — pas plus, le site doit rester sobre :
- KineticText sur les titres de sections (Archivo uppercase), split par mots, stagger piloté par les tokens gwoka de la charte (
--dur-tanbou120 ms de base, pattern syncopé), scrub natifanimation-timeline: view()avec fallback ScrollTrigger. - ScrollProgressBar en haut de page, gradient or→vert de la charte.
- PageTransition légère (View Transitions + fallback), durée
--dur-mesure480 ms. - Village écosystème : remplacer la grille de cards « Services hébergés » par une scène SVG isométrique « village créole » (case à ka = BOKANTE, karbay = GADE, silo nuage = NIYAJ, scène de musique = MIZIK…), chaque bâtiment = lien vers l'instance, hover/focus = liseré or + label. DOM/SVG uniquement, aucun WebGL (P3 du playbook). Fallback : grille de cards accessible pour reduced-motion/mobile étroit.
- Flag-bar (signature marque, 4 segments francs 6 px) : sous la nav fixe + en haut du footer, jamais plus d'une occurrence visible par écran.
- 404 designé en KA (texte créole + ka/tambour SVG), page hors-ligne PWA assortie.
- CursorTracker : ne pas installer (audience mobile-dominante, ROI faible).
- WebGL : aucun sur cette migration.
4. Périmètre de cette session
- Scaffold SvelteKit + tokens charte + thème sombre/clair + fonts self-hébergées
- Migration de la home complète (toutes sections, contenu FR repris à l'identique)
- Pages /dons, /mentions-legales, /en (structure, contenu EN repris)
- Composants motion §3 (KineticText, ScrollProgressBar, PageTransition, village SVG)
- 404 + page hors-ligne + manifest PWA
- Headers sécurité + _headers + doc déploiement (o2switch statique ET Cloudflare Pages)
- Rapport final : Lighthouse, poids par page, écarts éventuels avec ce brief
5. Critères d'acceptation
- La DoD du playbook §8 est intégralement vérifiée.
- Zéro requête vers un domaine tiers au chargement (vérifier l'onglet réseau) : ni Google, ni BunnyCDN, ni aucun CDN.
- Toutes les images présentes et optimisées (plus aucun 403, plus aucune image > 200 KB hors hero).
- Le contenu éditorial FR est repris à l'identique (aucune réécriture non demandée), hormis la déduplication des cards « publics ».
- La nav au clavier fonctionne sur tout le village SVG (chaque bâtiment focusable, label lisible).
npm run build && npm run preview: zéro erreur, zéro warning a11y.
Commence par la Phase 1 du playbook (audit de confirmation du dépôt actuel) et présente-moi le plan avant d'écrire le moindre composant.