Розроблення мобільного застосунку для кур'єрської служби (диспетчер)
Диспетчер кур'єрської служби працює з потоком замовлень та парком кур'єрів одночасно. На планшеті або телефоні — карта з десятками точок, черга необроблених замовлень та статуси активних доставок. Вимоги до UI щільніші, ніж в клієнтському застосунку, а вимоги до надійності — вищі, ніж в кур'єрському.
Карта диспетчера: кур'єри та замовлення одночасно
Два типи маркерів на одній карті: зелені точки — доступні кур'єри, червоні — активні доставки. При масштабуванні потрібна кластеризація щоб карта не перетворювалася в кашу з іконок. MarkerClusterManager (Google Maps Android) або GMUClusterManager (iOS) з кастомним ClusterRenderer — колір кластера показує тип об'єктів всередину.
Натиск по маркеру кур'єра — спливаюча карточка: ім'я, поточний статус, замовлень в роботі, ETA до наступної точки. З карточки одразу — назначити нове замовлення або подзвонити.
Натиск по маркеру замовлення — деталі замовлення, статус, назначений кур'єр (якщо є), кнопка переназначити.
Фільтрація та зони
Кур'єрська служба може працювати по зонах міста. Диспетчер повинен фільтрувати карту за зоною, бачити тільки своїх кур'єрів. Polygon overlay через GMSPolygon / MKPolygon з напівпрозорою заливкою для відображення зон. Перемикання зон — таб або dropdown зверху.
Розподіл замовлень
Ручне назначення: диспетчер бачить нове замовлення, дивиться на карті найближчих вільних кур'єрів (підсвічені), вибирає зі списку. Список сортується за відстанню від точки відправки (серверний розрахунок через PostGIS ST_Distance).
Автоматичний розподіл — кнопка «авто» включає серверний алгоритм. Диспетчер може втрутитися та переназначити.
При переназначенні замовлення — попередній кур'єр отримує push-сповіщення «замовлення знято». Без цього кур'єр може приїхати на адресу та дізнатися, що замовлення вже доставив інший.
Черга необроблених замовлень
Список нових замовлень в реальному часі через WebSocket. DiffUtil (Android) / SwiftUI AnimatedList для анімації додавання/видалення рядків. Пріоритет — термінові замовлення виділяються кольором, сортування за замовчанням — за часом оформлення.
Лічильник невиконаних замовлень — badge на іконці таба. Якщо диспетчер не обробляє чергу більше N хвилин — звуковий сигнал.
Аналітика зміни
Простий дашборд: замовлень прийнято / в роботі / завершено / скасовано. Середній інтервал доставки. Кур'єри за статусами. Оновлюється в реальному часі з WebSocket-потоку. Не потрібен окремий екран аналітики — достатньо плашки поверх карти або бічної панелі на планшеті.
Комунікація з кур'єрами
Вбудований чат — не обов'язково реалізовувати самостійно. Якщо команда невелика, достатньо deep link в Telegram або WhatsApp з номером кур'єра. Для корпоративного рішення — Firebase Realtime Database або Supabase Realtime як backend для чату, простий RecyclerView / LazyColumn на клієнті.
Голосові повідомлення — пріоритет на мобільному диспетчері. Записати та відправити швидше, ніж писати.
Стек: Flutter (планшет + телефон, один код), Google Maps SDK, WebSocket через web_socket_channel, state management — Riverpod або BLoC.
Термін: від 8 до 14 тижнів з урахуванням інтеграції. Вартість розраховується індивідуально.







