From a512d3a45180f18919e6f5a569117bb76efe72e9 Mon Sep 17 00:00:00 2001 From: kayjaydee Date: Tue, 21 Apr 2026 11:09:29 +0200 Subject: [PATCH] =?UTF-8?q?docs:=20start=20milestone=20v1.1=20=E2=80=94=20?= =?UTF-8?q?SEO=20Hytale,=20Autorit=C3=A9=20&=20Contenu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .planning/MILESTONES.md | 15 +++++ .planning/PROJECT.md | 13 ++++- .planning/REQUIREMENTS.md | 115 +++++++++++++++++++++++--------------- .planning/STATE.md | 31 +++++----- 4 files changed, 115 insertions(+), 59 deletions(-) create mode 100644 .planning/MILESTONES.md diff --git a/.planning/MILESTONES.md b/.planning/MILESTONES.md new file mode 100644 index 0000000..fb1e194 --- /dev/null +++ b/.planning/MILESTONES.md @@ -0,0 +1,15 @@ +# Milestones + +## M1 — Portfolio Hytale-first, SEO-ready, production + +**Version:** v1.0 +**Completed:** 2026-04-21 +**Phases:** 4 + +**Delivered:** +- Hero Hytale-first avec H1 "Hytale Plugin Developer" +- Page `/hytale` avec pricing 3 tiers, témoignages +- SEO complet : canonical, ogUrl, og:image, JSON-LD, sitemap dynamique +- i18n bilingue FR/EN audit complet +- Dockerfile SSR pnpm, rate limiting contact form +- Déployé en production sur killiandalcin.fr diff --git a/.planning/PROJECT.md b/.planning/PROJECT.md index 3686103..e4623d5 100644 --- a/.planning/PROJECT.md +++ b/.planning/PROJECT.md @@ -8,6 +8,17 @@ Portfolio professionnel de Killian' Dalcin, developpeur freelance specialise en Le portfolio doit positionner Killian comme LE developpeur de plugins Hytale professionnel — pas un "dev web freelance generique" perdu parmi 500 000 autres. Chaque page doit etre crawlable sans JavaScript (SSR), avec un SEO optimise pour le marche Hytale. +## Current Milestone: v1.1 — SEO Hytale — Autorité & Contenu + +**Goal:** Dominer les requêtes Hytale sur Google via un blog markdown complet (tutos, guides, news) combiné à un SEO on-page renforcé — deux leviers pour ranker sur les mots-clés directs ET capter le trafic longue traîne. + +**Target features:** +- Blog markdown avec renderer complet (syntax highlighting, images, embeds, tables, alerts) +- Articles Hytale bilingues FR/EN (tutos, guides, contenus communauté) +- SEO par article : JSON-LD Article, og:image, canonical, sitemap étendu +- Cocon sémantique : liens internes blog ↔ page /hytale +- Open Graph peaufiné par article + ## Requirements ### Validated @@ -39,7 +50,7 @@ Le portfolio doit positionner Killian comme LE developpeur de plugins Hytale pro ### Out of Scope - Tests automatises — priorite au shipping, tests si necessaire apres -- Blog/CMS — pas de contenu dynamique pour l'instant +- Blog/CMS — promu en Active pour M1.1 (blog markdown statique) - Dashboard admin — portfolio statique - PWA/Service Workers — pas de besoin offline - Pub payante — budget zero diff --git a/.planning/REQUIREMENTS.md b/.planning/REQUIREMENTS.md index f8864a0..9d50f92 100644 --- a/.planning/REQUIREMENTS.md +++ b/.planning/REQUIREMENTS.md @@ -1,82 +1,107 @@ # Requirements: Portfolio Killian' Dalcin **Defined:** 2026-04-10 +**Updated:** 2026-04-21 (v1.1 added) **Core Value:** Positionner Killian comme dev Hytale #1, crawlable sans JS, SEO optimise -## v1 Requirements +## v1 Requirements (M1 — Complété 2026-04-21) ### 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) +- [x] **CONT-01**: Refonte Hero accueil — "Hytale Plugin Developer" en H1, CTA Discord/contact, bilingue +- [x] **CONT-02**: Page Hytale dediee `/hytale` — services plugin dev, tiers pricing, demos placeholders, maintenance recurrente, bilingue +- [x] **CONT-03**: Grille tarifaire — plugin simple/complexe/sur-mesure/maintenance/web avec prix visibles +- [x] **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" +- [x] **SEO-01**: Canonical links — `` sur chaque page pour eviter duplication i18n +- [x] **SEO-02**: ogUrl par page — chaque `useSeoMeta()` inclut `ogUrl` specifique +- [x] **SEO-03**: og:image par page — images distinctes au lieu du meme og-image.png partout +- [x] **SEO-04**: JSON-LD complet — Person (homepage), Service (hytale), SoftwareApplication (projets), composable `useJsonLd.ts` +- [x] **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 +- [x] **I18N-01**: Audit complet FR/EN — chaque cle FR doit exister en EN avec traduction reelle +- [x] **I18N-02**: Qualite traductions FR — reformuler les traductions approximatives/anglicismes +- [x] **I18N-03**: Hardcoded strings — eliminer toutes les chaines en dur dans les composants +- [x] **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` +- [x] **FIX-01**: Supprimer `public/sitemap.xml` statique — conflit avec `@nuxtjs/sitemap` dynamique +- [x] **FIX-02**: Dockerfile pnpm — remplacer `npm ci` par `pnpm install --frozen-lockfile` +- [x] **FIX-03**: Rate limiting contact API — protection anti-spam in-memory sur `/api/contact` +- [x] **FIX-04**: Donnees incoherentes — `reviewCount: '50'` vs `totalReviews: 10`, Fiverr URLs `#` +- [x] **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 +- [x] **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 +## v1.1 Requirements (M1.1 — SEO Hytale — Autorité & Contenu) + +### Blog — Système + +- [ ] **BLOG-01**: Intégration `@nuxt/content` ou équivalent — renderer markdown complet (syntax highlighting, images, embeds, tables, callouts/alerts) +- [ ] **BLOG-02**: Page listing `/blog` — liste de tous les articles avec titre, description, date, tags, SSR +- [ ] **BLOG-03**: Page article `/blog/[slug]` — rendu SSR complet, table des matières, navigation prev/next +- [ ] **BLOG-04**: Blocs de code avec syntax highlighting (Kotlin, Java, TypeScript, Shell prioritaires pour Hytale) +- [ ] **BLOG-05**: Support images dans articles — images optimisées avec `` ou `` + +### Blog — Contenu + +- [ ] **BLOG-06**: Articles bilingues FR/EN — structure i18n dans le système de contenu +- [ ] **BLOG-07**: Au moins 2 articles seed Hytale au lancement (ex: "How to build your first Hytale plugin", "Hytale plugin development in 2026") + +### SEO — Blog + +- [ ] **SEO-10**: `useSeoMeta()` par article — title, description, og:title, og:description, og:image uniques +- [ ] **SEO-11**: JSON-LD `Article` par billet de blog — author, datePublished, dateModified, headline +- [ ] **SEO-12**: Sitemap étendu — URLs `/blog/[slug]` et `/en/blog/[slug]` incluses automatiquement +- [ ] **SEO-13**: Open Graph image par article — og:image spécifique (image de l'article ou fallback branded) + +### SEO — Cocon sémantique + +- [ ] **SEO-14**: Liens internes structurés — articles de blog pointent vers `/hytale`, page `/hytale` liste les articles récents +- [ ] **SEO-15**: BreadcrumbList JSON-LD sur les pages blog (Accueil → Blog → Article) + +## Future Requirements (backlog) + +- **SEO-06**: og:image dynamique générée par page (OG image generator) - **FEAT-01**: Formulaire devis en ligne - **FEAT-02**: Section portfolio Minecraft Java +- **CONT-08**: Newsletter / liste email pour communauté Hytale ## 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 | +| Dashboard admin | Blog statique markdown, pas de CMS | | PWA/Service Workers | Pas de besoin offline | | Pub payante | Budget zero | | Payment integration | Paiements via Fiverr ou virement | +| Core Web Vitals | Milestone dédié si besoin | +| OG image generator | Complexité vs impact — backlog | -## Traceability +## Traceability v1.1 | 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 | +| BLOG-01 | TBD | Pending | +| BLOG-02 | TBD | Pending | +| BLOG-03 | TBD | Pending | +| BLOG-04 | TBD | Pending | +| BLOG-05 | TBD | Pending | +| BLOG-06 | TBD | Pending | +| BLOG-07 | TBD | Pending | +| SEO-10 | TBD | Pending | +| SEO-11 | TBD | Pending | +| SEO-12 | TBD | Pending | +| SEO-13 | TBD | Pending | +| SEO-14 | TBD | Pending | +| SEO-15 | TBD | Pending | diff --git a/.planning/STATE.md b/.planning/STATE.md index 9fa94ea..1297167 100644 --- a/.planning/STATE.md +++ b/.planning/STATE.md @@ -1,15 +1,15 @@ --- gsd_state_version: 1.0 -milestone: v1.0 -milestone_name: milestone -status: Complete +milestone: v1.1 +milestone_name: SEO Hytale — Autorité & Contenu +status: In Progress last_updated: "2026-04-21T00:00:00.000Z" progress: - total_phases: 4 - completed_phases: 4 - total_plans: 7 - completed_plans: 7 - percent: 100 + total_phases: 0 + completed_phases: 0 + total_plans: 0 + completed_plans: 0 + percent: 0 --- # Project State @@ -22,10 +22,15 @@ progress: ## Current Focus -Milestone M1 complet — déployé en production sur killiandalcin.fr +Phase: Not started (defining requirements) +Plan: — +Status: Defining requirements +Last activity: 2026-04-21 — Milestone v1.1 started -## Session Notes +## Accumulated Context -- 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 -- Phase 1 vérifiée complète le 2026-04-21 (commits appliqués hors GSD tracking) +- M1 complet — déployé en production sur killiandalcin.fr +- Stack : Nuxt 4 SSR + Nuxt UI v3 + Tailwind v4 + pnpm +- Blog/CMS était Out of Scope en M1, promu en priorité principale pour M1.1 +- Renderer markdown doit supporter : syntax highlighting, images, embeds, tables, alerts — utiliser un package existant (ex: @nuxtjs/mdc ou @nuxt/content) +- Objectif double : ranker sur "Hytale plugin developer" ET capter trafic longue traîne via contenu communauté