diff --git a/.planning/ROADMAP.md b/.planning/ROADMAP.md index 17d8714..30145f5 100644 --- a/.planning/ROADMAP.md +++ b/.planning/ROADMAP.md @@ -59,7 +59,12 @@ Plans: 3. `curl localhost:3000/en/` retourne du HTML anglais sans hardcoded French strings 4. Aucun composant ne contient de chaine en dur (grep pour strings hors `t()` dans les templates) 5. Les traductions FR sonnent naturel — pas de calque anglais -**Plans**: TBD +**Plans:** 4 plans +Plans: +- [ ] 06-01-PLAN.md — Content schema Zod extension (draft/wordCount/minutes) + Nitro reading-time hook + draft:true sur test articles +- [ ] 06-02-PLAN.md — i18n keys blog.*/nav.blog/a11y.blog* + lien Blog dans AppHeader + BlogCard.vue unifié (default + compact) +- [ ] 06-03-PLAN.md — Page listing app/pages/blog/index.vue (hero + grid + empty state, SSR bilingue) +- [ ] 06-04-PLAN.md — BlogToc.vue + BlogPrevNext.vue + enrichissement app/pages/blog/[slug].vue (breadcrumb + header + TOC + surround) ### Phase 4: Ship **Goal**: Le site est deployable en production via Docker et passe tous les checks @@ -70,7 +75,12 @@ Plans: 2. Le container sert le site SSR sur le port attendu 3. `pnpm typecheck` et `pnpm lint` passent avec 0 erreurs 4. `curl` sur chaque page retourne `
+ {{ article.description }} +
+ + +{{ t('blog.subtitle') }}
+ ++ {{ t('blog.subtitle') }} +
+ + ++ {{ totalArticles }} +
++ {{ t('blog.stats.articles') }} +
++ {{ uniqueTags }} +
++ {{ t('blog.stats.tags') }} +
++ {{ totalLanguages }} +
++ {{ t('blog.stats.languages') }} +
++ {{ t('blog.emptyState.description') }} +
+