Statuses & badges
Status is the heart of Contentpipe. Every content item — publication or promo — carries exactly one, and the colors form a vivid idea → live progression. Shared statuses use one color across publications and promos, and every color is always paired with an icon so the pipeline stays legible for color-blind users.
The color system
| Status | Color | Meaning |
|---|---|---|
stub | Cyan | A fresh idea — title plus an optional note. |
draft | Amber | Being written. |
reviewing | Violet | Under critique. |
approved | Emerald | Signed off, good to go. |
promoting | Fuchsia | Amplifying — fanning out into promos. |
published | Blue | Live on its destination. |
archived | Muted slate | The deliberate outlier — retired content. |
Shared statuses (draft, reviewing, approved, published) use a single color across both publications and promos, so the same review instinct applies everywhere. archived is intentionally muted — it's the one status that reads as "out of the flow."
Solid status chips use darkened backgrounds so white text clears the 4.5:1 contrast threshold. The soft chip backgrounds and dark-theme variants are tuned separately — see the status.css token file, the single source of truth shared with the web app.
Transitions
Statuses only move along the allowed edges of the publication and promo pipelines. A trigger validates every transition against the allowed-transition map; invalid jumps raise an exception. Because enforcement lives in the database, the rule holds no matter the caller — admin UI, REST, workflow RPC, or MCP.
Every transition is recorded in an append-only status_events audit table, capturing the from/to status and the actor (admin_ui, mcp:<client>, or system).