Docs
Events & News pattern
Use one module for event and news content, with latest + archive behavior.
Standard
- Use `EventsNewsSection` with a unified `event | news` entry contract.
- Always keep full history in data; render latest entries + archive.
- Keep entries in calendar order (newest first for combined feed).
- Show event-only links (`Open in Maps`, `Add to Google Calendar`, `Share event`) only for events.
- Do not duplicate event actions for news-only items.
- Event-action parity rule: every migrated site news/events implementation must expose these three event actions.
- News entries may link to external URLs or local article routes (for in-site articles).
- For event detail pages, use index + detail routing (for example `/events` plus `/events/my-event-slug`).
- Use lightweight metadata labels for status/type context on cards.
- Optional future-events banner is available for home/main page announcements.
- Use `eventDetailsBasePath` when events should auto-link to local event detail routes.
- Recurring event banner cards should resolve to local detail links when `eventDetailsBasePath` is configured.
- For index pages, use `cardMode="index"` so cards stay summary-only (no body/highlights/images).
- Recurring events are supported via `event.recurrence` (weekly, biweekly, monthly by day, monthly nth-week weekday).
- Keep `EnvironmentBanner` and event banner separated (never merged into one banner).
- If both render on a page, order must be `EnvironmentBanner` first, then event banner.
- Render event banner only when there are active future events; if none exist, do not render event banner row.
- Banner placement standard: render both in page flow directly under the header; do not mount globally in shared layout.
- Content seeding standard: do not add fake/sample events in migrated production-like sites; start with empty entries until real events exist.
- Optional featured card and archive controls are built in (`showFeatured`, archive props).
Reference
- Live example: Events & News example page
- Local article route example: News Article Example
- Component: `template/src/components/patterns/EventsNewsSection.tsx`
Local article workflow
- Create a local page route (for example `/news/my-article-slug`) and add it to `AppRoutes.tsx`.
- Point the news entry `href` to that local route.
- Build-time route discovery (`tools/app-routes.mjs`) picks up the route for prerender + sitemap.
- If using dynamic routes, enumerate concrete article URLs via `PRERENDER_EXTRA_ROUTES`.
- Apply the same rule for event detail routes so each event URL is present in sitemap output.
- Validate with `npm run build` and `npm run qa:smoke:nojs`.
- Prefer rendering event banner as a separate page-level block under header for deterministic ordering with `EnvironmentBanner`.
- For archived history controls, use `archiveOpenByDefault` and `archiveMaxItems`.