From 10fe8d682243e0486cbcb9261c4ddf776e59b97e Mon Sep 17 00:00:00 2001 From: kayjaydee Date: Tue, 7 Apr 2026 23:30:24 +0200 Subject: [PATCH] docs(01): capture phase context --- .planning/phases/01-foundation/01-CONTEXT.md | 90 ++++++++++++++ .../phases/01-foundation/01-DISCUSSION-LOG.md | 111 ++++++++++++++++++ 2 files changed, 201 insertions(+) create mode 100644 .planning/phases/01-foundation/01-CONTEXT.md create mode 100644 .planning/phases/01-foundation/01-DISCUSSION-LOG.md diff --git a/.planning/phases/01-foundation/01-CONTEXT.md b/.planning/phases/01-foundation/01-CONTEXT.md new file mode 100644 index 0000000..cb2a4fa --- /dev/null +++ b/.planning/phases/01-foundation/01-CONTEXT.md @@ -0,0 +1,90 @@ +# Phase 1: Foundation - Context + +**Gathered:** 2026-04-07 +**Status:** Ready for planning + + +## Phase Boundary + +Le projet Nuxt 4 tourne localement avec tous les modules installés, données migrées sous `data/`, composable `useProjects()` câblé, et TypeScript strict mode passant. Aucune page visible — seulement le squelette technique. + + + + +## Implementation Decisions + +### Structure des données +- **D-01:** Séparer les données projets dans `data/projects.ts` — le composable `useProjects()` ne contient que la logique (filtrage, recherche, findById) +- **D-02:** Les fichiers data stockent des clés de traduction i18n (ex: `'projects.xinko.title'`), les textes FR/EN restent dans les fichiers de locale. Compatible SSR natif Nuxt i18n. +- **D-03:** Resserrer le typage TypeScript — rendre obligatoires les champs toujours présents (`technologies`, `category`, `date`) et garder optionnels uniquement ceux qui varient (`gallery`, `demoUrl`, `longDescription`) + +### Stratégie composables +- **D-04:** Réécrire les composables en style Nuxt natif — auto-imports, `useAppConfig()` au lieu de `useSiteConfig()`, supprimer le wrapper `useI18n` custom (Nuxt i18n le fournit nativement) +- **D-05:** Phase 1 porte uniquement `useProjects()` — les autres composables (`useGallery()`, `useSeo()`, `useTheme()`) viendront dans leur phase respective + +### Assets images +- **D-06:** Images dans `public/images/` — URLs stables (`/images/xinko.webp`), pas de bundling, compatible NuxtImg en Phase 3 +- **D-07:** Format WebP uniquement, pas de fallback JPEG (support navigateur 98%+) + +### Modules Nuxt +- **D-08:** Installer TOUS les modules dès Phase 1 dans `nuxt.config.ts` : @nuxt/ui, @nuxt/eslint, @nuxtjs/i18n, @nuxtjs/color-mode, @nuxtjs/sitemap, nuxt-gtag, @nuxt/image. Configuration minimale pour ceux utilisés en Phase 2-3. +- **D-09:** Utiliser pnpm comme package manager (recommandé par Nuxt, remplace npm) + +### Claude's Discretion +Aucune zone déléguée — toutes les décisions ont été prises par l'utilisateur. + + + + +## Canonical References + +**Downstream agents MUST read these before planning or implementing.** + +No external specs — requirements fully captured in decisions above and in: +- `.planning/REQUIREMENTS.md` — Requirements SSR-01, SSR-02, SSR-03, DATA-01 à DATA-05, INFRA-02, INFRA-03 +- `.planning/ROADMAP.md` — Phase 1 success criteria +- `.planning/codebase/CONVENTIONS.md` — Naming patterns and code style to follow +- `.planning/codebase/STRUCTURE.md` — Current project structure for migration reference +- `src/types/index.ts` — Current type definitions to migrate and tighten +- `src/data/` — Current data files to migrate (faq.ts, techstack.ts, testimonials.ts) +- `src/composables/useProjects.ts` — Current composable to rewrite in Nuxt style + + + + +## Existing Code Insights + +### Reusable Assets +- `src/types/index.ts` — Types `Project`, `ProjectButton`, `Technology`, `TechStack` à migrer et resserrer +- `src/data/faq.ts`, `src/data/techstack.ts`, `src/data/testimonials.ts` — Données statiques à migrer vers `data/` +- `src/composables/useProjects.ts` — Logique de filtrage/recherche à extraire (données inline à séparer) + +### Established Patterns +- Données i18n via fonctions `getXxx(t)` qui appellent `t()` — à remplacer par clés i18n dans les fichiers data +- Composables exportent une seule fonction nommée `export function useXxx()` +- Code style : Prettier (no semi, single quotes, 100 chars), ESLint flat config + +### Integration Points +- Les données projets référencent des images via `@/assets/images/` — à remapper vers `/images/` +- `useProjects()` importe `useI18n` custom — à remplacer par l'auto-import Nuxt i18n + + + + +## Specific Ideas + +No specific requirements — open to standard approaches + + + + +## Deferred Ideas + +None — discussion stayed within phase scope + + + +--- + +*Phase: 01-foundation* +*Context gathered: 2026-04-07* diff --git a/.planning/phases/01-foundation/01-DISCUSSION-LOG.md b/.planning/phases/01-foundation/01-DISCUSSION-LOG.md new file mode 100644 index 0000000..e03f213 --- /dev/null +++ b/.planning/phases/01-foundation/01-DISCUSSION-LOG.md @@ -0,0 +1,111 @@ +# Phase 1: Foundation - Discussion Log + +> **Audit trail only.** Do not use as input to planning, research, or execution agents. +> Decisions are captured in CONTEXT.md — this log preserves the alternatives considered. + +**Date:** 2026-04-07 +**Phase:** 01-foundation +**Areas discussed:** Structure données, Stratégie composables, Assets images, Modules Phase 1 + +--- + +## Structure des données + +| Option | Description | Selected | +|--------|-------------|----------| +| Fichier data séparé | Créer data/projects.ts avec les données brutes, le composable ne fait que la logique | ✓ | +| Garder inline | Laisser les données dans le composable comme actuellement | | + +**User's choice:** Fichier data séparé +**Notes:** — + +| Option | Description | Selected | +|--------|-------------|----------| +| Clés i18n dans data | Les fichiers data stockent des clés de traduction, textes dans les locales | ✓ | +| Textes FR/EN inline | Stocker les textes directement avec objet { fr, en } | | +| Garder pattern t() | Conserver getXxx(t) comme actuellement | | + +**User's choice:** Clés i18n dans data +**Notes:** — + +| Option | Description | Selected | +|--------|-------------|----------| +| Resserrer | Rendre obligatoires les champs toujours présents | ✓ | +| Migrer tel quel | Copier les types sans changement | | +| Claude décide | Analyse des données réelles | | + +**User's choice:** Resserrer +**Notes:** — + +--- + +## Stratégie composables + +| Option | Description | Selected | +|--------|-------------|----------| +| Style Nuxt natif | Réécrire pour auto-imports, useAppConfig(), supprimer useI18n custom | ✓ | +| Wrapper minimal | Copier avec minimum de changements | | +| Claude décide | Analyser chaque composable individuellement | | + +**User's choice:** Style Nuxt natif +**Notes:** — + +| Option | Description | Selected | +|--------|-------------|----------| +| Phase 1 : seulement useProjects | Porter uniquement useProjects() en Phase 1 | ✓ | +| Tout porter maintenant | Migrer tous les composables d'un coup | | + +**User's choice:** Phase 1 : seulement useProjects +**Notes:** — + +--- + +## Assets images + +| Option | Description | Selected | +|--------|-------------|----------| +| public/ | Images dans public/images/, URLs stables, compatible NuxtImg | ✓ | +| assets/ | Images bundlées par Vite avec hash | | +| Claude décide | Choix selon contraintes | | + +**User's choice:** public/ +**Notes:** — + +| Option | Description | Selected | +|--------|-------------|----------| +| WebP uniquement | Garder .webp partout, support 98%+ | ✓ | +| WebP + fallback JPEG | Prévoir fallbacks via | | + +**User's choice:** WebP uniquement +**Notes:** — + +--- + +## Modules Phase 1 + +| Option | Description | Selected | +|--------|-------------|----------| +| Tous en Phase 1 | Installer et configurer tous les modules dès le scaffold | ✓ | +| Progressif par phase | Ajouter module par module selon la phase | | +| Claude décide | Juger selon les dépendances | | + +**User's choice:** Tous en Phase 1 +**Notes:** — + +| Option | Description | Selected | +|--------|-------------|----------| +| npm | Rester sur npm comme le projet actuel | | +| pnpm | Passer à pnpm comme recommandé par Nuxt | ✓ | + +**User's choice:** pnpm +**Notes:** — + +--- + +## Claude's Discretion + +Aucune zone déléguée. + +## Deferred Ideas + +Aucune.