The situation
Bento Rides wanted to fix two things about ride-hailing: surge pricing that makes fares unpredictable, and drivers who can't find the pickup spot. They wanted an app where the price shown is the price charged, and the pickup is GPS-verified so nobody's calling each other trying to find the right corner.
We built the whole thing from scratch. Rider app, driver app, admin dashboard, and the real-time dispatch system underneath. Both apps shipped to the Play Store and App Store.

Bento Rides homepage with the instant trip calculator.
What we built
Fixed fare engine
Fares come from a rate card based on vehicle type, distance and time. No multipliers, no peak pricing. The admin can update rates by city and vehicle, and changes go live immediately.
GPS-verified pickups
When someone books, their GPS coordinates go to the driver along with the address. The driver app checks proximity before starting the trip. Cuts out the 'where are you' calls.
Real-time dispatch
Matches riders with the closest available driver by vehicle type. If the first driver doesn't accept in 30 seconds, it falls back to the next one. Drivers can see their earnings, ride history and ratings.
Admin dashboard
Live map of all active rides, driver management, fare settings, payout tracking, support tools. The ops team runs everything from one screen.
The hard part
Making dispatch fast at scale
The first version queried every available driver on every booking. Fine in testing, but once more drivers came online, matching started taking several seconds instead of under one.
We switched to a Redis-backed spatial index, partitioned by city and vehicle type. Driver locations update every few seconds and queries only hit the relevant partition. Matching now takes under 200ms no matter the fleet size. To scale further, we just add more partitions.
We caught it before riders noticed. The kind of fix that doesn't show up as a feature but keeps the app feeling fast.
