Розробка додатку для виклику майстра (сантехнік, електрик)
Диспетчерська служба приймає 50 заявок на годину, майстри роз'їжджаються по місту, клієнти телефонують з питанням «де майстер?». Без мобільного додатку — хаос. Середній майстер втрачає 20% часу на передзвони, а диспетчери витрачають до 10 хвилин на узгодження кожної заявки. Автоматизація за допомогою мобільного додатку дозволяє скоротити час призначення до 30 секунд та підвищити коефіцієнт закриття заявок на 40%. Типовий сценарій: клієнт викликає сантехніка через сайт, майстру телефонують, статус не синхронізується. Результат — майстер приїжджає, а клієнт уже пішов, або два майстри їдуть на одну адресу. Геолокація майстрів у реальному часі, push-сповіщення про зміну статусу, вбудований чат — ці модулі тиражуються з проекту в проект, але вимагають точного налаштування під конкретний бізнес. Ми розробляємо додатки під ключ: з'єднуємо клієнта з майстром за хвилини, забезпечуємо прозорість статусів та онлайн-оплату. Замовте розробку — отримайте попередню оцінку за один день.
Що реально ламається при розробці
Головний біль — жива карта з майстрами. Якщо кожен майстер шле location кожні 3 секунди через REST, при 50 одночасних виконавцях сервер отримує 1000 запитів на хвилину лише на оновлення позиції. Рішення: WebSocket-канал (на Flutter — пакет web_socket_channel 2.x) плюс серверний throttle. Клієнт отримує дельта-оновлення, а не повний список. На карті — flutter_map з TileLayer від OpenStreetMap або Google Maps SDK, залежно від бюджету ліцензії. Порівняння підходів:
| Підхід | Затримка оновлення | Навантаження на сервер | Приклад використання |
|---|---|---|---|
| REST poll кожні 3 с | ~3 с | 1000 запр./хв при 50 майстрах | Застарілий варіант |
| WebSocket push | <200 мс | 50 повідомлень/хв (дельта) | Наш типовий проект |
WebSocket забезпечує затримку до 200 мс, що в 15 разів швидше за REST-опитування, та знижує навантаження на сервер у 20 разів.
Як синхронізувати статуси заявки в реальному часі?
Друга проблема — статусна машина заявки. Типовий граф: created → assigned → accepted → in_progress → completed | cancelled. Якщо не зафіксувати переходи на рівні бекенду та не синхронізувати їх з локальним станом (Riverpod StateNotifier або BLoC), клієнт бачить «майстер їде» навіть після скасування — тому що push-сповіщення прийшло пізніше, ніж користувач оновив екран вручну. Вирішуємо через FCM data messages замість notification messages: додаток сам вирішує, що показати, виходячи з поточного стану.
Ще момент: рейтинги та відгуки не можна відкривати до завершення заявки. Якщо не додати серверну перевірку статусу перед записом відгуку, майстри отримують оцінки за невідбулі візити — бачив таке в кількох проектах.
Стек та архітектура
Flutter + Dart як основний вибір для cross-platform: однією кодовою базою закриваємо iOS та Android, при цьому нативні виклики через MethodChannel — для фонової геолокації (background_locator_2) та обробки вхідних дзвінків через VOIP (на iOS — CallKit, на Android — ConnectionService). Вбудований чат — через Firebase Realtime Database або власний WebSocket, медіафайли (фото несправності) — через Firebase Storage або S3 з presigned URLs.
Архітектурно: Clean Architecture з шарами domain / data / presentation. Репозиторії ізолюють логіку від джерела даних — легко міняти Firebase на власний API без переписування UI. GetIt як service locator для DI, Dio з interceptors для REST, hive для кешу заявок офлайн.
Ключові інтеграції:
- Google Maps SDK / Yandex MapKit — маршрут майстра до клієнта
- Firebase Cloud Messaging — сповіщення про зміну статусу
- Stripe / CloudPayments / ЮKassa — оплата після виконання
- Twilio або Vonage — маскування номерів при дзвінку
- OneSignal — маркетингові пуши та retention-кампанії
Згідно з App Store Review Guidelines, додаток повинен виконувати заявлену функцію, тому фонова геолокація використовується тільки на час активного замовлення.
Чому варто обрати Flutter для розробки?
Flutter дозволяє на 30% скоротити час розробки порівняно з нативними підходами та на 20% — порівняно з React Native (за нашими вимірами на п'яти проектах). Єдина кодова база спрощує підтримку, а нативні канали (MethodChannel) дають повний доступ до API iOS/Android. Для додатку з картами, геолокацією та push-сповіщеннями це оптимальний вибір.
Окремо про онбординг майстрів
Верифікація виконавця — не просто форма з полями. Потрібне завантаження документів (паспорт, ліцензія), ручна модерація або інтеграція з сервісом перевірки (наприклад, російський «Контур.Фокус» для ФОП). На Flutter: image_picker + dio multipart upload, статус перевірки через polling або WebSocket. Поки акаунт не верифікований — прапор is_verified: false блокує прийом заявок на рівні API middleware.
Що входить в роботу
- Мобільний додаток для клієнтів (iOS + Android)
- Додаток для майстрів з окремим інтерфейсом
- Адмін-панель (веб) для диспетчерів
- Чат між клієнтом та майстром
- Push-сповіщення (FCM / APNs)
- Інтеграція платіжної системи
- Документація (API-специфікація, інструкції з деплою)
- Підтримка після публікації (2 місяці безкоштовно)
Процес роботи
- Аудит вимог — з'ясовуємо: монетизація (комісія з заявки або підписка майстра), geography (одне місто чи федеральна мережа), чи потрібний веб-кабінет диспетчера.
- Проектування — ERD, State Machine діаграма заявки, API контракти (OpenAPI 3.0).
- UI/UX — Figma-прототип, окремі флоу для клієнта та майстра.
- Розробка — спринти по 2 тижні, CI/CD через Fastlane + GitHub Actions.
- Тестування — інтеграційні тести на
flutter_test, ручне QA на реальних пристроях. - Публікація — App Store + Google Play, налаштування ASO, скріншоти та описи.
Строки та досвід
| Етап | Тривалість |
|---|---|
| MVP (клієнт + майстер, основи) | 10–16 тижнів |
| Повна платформа з адмінкою | 20–28 тижнів |
Ми розробляємо мобільні додатки більше 7 років, випустили 15+ продуктів у сфері послуг. Наш досвід підтверджений сертифікацією Flutter та гарантією якості на всі проекти. Вартість MVP стартує від $15,000. Отримайте консультацію — надішлемо попередню оцінку за один день.
Типові помилки, які коштують дорого
- Реалізувати геолокацію без
background_locator— майстер «зникає» з карти, коли згортає додаток на Android 12 і вище через Doze Mode. - Зберігати токени FCM в локальній БД без TTL — через 3 місяці 30% токенів протухають, пуши перестають доставлятися.
- Не розділяти FCM-канали для клієнта та майстра в одному додатку — обидва отримують чужі сповіщення при зміні ролі.







