ProjectR Docs
Screen MapMobile app

Orders

Mobile app: every screen, state and flow in Orders.

3 screens and overlays, 43 states, 4 flows. Frames show a real screenshot where one was captured and a wireframe card where the state needs data or conditions a device run cannot produce.

Flows

Order lifecycle seen by the buyer

Step 1
Order Details, Loaded order (iOS)Order Details, Loaded order (Android)
Shipped order shows status and items
Tracking number arrives
Step 2
Order Details, Tracking card (iOS)Order Details, Tracking card (Android)
Tracking card offers Mark as received
Tap Mark as received
Step 3
Order alerts, Mark as received? (iOS)Order alerts, Mark as received? (Android)
Confirm dialog before marking delivered
Confirm
Step 4
Order Details, Received pill (iOS)Order Details, Received pill (Android)
Order shows Delivered
Tap Rate and Review
Step 5
Order Details, Review prompt (iOS)Order Details, Review prompt (Android)
Prompt links to the first item's reviews

Branches and edge cases

Edgefrom step 1
Order Details, Track Package button never shows (iOS)Order Details, Track Package button never shows (Android)
No tracking number: no Mark as received
Errorfrom step 3
Order alerts, Could not update (iOS)Order alerts, Could not update (Android)
Update fails: order not found
Edgefrom step 3
Wireframe

Order alerts

Success

Already received

Server returns success when receivedAt already set

Not reachable on a device: Capture audit 2026-10-30. ios: Prior source investigation: no distinct reachable UI for this state. android: Prior source investigation: no distinct reachable UI for this state.

Already received
Edgefrom step 2
Order Details, Mark received on cancelled order (iOS)Order Details, Mark received on cancelled order (Android)
Mark received on a cancelled order
Flow diagram

Cancellation or refund

Step 1
Order Details, Cancelled, Refunded, Voided pill (iOS)Order Details, Cancelled, Refunded, Voided pill (Android)
Order detail shows a Cancelled, Refunded or Voided pill
Open Loyalty
Step 2
Loyalty, Cancelled order still shows +N (iOS)Loyalty, Cancelled order still shows +N (Android)
Activity still lists the original +N stamp row
Open Orders
Step 3
Orders, Buy again pill (iOS)Orders, Buy again pill (Android)
Orders list offers Buy again on the order

Branches and edge cases

Edgefrom step 1
Order Details, Partially refunded looks new (iOS)Order Details, Partially refunded looks new (Android)
Partial refund
Edgefrom step 1
Order Details, Discount row only if > 0 (iOS)Order Details, Discount row only if > 0 (Android)
Discount row only when above zero
Flow diagram

Linking an order to the user

Step 1
Orders, Populated list (iOS)Orders, Populated list (Android)
Linked orders appear in the Orders list
Open an order
Step 2
Order Details, Loaded order (iOS)Order Details, Loaded order (Android)
Order detail for a linked order
Scroll to stamp row
Step 3
Order Details, Stamp row: awarded (iOS)Order Details, Stamp row: awarded (Android)
Stamp row shows the stamp awarded

Branches and edge cases

Edgefrom step 1
Orders, Unlinked orders hidden (iOS)Orders, Unlinked orders hidden (Android)
Unlinked order stays invisible
Emptyfrom step 1
Wireframe

Orders

Empty

No Orders Yet (no profile)

Profile resolved to null, treated as empty although it can be transient

Needs data: Capture audit 2026-10-30. ios: Requires signed-in auth with a null profile while the app gate permits browsing; current fixed-OTP accounts all have profiles. android: Requires signed-in auth with a null profile while the app gate permits browsing; current fixed-OTP accounts all have profiles.

No app profile
Edgefrom step 2
Order Details, Stamp row: needs review (iOS)Order Details, Stamp row: needs review (Android)
Shipping phone only: needs review
Edgefrom step 2
Order Details, Stamp row: below minimum (iOS)Order Details, Stamp row: below minimum (Android)
Subtotal below minimum
Edgefrom step 2
Order Details, Stamp row: awaiting payment (iOS)Order Details, Stamp row: awaiting payment (Android)
Awaiting payment
Flow diagram

Reorder

Step 1
Orders, Buy again pill (iOS)Orders, Buy again pill (Android)
Order card offers Buy again
Tap Buy again
Step 2
My Bag (iOS)My Bag (Android)
All lines added, user lands in the bag

Branches and edge cases

Edgefrom step 1
Order Details, Loaded order (iOS)Order Details, Loaded order (Android)
Shipped order: not offered
Edgefrom step 1
Order alerts, Some items unavailable (iOS)Order alerts, Some items unavailable (Android)
Some items unavailable
Errorfrom step 1
Order alerts, Reorder failed (iOS)Order alerts, Reorder failed (Android)
None addable
Errorfrom step 1
Order alerts, Reorder empty order (iOS)Order alerts, Reorder empty order (Android)
Empty order
Edgefrom step 1
Order alerts, Unavailable reasons (iOS)Order alerts, Unavailable reasons (Android)
Reasons listed per item
Flow diagram

