# Librodrome Site vitrine du projet Le Librodrome — livre + chansons sur l'économie du don. ## Stack - **Nuxt 4** (Vue 3, TypeScript, Nitro) - **Modules** : Nuxt Content, Pinia, UnoCSS, VueUse, Nuxt Image - **Icônes** : Lucide + Phosphor (via @iconify-json) - **Package manager** : pnpm - **Déploiement** : Docker + Traefik, CI via Woodpecker ## Structure ``` app/ pages/ # Routes : index, lire/, ecouter/, autonomie, evenement, gratewizard, a-propos, admin/ components/ # admin, book, content, home, layout, player, song, ui composables/ # useAudioPlayer, useBookData, useGrateWizard, usePlaylist, usePageContent, useSiteContent... assets/css/ # main.css (UnoCSS) data/ pages/ # Contenu YAML par page (home, lire, ecouter, autonomie, evenement...) site.yml # Config globale du site server/ api/ # Endpoints API (admin, health) middleware/ # Auth middleware docker/ Dockerfile # Build multi-stage (dev + prod) docker-compose.yml # Production (Traefik) docker-compose.dev.yml # Dev Docker ``` ## Ports dev (CRITIQUE) Chaque projet a un port fixe pour éviter les conflits Nuxt auto-increment : | Projet | Port | Config | |--------|------|--------| | **librodrome** | **3000** | `nuxt.config.ts` → `devServer.port: 3000` | | **GrateWizard** | **3001** | `package.json` → `next dev --port 3001` | | **SejeteralO frontend** | **3009** | `frontend/nuxt.config.ts` → `devServer.port: 3009` | | **SejeteralO backend** | **8000** | Makefile → `uvicorn --port 8000` | Script de gestion : `/home/yvv/Documents/PROD/DEV/dev-ports.sh` (status/kill/clean/start) **Ne jamais changer ces ports.** Si un port est occupé, tuer le process parasite plutôt que laisser Nuxt auto-incrémenter. ## Intégration GrateWizard - URL dev configurée dans `app/app.config.ts` → `localhost:3001` - URL prod : `https://gratewizard.ml` - Ouverture en popup via `composables/useGrateWizard.ts` - GrateWizard est un projet Next.js séparé (`/home/yvv/Documents/PROD/DEV/GrateWizard`) ## Contenu Le contenu des pages est dans `data/pages/*.yml` et chargé via `composables/usePageContent.ts`. Le contenu riche (articles) utilise Nuxt Content avec des fichiers Markdown. ## Commandes ```bash pnpm dev # Dev server sur :3000 pnpm build # Build production pnpm generate # Génération statique ``` ## Conventions - Langue du site : français - Commits en français, style concis - CSS via UnoCSS (utility-first), pas de framework CSS externe - Composants Vue SFC avec `