diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..b7a7bc9 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,313 @@ + +## Project + +**Portfolio Killian Dalcin — Migration Nuxt 4** + +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 Dalcin, 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. + +### 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 + + + +## Technology Stack + +## Languages +- TypeScript ~5.8.0 - Full application development +- JavaScript (ES modules) - Frontend runtime +- HTML5 - Document structure (in `index.html`) +- CSS - Styling with Tailwind CSS +- Markdown - Documentation (README.md) +- YAML - Configuration (implied through Dockerfile) +## Runtime +- Node.js 22 - Development and build environment +- Browser environment - Vue 3 SFC runtime +- npm - Dependency management +- Lockfile: `package-lock.json` (present and tracked) +## Frameworks +- Vue 3.5.13 - Progressive JavaScript framework for UI +- Vue Router 4.5.0 - Client-side routing with lazy-loaded pages +- Pinia 3.0.1 - State management (minimal usage - currently only `counter.ts`) +- Vue I18n 9.14.4 - Internationalization (English and French locale files in `src/locales/`) +- Vite 6.2.4 - Build tool and dev server +- Vite Plugin Vue DevTools 7.7.2 - Development utilities +- @vitejs/plugin-vue 5.2.3 - Vue 3 SFC support +- Tailwind CSS 4.1.10 - Utility-first CSS framework +- @tailwindcss/postcss 4.1.10 - PostCSS plugin for Tailwind +- PostCSS 8.5.6 - CSS transformation pipeline +- Autoprefixer 10.4.21 - Vendor prefix handling +- Terser 5.43.1 - JavaScript minification +- ESLint 9.22.0 - Linting (config: `eslint.config.ts`) +- Prettier 3.5.3 - Code formatting (config: `.prettierrc.json`) +- vue-tsc 2.2.8 - Vue component type checking +- TypeScript compiler with `type-check` npm script +- @vueuse/head 2.0.0 - Dynamic document head management for meta tags and SEO +## Key Dependencies +- vue 3.5.13 - Core framework +- vue-router 4.5.0 - SPA routing with code splitting +- pinia 3.0.1 - State management store +- vue-i18n 9.14.4 - Multi-language support +- vite 6.2.4 - Next-gen build tool with HMR +- tailwindcss 4.1.10 - Rapid UI development +- typescript 5.8.0 - Static typing and compilation +- eslint 9.22.0 - Code linting +- prettier 3.5.3 - Code formatting +- npm-run-all2 7.0.2 - Parallel script execution (used in build process) +- @tsconfig/node22 22.0.1 - TSConfig preset for Node 22 +- @types/node 22.14.0 - Node.js type definitions +- jiti 2.4.2 - CommonJS loader for TypeScript modules +## Configuration +- No `.env` files detected in source +- Google Analytics tracking ID hardcoded: `G-CDVVNFY6MV` (in `index.html`) +- Umami analytics script loaded from `umami.killiandalcin.fr` (in `index.html`) +- Google AdSense client ID hardcoded: `ca-pub-5219367964457248` (in `index.html`) +- `vite.config.ts` - Build optimizations: +- `tsconfig.json` - References `tsconfig.app.json` and `tsconfig.node.json` +- `tsconfig.app.json`: +- `eslint.config.ts` - Flat config format: +- `.prettierrc.json`: +- `postcss.config.js` - Tailwind CSS and Autoprefixer +- `tailwind.config.js` - Content scanning for `index.html` and `src/**/*.{vue,js,ts,jsx,tsx}` +## Platform Requirements +- Node.js 22+ (specified in Dockerfile) +- npm 10+ (implied by Node 22) +- TypeScript 5.8+ +- Any Unix-like shell (bash/zsh) or Windows with Node.js +- Docker - Multi-stage build with Node 22-alpine and nginx stable-alpine +- Web server: nginx (configured in `nginx.conf`) +- Deployment target: Static HTML served via nginx +- JavaScript enabled (noscript fallback message in `index.html`) +- Modern browsers with ES2020+ support (Vite default targets) +## Scripts & Commands + + + +## Conventions + +## Naming Patterns +- Vue components: PascalCase (e.g., `AppHeader.vue`, `ProjectCard.vue`) +- Composables: camelCase with `use` prefix (e.g., `useTheme.ts`, `useProjects.ts`) +- Utility/config files: camelCase (e.g., `site.ts`, `techstack.ts`) +- Data files: camelCase (e.g., `testimonials.ts`, `faq.ts`) +- Type definitions: camelCase in `types/index.ts` +- All functions use camelCase (e.g., `toggleTheme`, `openGallery`, `getImageUrl`) +- Composables are named with `use` prefix: `useTheme()`, `useGallery()`, `useSeo()` +- Getter functions use `get` prefix: `getTheme()`, `getImageUrl()` +- Boolean functions/computed use `is`/`has` prefix: `isDark`, `hasNext`, `isOpen` +- Handler functions use verb + `Handler`: `toggleTheme`, `openGallery`, `closeGallery` +- Refs and computed properties: camelCase (e.g., `isDark`, `currentIndex`, `isOpen`) +- Interfaces and types: PascalCase (e.g., `Props`, `SeoOptions`, `Theme`) +- Constants: UPPER_SNAKE_CASE for config constants (not extensively used in codebase) +- Private/module state: camelCase prefixed with `_` if truly private +- Type aliases: PascalCase (e.g., `type Theme = 'light' | 'dark'`) +- Interface names: PascalCase (e.g., `interface Props`, `interface SeoOptions`) +- Props interfaces: Always named `Props` (e.g., in `