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 `

` + 2. `/hytale` existe avec 3+ tiers de pricing visibles et un CTA contact/Discord + 3. `app/data/site.ts` contient `jobTitle: 'Hytale Plugin Developer'` + 4. Les temoignages apparaissent sur la homepage ET la page Hytale + 5. Tout le contenu est bilingue — `curl localhost:3000/en/hytale` retourne du contenu anglais +**Plans**: TBD +**UI hint**: yes + +### Phase 3: SEO & i18n +**Goal**: Chaque page a des meta tags complets, JSON-LD, canonical links, et des traductions FR/EN naturelles et completes +**Depends on**: Phase 2 +**Requirements**: SEO-01, SEO-02, SEO-03, SEO-04, I18N-01, I18N-02, I18N-03, I18N-04 +**Success Criteria** (what must be TRUE): + 1. `curl localhost:3000` retourne `` et `ogUrl` dans le HTML + 2. `curl localhost:3000/hytale` retourne un JSON-LD `Service` avec les 3 tiers + 3. `curl localhost:3000/en/` retourne du HTML anglais sans hardcoded French strings + 4. Aucun composant ne contient de chaine en dur (grep pour strings hors `t()` dans les templates) + 5. Les traductions FR sonnent naturel — pas de calque anglais +**Plans**: TBD + +### Phase 4: Ship +**Goal**: Le site est deployable en production via Docker et passe tous les checks +**Depends on**: Phase 3 +**Requirements**: DEPLOY-01 +**Success Criteria** (what must be TRUE): + 1. `docker build` complete sans erreur + 2. Le container sert le site SSR sur le port attendu + 3. `pnpm typecheck` et `pnpm lint` passent avec 0 erreurs + 4. `curl` sur chaque page retourne ``, `<meta description>`, `og:title` dans le HTML brut +**Plans**: TBD + +--- + +## Progress + +| Phase | Plans Complete | Status | Completed | +|-------|----------------|--------|-----------| +| 1. Cleanup & Fixes | 0/? | Not started | - | +| 2. Content | 0/? | Not started | - | +| 3. SEO & i18n | 0/? | Not started | - | +| 4. Ship | 0/? | Not started | - | diff --git a/.planning/STATE.md b/.planning/STATE.md new file mode 100644 index 0000000..3d058f5 --- /dev/null +++ b/.planning/STATE.md @@ -0,0 +1,28 @@ +--- +gsd_state_version: 1.0 +milestone: v1.0 +milestone_name: Portfolio Hytale-first +status: planning +last_updated: "2026-04-10" +last_activity: 2026-04-10 -- Project initialized with research +progress: + total_phases: 4 + completed_phases: 0 + total_plans: 0 + completed_plans: 0 + percent: 0 +--- + +# Project State + +## Project Reference +- PROJECT.md: .planning/PROJECT.md +- REQUIREMENTS.md: .planning/REQUIREMENTS.md +- ROADMAP.md: .planning/ROADMAP.md + +## Current Focus +Phase 1: Cleanup & Fixes — ready for planning + +## Session Notes +- Project initialized 2026-04-10 with codebase mapping + 4-agent research +- Brownfield: Nuxt 4 SSR portfolio already functional, needs content pivot to Hytale + SEO fixes