You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+25-23Lines changed: 25 additions & 23 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -20,6 +20,8 @@ feature branch.
20
20
21
21
## Demo Video
22
22
23
+
[](docs/showcase/gametime-order-history-showcase.mp4)
24
+
23
25
[Watch the 67-second implementation walkthrough](docs/showcase/gametime-order-history-showcase.mp4).
24
26
It uses the native app screenshots below with ElevenLabs narration to cover the
25
27
purchase timeline, receipt detail, Share with Friends flow, rotation-aware UI,
||||
39
41
40
-
| Search empty state | Past purchases filter | Shared confirmation |
41
-
| --- | --- | --- |
42
+
| Search empty state | Past purchases filter | Shared confirmation|
||||
||
47
49
48
50
## Assessment Evidence
49
51
50
52
The attached PDF asks for an order history experience with these points. This
51
53
repo proves each one directly in the product surface, source, and tests.
52
54
53
-
| PDF requirement | Where it is proven |
54
-
| --- | --- |
55
-
| Display a list of the user's past purchases | The order timeline is shown in the order history screenshots above. Implementation: [OrdersListScreen.tsx](src/features/orders/OrdersListScreen.tsx), [OrderCard.tsx](src/features/orders/OrderCard.tsx), and [mockOrders.ts](src/data/mockOrders.ts). |
56
-
| Tapping a purchase opens a detail screen | The receipt detail screenshot shows the selected order path. Implementation: [OrdersExperience.tsx](src/features/orders/OrdersExperience.tsx) handles selection and back navigation; [OrderDetailScreen.tsx](src/features/orders/OrderDetailScreen.tsx) renders the detail view. |
57
-
| Detail includes event name and information | The detail screen shows the event name, venue, date, category, confirmation, payment, and seats. Formatting is centralized in [formatters.ts](src/domain/orders/formatters.ts). |
58
-
| Detail includes receipt with price breakdown | The receipt screenshot shows subtotal, fees, tax, discount when present, and total. Implementation: [ReceiptRow.tsx](src/components/ReceiptRow.tsx) and `getReceiptLineItems` in [formatters.ts](src/domain/orders/formatters.ts). |
| Display a list of the user's past purchases | The order timeline is shown in the order history screenshots above. Implementation: [OrdersListScreen.tsx](src/features/orders/OrdersListScreen.tsx), [OrderCard.tsx](src/features/orders/OrderCard.tsx), and [mockOrders.ts](src/data/mockOrders.ts).|
58
+
| Tapping a purchase opens a detail screen | The receipt detail screenshot shows the selected order path. Implementation: [OrdersExperience.tsx](src/features/orders/OrdersExperience.tsx) handles selection and back navigation; [OrderDetailScreen.tsx](src/features/orders/OrderDetailScreen.tsx) renders the detail view.|
59
+
| Detail includes event name and information | The detail screen shows the event name, venue, date, category, confirmation, payment, and seats. Formatting is centralized in [formatters.ts](src/domain/orders/formatters.ts).|
60
+
| Detail includes receipt with price breakdown | The receipt screenshot shows subtotal, fees, tax, discount when present, and total. Implementation: [ReceiptRow.tsx](src/components/ReceiptRow.tsx) and `getReceiptLineItems` in [formatters.ts](src/domain/orders/formatters.ts).|
59
61
| Share with Friends generates a calendar event | The native receipt screenshot shows the CTA, the native iOS share sheet screenshot shows the generated event text, and the shared-state screenshot shows the completed action. Implementation: [calendar.ts](src/domain/orders/calendar.ts) builds the ICS payload and [shareCalendar.ts](src/services/shareCalendar.ts) sends it to native/web share surfaces with clipboard fallback. |
60
-
| Simulate network calls with mock data |[ordersApi.ts](src/services/ordersApi.ts) simulates `GET /orders` and `GET /orders/:orderId` with latency, failure states, and Zod response validation from [schema.ts](src/domain/orders/schema.ts). |
61
-
| Include test coverage | Tests cover selectors, formatting, calendar generation, mock API validation, query hooks, route containers, list/detail UI, share fallback, and the app shell. Run `make verify` for TypeScript plus Jest coverage gates. |
62
+
| Simulate network calls with mock data |[ordersApi.ts](src/services/ordersApi.ts) simulates `GET /orders` and `GET /orders/:orderId` with latency, failure states, and Zod response validation from [schema.ts](src/domain/orders/schema.ts).|
63
+
| Include test coverage | Tests cover selectors, formatting, calendar generation, mock API validation, query hooks, route containers, list/detail UI, share fallback, and the app shell. Run `make verify` for TypeScript plus Jest coverage gates.|
62
64
63
65
## Implementation Showcase
64
66
@@ -153,15 +155,15 @@ flowchart LR
153
155
154
156
## Architecture Decisions
155
157
156
-
| Decision | Why it exists | Where to inspect |
157
-
| --- | --- | --- |
158
-
| Expo SDK 56 on Node 22 | Matches the current React Native stack while keeping setup repeatable with `nvm use`. |[.nvmrc](.nvmrc), [package.json](package.json), [app.json](app.json)|
159
-
| React Navigation native stack | The prompt has two real screens. A navigator gives route params, Android hardware back, iOS swipe-back, and deep-link readiness without custom back-stack code. |[OrdersExperience.tsx](src/features/orders/OrdersExperience.tsx), [navigation.ts](src/features/orders/navigation.ts)|
160
-
| TanStack Query for server state | Orders are fetched data with cache, retry, refetch, stale-time, loading, and error semantics. Query owns that; containers keep only local UI state. |[App.tsx](App.tsx), [queries.ts](src/features/orders/queries.ts)|
161
-
| Containers separate behavior from rendering | Containers read routes and queries, derive filtered data, and pass plain props to screens. Screens stay testable and presentation-focused. |[OrdersListContainer.tsx](src/features/orders/OrdersListContainer.tsx), [OrderDetailContainer.tsx](src/features/orders/OrderDetailContainer.tsx)|
162
-
| Zod at the mock API boundary | Mock data is treated like real backend data: it is validated before reaching the UI, and TypeScript types are inferred from the schemas. |[schema.ts](src/domain/orders/schema.ts), [ordersApi.ts](src/services/ordersApi.ts)|
163
-
| FlashList for the timeline | Order history is a list surface that can grow. Virtualization is included now so the implementation scales beyond seed data. |[OrdersListScreen.tsx](src/features/orders/OrdersListScreen.tsx)|
164
-
| Native share with web fallback | The primary experience is mobile. Web preview still behaves reasonably through `navigator.share` or clipboard fallback. |[calendar.ts](src/domain/orders/calendar.ts), [shareCalendar.ts](src/services/shareCalendar.ts)|
| Expo SDK 56 on Node 22 | Matches the current React Native stack while keeping setup repeatable with `nvm use`. |[.nvmrc](.nvmrc), [package.json](package.json), [app.json](app.json)|
161
+
| React Navigation native stack | The prompt has two real screens. A navigator gives route params, Android hardware back, iOS swipe-back, and deep-link readiness without custom back-stack code. |[OrdersExperience.tsx](src/features/orders/OrdersExperience.tsx), [navigation.ts](src/features/orders/navigation.ts)|
162
+
| TanStack Query for server state | Orders are fetched data with cache, retry, refetch, stale-time, loading, and error semantics. Query owns that; containers keep only local UI state. |[App.tsx](App.tsx), [queries.ts](src/features/orders/queries.ts)|
163
+
| Containers separate behavior from rendering | Containers read routes and queries, derive filtered data, and pass plain props to screens. Screens stay testable and presentation-focused. |[OrdersListContainer.tsx](src/features/orders/OrdersListContainer.tsx), [OrderDetailContainer.tsx](src/features/orders/OrderDetailContainer.tsx)|
164
+
| Zod at the mock API boundary | Mock data is treated like real backend data: it is validated before reaching the UI, and TypeScript types are inferred from the schemas. |[schema.ts](src/domain/orders/schema.ts), [ordersApi.ts](src/services/ordersApi.ts)|
165
+
| FlashList for the timeline | Order history is a list surface that can grow. Virtualization is included now so the implementation scales beyond seed data. |[OrdersListScreen.tsx](src/features/orders/OrdersListScreen.tsx)|
166
+
| Native share with web fallback | The primary experience is mobile. Web preview still behaves reasonably through `navigator.share` or clipboard fallback. |[calendar.ts](src/domain/orders/calendar.ts), [shareCalendar.ts](src/services/shareCalendar.ts)|
0 commit comments