# 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/
    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)
  components/
    book/Actions.vue    # Boutons partagés livre (player, PDF, chapitres, commande)
    home/               # BookSection, AxisBlock, AxisGrid, HeroSection, Messages
    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 par section (numerique/, economique/, citoyenne/)
  site.yml              # Config globale (nav, footer, GrateWizard)
  bookplayer.config.yml # Config player/chapitres
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
docker/
  Dockerfile, docker-compose.yml, docker-compose.dev.yml
```

## Ports dev (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.**

## 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)

## Commandes

```bash
pnpm dev          # Dev server sur :3000
pnpm build        # Build production
```

## 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)
