forked from EHV/librodrome
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>
This commit is contained in:
87
CLAUDE.md
87
CLAUDE.md
@@ -2,81 +2,84 @@
|
||||
|
||||
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)
|
||||
- **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
|
||||
- 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/ # Autonomie numérique (index + [slug] détail)
|
||||
economique/ # Autonomie économique (index, monnaie-libre, commande, productions-collectives)
|
||||
modele-eco/ # Livre : sommaire + chapitres [slug]
|
||||
citoyenne/ # Autonomie citoyenne (index + [slug] détail)
|
||||
en-musique/ # Player audio
|
||||
evenement.vue # Événement
|
||||
admin/ # Back-office (pages/, book/, songs, messages, media)
|
||||
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 livre (player, PDF, chapitres, commande)
|
||||
home/ # BookSection, AxisBlock, AxisGrid, HeroSection, Messages
|
||||
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...
|
||||
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)
|
||||
assets/css/main.css # UnoCSS + overrides light mode
|
||||
site/
|
||||
pages/ # Contenu YAML par section (numerique/, economique/, citoyenne/)
|
||||
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/pages/[...path].get.ts # GET pages YAML (chemins imbriqués)
|
||||
api/admin/content/pages/[...path].put.ts # PUT pages YAML
|
||||
api/admin/content/pages.get.ts # Liste toutes les pages
|
||||
middleware/redirects.ts # 301 : /gestation, /modele-eco, /decision, /lire
|
||||
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
|
||||
```
|
||||
|
||||
## Ports dev (CRITIQUE)
|
||||
## Données runtime (CRITIQUE)
|
||||
|
||||
| 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` |
|
||||
|
||||
**Ne jamais changer ces ports.**
|
||||
- `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`
|
||||
- Bloc GrateWizard dans la section économique de la home
|
||||
|
||||
## Contenu administrable
|
||||
|
||||
- YAML dans `site/pages/` organisé par section (sous-dossiers)
|
||||
- API supporte les chemins imbriqués (`numerique/logiciel-libre`)
|
||||
- Admin : `/admin/pages` liste toutes les pages, `/admin/pages/{path}` édite en YAML
|
||||
- Git sync auto en prod (ADMIN_GIT_SYNC=true)
|
||||
- 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 sur :3000
|
||||
pnpm build # Build production
|
||||
pnpm dev # Dev server :3000
|
||||
pnpm build # Build production
|
||||
PORT=3099 node .output/server/index.mjs # Test build prod (toujours avant commit)
|
||||
```
|
||||
|
||||
## Conventions
|
||||
|
||||
- Langue du site : français
|
||||
- Commits en français, style concis
|
||||
- CSS via UnoCSS (utility-first) + variables CSS palettes
|
||||
- Composants Vue SFC avec `<script setup lang="ts">`
|
||||
- Shadoks SVG inline thématiques sur chaque page (hidden mobile)
|
||||
- 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
|
||||
|
||||
Reference in New Issue
Block a user