Modules Documentation
Page specifications
Page-by-page specification using the standard template.
Complete
The /coverage/:slug details page is a magazine-style long-read template. Hero band + body grid + sticky sidebar on desktop; stacked on mobile. The kind badge changes the hero treatment subtly — recap is editorial blue, analysis is editorial amber, highlights is editorial green, pitch-result is editorial purple, sponsor-spotlight is a distinct background tint with explicit disclosure.
Hero band
- Cover image: 16:9 desktop, 4:3 mobile. Falls back to a generated SVG (event title + kind icon composite) when coverImageUrl is null.
- Kind badge above title (e.g. "RECAP" / "ANALYSIS" / "PITCH RESULT" / "HIGHLIGHTS"). For sponsor-spotlight, the badge text is "SPONSORED" in distinct treatment.
- Title H1 + dek (subtitle) below.
- Byline row: author name + publishedAt + readingTimeMinutes + parent event chip (clickable, → event details page).
Body grid
- Single column body, max-width ~720px desktop (readable measure ~70 chars/line).
- bodyHtml renders pre-rendered HTML — no markdown parsing at runtime. Allowed tags: h2-h4, p, ul/ol, blockquote, figure with figcaption, a, em, strong, code (inline).
- Sponsor disclosure (sponsor-spotlight only): ribbon at the top of body content reading "This story is sponsored by [organizer]. Editorial fact-check standards apply."
- Image figures appear inline with figcaption. Quotes use blockquote with the speaker attribution as a footer span.
Sticky sidebar (desktop)
- Block 1 — Parent event card: a compact <app-event-card> for the parentEventId. Always present.
- Block 2 — Mentioned founders: each mentionedFounderId resolves to a small profile pill (avatar + name + role). Up to 8 shown; "+N more" overflow.
- Block 3 — Mentioned startups: same pill treatment with logo + name + sector.
- Block 4 — Mentioned opportunities: opportunity name + deadline badge.
- Block 5 — Mentioned files: file number + title + 3:4 mini cover thumb.
- Block 6 — More coverage of this event: any sibling CoverageArticles sharing the same parentEventId.
