# Librodrome Site vitrine du projet Le Librodrome — livre + chansons sur l'économie du don. ## Protocole de début de session 1. `git pull --rebase origin main` (récupère les commits admin git sync YAML prod) 2. Vérifier que `data/messages.yml` existe — si absent, signaler avant toute opération 3. Si l'objectif de la session n'est pas précisé, le demander ## Stack - Nuxt 4 (Vue 3, TypeScript, Nitro) + 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/ numerique/ # index + [slug] economique/ # index, monnaie-libre, commande, productions-collectives modele-eco/ # sommaire + chapitres [slug] citoyenne/ # index + [slug] en-musique/ # player audio admin/ # back-office (pages/, book/, songs, messages, media) components/ book/Actions.vue # boutons partagés (player, PDF, chapitres, commande) home/ # BookSection, AxisBlock, AxisGrid, HeroSection, HomeMessages admin/, player/, song/, ui/ composables/ # useAudioPlayer, useBookData, useGrateWizard, usePageContent stores/palette.ts # 4 palettes saisonnières (été par défaut, persisté localStorage) assets/css/main.css # UnoCSS + overrides light mode site/ pages/ # Contenu YAML administrable par section (sous-dossiers) site.yml # Config globale (nav, footer, GrateWizard) bookplayer.config.yml # Config player/chapitres data/ messages.yml # Runtime — volume Docker ../data:/src/data — JAMAIS dans git server/ api/content/ # GET pages YAML (chemins imbriqués) api/admin/content/ # PUT pages YAML + liste api/messages/ # GET (publiés) + POST (nouveau message) api/admin/messages/ # GET tous + PUT (type, reply, published) + DELETE utils/content.ts # readDataYaml/writeDataYaml (data/) + readYaml/writeYaml (site/) middleware/redirects.ts # 301 : /gestation, /modele-eco, /decision, /lire docker/ Dockerfile, docker-compose.yml, docker-compose.dev.yml ``` ## Données runtime (CRITIQUE) - `data/messages.yml` : volume Docker monté `../data:/src/data` (relatif à `docker/`) - Persisté entre les rebuilds — **jamais écrasé par les commits ni par le déploiement** - Structure message : `{ id, author, email, text, type, published, createdAt, reply: { text, publishedAt } | null }` - Types : `reaction` (ancien, affiché "Réaction", plus proposé dans les formulaires) | `question` | `suggestion` | `retour` - En dev local : `/data/messages.yml` - **Avant toute migration de chemin ou écriture sur data/ : demander confirmation** ## Intégration GrateWizard - URL dev : `app/app.config.ts` → `localhost:3001` - URL prod : `https://gratewizard.axiom-team.fr` ## Contenu administrable - YAML dans `site/pages/` par section ; API supporte les chemins imbriqués - Admin : `/admin/pages` liste, `/admin/pages/{path}` édite en YAML - Git sync auto en prod (`ADMIN_GIT_SYNC=true`) → d'où le `git pull --rebase` obligatoire en début de session ## Commandes ```bash pnpm dev # Dev server :3000 pnpm build # Build production PORT=3099 node .output/server/index.mjs # Test build prod (toujours avant commit) ``` ## Conventions - CSS via UnoCSS + variables CSS palettes ; composants Vue SFC `