React Navigation for screen ownership.
The detail screen is a route, not a boolean. That gives the app
route params, native back behavior, iOS swipe-back, and
deep-link readiness through `gametime://orders/:orderId`.
TanStack Query for server state.
Orders have loading, retry, stale-time, cache, and refetch
semantics. Query owns those concerns so screens do not
hand-roll flags or duplicate async logic.
Zod for the trust boundary.
Mock responses are validated like real network responses.
TypeScript types are inferred from the same schemas, so runtime
contracts and compile-time contracts stay aligned.
Containers keep screens honest.
Containers connect routes, queries, local search/filter state,
and selectors. Screens receive plain props and stay focused on
layout, accessibility, and user interaction.
FlashList anticipates real order volume.
A purchase history can grow. Virtualization keeps the timeline
ready for larger data sets without changing the screen API.
expo-image for cached artwork.
Remote event images load through a shared
CachedImageBackground: memory and disk caching, a blurhash
placeholder, and a short fade. The heaviest content on the
screen never re-downloads or flashes blank on scroll.
Dynamic type without broken layouts.
Large display text is capped with a maximum font multiplier so
big accessibility text sizes never overflow fixed layouts,
while body text stays free to scale.
Native screenshots prove the surface.
The README uses iPhone simulator captures for the primary
proof path: order history, empty search, past filter, receipt,
native share sheet, shared state, and landscape layout.