← Component Specifications
Every screen where the Blazor Hybrid implementation ships without a Figma design
source, or where implementation and design have diverged, in one
place — organized by app area, each with a side-by-side screenshot comparison of the legacy
XAML implementation and the Blazor implementation for review. The comparison pages follow one
format: what the gap is, what ships today on both stacks, the screenshots, how the capture was
verified, and the open questions that need a design decision.
What we need from this review: each comparison page ends in an
Open questions table addressed to Design (occasionally Product or Comms). A gap is
closed when those questions have answers — either a Figma frame for the screen or an explicit
ruling that the screen keeps its implementation-defined form.
How to read the status pills
| Pill | Meaning |
| Pair complete | Both 660×1434 captures exist — XAML and Blazor — and the comparison page is ready for review. |
| Partial | One side captured or one sub-screen missing; the page says exactly what is absent and why. |
| Blocked | Capture needs something we don't have (an entitled test account, seed data). Named on the page. |
| No screenshots | A prose/proposal document — gap is real but the comparison is textual. |
Comms & Notifications
| Gap | Status | Summary |
| Comms Notification Detail |
Pair complete |
The most common notification row (empty ContentType, ~1 in 3 of production feed) opens a screen no one designed — native generates an HTML string into a WebView. AB#2286. |
| Flight Notification Grouping |
No screenshots |
Flight Finder push notifications need a grouping treatment; four options proposed with a recommendation. Questions for design in its §5. Card gap closed 2026-08-12 — collapsed face and expanded status row implemented from the delivered component set 5054:13776 (parent page node notifications-ff 5060:14989); list grouping still open. |
Jumpseat / Flight Finder
| Gap | Status | Summary |
| Jumpseat Etiquette & Mission |
Pair complete |
Both info pages ship with no Figma source; includes shipped-copy corrections and a missing fifth sub-nav item. AB#2177. |
| Flight Finder — Blazor vs Figma audit |
Pair complete |
Different comparison axis: the 9 Figma-designed Flight Finder screens audited against the live Blazor build, findings FF-1…FF-17 with paired Figma/live captures. |
Member Resources
MEC / My Pilot Group
| Gap | Status | Summary |
| MEC Events · Hotels · Reps · Committee Details |
Pair complete |
Native shows live member data; the Blazor MEC surface is a scaffold with hardcoded/mock lists and no Figma frames for these screens. Committee drill-down does not exist in Blazor (/mec/committees rows self-link). |
| Contacts (Home / Category / List) |
Blocked |
Neither side capturable: requires an account flagged Is_MEC_Contact_List_User. Comparison page pending an entitled test account. |
| My Pilot Group → MEC composition coverage |
No screenshots |
Destination-by-destination coverage assessment of the My Pilot Group menu against the Blazor MEC scaffold. |
FTDT
| Gap | Status | Summary |
| Add / Edit Duty Period forms |
Partial |
Add-form pair captured. Edit form blocked: needs an account or simulator with an existing duty-period record (creating one against a live account is off-limits). |
KCM
| Gap | Status | Summary |
| KCM Airport Detail |
Pair complete |
Same airport (ATL) captured on both stacks against live data; no Figma frame for the detail level. |
Documents
| Gap | Status | Summary |
Document Viewer (/document-open) |
Pair complete |
Same document (UPA 23.3 contract) on both stacks. Also corrects the record: the native viewer reached in this build is AuthenticatedWebViewPage (renamed from WebViewPage, AB#2591), not PDFJSPage. |
| Document Cache |
Blocked — no design source |
AB#2576's PrefetchCount auto-downloads documents with zero UI indicator anywhere. No native precedent exists — proposed direction is its own mechanism (own route/port/ViewModel), affiliated with Favorites by function only, the same separation already used between Notifications and Favorites. AB#2578. |
Home
Censuses and related inventories
The comparison pages above are the review surface; these are the underlying inventories they were drawn from.
| Document | What it holds |
| XAML → Blazor Coverage Map | The screen-by-screen census: which native screens have a Blazor equivalent, which were re-expressed, which are genuine gaps. Reference XAML captures live here. |
| Design-Source Gap Inventory | Route-by-route "does a Figma frame exist" inventory across the Blazor routes; the confirmed-candidate list this hub's pages were scoped from. |
| Empty State Inventory & Gaps | Screens that render lists but have no designed empty state; questions for design in its §4. |
| Component Design Questions | The running dq-1…dq-33 design question log at component level. |
| Screen Mapping Status | Index of the twelve per-screen data-gap analyses (domain-control/API binding) — a different gap class, linked here for cross-reference only. |
Capture conventions
- All pairs are captured on an iPhone 17 Pro Max class simulator at 1320×2868 and downscaled to 660×1434; assets live in
../screen-assets/ named <screen>-xaml.png / <screen>-blazor.png.
- Captures are taken against live data on a verified build (installed bundle hash-matched to the stated commit) — each page's Verification section records the route, navigation path, and checks performed.
- Screens that can show member PII (Membership Card, committee/officer contact details) are redacted before the asset is committed.