---
page: products
sous-page: online
route: /products/online
statut: draft
version: 0.1
transverse-liées: [conventions, i18n, design-system, queue-workers (TBD)]
date: 2026-06-03
---

# CdC — `products/online`

> **Pages produits publiées** (`product_page`) **+ état du flux Merchant** (`feed_status`) : inventaire, fraîcheur, **stock/prix**, **disapprovals**. Connexion CMS/Merchant = **D2** (plugins/ping/API Merchant) ; **fallback v1 = scan Firecrawl**.

## 1. Objectif

Suivre la **santé** des produits en ligne sur les deux fronts : la **page** (fraîcheur, schema, à mettre à jour) **et** le **flux** (actif / en attente / **refusé**, prix & stock à jour), et reboucler vers l'optimisation.

## 2. Périmètre

- **Dans** : inventaire `product_page` ; **fraîcheur** ; **stock/prix** ; `feed_status` (active/pending/**disapproved**) + **issues** ; détection (Firecrawl v1 ; D2 plus tard) ; lien `product_page ↔ product_item` ; rebouclage « à corriger » → item dans `planning`.
- **Hors** : production initiale (→ `planning`) ; perf (→ `stats`, en souffrance) ; détail intégration CMS/Merchant (→ **D2**).

## 3. User stories *(persona : SEO e-commerce)*

- Je vois mes **produits en ligne**, lesquels ont un **flux refusé** ou un **prix/stock obsolète**.
- Une page **vieillissante** ou un **disapproval** crée un item de correction dans `planning`.

## 4. Fonctionnalités

- F1 — **Sélecteur de site global**.
- F2 — **Inventaire** : `produit · url · prix · dispo · last_updated · feed_status · issues`.
- F3 ⭐ — **Disapprovals & erreurs flux** mis en avant (à corriger).
- F4 ⭐ — **Détection à mettre à jour** : âge, prix/stock désync, keyword produit trending.
- F5 — **Détection** : scan **Firecrawl** (v1) ; **D2** (plugins/ping/API Merchant) plus tard.
- F6 — **Rebouclage** : « à corriger » → `product_item` dans `planning`.

## 5. UI / écrans

- Table produits live + filtres (feed_status, fraîcheur, dispo) + détail (page + flux). Badges `live / refusé / à mettre à jour`. **Quick-actions** (R2). Tokens `design.md`.

## 6. Données & actions

- **Affiché** : inventaire + flux + fraîcheur.
- **Actions** : (re)scanner, corriger (→ planning), ouvrir l'item.

## 7. Modèle de données

```
product_page(id, site_id, product_id, url, status, last_updated, schema_ok?,
             flags[needs_update, stale], created, updated)
feed_status(id, product_id, channel, status, issues[], updated)
   channel ∈ { merchant }  ; status ∈ { active, pending, disapproved }
```

- Connexion CMS/Merchant : `_transverse/a-debattre.md` **D2** ; v1 = Firecrawl + import flux.

## 8. API Hono

- `GET /sites/:siteId/products/online` · `GET …/:id`
- `POST /sites/:siteId/products/online/scan` *(job Firecrawl)*
- `POST /sites/:siteId/products/online/:id/fix` *(→ item de correction dans planning)*
- `PATCH /sites/:siteId/products/online/:id`

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

Inventaire produits · détection fraîcheur · suivi **feed_status** (disapprovals) · scan Firecrawl (jobs) · (D2) sync CMS/Merchant · rebouclage.

## 10. Tools / capacités MCP

- `product_inventory` (read) · `product_feed_status` (read)
- `product_scan` (write) · `product_mark_fix` (write)

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

## 11. i18n

- Locale du produit. UI localisée.

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

- `structured-data` (Product/Offer), `image-optimization`. **Perf** : inventaire paginé, scans en **jobs**. **A11y** : `data-tables`. **Sécu** : isolation **par site**, auth. **Indexation** : noindex (app).

## 13. Critères d'acceptation

- [ ] Les **disapprovals** de flux sont listés et cliquables.
- [ ] Un **prix/stock désync** ou une page vieillissante est flaggé **à mettre à jour**.
- [ ] « À corriger » crée un `product_item` dans `planning`.
- [ ] Le **switch de site** isole tout.

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

- **Dépend de** : `products/planning` (correction), `products/import-export` (flux), **Firecrawl**, **D2** (CMS/Merchant), `keywords/reservoir` (trending), `_transverse/queue-workers`.
- **Questions ouvertes** : source des `feed_status` (API Merchant — lié D2) ? fréquence de sync prix/stock ?
