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
This commit is contained in:
@@ -52,11 +52,11 @@ Plans:
|
|||||||
### Phase 3: Pages & Ship
|
### Phase 3: Pages & Ship
|
||||||
**Goal**: All portfolio pages are live, forms work, analytics fire in production, and the Docker image builds and runs
|
**Goal**: All portfolio pages are live, forms work, analytics fire in production, and the Docker image builds and runs
|
||||||
**Depends on**: Phase 2
|
**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):
|
**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)
|
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
|
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
|
5. Google Analytics 4 events appear in GA4 DebugView when browsing in production mode
|
||||||
**Plans**: 4 plans
|
**Plans**: 4 plans
|
||||||
@@ -64,7 +64,7 @@ Plans:
|
|||||||
- [ ] 03-01-PLAN.md — Composants partages + deps + ContactForm + nodemailer server route
|
- [ ] 03-01-PLAN.md — Composants partages + deps + ContactForm + nodemailer server route
|
||||||
- [ ] 03-02-PLAN.md — Landing + Projects + Project Detail pages
|
- [ ] 03-02-PLAN.md — Landing + Projects + Project Detail pages
|
||||||
- [ ] 03-03-PLAN.md — About + Contact + Fiverr + 404 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
|
**UI hint**: yes
|
||||||
|
|
||||||
## Progress
|
## Progress
|
||||||
|
|||||||
@@ -8,18 +8,16 @@ files_modified:
|
|||||||
- Dockerfile
|
- Dockerfile
|
||||||
- docker-compose.yml
|
- docker-compose.yml
|
||||||
- nuxt.config.ts
|
- nuxt.config.ts
|
||||||
- app/pages/formation.vue
|
|
||||||
autonomous: true
|
autonomous: true
|
||||||
requirements:
|
requirements:
|
||||||
- INFRA-01
|
- INFRA-01
|
||||||
- INFRA-04
|
- INFRA-04
|
||||||
- PAGE-07
|
|
||||||
must_haves:
|
must_haves:
|
||||||
truths:
|
truths:
|
||||||
- "docker build -t portfolio . reussit sans erreur"
|
- "docker build -t portfolio . reussit sans erreur"
|
||||||
- "docker run -p 3000:3000 portfolio sert l'app SSR sur port 3000"
|
- "docker run -p 3000:3000 portfolio sert l'app SSR sur port 3000"
|
||||||
- "GA4 est actif uniquement en production"
|
- "GA4 est actif uniquement en production"
|
||||||
- "Route /formation redirige vers / ou retourne 404"
|
- "app/pages/formation.vue n'existe pas, /formation retourne 404"
|
||||||
artifacts:
|
artifacts:
|
||||||
- path: "Dockerfile"
|
- path: "Dockerfile"
|
||||||
provides: "Multi-stage SSR build node:22-alpine"
|
provides: "Multi-stage SSR build node:22-alpine"
|
||||||
@@ -127,8 +125,8 @@ environment:
|
|||||||
</task>
|
</task>
|
||||||
|
|
||||||
<task type="auto">
|
<task type="auto">
|
||||||
<name>Task 2: GA4 production-only + formation redirect + cleanup</name>
|
<name>Task 2: GA4 production-only + legacy cleanup</name>
|
||||||
<files>nuxt.config.ts, app/pages/formation.vue</files>
|
<files>nuxt.config.ts</files>
|
||||||
<action>
|
<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 :
|
**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
|
```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.
|
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 :
|
**Formation** (per D-19) : Completement supprimee. Si `app/pages/formation.vue` existe, le supprimer. Pas de redirection, pas de routeRules — /formation retourne 404 naturellement.
|
||||||
```vue
|
|
||||||
<script setup lang="ts">
|
|
||||||
// D-19: Formation page removed from scope
|
|
||||||
definePageMeta({
|
|
||||||
middleware: () => navigateTo('/', { redirectCode: 301 })
|
|
||||||
})
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
**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.
|
||||||
<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).
|
|
||||||
</action>
|
</action>
|
||||||
<verify>
|
<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>
|
</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>
|
</task>
|
||||||
|
|
||||||
</tasks>
|
</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
|
- `docker run --rm -p 3000:3000 portfolio` sert l'app sur http://localhost:3000
|
||||||
- `curl http://localhost:3000/` retourne du HTML complet SSR
|
- `curl http://localhost:3000/` retourne du HTML complet SSR
|
||||||
- L'image Docker finale est < 300MB (node:22-alpine + .output seulement)
|
- 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>
|
</verification>
|
||||||
|
|
||||||
<success_criteria>
|
<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)
|
- docker-compose port Traefik = 3000 (per D-14)
|
||||||
- Variables env SMTP + GA4 passees via docker-compose environment
|
- Variables env SMTP + GA4 passees via docker-compose environment
|
||||||
- nuxt-gtag actif uniquement en production (per D-15)
|
- 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
|
- .dockerignore exclut node_modules, .nuxt, .output, src, .git
|
||||||
</success_criteria>
|
</success_criteria>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user