Ten core screens across the full task lifecycle, reconstructed from the shipped app. Every label is the app's real in-app text, every field is real data from the GraphQL model, the typeface is the app's own Inter, and the palette is Laundryheap's brand.
Sign in to see your blocks and start collecting & delivering orders.
Driver vs. customer fork — the app politely bounces customers to the consumer app.
Shift blocks (via When I Work): pay/tips labels, confirm state, hub site. "Open Blocks" tab lets drivers claim more.
The day's ordered legs — pickups, dropoffs, facility runs — with the "New Customer" flag that means "carry extra bags & tags".
Recipient, masked call/message, chosen services, and the new-customer prompt — straight from the app's copy.
On-device QR decode with a live "3 / 5" counter; each tag is validated server-side and mapped to a service.
Per-tag service selection — the app reconciles selectedByCustomer vs selectedByDriver here.
Framed capture with flash hint — reused for bag tags, the entrance/building, and vehicle checks.
Structured reason tree — the selected reason dictates which evidence photo is mandatory before it'll submit.
Server-formatted fee breakdown: week → day → line items. The app renders, it never computes pay.
Event feed — block reminders, route changes, payouts — each with type, icon and timestamp.