Modules Documentation
Data fields
Entities, fields, and types.
Complete
The CoverageArticle interface (core/models/coverage-article.model.ts:24) is intentionally lean — 15 fields total. The structural fields (id, slug, parentEventId, kind) are non-negotiable; the content fields (title, dek, bodyHtml) are bilingual; the mention arrays are all optional. No status / lifecycle field — articles are either drafts (not in production data) or published.
Field clusters
- Identity (3 fields)
- id (internal string); slug (kebab-case, ASCII, EN canonical, unique); parentEventId (the CalendarEvent.id this anchors to — required, never null).
- Classification (1 field)
- kind ∈ { recap | analysis | highlights | pitch-result | sponsor-spotlight }. Drives badge color + sponsor disclosure visibility + JSON-LD subtype.
- Content (3 fields, all BilingualText)
- title (EN + AR); dek (subtitle, EN + AR); bodyHtml (pre-rendered HTML in EN + AR — both must be authored, no auto-translation).
- Optional context (2 fields)
- country (ISO 3166-1 alpha-2 — useful when the parent event spans multi-country); sector (free string tag — fintech, healthtech, b2b-saas, etc).
- Mention arrays (4 fields, all optional)
- mentionedFounderIds[] (founder profiles surfaced); mentionedStartupIds[] (startups surfaced); mentionedOpportunityIds[] (opportunities tied to event outcomes — e.g. winners advanced to a follow-on program); mentionedFileIds[] (Founder Files surfaced or distributed at the event).
- Media (1 field)
- coverImageUrl (string | null). When null, the card and hero fall back to a generated SVG composite of event name + kind icon.
- Byline (1 field, BilingualText)
- author — full bilingual author name. Editor-written for staff authors; contributor name for guest pieces. Sponsor name is NOT placed here — it goes in the disclosure ribbon.
- Time + reading (2 fields)
- publishedAt (ISO 8601 — the moment of publication, drives sort + JSON-LD datePublished); readingTimeMinutes (number — calculated from bodyHtml word count, rounded up).
- Promotion (1 field)
- isFeatured (boolean — when true, the article surfaces on the homepage featured coverage rail and gets a larger card variant in event details + founder/startup mention rails).
