Jostar.id
Portfolio
Mobile App · 2026

Local Ride-Hailing App — 4-Role Food Delivery

A GoFood/GrabFood-style food delivery platform combining four roles — Customer, Driver, Merchant, and Admin — in one Flutter codebase (Android & iOS). A Firebase backend with 17 production Cloud Functions handles the order flow end to end: browsing merchants, checkout with a map picker, auto-broadcast to the nearest drivers, real-time tracking, and automatic payouts to merchants & drivers. Commercial-grade defenses included — atomic transactions, layered security rules, and dispute resolution.

Visit Website
Platform
Android · iOS
Year
2026
Industry
Food Delivery / On-Demand
Role
Full-cycle: architecture, 4-role Flutter app, Firebase & Cloud Functions backend

App screenshots

Click an image to zoom — swipe left/right to browse.

Customer — home: promos, categories & nearby merchants
Customer — multi-item cart per store
Customer — checkout: address, vouchers & delivery fee
Customer — 6-stage order status + real-time ETA
Customer — live driver tracking on the map
Customer — real-time chat with the driver
Customer — rate the driver & merchant
Customer — address book & map picker
Driver — dashboard: online toggle & nearby orders
Driver — order detail: pickup, delivery & navigation
Driver — balance, earnings history & withdrawals
Driver — ID / license / vehicle document verification
Merchant — dashboard: open/close & incoming orders
Merchant — menu & per-item stock management
Admin — dashboard: GMV, commissions & payouts
Admin — driver verification & approval

Key features

4 roles in 1 APK

Customer, Driver, Merchant, and Admin share one app with type-safe routing + role guards (GoRouter).

Checkout with map picker

Auto-detected GPS location or a manual pin on Google Maps, a saved address book, and notes for the driver.

Real-time driver tracking

A live driver marker on the map from acceptance (to the store) until arrival at the customer, complete with an ETA.

Auto-broadcast to nearest drivers

Ready orders are automatically broadcast to the 8 nearest drivers via FCM; re-broadcast within a 15 km radius if unclaimed after 2 minutes.

Driver background location

An Android foreground service + iOS background mode keep the driver's position tracked even with the app in the background.

Flexible payments

Wallet balance, transfers, QRIS, and e-wallets via Midtrans/Xendit — switch gateways with a .env change.

Automatic payouts & commissions

(Subtotal − commission) lands in the merchant's balance and the delivery fee in the driver's on delivery — idempotent, no double-credit.

Full admin panel

Approve merchants & drivers, set commissions/delivery fees, manage vouchers & banners, approve withdrawals, resolve disputes, and financial reports.

Technical highlights

The advanced parts behind the scenes that make this system run smoothly.

  • Race-protected accept: a Firestore transaction prevents two drivers from grabbing the same order, with real-time suspend status validation.
  • Distance-based delivery fees: Haversine distance from merchant to customer with admin-configurable base fee, per-km rate, and min/max.
  • Idempotent Midtrans/Xendit webhooks with amount validation, plus polling fallback for missed webhooks.
  • Order timeout sweeper: a scheduled Cloud Function every 5 minutes auto-cancels stuck orders and refunds balances & voucher quotas.
  • Field-level security rules: users can't change their own balance/role, drivers can't unsuspend themselves.
  • 17 production Cloud Functions (broadcast, payment, payout, dispute, sweeper) with handover documentation for non-technical operators.

Tech stack

FlutterDartRiverpodGoRouterFirebase AuthFirestoreCloud Functions (TypeScript)Cloud StorageFCMGoogle Maps SDKMidtrans / Xendit

Want an app like this for your business?

We've built systems like Local Ride-Hailing App from scratch all the way to production. Tell us what you need — the initial consultation is free, no strings attached.