Courier Service Dispatcher Mobile App Development
A courier service dispatcher handles a stream of orders and a fleet of couriers simultaneously. On tablet or phone — map with dozens of points, queue of unprocessed orders, and statuses of active deliveries. UI requirements are denser than in client app, reliability requirements higher than in courier app.
Dispatcher Map: Couriers and Orders Simultaneously
Two marker types on one map: green dots — available couriers, red — active deliveries. When zooming, clustering is needed so map doesn't become icon soup. MarkerClusterManager (Google Maps Android) or GMUClusterManager (iOS) with custom ClusterRenderer — cluster color shows object type inside.
Tap on courier marker — popup card: name, current status, orders in progress, ETA to next point. From card immediately — assign new order or call.
Tap on order marker — order details, status, assigned courier (if any), reassign button.
Filtering and Zones
Courier service may work by city zones. Dispatcher should filter map by zone, see only their couriers. Polygon overlay via GMSPolygon / MKPolygon with semi-transparent fill for zone display. Zone switching — tab or dropdown on top.
Order Distribution
Manual assignment: dispatcher sees new order, looks at nearest available couriers on map (highlighted), selects from list. List sorted by distance from pickup (server calculation via PostGIS ST_Distance).
Auto-distribution — "auto" button enables server algorithm. Dispatcher can intervene and reassign.
When reassigning order — previous courier gets push notification "order removed". Without this, courier may arrive at address and discover the order already delivered by another.
Queue of Unprocessed Orders
List of new orders in real-time via WebSocket. DiffUtil (Android) / SwiftUI AnimatedList for row add/remove animation. Priority — urgent orders highlighted, default sort — by creation time.
Unaccepted orders counter — badge on tab icon. If dispatcher doesn't process queue for more than N minutes — sound alert.
Shift Analytics
Simple dashboard: orders accepted / in progress / completed / cancelled. Average delivery interval. Couriers by statuses. Updates in real-time from WebSocket stream. No need for separate analytics screen — overlay panel over map or sidebar on tablet sufficient.
Communication with Couriers
Built-in chat — not necessarily build yourself. If team is small, deep link to Telegram or WhatsApp with courier number sufficient. For corporate solution — Firebase Realtime Database or Supabase Realtime as chat backend, simple RecyclerView / LazyColumn on client.
Voice messages — priority on mobile dispatcher. Record and send faster than type.
Stack: Flutter (tablet + phone, one code), Google Maps SDK, WebSocket via web_socket_channel, state management — Riverpod or BLoC.
Timeline: 8 to 14 weeks with integration. Cost calculated individually.







