Files
portfolio/.planning/PROJECT.md
T
kayjaydee c8dac9ac88 fix: update portfolio branding to "Killian' DAL-CIN" across all documentation and components
- Corrected the name in various files including CLAUDE.md, README.md, and configuration files to reflect the updated branding.
- Ensured consistency in the use of the new name throughout the project, enhancing brand identity.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 19:54:46 +02:00

4.6 KiB

Portfolio Killian' DAL-CIN — Migration Nuxt 4

What This Is

Migration complète d'un portfolio freelance de Vue 3 SPA vers Nuxt 4 avec SSR complet. Le site présente les projets, services et compétences de Killian' DAL-CIN, développeur freelance, avec support bilingue FR/EN. L'objectif est un SEO parfait et un développement rapide via des composants prêts à l'emploi (Nuxt UI v3).

Core Value

Chaque page du portfolio doit être crawlable par les moteurs de recherche sans JavaScript côté client — le SSR est la raison d'être de cette migration.

Requirements

Validated

(None yet — ship to validate)

Active

  • SSR complet — chaque route crawlable sans JS client
  • i18n FR/EN — détection navigateur + switch manuel + persistance cookie (SSR-safe)
  • Dark/light mode — persistance cookie SSR-safe via @nuxtjs/color-mode, pas de FOUC
  • SEO par route — useSeoMeta(), og:image auto, JSON-LD page home
  • Sitemap.xml généré automatiquement (@nuxtjs/sitemap)
  • Galerie modale images projets — UModal de Nuxt UI v3
  • Formulaire contact — UForm + UInput + UTextarea (Nuxt UI), envoi EmailJS
  • Performance — lazy load images (NuxtImg), fonts locales, preload hero
  • Migration page Landing (hero + projets vedettes + services + CTA)
  • Migration page Projects (liste avec filtres)
  • Migration page Project Detail (détail + galerie modale)
  • Migration page About (bio)
  • Migration page Contact (formulaire)
  • Migration page Fiverr (landing services)
  • Migration page Formation (formations)
  • Migration données statiques (projets, témoignages, FAQ, tech stack)
  • Migration composables (useProjects → useAsyncData, useSiteConfig → useAppConfig, useGallery → UModal)
  • Dockerfile production optimisé (multi-stage, node:22-alpine)
  • TypeScript strict partout
  • ESLint + Prettier (@nuxt/eslint)

Out of Scope

  • Umami Analytics — self-hosted, hors scope de cette migration
  • AdSense — script externe simple à injecter via app.head, pas un module
  • Backend custom — formulaire contact via EmailJS/Formspree uniquement
  • @nuxt/content — données statiques en fichiers TS, pas besoin de CMS markdown
  • Tests automatisés — migration d'abord, tests ensuite si nécessaire

Context

  • Portfolio freelance existant en production (Vue 3 SPA)
  • Le site actuel fonctionne mais le SPA nuit au SEO (pas de SSR)
  • Données statiques dans src/data/ (projets, témoignages, FAQ, tech stack) — format TS avec textes FR/EN
  • Composables existants : useProjects(), useSiteConfig(), useGallery()
  • i18n actuel via vue-i18n standalone avec persistance localStorage (non SSR-safe)
  • Thème actuel via class CSS dark avec persistance localStorage (FOUC au chargement)
  • Déploiement Docker existant (Node 22 build → nginx serve static)
  • Google Analytics 4 hardcodé dans index.html (à migrer vers nuxt-gtag)

Constraints

  • Stack: Nuxt 4 + Nuxt UI v3 + Tailwind v4 — dernières versions stables
  • Coût: Zéro dépendance payante
  • Composants: Nuxt UI v3 en priorité sur le custom (80% suffit)
  • TypeScript: Mode strict partout
  • Déploiement: Docker node:22-alpine, nuxt build (SSR) ou nuxt generate (SSG) selon stratégie
  • i18n/Theme: Persistance cookie uniquement (SSR-safe), pas de localStorage

Key Decisions

Decision Rationale Outcome
Nuxt 4 plutôt que Nuxt 3 Dernière version stable, meilleure DX et perf — Pending
Nuxt UI v3 plutôt que composants custom Vitesse de dev, composants production-ready — Pending
EmailJS pour le contact Pas de backend à maintenir — Pending
Cookie plutôt que localStorage pour i18n/theme SSR-safe, pas de flash/hydration mismatch — Pending
Données statiques en TS plutôt que @nuxt/content Simplicité, pas besoin de CMS — Pending

Evolution

This document evolves at phase transitions and milestone boundaries.

After each phase transition (via /gsd-transition):

  1. Requirements invalidated? → Move to Out of Scope with reason
  2. Requirements validated? → Move to Validated with phase reference
  3. New requirements emerged? → Add to Active
  4. Decisions to log? → Add to Key Decisions
  5. "What This Is" still accurate? → Update if drifted

After each milestone (via /gsd-complete-milestone):

  1. Full review of all sections
  2. Core Value check — still the right priority?
  3. Audit Out of Scope — reasons still valid?
  4. Update Context with current state

Last updated: 2026-04-08 — Phase 1 (Foundation) complete: Nuxt 4 scaffold, modules, types, data migration done