One Flutter codebase, four roles. ONOA connects customers, riders, and store owners on a single real-time map — with MercadoPago checkout, photo-verified drop-off, and a rider earnings dashboard. Android, iOS, and web from the same source tree.
4
Roles · customer · rider · store · admin
1
Codebase → Android · iOS · Web
Live
GPS tracking on every delivery
Photo
Verified proof of drop-off
The Problem
Delivery platforms usually ship as a fractured stack — a customer app from one vendor, a rider app from another, a store dashboard bolted on the side, and an admin panel nobody enjoys using. Communication between them leaks: assignments end up on WhatsApp, status updates arrive ten minutes late, and customers refresh the map because they don't trust "on the way."
The client wanted the opposite. One platform. One codebase. One real-time source of truth. Local payment (MercadoPago) baked in from day one — not tacked on later. Photo-verified drop-off so nothing disappears at the door.
And it all had to run on a budget that a small city delivery service could afford. No enterprise stack. No per-seat licensing.
Our Solution
A single Flutter codebase covering Android, iOS, and Web. Clean architecture — data / domain / presentation — with BLoC for state and GetIt for dependency injection. go_router handles role-based navigation so the same binary serves four completely different UIs based on who logged in.
Firebase Authentication handles the four roles with a single login flow. Firestore is the real-time source of truth — rider GPS, order status, assignment state, all synchronising live. When a rider marks "picked up," the customer's map updates in under a second.
Live GPS pushes every few seconds from the rider's phone; customers see the scooter pin move on flutter_map. At drop-off, the app requires a location-verified photo before the delivery can be marked complete — no location match, no completion.
MercadoPago runs through an in-app WebView with full transaction status handling — a returned "success" isn't trusted until the webhook confirms.
Riders get their own dashboard powered by fl_chart — completed deliveries, income, weekly trends. All in the same app that assigns them work.
The Stack
What we built it with.
Mobile & Web
Flutter (Dart)
One codebase → Android, iOS, and Web. No parallel teams for parallel platforms.
BLoC
Predictable state across four role-specific UIs.
GetIt
Service locator for clean architecture separation.
go_router
Declarative role-based routing — one binary, four experiences.
Backend
Firebase Auth
Single login flow, role encoded on the user record.
Firestore
Real-time sync between customer, rider, store, and admin. No polling.
Node.js
Rich message templating that FCM alone couldn't handle.
Firebase Cloud Messaging
Push infrastructure — Node.js decides what to send.
Maps & Payments
flutter_map
OSM-based mapping with custom marker layer for live rider tracking.
MercadoPago
Native Latin American payment rail. Webhook-confirmed status.
fl_chart
Rider earnings visualisation without a heavier charting library.
AI Used
The intelligence layer.
Claude Sonnet 4.6
Development pair — clean architecture design, BLoC state modelling, MercadoPago webhook handling
How It Shipped
From brief to production.
Phase 1 Architecture & Auth
Clean architecture set up, Firebase Auth wired for four roles, go_router for role-based navigation.
Phase 2 Customer + Store Flow
Product browsing, cart, checkout via MercadoPago. Store dashboard for incoming orders.
Phase 3 Rider App + Live Tracking
Rider assignments, live GPS push to Firestore, customer map updates via flutter_map.
Phase 4 Notifications & Photo Proof
Node.js notification server for rich templating. Photo-verified drop-off with location match.
One app for everyone. Riders don't need WhatsApp for assignments anymore. Store owners don't call to check on orders. Customers stopped refreshing the map. That's what live means.
Trusted Worldwide — Long-Term Partnerships Built on Trust and Results
Take it from leading businesses around the world. Time and time again, our clients experience the quality, speed,
and reliability of our AI solutions and automation services, leading to long-term partnerships with AXCEL.
Ready to Automate and Scale Your Business?
We design and deploy AI solutions that streamline operations and accelerate growth.