Urban Route — NEMT Fleet Management
Cross-platform fleet management suite for Non-Emergency Medical Transport — Admin, Driver, and Passenger apps with real-time ride sync.
Problem
NEMT operators were dispatching rides via phone calls with no real-time driver tracking, no passenger self-service booking, and no live sync between drivers and passengers.
Solution
Three interconnected Flutter apps — Admin (dispatch + fleet overview), Driver (trip management + navigation), Passenger (booking + live ride tracking). Rides can be scheduled by admin or booked directly by users. Driver and passenger apps stay in sync in real time throughout the trip lifecycle.
System Architecture
Flutter for all three apps — single codebase targeting Web, iOS, and Android. Supabase Realtime for live location and trip status sync between driver and passenger. PostgreSQL for trip, user, and scheduling data. Google Maps API for routing and ETA.
# system diagram
Admin App · Driver App · Passenger App
└─ Flutter (single codebase → Web, iOS, Android)
├─ Supabase Realtime → live ride sync
├─ PostgreSQL → trips, users, scheduling
└─ Google Maps API → routing + ETA
DevOps & Deployment
Deployment
Supabase (backend) · App Store · Play Store · Web
CI/CD
GitHub Actions with Fastlane for automated iOS and Android builds
Challenges
Keeping driver and passenger apps in sync in real time without draining device batteries. Used adaptive update frequency — high frequency during active trips, sparse polling when idle.
Key Learnings
Flutter is genuinely viable for complex multi-role apps. Supabase Realtime removed the need for a custom WebSocket server entirely — the right abstraction for this use case.