Modules Documentation
Status & badge logic
How statuses transition and what badges render.
Unlike Calendar (with 7 EventStatus values) or Opportunity Radar (with 4 deadline states), Coverage has no lifecycle status. An article is either published (publishedAt is set, lives in production data) or it doesn’t exist publicly. The only signals that drive badge treatment are the kind enum and isFeatured boolean.
Kind → badge mapping
- recap
- Neutral journalism. Badge: "RECAP" in editorial blue. The default kind for most event coverage.
- analysis
- Editorial opinion + market interpretation. Badge: "ANALYSIS" in editorial amber. Carries explicit "Editorial perspective" disclosure on the article.
- highlights
- Visual + quote-driven shorter piece. Badge: "HIGHLIGHTS" in editorial green. bodyHtml is usually <600 words with multiple figures.
- pitch-result
- Structured outcomes (winners, term sheets, awards). Badge: "PITCH RESULT" in editorial purple. The body often includes a structured outcomes table (winner, runner-up, prizes).
- sponsor-spotlight
- Paid coverage product, clearly labelled. Badge: "SPONSORED" with a distinct background tint that persists on every card variant + a top-of-article disclosure ribbon. Same fact-check standard as editorial.
isFeatured → card variant
When isFeatured=true, the coverage card is rendered in the "large" variant — larger cover image, longer dek excerpt, and the kind badge is positioned at top-left instead of overlaid on the cover. The large variant is what appears in the Homepage featured rail and the top slot of an event details page when multiple coverage articles exist for the same event. Only one featured slot per surface per render.
