docs(02-01): complete design system + i18n config plan
This commit is contained in:
+14
-14
@@ -13,23 +13,23 @@
|
||||
|
||||
### Internationalization
|
||||
|
||||
- [ ] **I18N-01**: Le site supporte FR et EN avec stratégie `prefix_except_default` (FR à `/`, EN à `/en/*`)
|
||||
- [ ] **I18N-02**: La locale est détectée depuis le navigateur au premier accès et persistée en cookie
|
||||
- [x] **I18N-01**: Le site supporte FR et EN avec stratégie `prefix_except_default` (FR à `/`, EN à `/en/*`)
|
||||
- [x] **I18N-02**: La locale est détectée depuis le navigateur au premier accès et persistée en cookie
|
||||
- [ ] **I18N-03**: L'utilisateur peut changer de langue via un switcher dans le header
|
||||
- [ ] **I18N-04**: Le serveur lit le cookie et rend la bonne langue sans hydration mismatch
|
||||
- [ ] **I18N-05**: Les fichiers de traduction FR/EN sont migrés depuis les locales existantes
|
||||
- [x] **I18N-04**: Le serveur lit le cookie et rend la bonne langue sans hydration mismatch
|
||||
- [x] **I18N-05**: Les fichiers de traduction FR/EN sont migrés depuis les locales existantes
|
||||
|
||||
### Theme
|
||||
|
||||
- [ ] **THEME-01**: L'utilisateur peut basculer entre dark et light mode via un toggle dans le header
|
||||
- [ ] **THEME-02**: Le thème est persisté en cookie SSR-safe (pas localStorage)
|
||||
- [ ] **THEME-03**: Aucun FOUC au chargement — le serveur rend le bon thème dès la première requête
|
||||
- [x] **THEME-02**: Le thème est persisté en cookie SSR-safe (pas localStorage)
|
||||
- [x] **THEME-03**: Aucun FOUC au chargement — le serveur rend le bon thème dès la première requête
|
||||
|
||||
### SEO
|
||||
|
||||
- [ ] **SEO-01**: Chaque page a un `<title>`, `<meta description>`, `og:title`, `og:description` uniques via `useSeoMeta()`
|
||||
- [ ] **SEO-02**: La page d'accueil inclut du JSON-LD structuré (Person / CreativeWork)
|
||||
- [ ] **SEO-03**: Le sitemap.xml est généré automatiquement avec les alternates i18n (hreflang)
|
||||
- [x] **SEO-03**: Le sitemap.xml est généré automatiquement avec les alternates i18n (hreflang)
|
||||
- [ ] **SEO-04**: Les og:image utilisent des URLs absolues et sont présentes sur chaque page
|
||||
|
||||
### Pages
|
||||
@@ -108,17 +108,17 @@
|
||||
| DATA-05 | Phase 1 | Pending |
|
||||
| INFRA-02 | Phase 1 | Pending |
|
||||
| INFRA-03 | Phase 1 | Pending |
|
||||
| I18N-01 | Phase 2 | Pending |
|
||||
| I18N-02 | Phase 2 | Pending |
|
||||
| I18N-01 | Phase 2 | Complete |
|
||||
| I18N-02 | Phase 2 | Complete |
|
||||
| I18N-03 | Phase 2 | Pending |
|
||||
| I18N-04 | Phase 2 | Pending |
|
||||
| I18N-05 | Phase 2 | Pending |
|
||||
| I18N-04 | Phase 2 | Complete |
|
||||
| I18N-05 | Phase 2 | Complete |
|
||||
| THEME-01 | Phase 2 | Pending |
|
||||
| THEME-02 | Phase 2 | Pending |
|
||||
| THEME-03 | Phase 2 | Pending |
|
||||
| THEME-02 | Phase 2 | Complete |
|
||||
| THEME-03 | Phase 2 | Complete |
|
||||
| SEO-01 | Phase 2 | Pending |
|
||||
| SEO-02 | Phase 2 | Pending |
|
||||
| SEO-03 | Phase 2 | Pending |
|
||||
| SEO-03 | Phase 2 | Complete |
|
||||
| SEO-04 | Phase 2 | Pending |
|
||||
| COMP-05 | Phase 2 | Pending |
|
||||
| COMP-06 | Phase 2 | Pending |
|
||||
|
||||
@@ -44,7 +44,7 @@ Plans:
|
||||
5. `http://localhost:3000/sitemap.xml` returns a valid XML sitemap with `hreflang` alternates for FR and EN URLs
|
||||
**Plans**: 3 plans
|
||||
Plans:
|
||||
- [ ] 02-01-PLAN.md — Design system, color-mode, i18n translations, sitemap config
|
||||
- [x] 02-01-PLAN.md — Design system, color-mode, i18n translations, sitemap config
|
||||
- [ ] 02-02-PLAN.md — Header, footer, default layout with nav and toggles
|
||||
- [ ] 02-03-PLAN.md — Per-route SEO metadata and JSON-LD structured data
|
||||
**UI hint**: yes
|
||||
@@ -70,5 +70,5 @@ Phases execute in numeric order: 1 → 2 → 3
|
||||
| Phase | Plans Complete | Status | Completed |
|
||||
|-------|----------------|--------|-----------|
|
||||
| 1. Foundation | 2/2 | Complete | 2026-04-08 |
|
||||
| 2. SSR Shell | 0/3 | Planning complete | - |
|
||||
| 2. SSR Shell | 1/3 | In Progress| |
|
||||
| 3. Pages & Ship | 0/TBD | Not started | - |
|
||||
|
||||
+10
-7
@@ -3,15 +3,15 @@ gsd_state_version: 1.0
|
||||
milestone: v1.0
|
||||
milestone_name: milestone
|
||||
status: executing
|
||||
stopped_at: Phase 2 UI-SPEC approved
|
||||
last_updated: "2026-04-08T14:13:47.745Z"
|
||||
stopped_at: Completed 02-01-PLAN.md
|
||||
last_updated: "2026-04-08T14:23:39.103Z"
|
||||
last_activity: 2026-04-08 -- Phase 2 planning complete
|
||||
progress:
|
||||
total_phases: 3
|
||||
completed_phases: 1
|
||||
total_plans: 5
|
||||
completed_plans: 2
|
||||
percent: 40
|
||||
completed_plans: 3
|
||||
percent: 60
|
||||
---
|
||||
|
||||
# Project State
|
||||
@@ -52,6 +52,7 @@ Progress: [░░░░░░░░░░] 0%
|
||||
- Trend: —
|
||||
|
||||
*Updated after each plan completion*
|
||||
| Phase 02 P01 | 394s | 2 tasks | 6 files |
|
||||
|
||||
## Accumulated Context
|
||||
|
||||
@@ -64,6 +65,8 @@ Recent decisions affecting current work:
|
||||
- Init: SSR mode (not SSG) — i18n cookie detection requires server execution per request
|
||||
- Init: Cookie-only persistence for i18n + theme (SSR-safe, no localStorage)
|
||||
- Init: Static TS data files under `data/` (no @nuxt/content needed)
|
||||
- [Phase 02]: Brand color #85cb85 as Nuxt UI primary via CSS @theme + app.config.ts
|
||||
- [Phase 02]: Emojis stripped from migrated i18n translations for clean SSR
|
||||
|
||||
### Pending Todos
|
||||
|
||||
@@ -77,6 +80,6 @@ None yet.
|
||||
|
||||
## Session Continuity
|
||||
|
||||
Last session: 2026-04-08T13:38:38.967Z
|
||||
Stopped at: Phase 2 UI-SPEC approved
|
||||
Resume file: .planning/phases/02-ssr-shell/02-UI-SPEC.md
|
||||
Last session: 2026-04-08T14:23:39.100Z
|
||||
Stopped at: Completed 02-01-PLAN.md
|
||||
Resume file: None
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
---
|
||||
phase: 02-ssr-shell
|
||||
plan: 01
|
||||
subsystem: design-system-i18n
|
||||
tags: [color-mode, i18n, sitemap, css, config]
|
||||
dependency_graph:
|
||||
requires: []
|
||||
provides: [brand-color-theme, color-mode-cookie, i18n-translations, sitemap-hreflang, og-image]
|
||||
affects: [nuxt.config.ts, app.config.ts]
|
||||
tech_stack:
|
||||
added: []
|
||||
patterns: [tailwind-v4-theme, nuxt-ui-color-mapping, cookie-color-mode]
|
||||
key_files:
|
||||
created:
|
||||
- app/assets/css/main.css
|
||||
- app.config.ts
|
||||
- public/og-image.png
|
||||
modified:
|
||||
- nuxt.config.ts
|
||||
- app/locales/fr.json
|
||||
- app/locales/en.json
|
||||
decisions:
|
||||
- "Emojis stripped from migrated translations for clean SSR rendering"
|
||||
- "og-image.png is placeholder text file pending real 1200x630 image"
|
||||
metrics:
|
||||
duration: 394s
|
||||
completed: 2026-04-08
|
||||
---
|
||||
|
||||
# Phase 02 Plan 01: Design System + i18n Config Summary
|
||||
|
||||
Brand color #85cb85 palette in Tailwind v4 @theme, Nuxt UI primary mapped to brand, color-mode with cookie/dark default, i18n baseUrl for absolute SEO URLs, all translation keys migrated from src/locales/ plus Phase 2 nav/footer/a11y/seo keys.
|
||||
|
||||
## Tasks Completed
|
||||
|
||||
| Task | Name | Commit | Files |
|
||||
|------|------|--------|-------|
|
||||
| 1 | Design system + color-mode + sitemap config | d27b9a3 | app/assets/css/main.css, app.config.ts, nuxt.config.ts, public/og-image.png |
|
||||
| 2 | Migrate i18n translations | 898ef5c | app/locales/fr.json, app/locales/en.json |
|
||||
|
||||
## Deviations from Plan
|
||||
|
||||
### Auto-fixed Issues
|
||||
|
||||
**1. [Rule 2 - Correctness] Stripped emojis from migrated translations**
|
||||
- **Found during:** Task 2
|
||||
- **Issue:** Source src/locales/*.ts files contained emoji characters in translation values which could cause inconsistent SSR/client rendering
|
||||
- **Fix:** Removed all emoji prefixes from translation values during migration
|
||||
- **Files modified:** app/locales/fr.json, app/locales/en.json
|
||||
|
||||
## Known Stubs
|
||||
|
||||
| Stub | File | Reason |
|
||||
|------|------|--------|
|
||||
| Placeholder og-image | public/og-image.png | Text placeholder, needs real 1200x630 PNG image |
|
||||
|
||||
## Verification Results
|
||||
|
||||
- fr.json and en.json valid JSON with all Phase 2 keys (nav, footer, a11y, seo): PASS
|
||||
- app/assets/css/main.css contains --color-brand-500: PASS
|
||||
- app.config.ts contains primary: 'brand': PASS
|
||||
- nuxt.config.ts contains colorMode with cookie storage: PASS
|
||||
- nuxt.config.ts contains baseUrl: PASS
|
||||
- nuxt.config.ts does NOT contain @nuxtjs/color-mode in modules: PASS
|
||||
Reference in New Issue
Block a user