Files
librodrome/CLAUDE.md
Yvv efed0b9033
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
Page événement : contenu structuré axes/espaces/config depuis PDF Genèse
- evenement.yml : kicker, titre, subtitle, leitmotiv, tagline, gestation,
  description, 3 axes (numérique/économique/politique), 6 espaces, 4 config
- evenement.vue : hero complet (shadoks, logo SVG inline, badges), sections
  axes/espaces/config, styles scoped responsive
- bookplayer.config.yml → slugs 06-produire/07-echanger déjà commités
- Ajout Librodrome-Logo.png + librodrome-logo.svg (vectorisation en cours)
- Ajout PDF genèse en public/pdf/
- .gitignore, CLAUDE.md, BookSection, économique : ajustements session

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-23 04:08:00 +01:00

3.7 KiB
Raw Permalink Blame History

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 : <racine>/data/messages.yml
  • Avant toute migration de chemin ou écriture sur data/ : demander confirmation

Intégration GrateWizard

  • URL dev : app/app.config.tslocalhost: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

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 <script setup lang="ts">
  • Shadoks SVG inline thématiques sur chaque page (hidden mobile, opacity 0.180.28)
  • Hexagramme 益 (#42 Yi, Augmentation) dans layouts/default.vue
  • Signature § (logo calligraphique SVG gradient) dans TheHeader.vue — ne pas modifier sans demander