---
page: contenu
sous-page: planning
route: /contenu/planning
statut: draft
version: 0.1
transverse-liées: [conventions, i18n, design-system, seo-eeat (brief)]
date: 2026-06-03
---

# CdC — `contenu/planning`

> **Production éditoriale** (entité `content_item`). Reçoit les **page-plans** de `keywords/planning`, génère le **brief EEAT**, et pilote la rédaction jusqu'à la **publication** (qui crée la `online_page` et renvoie `live`).

## 1. Objectif

Transformer les **page-plans** validés (1 keyword principal + secondaires, par pays) en **contenus produits** : brief → rédaction → relecture → publication, avec assignation et calendrier.

## 2. Périmètre

- **Dans** : **inbox** des page-plans reçus ; création manuelle d'items ; **brief EEAT** ; **board de production** (`idée → brief → rédaction → relecture → prêt → planifié → publié`) ; assignation ; date de publication cible ; **publication** → crée/relie une `online_page` + **retour `live`** vers `keywords/planning`.
- **Hors** : suivi post-publication (→ `online`) ; perf (→ `stats`, en souffrance) ; intégration CMS (→ `online` / D2).

## 3. User stories *(persona : SEO / éditeur)*

- Les **page-plans** que j'ai poussés depuis keywords arrivent ici en **inbox** (statut `idée`).
- Je génère un **brief EEAT** en un clic.
- Je suis la **production** sur un board et j'assigne un rédacteur.
- Je **planifie** une date de publication.
- À la **publication**, la page apparaît dans `online` et le keyword passe **`live`**.

## 4. Fonctionnalités

- F1 — **Sélecteur de site global**.
- F2 — **Inbox** : les page-plans de `keywords/planning` deviennent des `content_item` (`idée`/`brief`).
- F3 — **Brief EEAT** : génération via le pipeline `seo-eeat`.
- F4 — **Board de production** (kanban par statut) + vues **liste / calendrier éditorial**.
- F5 — **Assignation** (auteur) + **date cible**.
- F6 — **Rédaction** : draft interne **ou** lien vers doc externe (à trancher).
- F7 — **Publication** : `prêt → planifié → publié` → crée/relie `online_page`, **retour `live`** vers le page-plan keyword.
- F8 — Priorisation (drag, R2).

## 5. UI / écrans

- **Board kanban** (Inbox · Brief · Rédaction · Relecture · Prêt · Planifié · Publié) ; toggle **calendrier éditorial** / liste.
- Panneau `content_item` : page-plan source, keywords, brief, assignee, date, lien online.
- **DnD** (R2). États vide/chargement/erreur ; responsive. Tokens `design.md`.

## 6. Données & actions

- **Affiché** : inbox, board/calendrier, détail item.
- **Actions** : générer brief, assigner, programmer, faire avancer le statut, **publier** (→ online + retour live).

## 7. Modèle de données

```
content_item(id, site_id, page_plan_id?, country, locale, title,
             primary_keyword_target_id?, status, assignee?, brief_ref?,
             draft_ref?, scheduled_for?, published_page_id?, created, updated)
   status ∈ { idea, brief, writing, review, ready, scheduled, published }
```

- **Deux entités** : à la publication, `content_item.published_page_id → online_page` (voir `online`).
- `locale` = langue (keyword principal) + `country` (du page-plan).
- **À trancher** : rédaction **interne** (éditeur) vs **lien externe** (Google Docs…).

## 8. API Hono

- `GET /sites/:siteId/content/inbox` *(page-plans reçus)*
- `GET /sites/:siteId/content/items` · `/board` · `/calendar`
- `POST /sites/:siteId/content/items` *(création / depuis page-plan)*
- `PATCH /sites/:siteId/content/items/:id` *(status, assignee, scheduled_for)*
- `POST /sites/:siteId/content/items/:id/brief` *(EEAT)*
- `POST /sites/:siteId/content/items/:id/publish` *(→ online_page + retour live)*

> Routes **préfixées par `siteId`**.

## 9. Capacités requises *(fonctionnel — mapping modules TBD)*

Réception des page-plans · **génération de brief (EEAT)** · workflow de production · planification · **publication** (création `online_page` + callback `live`).

## 10. Tools / capacités MCP

- `content_inbox` (read) · `content_board` (read)
- `content_create` (write) · `content_brief` (write — EEAT) · `content_update` (write) · `content_publish` (write)

> Privé vs public-limité : **TBD**.

## 11. i18n

- **Locale** = langue + pays (du page-plan). Réf `hreflang`, `localised-metadata`, `locale-content`. UI localisée.

## 12. Qualité *(réf. fiches des 128 par slug)*

- **A11y** : board clavier, `keyboard-navigation`, `focus-indicators`, `form-labels`. **Perf** : `core-web-vitals`. **Sécu** : isolation **par site**, auth. **Indexation** : noindex (app privée).
- *Pour les pages produites*, le brief EEAT vise les fiches `heading-hierarchy`, `structured-data`, `internal-linking`, `localised-metadata`.

## 13. Critères d'acceptation

- [ ] Un page-plan poussé depuis keywords arrive en **inbox** comme `content_item` `idée`.
- [ ] « Brief » génère un brief EEAT rattaché à l'item.
- [ ] Le board fait avancer `rédaction → relecture`.
- [ ] **Publier** crée une `online_page` reliée et fait passer le keyword en **`live`**.
- [ ] Le **switch de site** isole tout.

## 14. Dépendances & risques · questions ouvertes

- **Dépend de** : `keywords/planning` (source page-plans + retour live), pipeline **EEAT**, `contenu/online` (publication), `_transverse/conventions`.
- **Questions ouvertes** : rédaction interne vs externe ? gestion multi-auteurs/rôles ? contrat de publication ↔ online.
