MobileMenu.ApiClient 1.0.7, WI 2182), and the
per-component data-source model below has been replaced by the ItemDto dynamic feed
(ItemComponentFactory.cs dispatches on ItemDto.ItemType).
The body is preserved unchanged for the decision rationale.
All 8 home screen components have been specced and data sources resolved. This document captures the API changes required and the architectural decisions made, so the backend team can action them independently.
Total backend changes required: 1 field addition.
MenuItem — Add description fieldIN PROGRESS with backend team (2026-06-24)
| Field | description |
| Type | string |
| Nullable | Yes |
| Notes | Body text for CardText (home screen navigation tile) |
Context: The CardText component (WI-2127) displays a title, optional body text, image, and navigation link. All other fields already exist on MenuItem. Adding description here avoids a second async query per card and keeps the card backed by a single data source.
Decision rationale — why MenuItem and not DocumentItem: CardText is a navigation tile — it represents a menu item with richer display. MenuItem is the source of truth for home screen layout, order, and visibility. DocumentItem was rejected for CardText because it would require a second async query per card and conflates navigation structure with document content.
Where it's used: ALPADocs.Data.Models.MenuItem → CardTextViewModel.Description
DocumentItem — CardHero (WI-2122)CardHero is a pure-content card backed by DocumentItem. All required fields already exist:
| CardHero Property | DocumentItem Field | Status |
|---|---|---|
Title | DocumentItem.Title | ✅ Exists |
Description | DocumentItem.Description | ✅ Exists |
Image | DocumentItem.Image | ✅ Exists |
Link | DocumentItem.FileID → SharedActionsService | ✅ Exists |
PublishDate | DocumentItem.FormattedPublishDate | ✅ Bonus |
| Query filter | DocumentItem.Scope + DocumentItem.Category | ✅ Exists |
Content configuration needed: The backend/content team needs to confirm the scope and category string values that identify hero content (e.g. "featured", "hero"). This is a configuration decision, not a code change.
Flight / Leg — Stack Card (WI-2126)Stack Card is a concrete Jumpseat flight card backed by the existing FlightSearchResponse → Flight → Leg model. No new API or model changes needed.
| Stack Card Property | Source Field | Status |
|---|---|---|
| Header date | Flight.FlightDepartureDateLongFormat | ✅ Exists |
| Departure date/time | Flight.FlightDepartureDate + Flight.FlightDepartureTime | ✅ Exists |
| Origin → Destination | Flight.FlightDepartureAirportCode + Flight.FlightArrivalAirportCode | ✅ Exists |
| Flight number | FirstLeg.CarrierCode + FirstLeg.FlightNumber | ✅ Exists |
| Status badge | Flight.IsDelayed / Flight.IsCanceled / Flight.FlightCardIndicatorColor | ✅ Exists |
| Favorite state | Settings.FavoriteItemIdsJSON (client-only) | ✅ Client-only |
| Property | Card | Storage | Pattern |
|---|---|---|---|
IsFavorite | CardText, Stack Card | Microsoft.Maui.Storage.Preferences | JSON array of item IDs — same as FlightSearchNotifyMeList |
NewCount | CardText | Microsoft.Maui.Storage.Preferences | JSON dict { itemId: count } — client-computed only |
| Work Item | Component | Data Source | Backend Change? |
|---|---|---|---|
| WI-2091 | Pilot Card | IAuthentication + DataManager (contract docs) | None |
| WI-2121 | Button Card | Presentation layer / use-case defined | None |
| WI-2122 | CardHero | DocumentItem via DocumentCardViewModel | None (content config only) |
| WI-2123 | Icon Button Card | Presentation layer / use-case defined | None |
| WI-2124 | Multi-Button Card | Presentation layer / use-case defined | None |
| WI-2125 | Slider Card | Use-case defined | None |
| WI-2126 | Stack Card | Flight/Leg (Jumpseat flight search) | None |
| WI-2127 | CardText | MenuItem + local Settings | Add description to MenuItem |
All property mapping and data source analysis docs are in docs/component-specifications/:
card/ — Pilot Card (WI-2091)button-card/ — WI-2121card-hero/ — WI-2122icon-button-card/ — WI-2123multi-button-card/ — WI-2124slider-card/ — WI-2125stack-card/ — WI-2126card-text/ — WI-2127