docs(03-04): complete Dockerfile SSR + legacy cleanup plan
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -62,10 +62,10 @@
|
|||||||
|
|
||||||
### Infrastructure
|
### Infrastructure
|
||||||
|
|
||||||
- [ ] **INFRA-01**: Dockerfile production multi-stage (node:22-alpine build → node:22-alpine runtime, copie `.output/` uniquement)
|
- [x] **INFRA-01**: Dockerfile production multi-stage (node:22-alpine build → node:22-alpine runtime, copie `.output/` uniquement)
|
||||||
- [ ] **INFRA-02**: TypeScript en mode strict avec interfaces pour toutes les données
|
- [ ] **INFRA-02**: TypeScript en mode strict avec interfaces pour toutes les données
|
||||||
- [ ] **INFRA-03**: ESLint + Prettier configurés via @nuxt/eslint
|
- [ ] **INFRA-03**: ESLint + Prettier configurés via @nuxt/eslint
|
||||||
- [ ] **INFRA-04**: Google Analytics 4 via nuxt-gtag, actif uniquement en production
|
- [x] **INFRA-04**: Google Analytics 4 via nuxt-gtag, actif uniquement en production
|
||||||
|
|
||||||
## v2 Requirements
|
## v2 Requirements
|
||||||
|
|
||||||
@@ -134,8 +134,8 @@
|
|||||||
| COMP-02 | Phase 3 | Complete |
|
| COMP-02 | Phase 3 | Complete |
|
||||||
| COMP-03 | Phase 3 | Complete |
|
| COMP-03 | Phase 3 | Complete |
|
||||||
| COMP-04 | Phase 3 | Complete |
|
| COMP-04 | Phase 3 | Complete |
|
||||||
| INFRA-01 | Phase 3 | Pending |
|
| INFRA-01 | Phase 3 | Complete |
|
||||||
| INFRA-04 | Phase 3 | Pending |
|
| INFRA-04 | Phase 3 | Complete |
|
||||||
|
|
||||||
**Coverage:**
|
**Coverage:**
|
||||||
- v1 requirements: 38 total
|
- v1 requirements: 38 total
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ Decimal phases appear between their surrounding integers in numeric order.
|
|||||||
|
|
||||||
- [x] **Phase 1: Foundation** - Nuxt 4 project scaffold, all modules configured, static data migrated, composables ported
|
- [x] **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 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
|
- [x] **Phase 3: Pages & Ship** - All 8 pages, interactive components, EmailJS plugin, GA4, Dockerfile (completed 2026-04-08)
|
||||||
|
|
||||||
## Phase Details
|
## Phase Details
|
||||||
|
|
||||||
@@ -64,7 +64,7 @@ Plans:
|
|||||||
- [x] 03-01-PLAN.md — Composants partages + deps + ContactForm + nodemailer server route
|
- [x] 03-01-PLAN.md — Composants partages + deps + ContactForm + nodemailer server route
|
||||||
- [x] 03-02-PLAN.md — Landing + Projects + Project Detail pages
|
- [x] 03-02-PLAN.md — Landing + Projects + Project Detail pages
|
||||||
- [x] 03-03-PLAN.md — About + Contact + Fiverr + 404 pages
|
- [x] 03-03-PLAN.md — About + Contact + Fiverr + 404 pages
|
||||||
- [ ] 03-04-PLAN.md — Dockerfile SSR + GA4 config + docker-compose + legacy cleanup
|
- [x] 03-04-PLAN.md — Dockerfile SSR + GA4 config + docker-compose + legacy cleanup
|
||||||
**UI hint**: yes
|
**UI hint**: yes
|
||||||
|
|
||||||
## Progress
|
## Progress
|
||||||
@@ -76,4 +76,4 @@ Phases execute in numeric order: 1 → 2 → 3
|
|||||||
|-------|----------------|--------|-----------|
|
|-------|----------------|--------|-----------|
|
||||||
| 1. Foundation | 2/2 | Complete | 2026-04-08 |
|
| 1. Foundation | 2/2 | Complete | 2026-04-08 |
|
||||||
| 2. SSR Shell | 3/3 | Complete | 2026-04-08 |
|
| 2. SSR Shell | 3/3 | Complete | 2026-04-08 |
|
||||||
| 3. Pages & Ship | 3/4 | In Progress| |
|
| 3. Pages & Ship | 4/4 | Complete | 2026-04-08 |
|
||||||
|
|||||||
+9
-7
@@ -3,15 +3,15 @@ gsd_state_version: 1.0
|
|||||||
milestone: v1.0
|
milestone: v1.0
|
||||||
milestone_name: milestone
|
milestone_name: milestone
|
||||||
status: executing
|
status: executing
|
||||||
stopped_at: Completed 03-03-PLAN.md
|
stopped_at: Completed 03-04-PLAN.md
|
||||||
last_updated: "2026-04-08T16:39:12.051Z"
|
last_updated: "2026-04-08T16:41:35.206Z"
|
||||||
last_activity: 2026-04-08 -- Phase 3 Plan 02 main pages executed
|
last_activity: 2026-04-08 -- Phase 3 Plan 02 main pages executed
|
||||||
progress:
|
progress:
|
||||||
total_phases: 3
|
total_phases: 3
|
||||||
completed_phases: 2
|
completed_phases: 3
|
||||||
total_plans: 9
|
total_plans: 9
|
||||||
completed_plans: 8
|
completed_plans: 9
|
||||||
percent: 89
|
percent: 100
|
||||||
---
|
---
|
||||||
|
|
||||||
# Project State
|
# Project State
|
||||||
@@ -58,6 +58,7 @@ Progress: [███████░░░] 78%
|
|||||||
| Phase 03-pages-ship P01 | 239 | 3 tasks | 17 files |
|
| Phase 03-pages-ship P01 | 239 | 3 tasks | 17 files |
|
||||||
| Phase 03-pages-ship P02 | 103s | 3 tasks | 3 files |
|
| Phase 03-pages-ship P02 | 103s | 3 tasks | 3 files |
|
||||||
| Phase 03 P03 | 129s | 3 tasks | 6 files |
|
| Phase 03 P03 | 129s | 3 tasks | 6 files |
|
||||||
|
| Phase 03 P04 | 59s | 2 tasks | 169 files |
|
||||||
|
|
||||||
## Accumulated Context
|
## Accumulated Context
|
||||||
|
|
||||||
@@ -76,6 +77,7 @@ Recent decisions affecting current work:
|
|||||||
- [Phase 02]: Renamed a11y.github to a11y.gitea to match actual Gitea hosting
|
- [Phase 02]: Renamed a11y.github to a11y.gitea to match actual Gitea hosting
|
||||||
- [Phase 03-pages-ship]: HTML escaping added to nodemailer email body for XSS prevention
|
- [Phase 03-pages-ship]: HTML escaping added to nodemailer email body for XSS prevention
|
||||||
- [Phase 03]: Fiverr page reuses homeFAQs; UIcon replaces raw SVG paths
|
- [Phase 03]: Fiverr page reuses homeFAQs; UIcon replaces raw SVG paths
|
||||||
|
- [Phase 03]: Dockerfile uses node:22-alpine for both stages, no nginx
|
||||||
|
|
||||||
### Pending Todos
|
### Pending Todos
|
||||||
|
|
||||||
@@ -89,6 +91,6 @@ None yet.
|
|||||||
|
|
||||||
## Session Continuity
|
## Session Continuity
|
||||||
|
|
||||||
Last session: 2026-04-08T16:39:12.049Z
|
Last session: 2026-04-08T16:41:35.203Z
|
||||||
Stopped at: Completed 03-03-PLAN.md
|
Stopped at: Completed 03-04-PLAN.md
|
||||||
Resume file: None
|
Resume file: None
|
||||||
|
|||||||
@@ -0,0 +1,58 @@
|
|||||||
|
---
|
||||||
|
phase: 03-pages-ship
|
||||||
|
plan: 04
|
||||||
|
subsystem: infrastructure-cleanup
|
||||||
|
tags: [dockerfile, docker, ssr, ga4, legacy-cleanup, traefik]
|
||||||
|
dependency_graph:
|
||||||
|
requires: [03-02-PLAN, 03-03-PLAN]
|
||||||
|
provides: [ssr-dockerfile, docker-compose-traefik, clean-repo]
|
||||||
|
affects: []
|
||||||
|
tech_stack:
|
||||||
|
added: []
|
||||||
|
patterns: [multi-stage Dockerfile node:22-alpine, .output SSR deploy, Traefik port 3000]
|
||||||
|
key_files:
|
||||||
|
created:
|
||||||
|
- .dockerignore
|
||||||
|
modified:
|
||||||
|
- Dockerfile
|
||||||
|
- docker-compose.yml
|
||||||
|
decisions:
|
||||||
|
- "Dockerfile uses node:22-alpine for both build and runtime stages (no nginx)"
|
||||||
|
- "SMTP and GA4 env vars injected via docker-compose environment section"
|
||||||
|
- "Formation page not redirected — returns 404 naturally per D-19"
|
||||||
|
- "GA4 nuxt-gtag config already correct from Plan 01 — no changes needed"
|
||||||
|
metrics:
|
||||||
|
duration: 59s
|
||||||
|
completed: 2026-04-08
|
||||||
|
tasks: 2
|
||||||
|
files: 169
|
||||||
|
---
|
||||||
|
|
||||||
|
# Phase 03 Plan 04: Dockerfile SSR + GA4 + Legacy Cleanup Summary
|
||||||
|
|
||||||
|
Multi-stage Dockerfile rewritten from nginx/dist to node:22-alpine build+runtime copying .output/ with node server, docker-compose Traefik port updated 80->3000 with SMTP/GA4 env vars, 166 legacy SPA files deleted (src/, old/, nginx.conf, index.html, eslint.config.ts, env.d.ts).
|
||||||
|
|
||||||
|
## Task Results
|
||||||
|
|
||||||
|
| Task | Name | Commit | Key Files |
|
||||||
|
|------|------|--------|-----------|
|
||||||
|
| 1 | Dockerfile SSR multi-stage + docker-compose Traefik port 3000 | 39749c6 | Dockerfile, .dockerignore, docker-compose.yml |
|
||||||
|
| 2 | GA4 production-only + legacy cleanup | 081ed03 | 166 files deleted (src/, old/, nginx.conf, index.html, eslint.config.ts, env.d.ts) |
|
||||||
|
|
||||||
|
## Deviations from Plan
|
||||||
|
|
||||||
|
None - plan executed exactly as written.
|
||||||
|
|
||||||
|
## Verification
|
||||||
|
|
||||||
|
- Dockerfile uses node:22-alpine in 2 stages, copies .output/, CMD node /app/.output/server/index.mjs
|
||||||
|
- .dockerignore excludes node_modules, .nuxt, .output, src, .git, .planning
|
||||||
|
- docker-compose.yml loadbalancer.server.port=3000
|
||||||
|
- docker-compose.yml has NUXT_SMTP_HOST/USER/PASS/TO and NUXT_PUBLIC_GTAG_ID env vars (${VAR} references, no hardcoded secrets)
|
||||||
|
- nuxt-gtag enabled only in production (import.meta.env.NODE_ENV === 'production')
|
||||||
|
- runtimeConfig.public.gtag.id present for runtime injection
|
||||||
|
- No app/pages/formation.vue exists — /formation returns 404
|
||||||
|
- src/ directory completely removed
|
||||||
|
- old/, nginx.conf, index.html, eslint.config.ts, env.d.ts removed
|
||||||
|
|
||||||
|
## Self-Check: PASSED
|
||||||
Reference in New Issue
Block a user