docs: create roadmap (3 phases)

This commit is contained in:
2026-04-07 23:24:38 +02:00
parent 7273c6e815
commit 8177ff045a
4 changed files with 486 additions and 5 deletions
+42 -5
View File
@@ -98,13 +98,50 @@
| Requirement | Phase | Status |
|-------------|-------|--------|
| (populated during roadmap creation) | | |
| SSR-01 | Phase 1 | Pending |
| SSR-02 | Phase 1 | Pending |
| SSR-03 | Phase 1 | Pending |
| DATA-01 | Phase 1 | Pending |
| DATA-02 | Phase 1 | Pending |
| DATA-03 | Phase 1 | Pending |
| DATA-04 | Phase 1 | Pending |
| 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-03 | Phase 2 | Pending |
| I18N-04 | Phase 2 | Pending |
| I18N-05 | Phase 2 | Pending |
| THEME-01 | Phase 2 | Pending |
| THEME-02 | Phase 2 | Pending |
| THEME-03 | Phase 2 | Pending |
| SEO-01 | Phase 2 | Pending |
| SEO-02 | Phase 2 | Pending |
| SEO-03 | Phase 2 | Pending |
| SEO-04 | Phase 2 | Pending |
| COMP-05 | Phase 2 | Pending |
| COMP-06 | Phase 2 | Pending |
| PAGE-01 | Phase 3 | Pending |
| PAGE-02 | Phase 3 | Pending |
| PAGE-03 | Phase 3 | Pending |
| PAGE-04 | Phase 3 | Pending |
| PAGE-05 | Phase 3 | Pending |
| PAGE-06 | Phase 3 | Pending |
| PAGE-07 | Phase 3 | Pending |
| PAGE-08 | Phase 3 | Pending |
| COMP-01 | Phase 3 | Pending |
| COMP-02 | Phase 3 | Pending |
| COMP-03 | Phase 3 | Pending |
| COMP-04 | Phase 3 | Pending |
| INFRA-01 | Phase 3 | Pending |
| INFRA-04 | Phase 3 | Pending |
**Coverage:**
- v1 requirements: 35 total
- Mapped to phases: 0
- Unmapped: 35 ⚠️
- v1 requirements: 38 total
- Mapped to phases: 38
- Unmapped: 0 ✓
---
*Requirements defined: 2026-04-07*
*Last updated: 2026-04-07 after initial definition*
*Last updated: 2026-04-07 after roadmap creation*
+67
View File
@@ -0,0 +1,67 @@
# Roadmap: Portfolio Killian Dalcin — Nuxt 4 Migration
## Overview
Three phases following the strict build order from research: first lay the Nuxt 4 project skeleton with all modules configured and data migrated, then implement the SSR-critical cross-cutting concerns (i18n, theme, SEO, header/footer), and finally build all pages and ship to production via Docker. Every page is crawlable by search engines when Phase 3 completes.
## Phases
**Phase Numbering:**
- Integer phases (1, 2, 3): Planned milestone work
- Decimal phases (2.1, 2.2): Urgent insertions (marked with INSERTED)
Decimal phases appear between their surrounding integers in numeric order.
- [ ] **Phase 1: Foundation** - Nuxt 4 project scaffold, all modules configured, static data migrated, composables ported
- [ ] **Phase 2: SSR Shell** - i18n FR/EN, dark/light theme, SEO per route, header + footer layout
- [ ] **Phase 3: Pages & Ship** - All 8 pages, interactive components, EmailJS plugin, GA4, Dockerfile
## Phase Details
### Phase 1: Foundation
**Goal**: The Nuxt 4 project runs locally with all modules installed, data in `data/`, composables wired, and TypeScript strict mode passing
**Depends on**: Nothing (first phase)
**Requirements**: SSR-01, SSR-02, SSR-03, DATA-01, DATA-02, DATA-03, DATA-04, DATA-05, INFRA-02, INFRA-03
**Success Criteria** (what must be TRUE):
1. `nuxt dev` starts without errors and serves a blank app at `localhost:3000`
2. All static data files exist under `data/` and are importable with TypeScript strict — no `any` types
3. `useProjects()` composable returns typed project list and supports filtering by category and search
4. `npx nuxi typecheck` and `npx eslint .` exit with 0 errors
**Plans**: TBD
### Phase 2: SSR Shell
**Goal**: Every route renders the correct language, theme, and SEO metadata on the server — confirmed by `curl` with no JavaScript
**Depends on**: Phase 1
**Requirements**: I18N-01, I18N-02, I18N-03, I18N-04, I18N-05, THEME-01, THEME-02, THEME-03, SEO-01, SEO-02, SEO-03, SEO-04, COMP-05, COMP-06
**Success Criteria** (what must be TRUE):
1. `curl http://localhost:3000` returns French HTML; `curl http://localhost:3000/en/` returns English HTML — no JS required
2. Switching language via the header dropdown persists across page reload (cookie, no FOUC)
3. Toggling dark/light mode in the header persists across page reload with no flash on cold load
4. `curl http://localhost:3000` response includes `<title>`, `og:title`, `og:description`, and JSON-LD script tag
5. `http://localhost:3000/sitemap.xml` returns a valid XML sitemap with `hreflang` alternates for FR and EN URLs
**Plans**: TBD
**UI hint**: yes
### Phase 3: Pages & Ship
**Goal**: All portfolio pages are live, forms work, analytics fire in production, and the Docker image builds and runs
**Depends on**: Phase 2
**Requirements**: PAGE-01, PAGE-02, PAGE-03, PAGE-04, PAGE-05, PAGE-06, PAGE-07, PAGE-08, COMP-01, COMP-02, COMP-03, COMP-04, INFRA-01, INFRA-04
**Success Criteria** (what must be TRUE):
1. All 8 routes (`/`, `/projects`, `/project/[id]`, `/about`, `/contact`, `/fiverr`, `/formation`, 404) return complete HTML when fetched with `curl`
2. Clicking an image in a project detail page opens a modal carousel with keyboard navigation (arrow keys + Escape closes)
3. Submitting the contact form with valid data shows a success toast; EmailJS delivers the email
4. `docker build` completes and `docker run` serves the SSR app on port 3000
5. Google Analytics 4 events appear in GA4 DebugView when browsing in production mode
**Plans**: TBD
**UI hint**: yes
## Progress
**Execution Order:**
Phases execute in numeric order: 1 → 2 → 3
| Phase | Plans Complete | Status | Completed |
|-------|----------------|--------|-----------|
| 1. Foundation | 0/TBD | Not started | - |
| 2. SSR Shell | 0/TBD | Not started | - |
| 3. Pages & Ship | 0/TBD | Not started | - |
+64
View File
@@ -0,0 +1,64 @@
# Project State
## Project Reference
See: .planning/PROJECT.md (updated 2026-04-07)
**Core value:** Chaque page du portfolio doit être crawlable par les moteurs de recherche sans JavaScript côté client
**Current focus:** Phase 1 — Foundation
## Current Position
Phase: 1 of 3 (Foundation)
Plan: 0 of TBD in current phase
Status: Ready to plan
Last activity: 2026-04-07 — Roadmap created, project initialized
Progress: [░░░░░░░░░░] 0%
## Performance Metrics
**Velocity:**
- Total plans completed: 0
- Average duration: —
- Total execution time: 0 hours
**By Phase:**
| Phase | Plans | Total | Avg/Plan |
|-------|-------|-------|----------|
| - | - | - | - |
**Recent Trend:**
- Last 5 plans: —
- Trend: —
*Updated after each plan completion*
## Accumulated Context
### Decisions
Decisions are logged in PROJECT.md Key Decisions table.
Recent decisions affecting current work:
- Init: Use `@nuxtjs/seo` meta-bundle (covers sitemap + og:image + schema-org) instead of standalone modules
- 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)
### Pending Todos
None yet.
### Blockers/Concerns
- Open: Confirm @nuxtjs/i18n v9 stable + Nuxt 4 compatible before Phase 2 planning
- Open: Confirm @nuxt/ui v3 stable (not beta/rc) before Phase 1 planning
- Open: Confirm nuxt-gtag Nuxt 4 compatibility before Phase 3 planning
## Session Continuity
Last session: 2026-04-07
Stopped at: Roadmap created — ready to plan Phase 1
Resume file: None