Ajoute height: auto, aspect-ratio: 1/1 et object-fit: cover sur les images .djangokam-duo et .djangokam-clip pour conserver leur ratio carré natif. Le portrait reste inchangé.
o-k-i.net
Site web officiel de ORGANISATION KA INTERNATIONALE (OKI) — « Le numérique au service de vos luttes ».
Version 3, reconstruite avec SvelteKit + Svelte 5 (runes) + TypeScript, entièrement pré-rendue en statique (adapter-static). L'ancienne version Eleventy est conservée sur la branche main.
À propos
ORGANISATION KA INTERNATIONALE (OKI) construit un internet différent : un espace où nos langues ont leur place, où nos données nous appartiennent vraiment, et où nos communautés se connectent sur des plateformes qu'on contrôle collectivement. Applis web sur mesure à tarifs solidaires pour associations, collectifs et organisations militantes.
Technologies
- SvelteKit 2 / Svelte 5 — composants en runes, TypeScript strict
- adapter-static — pré-rendu intégral, aucun serveur Node requis
- vite-imagetools — images AVIF/WebP responsives générées au build
- vite-plugin-pwa — service worker + shell hors-ligne
- CSS vanilla — tokens de la charte OKI (
src/lib/styles/oki-tokens.css), aucun framework - Polices self-hébergées — Archivo (600-900) et Inter (400-800) en woff2 (
static/fonts/) - Zéro service tiers — aucune requête vers un CDN, Google Fonts ou autre domaine externe
Développement
npm install
npm run dev # serveur de développement
npm run build # build de production → build/
npm run preview # prévisualisation du build
npm run check # svelte-check (types + a11y)
Structure
src/
app.html # coquille HTML (thème anti-FOUC, fonts, manifest)
hooks.server.ts # attribut lang fr/en selon la route
lib/
styles/ # oki-tokens.css (charte), base.css (primitives)
i18n/ # bundles FR/EN (contenu éditorial, repris de la V2)
assets/images/ # sources images (optimisées au build)
components/ # Seo, Nav, Footer, sections/, motion/, icons/
motion/tokens.ts # gate reduced-motion, stagger syncopé gwoka
routes/
+layout.svelte # skip-link, ScrollProgressBar, Nav, Footer, View Transitions
+page.svelte # accueil FR en/+page.svelte # accueil EN
dons/ # dons FR en/donate/ # dons EN
presse/ # presse FR en/press/ # presse EN
mentions-legales/ # légal FR en/legal-notice/ # légal EN
offline/ # page hors-ligne (cible navigateFallback du SW)
+error.svelte # 404/erreurs designée (microcopy KA)
static/
fonts/ images/ assets/press/ theme.js lang-redirect.js
manifest.webmanifest 404.html robots.txt sitemap.xml _headers .htaccess
Internationalisation
FR par défaut, EN sous /en/. Les bundles JSON de src/lib/i18n/{fr,en}/ alimentent les composants via getBundle(locale). Les correspondances d'URLs FR↔EN (hreflang, bascule de langue) sont dans alternatePath() (src/lib/i18n/index.ts).
Sécurité & déploiement
Headers de sécurité (CSP stricte default-src 'self', HSTS, X-Frame-Options: DENY, nosniff, Referrer-Policy, Permissions-Policy) livrés en deux formats : static/.htaccess (Apache/o2switch) et static/_headers (Cloudflare Pages). Voir DEPLOY.md.
Charte et documents de référence
Ces documents de travail sont locaux (non versionnés, voir .gitignore) :
charte-oki-design-system.md— marque canonique : couleurs, typographie, motion (cadences gwoka), iconographie SVG (zéro emoji en interface), voix. Prime pour tout ce qui est marque.recette-sveltekit-playbook-agent.md— méthode technique : principes, budgets performance, règles motion, DoD (sa version longue :recette-sveltekit-15-sites-awwwards.md).AGENTS.md— point d'entrée pour les agents de code : impose l'usage de l'outillage Svelte MCP.svelte-5_code_writer.md— commandes@sveltejs/mcp(doc Svelte 5 +svelte-autofixer, à passer sur tout composant modifié).svelte_core_bestpractices.md— conventions runes Svelte 5 ($state/$derived/$effect, events, snippets, styles).DEPLOY.md— déploiement o2switch (Apache) et Cloudflare Pages (versionné, lui).
Thème sombre par défaut, thème clair en opt-in persisté (localStorage['oki-theme']).
Licence
AGPL-3.0 — voir LICENSE.