Customer and driver apps for a taxi service
Çinar Taxi needed both sides of the equation: a customer app for ordering and a driver app for accepting and fulfilling rides. We built both with the dispatch logic that ties them together.
- Multi-phase
- Elvin Sharifov + mobile team
- Mobile app
- Live
Starting point
Taxi platforms are two products in a trench coat: the customer side is about ordering and seeing the car arrive; the driver side is about accepting jobs, navigation, and earnings. They share the dispatch logic in the middle, but the apps themselves are different.
The trap with taxi platforms is treating them as one product. They're two products on shared infrastructure, and pretending otherwise costs you both sides of the market.
Decisions
- Two separate apps, one backend — each side optimised for its own use case.
- Dispatch logic that respects driver state — distance, current load, last-seen.
- Live tracking from order to drop-off.
- Driver earnings visible in the app — no spreadsheet weekly summary.
- Driver onboarding stripped back — fewer steps from sign-up to first ride.
Execution
React Native for both apps, backend tuned for high write throughput on location updates. WebSockets for live tracking.
Live tracking handled on WebSockets, with a graceful fall-back to polling on weak connections. Customers see the car move; the system doesn't lie to them when the network drops.
“A taxi platform is two products sharing infrastructure. Pretending it's one product is how you lose both sides.”
— Elvin Sharifov
Result
- Customer and driver apps live and working.
- Dispatch logic that handles real-world driver state, not idealised assumptions.
- Drivers see their own earnings — retention up.
- Driver onboarding completes faster — the supply side of the platform grows without manual nursing.