Files
portfolio/.planning/STATE.md
T
kayjaydee b5fe5deed5 feat(06-01): add Nitro hook content:file:afterParse for reading-time injection
- Register `content:file:afterParse` hook to inject `wordCount` + `minutes`
  on every parsed markdown content object (D-19: 200 wpm, floor 1 min).
- Import pure util `countWordsInMinimalBody` from app/utils/countWords.
- Guard against non-`.md` files (defensive — hook fires on all sources).
- Values persist in @nuxt/content SQLite DB and are queryable via
  queryCollection thanks to matching Zod fields (content.config.ts).
2026-04-22 09:02:23 +02:00

2.0 KiB
Raw Blame History

gsd_state_version, milestone, milestone_name, status, last_updated, last_activity, progress
gsd_state_version milestone milestone_name status last_updated last_activity progress
1.0 v1.0 milestone Context gathered — ready for /gsd-plan-phase 6 2026-04-22T06:55:05.535Z 2026-04-22
total_phases completed_phases total_plans completed_plans percent
8 3 11 9 82

Project State

Project Reference

  • PROJECT.md: .planning/PROJECT.md
  • REQUIREMENTS.md: .planning/REQUIREMENTS.md
  • ROADMAP.md: .planning/ROADMAP.md

Current Focus

Phase: Phase 6 — Blog Pages Plan: — Status: Context gathered — ready for /gsd-plan-phase 6 Last activity: 2026-04-22 Resume file: .planning/phases/06-blog-pages/06-UI-SPEC.md

Accumulated Context

  • M1 complet — déployé en production sur killiandalcin.fr (phases 14)
  • Stack : Nuxt 4 SSR + Nuxt UI v3 + Tailwind v4 + pnpm + @nuxt/content v3
  • Phase 5 shipped: @nuxt/content installé, collections bilingues blog_fr/blog_en, composants MDC (ProseImg, Alert, ProsePre, Columns, Details, Badge, Video, Clear), Shiki single github-dark, app/pages/blog/[slug].vue rend les articles FR/EN
  • Gotchas Phase 5 (à retenir) :
    • Catch-all [...slug].vue + @nuxtjs/i18n strategy prefix → page component résout à {} (Vue warn: missing template). Fix : single-segment [slug].vue.
    • queryCollection(variable) pas analysable par le Vite extractor de @nuxt/content → utiliser toujours des littéraux queryCollection('blog_fr') / queryCollection('blog_en').
    • i18n.baseUrl requis pour useLocaleHead (SEO tags). Ne pas retirer.
    • Redirection langue-détectée sans langue dans l'URL : detectBrowserLanguage.redirectOn: 'no prefix' + fallbackLocale. Éviter les routeRules /blog/** hardcodés (cassent le slug + bloquent la détection navigateur).
  • Objectif double : ranker sur "Hytale plugin developer" ET capter trafic longue traîne via contenu communauté
  • Articles bilingues : structure FR/EN dans content/ (ex: content/fr/blog/, content/en/blog/)
  • og:image par article : image frontmatter ou fallback branded — jamais l'og-image.png générique M1