--- phase: 01-foundation plan: 02 subsystem: data-layer tags: [data, composables, i18n, images] dependency_graph: requires: [01-01] provides: [data-projects, data-testimonials, data-faq, data-techstack, composable-useProjects] affects: [all-pages, project-detail] tech_stack: added: [] patterns: [i18n-keys-for-text, public-images, nuxt-auto-imports] key_files: created: - app/data/projects.ts - app/data/testimonials.ts - app/data/faq.ts - app/data/techstack.ts - app/composables/useProjects.ts - public/images/ (74 WebP files) modified: - shared/types/index.ts decisions: - Added title/description/longDescription to Project interface (missing from Plan 01 types) metrics: duration: ~3min completed: 2026-04-08 --- # Phase 01 Plan 02: Static Data Migration Summary Migration des 4 fichiers de donnees statiques, 74 images WebP, et creation du composable useProjects() avec support i18n natif Nuxt. ## Commits | Task | Commit | Description | |------|--------|-------------| | 1 | `2b97bc7` | Migrate static data files and images to Nuxt structure | | 2 | `55019f6` | Create useProjects() composable with i18n support | ## What Was Done ### Task 1: Static Data & Images Migration - Created 4 data files in `app/data/` importing types from `~~/shared/types` - Copied 74 WebP images (70 root + 4 flowboard gallery) to `public/images/` - All image paths use `/images/` instead of `@/assets/images/` - FAQ data uses i18n keys (`questionKey`, `answerKey`, `featuresKey`) instead of direct text - Projects data stored as `Omit[]` since text comes from i18n ### Task 2: useProjects() Composable - Created Nuxt-native composable using auto-imports (`computed`, `useI18n`, `Ref`) - Returns: `projects`, `featuredProjects`, `filterByCategory()`, `search()`, `findById()` - i18n keys follow `projects.${id}.title` pattern - Typecheck passes cleanly ## Deviations from Plan ### Auto-fixed Issues **1. [Rule 3 - Blocking] Added title/description/longDescription to Project interface** - **Found during:** Task 2 - **Issue:** Plan 01 created Project interface without title/description/longDescription fields, but useProjects() maps these from i18n - **Fix:** Added `title: string`, `description: string`, `longDescription?: string` to Project in shared/types/index.ts - **Files modified:** shared/types/index.ts - **Commit:** 55019f6 ## Verification - `npx nuxi typecheck` exits cleanly (0) - No file in app/data/ contains `@/assets/images/` - useProjects() exports 5 members: projects, featuredProjects, filterByCategory, search, findById - public/images/ contains 74 WebP files ## Self-Check: PASSED