This is the build plan for the Primotech Food Delivery MVP, covering three demo apps: Customer, Rider, and Admin Web. To meet the two-week timeline, we are strictly building a UI-only experience. There is no backend. Instead, we'll use hardcoded JSON and scripted timing to make the order flow feel completely real during a live demo. A team of three frontend developers will build and link every screen in week one, and dedicate week two entirely to premium polish and deployment.
One food-delivery MVP, three surfaces. We will share the live URL of the admin web and the app links for the customer and delivery partner. Each app is UI-complete and navigable, runs on hardcoded demo data, and scripts a happy-path flow that looks indistinguishable from the real thing in a short live demo.
For customers, to discover restaurants, build a cart, place an order, and watch the rider live on a map.
For delivery riders, to see nearby orders, accept one, navigate pickup → drop, and mark delivered.
For restaurant staff, the main moment: when an order comes in, the screen shows a bold NEW ORDER banner + sound. Accept, assign a rider, done.
~33 screens total. Restaurant-side accept order lives inside the Admin web. No separate Merchant app.
To make sure the user experience is absolutely top-tier, we're intentionally leaving out the backend for this MVP. That means no servers, databases, or live auth providers to slow us down. Instead, everything runs smoothly on hardcoded JSON data and local state. We'll use cleverly timed scripts to simulate the real-time magic of an order moving from the Customer, to the Admin, to the Rider. It'll look perfect on video and feel incredibly real during a live demo.
Food images pulled from the open web (Unsplash, Pexels, whatever looks right) so every restaurant and dish has an image, no empty grey placeholders. Skeleton loaders, not spinners. Smooth screen transitions and micro-animations on cart updates. Haptic feedback on key actions. Proper empty states. Pull-to-refresh that feels native. Typography and spacing that look designed, not defaulted. Pixel-checked on a real device every day. This is the work.
000000 logs in to the hardcoded demo user. No SMS, no provider.Each screen is sized to fit one focused day of work or less. The basics (profile, notifications, order history, addresses) are explicitly in, a demo without them looks like a prototype, not a product.
| # | Screen | What it does |
|---|---|---|
| 1 | Splash / Onboarding | Brand splash, two-slide intro for first-time users. |
| 2 | Phone, enter number | Country code + number input (UI only, no SMS sent). |
| 3 | Phone, enter OTP | 6-digit input. Universal demo code 000000 always works. |
| 4 | Home | Location bar, search shortcut, categories carousel, near you restaurant feed. |
| 5 | Search | Full-screen search across restaurants and dishes, recent searches, filter chips. |
| 6 | Restaurant detail | Banner image, rating, delivery time, menu grouped by category. |
| 7 | Item detail | Photo, description, customization options, qty stepper, add-to-cart. |
| 8 | Cart | Line items, qty edit, subtotal + fees breakdown, proceed to checkout. |
| 9 | Checkout | Delivery address picker, fake payment method tile, place-order button. |
| 10 | Order tracking | Status timeline + animated rider on a Google Map (scripted route). |
| 11 | Order history | List of past orders (hardcoded) with reorder button. |
| 12 | Profile | Name, saved addresses, payment methods, notifications toggle, logout. |
| # | Screen | What it does |
|---|---|---|
| 1 | Splash / Onboarding | Brand splash + two-slide intro (earn on your schedule) for first-time riders. |
| 2 | Phone, enter number | Country code + number input (UI only, no SMS sent). |
| 3 | Phone, enter OTP | 6-digit input. Universal demo code 000000 always works. |
| 4 | Home / dashboard | Online/offline toggle, today's earnings summary, current shift status, quick nav. |
| 5 | Available orders | Scripted list of unassigned orders nearby with payout, distance, tap to view. |
| 6 | Order detail (pre-accept) | Pickup + drop addresses, distance, payout breakdown, accept / decline. |
| 7 | Active delivery | Map + step actions (arrived at pickup, picked up, arrived at drop, delivered). |
| 8 | Delivery summary | Post-delivery recap, tip prompt, earnings added, next-order CTA. |
| 9 | Earnings / history | Today/this-week earnings + past deliveries list (hardcoded). |
| 10 | Notifications | Delivery alerts, payout updates, system messages (mock list). |
| 11 | Profile | Name, bike info, mock-KYC status, ratings summary, logout. |
| 12 | Settings / Help | Notification toggles, language, in-app FAQ + contact-support form. |
| # | Screen | What it does |
|---|---|---|
| 1 | Login | Email + password (any input passes; internal-only surface). |
| 2 | Dashboard | KPI cards (orders today, revenue, active riders) + orders-over-time chart. |
| 3 | Orders, list | Filterable table. The main moment: when a new order arrives, top of screen flashes a bold NEW ORDER! banner with sound. |
| 4 | Order detail | Customer + restaurant + items. Accept / reject / assign-rider actions, the merchant accept lives here. |
| 5 | Restaurants, list | Searchable table with add / edit / disable. |
| 6 | Restaurant menu mgmt | Categories & items CRUD; price, image, availability toggle. |
| 7 | Riders, list | Active riders, current status (free / on-delivery), add new rider. |
| 8 | Customers, list | Read-only customer list with order count + last order date. |
| 9 | Settings | Admin profile, app-wide toggles, notification preferences. |
We like to be very intentional before we write a single line of code. By writing out clear, simple requirements in Markdown first, we can guide our AI coding tools to generate exactly what we need, keeping us moving fast and staying on track.
For example, before building the Customer Home screen, we write a strict 03-home.md spec detailing:
To maintain velocity, we leverage high-quality open source Figma community templates for our design foundation rather than designing from scratch. We can pull screens, components, and layout ideas directly from these UI kits:
Extract the design tokens (colors, typography, spacing) and use them to guide the AI prompt when generating components.
We have three developers, and each person gets to fully own one of the apps. Since there's no backend and no shared components to wait on, everyone can dive straight into building UI from Day 1 without blocking each other. We'll check in daily to celebrate what we've shipped and help each other out.
Owns the Customer app end-to-end. This is the app that drives the demo video, the home, the cart, the checkout, the live order-tracking moment. UI is built inside the app, not shared across apps.
000000 → demo user).Depends on: nothing, can start Day 1 morning.
Owns the Rider app end-to-end. No backend work. Free to spend the entire two weeks making the Rider experience feel premium, map transitions, swipe-to-confirm actions, haptics on key steps.
Depends on: nothing, fully independent app, can start Day 1 morning.
Owns the Admin web. The headline interaction is the NEW ORDER alert, when a customer places an order in demo mode, the Admin orders screen flashes a bold banner with a sound. That is the screenshot we put on the website.
Depends on: nothing, fully independent app.
Every screen exists across all three apps. A scripted demo order flows Customer → Admin → Rider on local data. Week 2 is entirely about making it feel premium.
Phone-OTP login is UI only. Any number + universal code 000000 logs in
to the hardcoded demo user. No SMS, no auth provider, no real account state. When/if a real client picks
this up, plugging in a real auth provider is a separate engagement, not in scope here.
Each developer gets one Cursor Pro subscription.
Rate-limit window. Cursor Pro has a 5-hour rolling reset window. The window starts on the first request and resets five hours later. Inside that window each dev gets a bounded number of premium-model requests (and unlimited Auto-mode requests after the premium budget is spent).
Managing limits. AI tools are incredible, but they do have usage caps. If we hit our request limits, we might experience a temporary pause. When that happens, we'll simply shift our focus to manual polishing, reviewing each other's work, or taking a well-deserved coffee break while our limits reset. We're planning for this so it won't derail us!
| Layer | Choice | Why |
|---|---|---|
| Mobile apps | React Native (Expo) | One codebase per app, fastest hot reload, AI generates Expo cleanly. |
| Admin web | React + Vite + Tailwind | Team already knows it. Vite dev server is fast. |
| Backend | None. | Demo apps. Hardcoded JSON + local state (AsyncStorage / localStorage). |
| Auth | UI only, demo code 000000 | No SMS, no provider. Login screens are pure UI. |
| Realtime | Scripted local timers | Cross-app flow simulated by scheduled state mutations in demo mode. |
| Notifications | In-app toast / banner only | No FCM, no APNs. The Admin NEW ORDER alert is local-state-driven. |
| Live tracking | Google Maps SDK + scripted route animation | Rider icon animates along a pre-defined path. No GPS. |
| Payments | Fake checkout UI | No real provider; place-order writes to local state. |
| AI tools | Claude Pro / Cursor Pro (1 per dev, $20) | Entry tier. See §08 for window limits. |
| Hosting | Vercel (web) + Expo EAS preview (mobile) | Shareable links and QR codes for sales calls in minutes. |
000000), in-app notifications, animated live-tracking map.