All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
- 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>
3.7 KiB
3.7 KiB
Librodrome
Site vitrine du projet Le Librodrome — livre + chansons sur l'économie du don.
Protocole de début de session
git pull --rebase origin main(récupère les commits admin git sync YAML prod)- Vérifier que
data/messages.ymlexiste — si absent, signaler avant toute opération - 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.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/pagesliste,/admin/pages/{path}édite en YAML - Git sync auto en prod (
ADMIN_GIT_SYNC=true) → d'où legit pull --rebaseobligatoire 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.18–0.28)
- Hexagramme 益 (#42 Yi, Augmentation) dans
layouts/default.vue - Signature § (logo calligraphique SVG gradient) dans
TheHeader.vue— ne pas modifier sans demander