Modules Documentation
Page specifications
Page-by-page specification using the standard template.
Complete
Per-page composition specs. Each Calendar page has a fixed hero treatment, body grid, sidebar (where applicable), and footer block. The shared <app-event-card> is the only entry-card primitive used across every listing view — density and chip emphasis vary, not the component.
Landing page (/calendar)
- Hero: 1 paragraph editorial lede + "Submit an event" + "View all events" CTAs. No date picker — discovery is rail-driven, not query-driven.
- Rail 1 — This week: horizontal scroll of events within ±7 days. Empty state = "No events scheduled this week. Check upcoming →" linking to /calendar/events.
- Rail 2 — Closing soon: deadlines within 7 days. Each card emphasises the deadline chip with warning tint.
- By country: 16-flag grid. Each tile links to /calendar/events/countries/:slug and shows a live event count.
- By category: 17 category tiles in 3 columns desktop / 2 mobile.
- Spotlight: at most 1 editorialPriority='spotlight' event with a full-width banner treatment.
- Footer block: "Submit an event" with a one-line pitch + CTA → /calendar/submit.
Listing page (/calendar/events and scope variants)
- Hero: 1 line title (e.g. "All events" / "Events in Egypt" / "Demo days") + result count + active filter chips (removable).
- Filter rail (left, sticky on desktop): country multi-select / category multi-select / audience / stage / status / mode (physical/online/hybrid).
- Body grid: <app-event-card> 3-column desktop / 2 tablet / 1 mobile. Empty state with the active filters quoted back.
- No pagination — infinite scroll. Each "page" loads 24 cards. Counter at bottom shows "X of Y events".
Details page (/calendar/events/:slug)
- Hero: status badge + category icon + title + city/country + start-end date range + mode tag.
- Action row: 2 CTAs ("Register" or "Apply" — variable by category) + secondary "Add to calendar" (ICS download) + share buttons.
- Body main: shortDescription → fullDescription → whyItMatters (editorial) → key dates table → venue + map (when geo present) → organizer card.
- Sidebar: cross-module signals — related founders (speakers / judges), related startups (organizers / demoers), related editorial (preview articles), related opportunities (event-tied deadlines), related files (event-tied resources).
- Source row: sourceUrl + lastVerifiedAt + verificationStatus badge — visible to all readers as a transparency signal.
