> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ezagroup.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Le blog eza

> Actualités, conseils et tutoriels

<CardGroup cols={2}>
  <Card title="Éditeur riche" color="#38aadc" icon="edit">
    Rédaction Markdown/HTML avec prévisualisation.
  </Card>

  <Card title="Couverture" color="#a78bfa" icon="image">
    Chaque article a une image de couverture.
  </Card>

  <Card title="Temps de lecture" color="#1dd8b4" icon="clock">
    Calculé automatiquement à partir du contenu.
  </Card>

  <Card title="Brouillon invisible" color="#f59e0b" icon="broom-wide">
    Préparez tranquillement, publiez quand c'est prêt.
  </Card>
</CardGroup>

## Les 5 catégories

<CardGroup cols={5}>
  <Card title="Actualité" color="#fb7185" icon="newspaper" />

  <Card title="Conseil" color="#f59e0b" icon="lightbulb" />

  <Card title="Technique" color="#38aadc" icon="cog" />

  <Card title="Projet" color="#1dd8b4" icon="folder" />

  <Card title="Formation" color="#a78bfa" icon="graduation-cap" />
</CardGroup>

## Anatomie d'un article

| Champ      | Contenu                  |
| ---------- | ------------------------ |
| Titre      | Titre principal          |
| Slug       | URL propre               |
| Extrait    | Résumé pour la liste     |
| Contenu    | HTML/Markdown enrichi    |
| Couverture | Image de mise en avant   |
| Catégorie  | Une parmi 5              |
| Tags       | Mots-clés                |
| Auteur     | Snapshot profil          |
| Publié     | Statut visible/brouillon |
| Vues       | Compteur automatique     |

## Pages

<Columns cols={2}>
  <Card title="/blog" color="#38aadc" icon="list">
    Liste de tous les articles publiés, filtrable par catégorie.
  </Card>

  <Card title="/blog/:id" color="#1dd8b4" icon="file-text">
    Article complet en Markdown rendu, avec couverture et tags.
  </Card>
</Columns>

<Note>
  **Brouillon invisible.** Un article en brouillon n'est visible que par vous. Publiez au moment voulu.
</Note>

## L'entité `BlogPost`

| Champ              | Type     | Description                                      |
| ------------------ | -------- | ------------------------------------------------ |
| `title`            | string   | Titre principal                                  |
| `slug`             | string   | URL unique lisible                               |
| `excerpt`          | string   | Résumé (SEO + liste)                             |
| `content`          | text     | Corps de l'article (Markdown/HTML)               |
| `cover_url`        | string   | Image de couverture                              |
| `category`         | enum     | actualite, conseil, technique, projet, formation |
| `tags`             | array    | Mots-clés indexés                                |
| `author_id`        | string   | Auteur                                           |
| `author_name`      | string   | Snapshot nom auteur                              |
| `author_avatar`    | string   | Snapshot avatar                                  |
| `is_published`     | boolean  | Publié ou brouillon                              |
| `published_at`     | datetime | Date de publication                              |
| `views_count`      | number   | Compteur automatique                             |
| `read_time`        | number   | Minutes calculées                                |
| `meta_title`       | string   | SEO override                                     |
| `meta_description` | string   | SEO override                                     |

## Éditeur react-quill

L'éditeur riche utilise **react-quill**, wrapper React de Quill.js.

<CardGroup cols={2}>
  <Card title="Formats supportés" icon="remove-format">
    H1-H6, gras, italique, souligné, listes, liens, images, code, citations.
  </Card>

  <Card title="Prévisualisation" icon="eye">
    Rendu final en direct dans un panneau à côté de l'éditeur.
  </Card>

  <Card title="Auto-sauvegarde" icon="save">
    Draft sauvegardé toutes les 30s en localStorage.
  </Card>

  <Card title="Import Markdown" icon="download">
    Coller du Markdown → conversion automatique.
  </Card>
</CardGroup>

## SEO natif

Chaque article génère :

* Balise `<title>` = `meta_title` ou `title`
* Meta description = `meta_description` ou `excerpt`
* Open Graph : `og:title`, `og:image` (cover), `og:type: article`
* Twitter Card : summary\_large\_image
* Structured data JSON-LD : `Article` schema
* URL canonique : `/blog/{slug}`
* Sitemap XML mis à jour automatiquement

## Fonction `blogPreview`

Une fonction backend `blogPreview` génère un aperçu Open Graph optimisé pour partage sur réseaux sociaux, avec image de couverture recadrée en 1200×630.

## Cas d'usage

<CardGroup cols={2}>
  <Card title="Actualités entreprise" icon="newspaper">
    Annonces de partenariats, nouvelles fonctionnalités, événements.
  </Card>

  <Card title="Tutoriels" icon="book-open">
    Guides pas-à-pas illustrés avec captures et code.
  </Card>

  <Card title="Retours d'expérience" icon="star">
    Études de cas clients, résultats chiffrés, avant/après.
  </Card>

  <Card title="Formation" icon="graduation-cap">
    Modules pédagogiques, séries d'articles, ressources.
  </Card>
</CardGroup>

## FAQ Blog

<AccordionGroup>
  <Accordion title="Puis-je programmer une publication ?">
    Oui via `published_at` dans le futur. Une tâche cron `publishScheduledPosts` la rend visible à l'heure prévue.
  </Accordion>

  <Accordion title="Comment gérer les images ?">
    Upload direct dans l'éditeur, stockage sur CDN, compression WebP automatique. Poids max 5 MB par image.
  </Accordion>

  <Accordion title="Puis-je collaborer à plusieurs sur un article ?">
    Oui via le rôle `collaborateur_interne` ou `directeur` : édition partagée, historique des modifications.
  </Accordion>
</AccordionGroup>
