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.