Per-screen mapping of components and domain controls from the Figma mockups. Most app functionality already exists; these are the new designs being built as part of the architectural restructuring. Pass 1 (identification) — every section swept and its content components catalogued from the mocks — is complete. Deep-dives (scaffold spec + domain control + preview) follow per component. A machine-readable node registry is embedded at the bottom.
Rolled up across all analyzed screen sets. Most of the app is already data-ready — the actionable backend list is short. Detail in each set's *-screen-data-gap.html report.
| Gap | Where | Note | Status (2026-06-24) |
|---|---|---|---|
| UserInfo.Rank | Welcome / Pilot Card | Nullable string — "Captain", "First Officer", etc. Blocks greeting line. | In progress — backend team |
| MenuItem.Description | CardText / card-md | Nullable string on MenuItem. Backward-compatible field addition. | In progress — backend team |
| Favorites / bookmarks | MEC (card-btn · card-md · media card-lg) · recurs elsewhere | Cross-control: member-scoped toggle + read keyed on (itemType, itemId). Do not pre-design mobile contract — wire to API client shape when backend delivers. | Pending API client delivery |
| Item | Where | Note |
|---|---|---|
| Submit a Pilot Data Request (PDR) | Member Resources | Web-app form accidentally surfaced in the mobile mock — remove/hide on mobile. No mobile endpoint. |
| Submit Meeting Report | Advocacy | Links out to an online web form — no in-app submission. |
Member has memberNumber; identity is split across UserInfo + Member — alignment input for AB#1709.CallToAction.isActedUpon is set by the API; the GetCallToActionLinksAsync item returns updated after the CTA is done.GetAllSubscriptionsForUserAsync / ToggleSubscriptionAsync already ship.KCMFAQItem / KCMAlertItem in KCM.cs.DutyPeriod, no rule config.airportName == "NOTICE" sentinel item rendered from its checkinNotes; eligibility = KCMAirlineItem.pilots/attendants bools; Usage Procedures = bundled PDF + MenuItem. No backend change.DocumentItem already has PublishDate + Description.| Set | Outcome | Backend gap? |
|---|---|---|
| Home | analyzed — UserInfo · DocumentItem · MenuItem | yes — the 3 Required API Changes (Rank · Description · Favorites) |
| MEC | favorites · card-md Description | yes |
| KCM | data-complete (KCMAirlineItem / KCMAirportItem) | no |
| Jumpseat Flight Finder | data-complete (Flight/Leg · FlightSearch · policies) | no |
| FTDT | data + computation complete (DutyPeriod + client calculators) | no |
| Member Resources | nav mapped; PDR web-scoped | no (PDR out of scope) |
| Notifications | data-complete (NotificationCenterMessage + subscriptions) | no |
| Comms | data-complete (PACMember · CallToAction · DocumentItem) | no |
| Search | client-side over loaded data | no |
| FAQ / Did You Know | favorites (pending API client delivery) |
Bottom line: favorites is the one cross-cutting backend item to build; two forms are web-scoped; the rest are small confirms. Everything else is presentation/scaffold work — the recurring high-leverage controls being Master Form Field, flight card, Duty Period Card, card-notification/listy, and progress bar & labels.
Distinct content / data components found across the app, with usage count, the scaffold they map to, and deep-dive status. App chrome (topNav, navBar-bottom, nav controls, template, icons, keyboard) is excluded.
| Figma component | Uses | Scaffold / control | Domain control(s) | Status |
|---|---|---|---|---|
card-lg | 5 | Card / CardHero | Pilot Card · Document Hero | DONE |
card-md | 8 | CardText | Menu Text | DONE |
listy card generic | 6 | List | Did You Know List | DONE |
card-sm | 19 | CardSmall | — (lists: KCM, Comms, Resources) | TO DO |
card-btn · button pill | 13 | Button | — (scaffold exists) | TO DO |
Toggle - Switch | — | Toggle Switch NEW | — (bare on/off atom composed by toggle-settings) | IDENTIFIED |
horizontal scrolling feed | 4 | Carousel | — (Home / MEC feeds) | TO DO |
Master Form Field | 85 | Form Field NEW | — (search/forms everywhere) | TO DO |
flight card-og · flight card-recent searches · flight card-saved flight · flight card-saved searches · flight card-TABLET | 10+ | Flight Card NEW | One Flight Card domain control, multiple variants (D15). Base/phone: flight card-og 353×111 (renamed from flight segment card). Tablet tier: D12. | IDENTIFIED |
card-button (ButtonCard) | 4 | Button Card NEW | Content card + CTA button. 2 variants (Default/Variant2). Instances: My MEC · Jump Seat · Committees · PAC. (D14) | IDENTIFIED |
card-notification | 7 | Notification Card NEW | Internal Comms · Advocacy | TO DO |
notification card flight status | 3 | Flight Status Notification NEW | Notifications. Component set 5054:13776 (Default 5054:13775 · open 5054:13777 · comms 5056:13824) on notifications-ff 5060:14989 / notifications-comms 5060:15039. Implemented 2026-08-12 as FlightNotificationCard.razor + CommsNotificationCard.razor (D22, shared alpa-fsnc-* CSS), validated live. | DONE |
card-duty period-alt | 6 | Duty Period Card NEW | FTDT duty periods. 3 variants: Default (345×237) · Variant2/expanded (345×1051) · delete-demo (swipe). Master node 4617:13876. DQ-11 open (embedded flight rows). | TO DO |
flight detail flight info | 6+ | Flight Leg Detail NEW | Departure/arrival info panel used in FTDT expanded duty period + Flight Finder expanded flight card. 297×154 px. Symbol node 4325:6399. Fields: DirectionLabel · StatusBadge (incl. delay duration) · Airport · Time · Gate · FlightNumber · AircraftModel · ActionLinks (KCM, Jumpseat Policy) · UpdatedTimestamp. DQ-10 open. | TO DO |
toggle-settings | 9 | Settings Toggle NEW | — (settings) | TO DO |
tab group | 6 | Tab / Segmented (≈ Button Group?) | — | TO DO |
progress bar & labels · btn-flight finder interior nav | 19 | Progress / Stepper NEW | — (FTDT / Flight Finder flow) | TO DO |
check · checklist · radio button | 20 | Form selection controls NEW | — (filters) | TO DO |
flight finder filter and sort | 2 (duplicate node, D41) | Flight Finder Filter Sort NEW | Flight Finder — filter/sort modal (Apply/Clear · check + radio controls). Likely the live-file successor to overlay-flight finder filter below. | IDENTIFIED |
expander-flight finder-advanced search | 1 | Flight Finder Advanced Search NEW | Flight Finder search — composes the Expander primitive; expanded content confirmed 2026-07-02 (D44). | IDENTIFIED |
banner | 1 | Promo Banner NEW | Dismissible promo/announcement banner (sample: UPA27 survey). Domain source TBD (D43). | IDENTIFIED |
search secondary buttons | 1 | Search Secondary Button (scaffold/atom) | Search/JSFF secondary-action chip (e.g. "Recent"). Reclassified from provisional domain-control (D42). | IDENTIFIED |
Out-of-scope note: the Submit a Pilot Data Request (PDR) form (4870:10865, Member Resources) is scoped to the web application and was accidentally surfaced in the mobile mock — it is not a mobile component or data gap and should be removed/hidden on mobile. See membership-screen-data-gap.html.
Outlier note: the Log In screen is the app's unauthenticated entry point — it sits outside the authenticated screen set and is not modeled in the screen array above. Its analysis is data-complete (credential form → JWT auth endpoint; open work is presentation/interactivity). See login-screen-data-gap.html. Its "Forgot Member Number" link (button link, node 5251:15088) was gap-audited 2026-07-06 and resolved not-catalogued (D49).
2026-07-06 gap-sync note: flight card-saved & recent searches live node confirmed as 4450:9884 (D48, confirms D21); button pill live node confirmed as 4245:5754 (D46, same already-adopted Button (Pill) master); Toggle - Switch (node 4128:7733) added as a new scaffold/atom row above (D47).
| App section | Screens | Content components in the mock | Status |
|---|---|---|---|
| Home | 1 · 4099:5229 | Welcome/Pilot · card-lg · card-sm · horizontal scrolling feed · Primary button (no card-md/listy) | 2 DONE · Carousel/CardSmall/Button |
| MEC | 1 · 4684:7914 | card-md×8 · card-lg×4 · card-sm×4 · horizontal scrolling feed×4 · card-btn | IDENTIFIED |
| KCM | 4 · 4562:7572 | card-sm · check (filters) · Master Form Field | IDENTIFIED |
| Airline Policies | 4 · 4713:25321 | Master Form Field×10 (search + list) | IDENTIFIED |
| Internal Comms | 2 · 4565:9260 | card-sm×6 · card-notification×3 | IDENTIFIED |
| Member Resources | 2 · 4870:10671 | card-sm×4 · Master Form Field · toggle-settings | IDENTIFIED |
| Advocacy | 1 · 4877:11274 | card-notification×4 | IDENTIFIED |
| Favorites | 2 · 5287:15227 | card-lg · card-sm · card-btn · Master Form Field | IDENTIFIED |
| FTDT | 8 · 4535:14038 | card-duty period-alt×3 · progress bar & labels · btn-flight finder interior nav · Master Form Field | IDENTIFIED |
| Notifications | 5 · 5060:14989 | notification card flight status · listy card generic×6 · toggle-settings×7 · tab group (segmented: Flight Finder | Comms) · button pill · overlay-notification filters (modal sheet) | IDENTIFIED |
| Flight Finder | 6 · 4713:25117 | Flight Card domain control (variants: base · recent searches · saved flight · saved searches · swipe) · Master Form Field · button pill · tab group · overlay-flight finder filter (modal sheet) | IDENTIFIED |
| Tablet (deferred-responsive tier · D12) | 2 templates · 5455:794 · 5419:11232 | template-tablet (generic slot) · template-tablet - home · navBar-bottom-tablet · topNav-tablet · flight card-TABLET | DEFERRED |
| Search | 1 · 4951:11891 | Master Form Field×11 | IDENTIFIED |
Reference collages (not screens): Components 4020:3422 · components ftdt 4543:5876. Full per-screen node IDs are in the embedded registry below.
ALPAmobileWtabletThe ALPAmobileWtablet_20260617 export (exported 2026-06-16) introduces four screen-architecture changes. Decisions D12–D15 are all adopted; see naming-decisions-record.html for rationale.
The 2026-06-17 file restructures all flight card masters under a single Flight Card domain control. flight card-og (5452:679, 353×111) is confirmed as the renamed flight segment card — identical dimensions and styling, adds a swipe variant. The full variant set:
| Figma master | Node | Variant / screen context | States |
|---|---|---|---|
flight card-og | 5452:679 | Base / phone — Flight Finder results, Saved Flights. Replaces flight segment card. | Default (collapsed 353×111) · Expanded (detail panel) · Swipe |
flight card-recent searches | 4441:398 | Recent Searches list (Flight Finder) | Default · Swipe |
flight card-saved flight | — | Saved Flights list (JSFF) | Default · Swipe |
flight card-saved searches | — | Saved Searches list (JSFF) | Default (collapsed) · Expanded · Swipe |
flight card-TABLET | 5500:44 | Tablet tier (D12 — deferred) | Default · Expanded · Swipe · Variant4 · Variant5 (map by appearance) |
All five map to one Flight Card entry in domain-controls.html. Implementation is one domain control with a Variant discriminator. Swipe-to-reveal is a shared interaction convention across the flight card family and the saved-searches cards.
The Notifications screen uses a two-tab segmented control (tab group) as its primary navigation, splitting the feed into:
GetAllSubscriptionsForUserAsync / ToggleSubscriptionAsync). Uses notification card flight status.GetNotificationListAsync → NotificationCenterMessage. Uses card-notification.The card-notification component serves both tabs — the Comms variant is a content/style difference, not a separate component. The overlay-notification filters frame (modal sheet) applies filter options to whichever tab is active. Filter state is tab-scoped.
Confirm open: mark-as-read mechanism · whether the Flight Finder tab feeds from the same NotificationCenterMessage type or a distinct flight-status message type.
Three frames are explicitly annotated as overlays in the 2026-06-17 file. Designer annotation verbatim:
Frames prefixedoverlay-are modal sheets layered over a base screen (filter / sort / notification-filter), shown on invocation and dismissed back to the screen beneath. Build as overlays, not separate routes. Applies to alloverlay-frames (flight finder filter, notification filters, KCM filter).
| Figma frame | Node | Triggers from | Build as |
|---|---|---|---|
overlay-flight finder filter | 0x44de70 (binary) | Flight Finder results — filter/sort action | Modal sheet over Flight Finder results screen. Contains check/radio button form controls. 2026-07-02: likely the live-file successor is flight finder filter and sort (node 4450:11374, D41) — same Apply/Clear CTAs and check/radio controls; not confirmed identical, but the pattern match is strong. |
overlay-kcm filter | 0x3a22a1 (binary) | KCM Airlines/Airports — filter action | Modal sheet over KCM screen. Contains filter form controls. |
overlay-notification filters | 0x60d6eb (binary) | Notifications screen — filter action (both tabs) | Modal sheet over Notifications screen. Tab-scoped filter state. |
These are screen-architecture notes, not new scaffold components. No additions to the component library. In MAUI, implement as Shell modal pages or Popup pattern — not pushed navigation routes.
Two tablet-specific templates in the 2026-06-17 file. Designer annotation verbatim: "Tablet — adapted, not stretched. A considered tablet treatment, not the phone scaled up: dedicated type mode, purpose-built navs, and increased margins/padding. Tablet components live in the components-tablet section."
| Figma frame | Node | Contains | Status |
|---|---|---|---|
template-tablet | 5455:794 | Generic slot layout: slot-main feed + navBar-bottom-tablet + topNav-tablet. Screenshot reference: 2026-05-27. | Deferred (D12) |
template-tablet - home | 5419:11232 | Home screen layout on tablet. Screenshot reference: 2026-05-27. Also references FTDT - TABLET (5419:11231) as sibling. | Deferred (D12) |
Tablet screens are catalogued here for completeness but are out of scope until the responsive layout system is defined (post-#2087). Do not add tablet screens to the phone navigation tree or scaffold ViewModel hierarchy. When implemented, tablet screens reuse the same ViewModels as phone screens — distinguished by layout context, not subclassing (D12).
Screen 4099:5229 (393×852). The scrollable main-feed slot stacks, in order (from the Figma design context):
card-lg content cardscard-sm tiles (DART, …)card-lg cardscard-lgcard-lg (Press Release)Chrome (not library): topNav (avatar · favorites · notifications · search · hamburger) · status bar · navBar-bottom (Home · Jumpseat · KCM · FTDT · My MEC). Every card carries a favorite/i-heart in Figma — rendered per D31 (2026-06-26).
| Home element | Figma | Scaffold | Domain control / action | Status |
|---|---|---|---|---|
| Welcome card | card-lg chevron 4033:1436 | Card | Pilot Card | DONE |
| Content cards (carousels + Hotel Request) | card-lg | CardHero | Document Hero | DONE |
| Carousel sections (×3, "View All" header) | horizontal scrolling feed | Carousel | Feed (docs / press releases) | TO BUILD |
| Small-card tiles (DART · Flight Pay Loss · My Payments · Infor Expense · Meeting Request · MPS) | card-sm | CardSmall | Resource / nav links (MenuItem) | TO BUILD |
| Emergency Hotline | Primary button + i-phone | Button | tel: emergency action | TO BIND |
| Section headers ("UAL MEC", "Feed", "View All") | feed header | Section title | title + View-All link | TO BUILD |
Correction from the deep dive: Home does not use card-md (Menu Text) or listy (Did You Know List) — those live on MEC and "Did you know". Home's content is card-lg (done as Pilot Card + Document Hero). The remaining pieces are now documented as domain controls — Home Feed Carousel · Resource Tile (CardSmall) · Emergency Hotline — code build pending.
Data-gap analysis — complete. Mapped to UserInfo (name) · DocumentItem via GetDocuments (card-lg feeds · View Contract · Hotel Request) · MenuItem (card-sm tiles · Emergency via SpecialCode). Open backend items are exactly the 3 Required API Changes — Rank (blocking) · Description (minor) · Favorites (cross-control). The DONE / TO-BUILD statuses in the table above are build tasks, not analysis gaps. Report: home-screen-data-gap.html · full detail in backend report §1–7.
Results mock 4713:25168 repeats a flight card (353×111): origin/destination + times (DEN 12:00 → MIA 16:19), per-leg carriers (DL 302 / AA 1753 / AA 1186), layover chips, date, total duration / Multileg. Recent/Saved Searches use flight card-recent searches and flight card-saved searches; Saved Flights use flight card-saved flight.
2026-06-17 update (D15): all flight card variants consolidate into one Flight Card domain control — see the 2026-06-17 Revision section above. The "Search Result Card" split is retired; all variants are modelled as FlightCard with a Variant discriminator. Swipe-to-reveal is shared across the family.
Reuses the Home controls and adds Secondary button, card-btn (3-up icon tiles) and confirms card-md (text content card) data. Full report: mec-screen-data-gap.html.
New data gaps surfaced: (1) Favorite / bookmark — heart on card-btn, card-md and the media card-lg; no API today (heart shown per D31, reverses D7 — MEC shows it across three controls). (2) card-md description — re-confirms the Description gap on the content item. Note: the card-md "new" count badge is client-side (local last-seen diff'd against the API), not a backend gap — API just needs stable item IDs.
5 screens (home · Airlines · Airports/"Airline Policies" · Policies search · Filter overlay). Full report: kcm-screen-data-gap.html.
Data-complete — no backend gaps. Airlines map 1:1 to KCMAirlineItem { airlineName, pilots, attendants } (getkcmairlines); Airports to KCMAirportItem { airportName, airportCode, checkinNotes, mapUrl } (getkcmairports). Filter/search/sort are client-side. Confirm (×3): Requirements/Usage Procedures content source · Airports "NOTICE" source · eligibility-flag semantics. Presentation backlog: Master Form Field (+ check / radio / tab group / Underline Button) scaffolds.
9 nodes (search · results · recent · saved searches · saved flights · airline policies). Full report: jsff-screen-data-gap.html.
Data-complete — no backend gaps. Search → FlightSearchAsync → FlightSearchResponse (Flight/Leg); airports → GetFlightSearchAirportsAsync (AirportLocation); detail → FindFlightInfoAsync; policies → GetAirlineJumpseatPoliciesAsync (PolicyViewModel) / GetJumpseatAirlinesAsync. The flight card (new marquee scaffold, 3 variants) binds Flight/Leg (codes · times · carriers · layovers · duration · KCM-per-leg). Confirm: saved/recent persistence (local vs sync) · flight-status notification subscribe API (saved-flight bell) · advanced-search field coverage. Client-side: saved/recent storage, sort/filter.
8 nodes (dashboard · op-type select · duty periods · archived · add unaugmented/segment/rest/note). Full report: ftdt-screen-data-gap.html.
Data & computation complete — no backend gaps. Mature local-first feature: DutyPeriod CRUD+sync (Create/Update/SoftDeleteDutyPeriodAsync, GetDutyPeriodsUpdatedAtAsync → DutyPeriodExpanded, FTDTDataBase/FTDTDataSyncHelper); op-type via DPOperationType (US + Canada). Max Duty Period / Ends / cumulative Flight & Duty-hour bars are all computed client-side (FAR-117 / Canadian rest calculators, CalculatorRest_CAN). Regulatory limit rules are all client-side (resolved — no backend rule config). Confirm: sub-entity collections (segments/rest/notes) · calc-input persistence. Presentation backlog: Duty Period Card · progress bar & labels · Master Form Field · toggle-settings.
Live Figma exploration of FTDT screens (via get_metadata + get_screenshot on nodes 4535:14038, 4544:5877, 4617:13876, 4325:6399, 4555:6566) confirmed the following component structure:
| Figma node | Name | Dimensions | Role | Scaffold candidate |
|---|---|---|---|---|
4535:14038 | FTDT (dashboard) | 393×852 | Cumulative Limitations tab — Flight Hours + Duty Period Hours progress bars. "ADD DUTY PERIOD" button. | progress bar & labels (existing TODO) |
4544:5877 | FTDT - Duty Periods | 393×852 | Duty period list. 3× card-duty period-alt. Third card shows swipe-to-reveal red delete strip. | card-duty period-alt (Duty Period Card) |
4617:13876 | card-duty period-alt master | 385×1613 | 3-variant component frame. Default=345×237 (collapsed: date, max duty, ends, duty, manage button). Variant2=345×1051 (expanded: + EDIT, Flight Segments sub-list, ADD FLIGHT SEGMENT, Rest Duration, EDIT REST OPPORTUNITY, Notes, ADD NOTE, CONCLUDE button). Delete-demo=345×237 (swipe-right reveals red delete icon). | DutyPeriodCardViewModel (new · DQ-11) |
4325:6399 | flight detail flight info | 297×154 | Departure/arrival info panel. Shows: direction label, StatusBadge with delay duration ("Delayed 34m"), Airport + time, Gate, FlightNumber, AircraftModel, KCM link, Jumpseat Policy link, Updated timestamp. | FlightLegInfoViewModel (new · DQ-10) |
4555:6566 | FTDT-add flight segment | 393×852 | Form screen: Equipment, Flight Number, Depart, Arrival, Date, Block Out, Block In, Flight Time. Confirms data fields needed for DutyPeriodExpanded segment sub-entities. | Master Form Field (existing TODO) |
Open reusability questions from this exploration:
DQ-10 — flight detail flight info: shares 5 fields with FlightSegmentCardViewModel but adds 4 unique fields (Gate, ActionLinks, DirectionLabel, UpdatedTimestamp) and drops 3 (Destination, ArrivalTime, Duration). One-directional vs paired-route layout. Likely a new scaffold component, but depends on data source for Gate/ActionLinks.
DQ-11 — Duty Period embedded flight rows: compact ~178×150 px instances inside expanded duty period card. 3-line format (date · route · detail). Bidirectional (Origin AND Destination). 5 fields, no StatusBadge. Likely internal to DutyPeriodCardViewModel rather than a separate scaffold — see DQ-11 for options.
2 nodes (resource nav · Submit a Pilot Data Request form). Full report: membership-screen-data-gap.html.
Resource list = MenuItem nav (In Case of Emergency · International Directory · Membership Card · Orange Card → existing pages). The PDR form pre-fills from Member (Name/Position/ALPA #). Out of mobile scope: the PDR submission is scoped to the web application and was accidentally surfaced in the mobile mock — no mobile endpoint; remove/hide on mobile. Not a mobile backend gap. Confirm: Employee-Number prefill source (not on Member).
Notifications list + settings (distinct from Comms). Full report: notifications-screen-data-gap.html.
Data-complete. COMMS list → GetNotificationListAsync → NotificationCenterMessage { Title, Message, SendDateTime, HasNotBeenRead, ContentType, DocType, FileID, Destination, RequiresLogin }; settings → GetAllSubscriptionsForUserAsync → MobileAudienceSubscription + ToggleSubscriptionAsync. Confirm: Flight-Finder-tab flight-status feed source (↔ JSFF saved-flight subscription) · mark-as-read mechanism. 2026-06-17 update: screen is segmented into two tabs (Flight Finder | Comms) driven by a tab group; overlay-notification filters is a modal sheet (not a route); card-notification serves both tabs. See 2026-06-17 Revision section above. Presentation: Notification Card (+ flight-status variant), segmented tab group, toggle-settings, overlay modal.
Advocacy + Internal Comms (ALP Mag) — document-list screens, distinct from Notifications. Full report: comms-screen-data-gap.html.
Data-complete. Advocacy → GetPACMemberInfoAsync → PACMember { ContributionYTD, ClubStatus, AllPACContributions, pacDonationPageURL, pacMembershipInfoURL } + GetCallToActionLinksAsync → CallToAction; Internal Comms → GetDocumentListAsync → DocumentItem. External: "Submit Meeting Report" links to an online web form (no in-app submission). Confirm: CallToAction completion status · comms article date/summary fields.
Global search (typeahead). Full report: search-screen-data-gap.html.
Client-side — no backend gap. No global-search endpoint/VM in the codebase; search runs over already-loaded data (DocumentItem list · MenuItem · KCM airlines · content), results reuse existing per-entity navigation. Confirm: the searched corpus, and whether a server search is needed if the corpus outgrows what's on device.
"Did You Know?" list (listy). Full report: faq-screen-data-gap.html.
2026-06-24: This feature has been abandoned. The DYK/FAQ requirement has been dropped; no endpoint will be built and no mobile implementation is planned. The DidYouKnowListFactory scaffold spec and ListViewModel domain control remain in the library as a generic list, but the DYK-specific domain control is removed from scope.
2 nodes (rich "Favorites" view · condensed list). Full report: favorites-screen-data-gap.html.
Pending API client delivery (2026-06-24). The screens render the member's favorited items by their native control — card-lg (document) · card-sm (nav tile) · card-btn (button) — plus a condensed » list. Backend team is building the Favorites capability; do not pre-design the mobile contract. Wire FavoritesService to the shape and calls delivered in the backend API client. No favorites endpoint / service / model exists today.
Machine-readable lookup of the Figma nodes and per-section components. Extend as deep-dives complete.