Screens and states

Orders

Orders (iOS)Orders (Android)
Screen(app)/orders

Orders

List of the signed-in user's orders with search and filters

src/app/(app)/orders/index.tsx

Entry

  • Profile tab stats or menu
  • Settings > Shopping
  • Order confirmation timeout
  • Push or inbox order tap without id

Exits

  • Back → Profile tab
  • Tap card → Order detail
  • Buy again → reorder, then Bag
  • Start Shopping → Home
  • Guest sign in → auth sheet

States · 15

Gate
Guest sign-in prompt · Not signed in. Copy: Sign in to see your orderssrc/features/orders/components/list/order-list.tsx:403
Loading
Order skeleton · Auth or profile loading; 5 placeholder cardssrc/features/orders/components/list/order-list.tsx:416
Error
Could not load your orders · Profile query timed out; Try Again also redrives sessionsrc/features/orders/components/list/order-list.tsx:429
Empty
No Orders Yet (no profile) · Profile resolved to null, treated as empty although it can be transientsrc/features/orders/components/list/order-list.tsx:441
Error
Orders unavailable · Orders query timed out with nothing loadedsrc/features/orders/components/list/order-list.tsx:453
Empty
No Orders Yet · Orders resolved to none; image, Start Shopping buttonsrc/features/orders/components/list/order-list.tsx:467
Empty
No matching orders · Filter or search yields nothing among loaded pagessrc/features/orders/components/list/order-list.tsx:486
Success
Populated list · FlashList of order cards with filter chipssrc/features/orders/components/list/order-list.tsx:514
Edge
Load More footer · Page size 20; Load More (n/total) or Showing all N orderssrc/features/orders/components/list/order-list.tsx:51
Error
Could not load more orders · Timeout while rows exist; Try Again in footersrc/features/orders/components/list/order-list.tsx:527
Edge
Pull to refresh only resets window · Collapses to first page, spins 600ms; same on focussrc/features/orders/components/list/order-list.tsx:297
Edge
Filter and search are client-side · Only loaded pages searched; unloaded pages may hold matchessrc/features/orders/components/list/order-list.tsx:249
Edge
Cancelled chip covers more · Includes refunded, voided and partially refunded orderssrc/features/orders/components/list/order-list.tsx:256
Edge
Buy again pill · Only on reorderable statuses; spinner while reorderingsrc/features/orders/components/list/_internal/order-card.tsx:181
Edge
Unlinked orders hidden · Only userId or checkout-attributed orders listed; no unverified rowpackages/backend/convex/orderHistory/queries.ts:136

Captured states

Orders, Populated list (iOS)Orders, Populated list (Android)
Populated list
Orders, Buy again pill (iOS)Orders, Buy again pill (Android)
Buy again pill
Orders, Unlinked orders hidden (iOS)Orders, Unlinked orders hidden (Android)
Unlinked orders hidden

Order Details

Wireframe

Order Details

Needs data: Needs an order linked to the QA account

Screen(app)/orders/[id]

Order Details

One order: status, timeline, items, totals, stamps, tracking, review, reorder

src/app/(app)/orders/[id].tsx

Entry

  • Orders list card
  • Order confirmation View Order Details
  • Push tap on order_confirmation
  • Inbox row tap, order or payment

Exits

  • Back → Orders list
  • Track parcel → in-app browser
  • Mark as received → confirm alert
  • Rate & Review → first item product page
  • Reorder → Bag
  • Polling timeout → Orders or Home

States · 21

Loading
Detail skeleton · Details loading or polling for a Shopify idsrc/features/orders/components/detail/order-detail.tsx:120
Loading
Confirming your order (n/10) · Shopify id not yet in Convex; polls every 3s up to 30ssrc/features/orders/hooks/use-convex-orders.ts:380
Edge
Order Processing · Polling timed out, order not found yet; History or Shopping buttonssrc/features/orders/components/detail/order-detail.tsx:209
Error
Could not load this order · Details query timed out; Try Again or Go Backsrc/features/orders/components/detail/order-detail.tsx:248
Error
Order not found · Null result: bad id, someone else's order, or not visiblesrc/features/orders/components/detail/order-detail.tsx:278
Success
Loaded order · Status header, timeline, placed date, copyable order numbersrc/features/orders/components/detail/order-detail.tsx:363
Edge
Redirect to Convex id · Shopify id resolved; replace route with Convex idsrc/features/orders/components/detail/order-detail.tsx:134
Edge
Cancelled, Refunded, Voided pill · Red pill replaces the 4-step timelinesrc/features/orders/components/detail/_internal/compact-timeline.tsx:135
Edge
Partially refunded looks new · Not terminal; normal timeline with only Placed filledsrc/features/orders/components/detail/_internal/compact-timeline.tsx:135
Edge
Discount row only if > 0 · Discount derived from subtotal+tax+shipping minus totalsrc/features/orders/components/detail/order-detail.tsx:321
Success
Stamp row: awarded · You earned N stamp(s); green rowsrc/features/orders/components/detail/_internal/stamp-row.tsx:20
Edge
Stamp row: below minimum · Shortfall amount shown, else did not earn a stampsrc/features/orders/components/detail/_internal/stamp-row.tsx:20
Edge
Stamp row: awaiting payment · Stamp arrives once payment is confirmedsrc/features/orders/components/detail/_internal/stamp-row.tsx:20
Edge
Stamp row: needs review · Our team is checking this order's stampsrc/features/orders/components/detail/_internal/stamp-row.tsx:20
Edge
Stamp row: no campaign or not awarded · No campaign was running, or order did not earn a stampsrc/features/orders/components/detail/_internal/stamp-row.tsx:20
Edge
Stamp row hidden · stampOutcome no_app_user or undefinedsrc/features/orders/components/detail/_internal/stamp-row.tsx:45
Edge
Tracking card · Only when trackingNumber exists; no number means no Mark as receivedsrc/features/orders/components/detail/order-detail.tsx:412
Success
Received pill · receivedAt set; Mark as received hiddensrc/features/orders/components/detail/order-detail.tsx:432
Edge
Review prompt · Delivered only; hasReviewed hard-coded false so thanks variant is deadsrc/features/orders/components/detail/order-detail.tsx:509
Edge
Track Package button never shows · ActionButtons never gets onTracksrc/features/orders/components/detail/order-detail.tsx:560
Edge
Mark received on cancelled order · Tracking card still allows it when fulfilled or partialsrc/features/orders/components/detail/order-detail.tsx:481

