# Roadmap: Portfolio Killian' Dalcin **Milestone:** M1 — Portfolio Hytale-first, SEO-ready, production **Granularity:** Coarse **Coverage:** 19/19 requirements mapped --- ## Phases - [ ] **Phase 1: Cleanup & Fixes** - Sitemap conflit, Dockerfile pnpm, deps pinning, donnees incoherentes, rate limiting - [ ] **Phase 2: Content** - Hero Hytale, page Hytale, pricing, temoignages, jobTitle - [ ] **Phase 3: SEO & i18n** - Canonical, ogUrl, og:image, JSON-LD, audit i18n, traductions - [ ] **Phase 4: Ship** - Dockerfile final, verification production, deploy --- ## Phase Details ### Phase 1: Cleanup & Fixes **Goal**: Le codebase est propre — pas de conflits de config, deps pinees, contact form protege, donnees coherentes **Depends on**: Nothing **Requirements**: FIX-01, FIX-02, FIX-03, FIX-04, FIX-05, DEPLOY-01 **Success Criteria** (what must be TRUE): 1. `public/sitemap.xml` supprime — `curl localhost:3000/sitemap.xml` retourne le sitemap dynamique genere par `@nuxtjs/sitemap` 2. `Dockerfile` utilise `pnpm install --frozen-lockfile` — `docker build` reussit sans npm 3. `package.json` ne contient ni `"latest"` ni `"*"` dans les deps 4. `siteConfig.seo.organization.aggregateRating.reviewCount` correspond a `testimonials.totalReviews` 5. 10 requetes POST rapides sur `/api/contact` → les dernieres sont rejetees (rate limit) **Plans:** 2 plans Plans: - [ ] 01-01-PLAN.md — Delete static sitemap, pin deps, fix data inconsistencies - [ ] 01-02-PLAN.md — Migrate Dockerfile to pnpm, add contact API rate limiting ### Phase 2: Content **Goal**: Un visiteur comprend immediatement que Killian est dev Hytale, peut voir les services/prix, et lire des temoignages clients **Depends on**: Phase 1 **Requirements**: CONT-01, CONT-02, CONT-03, CONT-04, SEO-05 **Success Criteria** (what must be TRUE): 1. Le H1 de la homepage contient "Hytale" — `curl localhost:3000 | grep -i hytale` dans le `