Ride-hailing platform development is a demanding job, and this project shows what it takes to get it right. The founder of Wakajugbe wanted to fix a problem in the industry: drivers were losing too much of their earnings to commission-based platforms. His answer was a different model, a flat subscription fee for drivers with no commission cuts, built on a platform created from scratch. This is how we built it.
The Brief
Wakajugbe needed a complete ride-hailing ecosystem with a few non-negotiable requirements:
- A rider app where passengers could book rides, track drivers live and pay seamlessly
- A driver app with onboarding, document verification, navigation and earnings tracking
- An admin dashboard for the operations team to monitor rides, manage drivers and track revenue
- Real-time GPS tracking and driver matching based on actual proximity
- Multiple payment methods, including card, wallet and cash
- Performance that held up on older devices and slower networks
This was not an MVP. The client needed a production-ready platform that could handle real riders and real money from launch day. That meant building three products at once, all of them working in real time, handling payments and ready for thousands of users from the start.
Why We Chose Flutter for the Mobile Apps
Building native apps separately for iOS and Android would have doubled the development time and budget. We chose Flutter because it let us ship both platforms from a single codebase without giving up the performance users expect from a ride-hailing app.
One Backend Keeping Three Products in Sync
The backend runs on Node.js, with real-time socket connections keeping the rider app, driver app and admin dashboard in sync at all times. When a rider requests a trip, the nearest driver sees it instantly. When a driver accepts, the rider sees the car moving on the map in real time. When the trip ends, the admin dashboard updates automatically.
The Hardest Problem: Driver Matching
Early in development, we tested a matching algorithm that paired riders with drivers based on ride history and availability. It worked in theory. In practice, riders were sometimes matched with drivers 15 minutes away while a closer driver sat idle.
We rebuilt the matching system around real-time geofencing using the Google Maps API. The app now tracks driver locations continuously and matches each rider with the nearest available driver. Wait times dropped dramatically, and driver utilization improved because the system stopped skipping nearby drivers in favour of ones with better ratings.
Payment Integration That Works in African Markets
Payment integration in African markets brings challenges that most documentation does not prepare you for. During testing, we encountered failed transactions, wallet funding delays and false fraud flags.
We integrated Paystack for both rider payments and driver payouts, with retry logic that handles network interruptions gracefully. The system supports card payments, wallet top-ups and cash rides. When a transaction fails, the app retries automatically before showing the user an error. This eliminated most of the "payment failed" complaints that often affect similar platforms.
Performance on Older Phones and Slow Networks
A ride-hailing app that drains the battery or crashes on a mid-range Android phone is not a viable product in the Nigerian market. We expected most users to be on devices with 2-3GB of RAM and inconsistent network coverage, so we planned for that from the start.
- We optimized background processes to reduce battery drain.
- We added offline caching, so the app stayed usable during brief network drops.
- We created a lightweight rendering mode for older devices.
The result is an app that runs smoothly whether the user has a flagship iPhone or a budget Android phone.
The Admin Dashboard
The operations team needed visibility into everything: active rides, driver locations, completed trips, revenue and driver compliance, including document verification and subscription status. We built a web-based dashboard with a live map of all active rides and drivers, filterable lists for every data point and the ability to step in during a live ride if something goes wrong.
For a ride-hailing platform, the admin dashboard is the operational centre. Without it, the operations team has no clear view of the fleet.
Results
Wakajugbe launched on both the App Store and Google Play, with all three products working together:
- 10,000+ rides completed in the first quarter after launch
- Three products shipped together: rider app, driver app and admin dashboard
- Real-time GPS tracking and fare estimation working reliably from day one
- Paystack processing both rider payments and driver payouts without friction
- Operations team managing the entire fleet through a single dashboard
The subscription model proved popular with drivers. Instead of losing 20-25% of every fare to commission, they pay a flat monthly fee and keep what they earn. That value proposition, backed by a platform that works, drove strong early adoption. You can see more of our shipped work on our portfolio page.
What We Learned
Building a ride-hailing platform taught us lessons that no amount of documentation can fully prepare you for. Real-time systems need to be tested under real network conditions, not only on fast Wi-Fi. Payment integrations in African markets need fallback logic that accounts for infrastructure limits. Driver matching must prioritise proximity above everything else, because a rider does not care about a driver's rating if they have to wait 20 minutes.
These lessons shape every project we take on now.
Frequently asked questions
Why use Flutter for a ride-hailing app?
Flutter lets one codebase ship to both iOS and Android, which avoids building two separate native apps. For this project, it kept the rider and driver apps consistent while keeping performance suitable for real-time trip tracking.
How was driver matching improved?
The first algorithm paired riders by ride history and availability, which sometimes sent riders to distant drivers. The rebuilt system uses real-time geofencing with the Google Maps API to match each rider with the nearest available driver.
How does the platform handle failed payments?
Payments run through Paystack for rider payments and driver payouts. The app retries failed transactions automatically before showing the user an error, which reduced the number of payment failures reported by riders.
Does Icoweb build platforms like this?
Yes. We build mobile apps, websites and custom software, including real-time platforms with payments and multiple user roles. You can learn more on our services page.
If you are planning a product with real-time features, payment processing or several user roles, we have built this kind of system before and know where the problems tend to appear. Tell us about your project and we will talk through what it would take.



