Two apps, one system
Taxiarab is a complete ride-sharing solution: separate Rider and Driver apps, five-module Clean Architecture (client, driver, core
, core, design_system), pure-Kotlin domain layer with no Android dependencies bleeding into business logic.The coordination problem
A single LocationServiceManager coordinates the location and WebSocket foreground services centrally, instead of letting each manage its own lifecycle independently — which is where most ride-hailing apps rot. It runs a health check every 30 seconds and recovers services that have died.
Pusher carries two different kinds of traffic on two different channel types, and the distinction matters: presence channels broadcast driver location, private channels carry ride events — invitation, acceptance, pickup, start, end, cancel. Location intervals adapt to context (5s / 10m foreground, 30s / 50m background) rather than draining the battery on a fixed timer.
Production details that matter
- Sequential permission queue — one permission at a time, Android 13+ compliant, not a wall of dialogs on first launch
- Boot recovery that restores service state after an Android 15+ reboot
- Full Arabic/RTL localization, not bolted on afterward
- Shipped: Rider app v4.4 (10K+ downloads), Driver app v2.6 (1K+ downloads), both live on Google Play