[E01] Event Overview — Stage-Aware Single-Event Dashboard
Summary
The landing page when a user drills into a single specific event. One page that morphs with the event’s stage — Draft → Registration open → Pre-race → Post-event — surfacing the KPIs, checklists, and role lanes that matter at each stage. Reuses the C01 shell + the Event Title Panel pattern that sits above every inner event screen.
This is not the Events workspace landing (which is E05 and shows multiple events). E01 is what you see after clicking a specific event row from E05 or from the sidebar’s "Events" entry.
Actor & Context
Actor:
-
Event organiser — primary owner; checks readiness, monitors registrations, signs off go/no-go, closes out post-event.
-
Finance — focuses on revenue/orders during Reg open, recon during Post-event.
-
Timing team — focuses on category/sync state during Pre-race.
-
Project manager — tracks Plane-side todos during Draft; checklist progress during Pre-race.
Frequency: high during a registration window or in the days surrounding an event; low otherwise.
Precondition: user is authenticated, has the current event’s tenant selected, has access to this specific event.
Entry point:
-
From the sidebar’s "Events" nav (current tenant’s events list).
-
From the E05 Active Events list or Recent Events list (click a row).
-
From a notification linking to a specific event.
-
Direct URL:
…/<tenant>/events/<event-slug>lands here.
The Stage Model
E01’s hero variation is driven by event.stage, computed from event lifecycle dates + status. Four stages, four different layouts in the same shell:
| Stage | What dominates the layout |
|---|---|
|
Readiness checklist — what’s left to publish, who needs to sign what off, external coordination (permits, vendors, volunteers). Project plan link (Plane) for PM follow-ups. |
|
Live KPIs + timeline — registrations, orders, revenue, average order, days to close. Daily timeline chart. Category-fill bars. Compact role-lane strip (organiser / finance / project). |
|
Go / no-go checklist with blocking items flagged red. Timing team sync state. Start-pack print state. Days-to-event countdown. |
|
Summary banner + three role lanes: Finance recon, Results publishing, Compliance & Reports. Each lane has its own KPIs + checklist. |
The stage stepper (Draft → Reg → Pre → Post) sits below the title panel and above the body. Stages auto-advance based on lifecycle dates; user can also pin/advance manually for dry runs (open question — see below).
Main Flow
-
Bootstrap. SPA receives the event slug from the URL, calls
GET /api/events/{slug-or-id}. Response carries the event’s identity, current stage, key stats. -
Render shell + title panel + stepper. Sidebar from C01; Event Title Panel from C01’s reserved pattern (icon + name + status tag + key stats + Event-overview button). Stage stepper renders below the title.
-
Render the stage-specific body. Switch on
event.stage:-
draft→ Readiness layout (checklist hero + Plane link + role focus) -
open→ KPI band + timeline + category fill + role lanes -
prerace→ Go/no-go hero + timing sync + start-pack state -
post→ Summary banner + finance recon + results publishing + compliance lanes
-
-
Update on tick. Live counts (registrations, revenue) refresh on a poll or push (TBD per WS5/E05 sweep design). Other content is request-time fresh.
-
The user proceeds by clicking through into a sub-screen (Categories, Races, Participants, Results), advancing the stepper, or opening role-specific deep-links (Plane, finance recon, etc.).
Alternative Flows
-
AF-1 — Manually advance/regress stage. During testing or during a stage that doesn’t cleanly auto-advance (e.g. an event where registration closed but stage hasn’t ticked), the organiser can pin the stage manually. Open question (see below) — current design hints at this but doesn’t specify the affordance.
-
AF-2 — User has insufficient role. A user who is
STAFF(noEVENT_MANAGER/RESULTS_OFFICERrole) sees E01 in read-only mode: KPIs and checklists render, but action buttons ("Open analytics", "Manage", "Open in Plane") are disabled or hidden. Sub-screen links work where the user has access. -
AF-3 — Cross-stage actions. Some actions cross stages — e.g. a finance correction during post-event, or a permit re-issue triggered during pre-race. These deep-link into the relevant feature page (Finance / Compliance) and return to E01 unchanged.
-
AF-4 — Empty / loading states. First load of a freshly created event shows the Draft layout with most checklist items unticked. KPIs in Reg-open / Pre-race show
—until the first tick of data is in. -
AF-5 — Print-friendly post-event summary. Out of v1 scope; flagged as a future ask. The Post-event summary banner has natural print value (board reports, sponsor packs).
Acceptance Criteria
-
E01 renders inside the C01 shell with the Event Title Panel above the stage stepper above the body.
-
Stage is computed from
event.lifecycleDates+event.statusand matches the design’s mapping (Draft / Reg open / Pre-race / Post-event). -
Each stage’s body matches the design’s grid (Draft 1.5fr+1fr two-row; Reg open 5-KPI top band + 1.5fr+1fr two-row + 3-col role-lane strip; Pre-race 1.5fr+1fr two-row hero; Post-event banner + 3-lane row).
-
Workspace accent (Events indigo
#4f46e5) is used in tags, KPI delta indicators, and the active stepper step. No other dominant colour. -
All "Manage" / "Open" / "View" links navigate to the corresponding sub-screen and preserve the breadcrumb.
-
Title Panel’s "Event overview" button navigates back to E01 from any sub-screen.
-
Live KPIs (Reg-open) refresh without a full page reload.
-
Read-only mode for
STAFFrole hides or disables actions but preserves the layout.
API Surface
A non-trivial number of admin-service endpoints feed each stage’s body. Expect WS3 (OpenAPI client generation) to surface these naturally — the list below is illustrative.
| Call | Purpose |
|---|---|
|
Event identity, status, dates, stage classifier inputs. |
|
Draft-stage checklist data: event basics, publishing items, external coordination items, blocked-by reasons. Likely composed gateway-side from existing per-aspect endpoints. |
|
Reg-open KPIs: counts, revenue, daily timeline, category fill. |
|
Pre-race go/no-go checklist: assignment counts, payment outstanding, timing sync state, start-pack readiness. |
|
Post-event finance recon, results publish state, compliance reports list. |
|
Categories with fill counts (Reg-open category bars). |
|
Timing system sync state per target (RaceTec / MyLaps / public tracker). |
Plane integration |
Existing project-management integration (out of admin-service surface). Read-only KPIs (open tasks / overdue / milestones). |
|
Manual stage advance. Captured under AF-1. |
The composite-or-new question for readiness, preflight, postevent mirrors the C01 tenant-glance discussion: gateway composite from existing per-aspect endpoints is preferred when those endpoints exist; a new admin-service composite endpoint when they don’t and it would otherwise be many calls. Decide per-stage during E01 implementation.
Out of Scope
-
The Events workspace landing showing multiple events (E05).
-
Sub-screens reached from E01 — Categories, Races, Participants, Results — each owned by E02 / E03 / E04 / etc.
-
Notifications panel (C01 § Notifications).
-
The Title Panel reusable component itself (C01 reserves the pattern; E01 just consumes it).
Design Anchors
-
C01 Application Structure — sidebar, topbar, title panel pattern
-
E05 Events Control Centre — entry point that lists events; clicking one lands here
-
design-journal/2026-04/admin-portal-greenfield.adoc
Open Questions
-
Stage computation. Is
event.stagederived dynamically from dates + status, or is it a stored column on the event record? Implications for caching, read consistency, and AF-1 manual advance. -
AF-1 manual stage advance affordance. The design hints at "advance manually for dry runs" but doesn’t render the control. Where does the toggle live — Title Panel? Stepper itself? An admin-only menu? Defer to next E01 design pass.
-
Live KPI refresh cadence. Reg-open KPIs are "live". Polling interval (5s / 30s / 60s) vs push (SSE / WebSocket via Async Signal & Sweep, Feature #403)? Lean polling at 60s for v1; revisit if the Reg-open dashboard becomes a heavily-watched page.
-
Cross-event deep-links. "Open in Plane" — does this open a new tab or in-app iframe? Plane is external; new tab is the expected pattern.
-
Stage tagging on past events. Once an event passes through Post-event and the recon/results lanes are all green, does it stay on the Post-event stage forever, or move to a hidden "Closed" stage that only surfaces on E05 Recent Events for special follow-ups? Affects E05’s Recent panel filter.
-
Empty / failed stage data. If a sub-call fails (timing-sync down), does the relevant card show an error tile, hide, or fall back to "No data"?
-
Print / export for Post-event summary. v1 scope?
Forward-Engineering Backlog
-
Event.stagefield — confirmed as derived (not stored) preferable; enum:DRAFT,REGISTRATION_OPEN,PRE_RACE,POST_EVENT, optionallyCLOSED. Mapper from existing fields. -
Composite endpoints —
readiness,preflight,postevent— at minimum, agree the shape DTOs and the gateway-vs-admin-service split per stage. Will need per-stage tickets under Epic #533 once E01 implementation starts. -
Plane integration — out of admin-service; uses existing Plane API key configuration. Token belongs to admin-service config (gateway proxies if needed). Existing pattern for external integrations in EMS.
-
Live KPIs streaming — defer; polling is fine for v1.
-
Role-lane visibility — driven by
OrgPermission.role(Feature #534). E.g. onlyFINANCErole sees the "Finance" role-lane card on Reg-open. Currently the design renders all lanes; gating per role is implementation-time.
Reference Implementation
| File | Role |
|---|---|
|
Orchestrator — reads event, picks the stage component |
|
Draft-stage layout |
|
Reg-open layout |
|
Pre-race layout |
|
Post-event layout |
|
The 4-step indicator above the body |
|
Reusable components extracted to the shared library |
Design Conventions Reverse-Engineered (for Implementation)
Useful patterns to carry into the Angular implementation:
-
Card primitive — title + tag + action + body. Used everywhere on E01. Should live in
@ems/shared-ui. -
KPI primitive — value (large) + unit (smaller) + label (caps small) + delta (smaller, tone-coloured up/down/neutral). 5-up KPI band on Reg-open.
-
Checklist primitive —
items[].label / done / sub / blocked / tag. Variable-height row supporting nested tags (Approved / Pending / Blocking / In review). -
BarChart primitive — small bar chart per day with a highlighted bar; used for the daily timeline. Stacked-pattern below shows time-of-day if needed.
-
CategoryBars primitive — labelled progress bar per category with caps; used for category fill.
-
RoleLane primitive — title bar + KPI grid + checklist for the post-event lanes. Configurable accent colour per role.
These all promote to @ems/shared-ui (WS4) — they’re shared across E01, E05, and future M-screens.