docs(03): fix plan blockers — remove formation completely, cleanup legacy

- Remove PAGE-07 from requirements (formation deleted per D-19)
- No redirect, /formation returns 404 naturally
- Plan 04 now includes full legacy src/ cleanup
- Update success criteria: 7 routes, SMTP instead of EmailJS

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-08 18:29:39 +02:00
parent 3e38ea02b1
commit b10ff2bc0b
2 changed files with 13 additions and 28 deletions
+4 -4
View File
@@ -52,11 +52,11 @@ Plans:
### 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
**Requirements**: PAGE-01, PAGE-02, PAGE-03, PAGE-04, PAGE-05, PAGE-06, 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`
1. All 7 routes (`/`, `/projects`, `/project/[id]`, `/about`, `/contact`, `/fiverr`, 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
3. Submitting the contact form with valid data shows a success toast; SMTP delivers the email via nodemailer
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**: 4 plans
@@ -64,7 +64,7 @@ Plans:
- [ ] 03-01-PLAN.md — Composants partages + deps + ContactForm + nodemailer server route
- [ ] 03-02-PLAN.md — Landing + Projects + Project Detail pages
- [ ] 03-03-PLAN.md — About + Contact + Fiverr + 404 pages
- [ ] 03-04-PLAN.md — Dockerfile SSR + GA4 config + docker-compose + formation redirect
- [ ] 03-04-PLAN.md — Dockerfile SSR + GA4 config + docker-compose + legacy cleanup
**UI hint**: yes
## Progress
+9 -24
View File
@@ -8,18 +8,16 @@ files_modified:
- Dockerfile
- docker-compose.yml
- nuxt.config.ts
- app/pages/formation.vue
autonomous: true
requirements:
- INFRA-01
- INFRA-04
- PAGE-07
must_haves:
truths:
- "docker build -t portfolio . reussit sans erreur"
- "docker run -p 3000:3000 portfolio sert l'app SSR sur port 3000"
- "GA4 est actif uniquement en production"
- "Route /formation redirige vers / ou retourne 404"
- "app/pages/formation.vue n'existe pas, /formation retourne 404"
artifacts:
- path: "Dockerfile"
provides: "Multi-stage SSR build node:22-alpine"
@@ -127,8 +125,8 @@ environment:
</task>
<task type="auto">
<name>Task 2: GA4 production-only + formation redirect + cleanup</name>
<files>nuxt.config.ts, app/pages/formation.vue</files>
<name>Task 2: GA4 production-only + legacy cleanup</name>
<files>nuxt.config.ts</files>
<action>
**GA4 nuxt-gtag** (per D-15, INFRA-04) : Verifier/mettre a jour `nuxt.config.ts` pour que nuxt-gtag soit configure correctement. Le config existant a deja :
```typescript
@@ -139,27 +137,14 @@ gtag: {
```
Verifier que `runtimeConfig.public.gtag.id` est bien present (deja fait en Plan 01 pour SMTP). Le `NUXT_PUBLIC_GTAG_ID` sera injecte au runtime sans rebuild (per D-13). Rien a changer si deja correct — juste verifier.
**Page Formation** (per D-19) : La page formation est supprimee. Si `app/pages/formation.vue` existe comme stub, le remplacer par une redirection :
```vue
<script setup lang="ts">
// D-19: Formation page removed from scope
definePageMeta({
middleware: () => navigateTo('/', { redirectCode: 301 })
})
</script>
**Formation** (per D-19) : Completement supprimee. Si `app/pages/formation.vue` existe, le supprimer. Pas de redirection, pas de routeRules — /formation retourne 404 naturellement.
<template>
<div />
</template>
```
Si le fichier n'existe pas, le creer quand meme pour eviter les 404 sur d'anciens liens.
**Nettoyage :** NE PAS supprimer le dossier `src/` dans cette phase — il sert de reference et sera nettoye dans une future phase de maintenance. Supprimer uniquement `nginx.conf` s'il existe (plus utile avec le Dockerfile SSR).
**Nettoyage complet legacy :** Supprimer le dossier `src/`, `old/`, `nginx.conf`, `index.html`, `eslint.config.ts`, `env.d.ts` — tout le legacy de l'ancien SPA Vue. Le repo doit etre propre apres cette phase.
</action>
<verify>
<automated>cd C:/Users/minit/Desktop/portfolio/portfolio && grep -q "production" nuxt.config.ts && grep -q "navigateTo\|redirect" app/pages/formation.vue && echo "PASS"</automated>
<automated>cd C:/Users/minit/Desktop/portfolio/portfolio && grep -q "production" nuxt.config.ts && ! test -f app/pages/formation.vue && ! test -d src && echo "PASS"</automated>
</verify>
<done>GA4 nuxt-gtag actif en production via runtimeConfig, formation.vue redirige vers /, nginx.conf supprime si present</done>
<done>GA4 nuxt-gtag actif en production via runtimeConfig, formation completement supprimee, legacy src/ et fichiers SPA supprimes</done>
</task>
</tasks>
@@ -184,7 +169,7 @@ Si le fichier n'existe pas, le creer quand meme pour eviter les 404 sur d'ancien
- `docker run --rm -p 3000:3000 portfolio` sert l'app sur http://localhost:3000
- `curl http://localhost:3000/` retourne du HTML complet SSR
- L'image Docker finale est < 300MB (node:22-alpine + .output seulement)
- `/formation` redirige vers `/` avec status 301
- `/formation` retourne 404 (page supprimee per D-19)
</verification>
<success_criteria>
@@ -192,7 +177,7 @@ Si le fichier n'existe pas, le creer quand meme pour eviter les 404 sur d'ancien
- docker-compose port Traefik = 3000 (per D-14)
- Variables env SMTP + GA4 passees via docker-compose environment
- nuxt-gtag actif uniquement en production (per D-15)
- formation.vue redirige vers / en 301 (per D-19)
- /formation retourne 404 (D-19), legacy src/ et fichiers SPA supprimes
- .dockerignore exclut node_modules, .nuxt, .output, src, .git
</success_criteria>