Captured states

Order Details, Loaded order (iOS)Order Details, Loaded order (Android)
Loaded order
Order Details, Cancelled, Refunded, Voided pill (iOS)Order Details, Cancelled, Refunded, Voided pill (Android)
Cancelled, Refunded, Voided pill
Order Details, Partially refunded looks new (iOS)Order Details, Partially refunded looks new (Android)
Partially refunded looks new
Order Details, Discount row only if > 0 (iOS)Order Details, Discount row only if > 0 (Android)
Discount row only if > 0
Order Details, Stamp row: awarded (iOS)Order Details, Stamp row: awarded (Android)
Stamp row: awarded
Order Details, Stamp row: below minimum (iOS)Order Details, Stamp row: below minimum (Android)
Stamp row: below minimum
Order Details, Stamp row: awaiting payment (iOS)Order Details, Stamp row: awaiting payment (Android)
Stamp row: awaiting payment
Order Details, Stamp row: needs review (iOS)Order Details, Stamp row: needs review (Android)
Stamp row: needs review
Order Details, Tracking card (iOS)Order Details, Tracking card (Android)
Tracking card
Order Details, Received pill (iOS)Order Details, Received pill (Android)
Received pill
Order Details, Review prompt (iOS)Order Details, Review prompt (Android)
Review prompt
Order Details, Track Package button never shows (iOS)Order Details, Track Package button never shows (Android)
Track Package button never shows
Order Details, Mark received on cancelled order (iOS)Order Details, Mark received on cancelled order (Android)
Mark received on cancelled order

Order alerts

Wireframe

Order alerts

Needs data: Needs a shipped order with tracking, or a reorderable order

DialogOrderAlerts

Order alerts

Native alerts for mark received and reorder results

src/features/orders/hooks/use-mark-received.ts

Entry

  • Tracking card Mark as received
  • Order card or detail Reorder

Exits

  • Mark received → order becomes Delivered
  • Reorder ok → Bag
  • View Cart → Bag

States · 7

Edge
Mark as received? · Confirm alert with Cancel and Mark receivedsrc/features/orders/hooks/use-mark-received.ts:23
Error
Could not update · Order not found (checkout-attributed orders fail), or not shipped yetpackages/backend/convex/orderHistory/mutations.ts:100
Success
Already received · Server returns success when receivedAt already setpackages/backend/convex/orderHistory/mutations.ts:105
Edge
Some items unavailable · Partial reorder; View Cart buttonsrc/features/orders/hooks/use-reorder.ts:34
Error
Reorder failed · No item addable, or order not found for this userpackages/backend/convex/orderHistory/mutations.ts:143
Edge
Reorder empty order · No items returns success with 0 addedpackages/backend/convex/orderHistory/mutations.ts:165
Edge
Unavailable reasons · Product gone, not for sale, variant out of stock or gonepackages/backend/convex/orderHistory/mutations.ts:203

Captured states

Order alerts, Mark as received? (iOS)Order alerts, Mark as received? (Android)
Mark as received?
Order alerts, Could not update (iOS)Order alerts, Could not update (Android)
Could not update
Order alerts, Some items unavailable (iOS)Order alerts, Some items unavailable (Android)
Some items unavailable
Order alerts, Reorder failed (iOS)Order alerts, Reorder failed (Android)
Reorder failed
Order alerts, Reorder empty order (iOS)Order alerts, Reorder empty order (Android)
Reorder empty order
Order alerts, Unavailable reasons (iOS)Order alerts, Unavailable reasons (Android)
Unavailable reasons

On this page