db5a997e50
Architecture décidée et documentée dans ADR.md : SvelteKit natif en fichiers plats plutôt que Strapi (55 outils, données statiques, souveraineté et budget performance prioritaires — doctrine §1.2, §4.4). - frontend/ : SvelteKit 2 + Svelte 5 (runes), adapter-static, 58 pages prérendues, CSS natif en @layer (reset→tokens→base→layouts→components), tokens oklch(), container queries, typo fluide clamp(), 2 polices WOFF2 auto-hébergées (Atkinson Hyperlegible, Fraunces), zéro CDN tiers - i18n FR/gcf typé (clé manquante = erreur de build), bascule Kréyòl persistée en localStorage, micro-textes créoles (« Ou pa manké ayen ») - Composants : ToolCard, DifficultyBadge (forme+texte+couleur, jamais la couleur seule), CategoryNav (≤5 entrées, divulgation progressive), SearchBar (raccourci /), LanguageSwitcher, EndMarker - content/ : 55 fiches migrées depuis src/ (script frontend/scripts/ migrate-tools.mjs, idempotent), licences SPDX reprises de directory.json - docs/ : DESIGN_SYSTEM.md et CONTENT_GUIDE.md Budgets vérifiés : JS 41 Ko gzip, CSS 2,9 Ko gzip, svelte-check 0 erreur. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
41 lines
1.4 KiB
Markdown
41 lines
1.4 KiB
Markdown
# exitchatcontrol × OKI — frontend
|
||
|
||
Annuaire souverain d'outils libres. SvelteKit 2 + Svelte 5, site 100 %
|
||
prérendu, zéro CDN tiers, zéro tracker. Voir [`ADR.md`](../ADR.md) pour la
|
||
décision d'architecture et `../docs/` pour le design system et le guide
|
||
de contenu.
|
||
|
||
## Prérequis
|
||
|
||
Node ≥ 22.12, pnpm.
|
||
|
||
## Commandes
|
||
|
||
```sh
|
||
pnpm install
|
||
pnpm migrate # (re)génère content/ depuis l'ancien site Astro (src/)
|
||
pnpm dev # serveur de développement
|
||
pnpm build # build statique dans build/ (prérend les 58 pages)
|
||
pnpm preview # sert le build localement
|
||
pnpm check # svelte-check (types + a11y)
|
||
```
|
||
|
||
## Déploiement
|
||
|
||
`build/` est un site statique : n'importe quel serveur de fichiers convient
|
||
(nginx du `docker/` existant, YunoHost `my_webapp`, etc.). Aucune dépendance
|
||
cloud, aucun service à maintenir — un miroir = une copie du dossier.
|
||
|
||
## Arborescence
|
||
|
||
```
|
||
src/styles/ tokens, reset, base, layouts (cascade @layer)
|
||
src/lib/i18n/ fr.json + gcf.json typés, store de langue (runes)
|
||
src/lib/components/ ToolCard, DifficultyBadge, CategoryNav, SearchBar,
|
||
LanguageSwitcher, EndMarker
|
||
src/lib/content/ chargeur build-time des fichiers ../content/
|
||
src/routes/ / (landing), /outils (annuaire filtrable), /outils/[slug]
|
||
static/fonts/ 2 WOFF2 auto-hébergés (Atkinson Hyperlegible, Fraunces)
|
||
scripts/ migrate-tools.mjs
|
||
```
|