diff --git a/.planning/REQUIREMENTS.md b/.planning/REQUIREMENTS.md new file mode 100644 index 0000000..f8864a0 --- /dev/null +++ b/.planning/REQUIREMENTS.md @@ -0,0 +1,82 @@ +# Requirements: Portfolio Killian' Dalcin + +**Defined:** 2026-04-10 +**Core Value:** Positionner Killian comme dev Hytale #1, crawlable sans JS, SEO optimise + +## v1 Requirements + +### Content + +- [ ] **CONT-01**: Refonte Hero accueil — "Hytale Plugin Developer" en H1, CTA Discord/contact, bilingue +- [ ] **CONT-02**: Page Hytale dediee `/hytale` — services plugin dev, tiers pricing, demos placeholders, maintenance recurrente, bilingue +- [ ] **CONT-03**: Grille tarifaire — plugin simple/complexe/sur-mesure/maintenance/web avec prix visibles +- [ ] **CONT-04**: Temoignages — section featured + stats sur homepage et page Hytale (5 avis Fiverr existants) + +### SEO + +- [ ] **SEO-01**: Canonical links — `` sur chaque page pour eviter duplication i18n +- [ ] **SEO-02**: ogUrl par page — chaque `useSeoMeta()` inclut `ogUrl` specifique +- [ ] **SEO-03**: og:image par page — images distinctes au lieu du meme og-image.png partout +- [ ] **SEO-04**: JSON-LD complet — Person (homepage), Service (hytale), SoftwareApplication (projets), composable `useJsonLd.ts` +- [ ] **SEO-05**: jobTitle corrige — "Hytale Plugin Developer" dans site.ts et JSON-LD, pas "Full Stack Freelance" + +### i18n + +- [ ] **I18N-01**: Audit complet FR/EN — chaque cle FR doit exister en EN avec traduction reelle +- [ ] **I18N-02**: Qualite traductions FR — reformuler les traductions approximatives/anglicismes +- [ ] **I18N-03**: Hardcoded strings — eliminer toutes les chaines en dur dans les composants (HeroSection, error.vue) +- [ ] **I18N-04**: SEO keys Hytale — title/description/og specifiques pour la page Hytale en FR et EN + +### Fixes + +- [ ] **FIX-01**: Supprimer `public/sitemap.xml` statique — conflit avec `@nuxtjs/sitemap` dynamique +- [ ] **FIX-02**: Dockerfile pnpm — remplacer `npm ci` par `pnpm install --frozen-lockfile` +- [ ] **FIX-03**: Rate limiting contact API — protection anti-spam in-memory sur `/api/contact` +- [ ] **FIX-04**: Donnees incoherentes — `reviewCount: '50'` vs `totalReviews: 10`, Fiverr URLs `#` +- [ ] **FIX-05**: Pinning deps — `vue: "latest"` et `vue-router: "latest"` a pincer sur `^3.5.0` / `^4.5.0` + +### Deployment + +- [ ] **DEPLOY-01**: Dockerfile production corrige — pnpm, node:22-alpine, env vars SMTP/gtag runtime + +## v2 Requirements + +- **CONT-05**: Blog technique — articles Hytale plugin dev pour SEO long-tail +- **SEO-06**: og:image dynamique generee par page +- **FEAT-01**: Formulaire devis en ligne +- **FEAT-02**: Section portfolio Minecraft Java + +## Out of Scope + +| Feature | Reason | +|---------|--------| +| Tests automatises | Ship d'abord, tests ensuite | +| Blog/CMS | Pas de contenu dynamique pour l'instant | +| Dashboard admin | Portfolio statique | +| PWA/Service Workers | Pas de besoin offline | +| Pub payante | Budget zero | +| Payment integration | Paiements via Fiverr ou virement | + +## Traceability + +| Requirement | Phase | Status | +|-------------|-------|--------| +| CONT-01 | TBD | Pending | +| CONT-02 | TBD | Pending | +| CONT-03 | TBD | Pending | +| CONT-04 | TBD | Pending | +| SEO-01 | TBD | Pending | +| SEO-02 | TBD | Pending | +| SEO-03 | TBD | Pending | +| SEO-04 | TBD | Pending | +| SEO-05 | TBD | Pending | +| I18N-01 | TBD | Pending | +| I18N-02 | TBD | Pending | +| I18N-03 | TBD | Pending | +| I18N-04 | TBD | Pending | +| FIX-01 | TBD | Pending | +| FIX-02 | TBD | Pending | +| FIX-03 | TBD | Pending | +| FIX-04 | TBD | Pending | +| FIX-05 | TBD | Pending | +| DEPLOY-01 | TBD | Pending | diff --git a/.planning/ROADMAP.md b/.planning/ROADMAP.md new file mode 100644 index 0000000..4ebf629 --- /dev/null +++ b/.planning/ROADMAP.md @@ -0,0 +1,77 @@ +# 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**: TBD + +### 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 `