A Flutter-based mobile application for Cold Stone Store personnel enabling real-time order management across all store branches. Staff can view, accept, and track customer orders the moment they arrive — eliminating the current delayed process.
The app integrates with Cold Stone's website via an API provided by the Dash team and is built to handle high-volume concurrent orders across multiple store branches simultaneously.
| Area | Current State | Target State |
|---|---|---|
| Order Acceptance | Not acknowledged quickly (static device logic) | Accept/reject in under 30 seconds |
| Visibility | No real-time view if out of device or not logged in | Live feed with push notifications anywhere |
| Coordination | Manual coordination causing delays between branches | Each store manages its own queue independently |
| App launch time | < 2 seconds on mid-range Android |
| Order notification delivery | < 5 seconds from order placement |
| API response time | < 1 second for all order actions |
| Offline tolerance | Cached data usable for up to 10 minutes without connectivity |
| Session timeout | Auto logout after 8 hours of inactivity |
| Security | JWT token encrypted in secure storage; no sensitive data in logs |
| Supported OS | Android 8.0+ and iOS 13+ |
| Store coverage | 82 concurrent store sessions without degradation |
| Screen | Key Elements | API Endpoint |
|---|---|---|
| Splash Screen | Logo, loading indicator, auto-login if token valid | GET /auth/validate-token |
| Login Screen | Staff ID field, PIN field, Login button, Forgot PIN link | POST /auth/login |
| Store Selection | List of assigned stores, Select button | GET /staff/stores |
| Forgot PIN | Phone input, OTP input, New PIN fields | POST /auth/request-otp POST /auth/reset-pin |
| Screen | Key Elements | API Endpoint |
|---|---|---|
| Home / Order Feed | Live order cards, pull-to-refresh, push notification trigger | GET /orders/live (WebSocket/polling) |
| Order Detail | Full item list, instructions, customer note, Accept/Reject buttons | GET /orders/{id} |
| Accept Confirmation | Success animation (Lottie), order status update | POST /orders/{id}/accept |
| Reject Flow | Reason picker (out of stock, store closed, etc.), confirm | POST /orders/{id}/reject |
| Status | Triggered By | Next Status |
|---|---|---|
| Pending | Customer places order on platform | Accepted or Rejected |
| Accepted | Store attendant taps Accept | Preparing |
| Preparing | Kitchen staff taps Start Preparing | Ready |
| Ready | Kitchen staff taps Mark Ready | Completed or Picked Up |
| Completed | System or attendant confirms pickup/delivery | — |
| Rejected | Store attendant rejects with reason | — |
| Screen | Key Elements |
|---|---|
| Order History | Date filter, status filter, search by order ID, paginated list (20 per page) |
| Manager Dashboard | Total orders today, acceptance rate %, avg response time, top items |
| Staff Activity Log | Which staff accepted/rejected orders, timestamps (manager/supervisor only) |
| Method | Endpoint | Description | Auth |
|---|---|---|---|
| POST | /auth/login | Staff login with credentials | — |
| GET | /auth/validate-token | Check if JWT token is still valid | |
| POST | /auth/request-otp | Request OTP for PIN reset | — |
| POST | /auth/reset-pin | Reset PIN using OTP | — |
| GET | /staff/stores | Get list of stores assigned to staff | |
| GET | /orders/live | Fetch real-time active orders for store | |
| GET | /orders/{id} | Get full order details | |
| POST | /orders/{id}/accept | Accept an order | |
| POST | /orders/{id}/reject | Reject an order with reason | |
| PUT | /orders/{id}/status | Update order status (preparing, ready, etc.) | |
| GET | /orders/history | Paginated order history with filters | |
| GET | /analytics/store/{id} | Manager analytics for a store |
| Feature | Attendant | Kitchen Staff | Store Manager | Supervisor |
|---|---|---|---|---|
| View live order feed | ||||
| Accept / Reject orders | ||||
| Update order status | ||||
| View order history | ||||
| View manager dashboard | ||||
| View staff activity log | ||||
| Toggle store open/closed | ||||
| View multi-store analytics |