Amiga
Яндекс.Такси для стройки: заказчик вызывает рабочего так же, как машину — видит его на карте, следит за подъездом и платит по факту. Приложения для Android и iOS, подбор исполнителя по расстоянию, живые координаты.
- Заказчик
- Собственный продукт
- Годы
- 2026 — по сей день
- Объём работ
- Продукт, мобильные приложения, сервер, интеграции, эксплуатация
- Стек
- Flutter — Android и iOS, OpenStreetMap, Python и FastAPI, PostgreSQL с PostGIS
- Команда
- Инга — продукт и проект, Геннадий — разработка
Задача
Рабочего на объект ищут обзвоном: заказчик перебирает знакомых бригадиров, бригадир перебирает своих, и всё это занимает часы. Сколько стоила работа и когда её начали, потом никто точно не скажет.
Задача — свести заказчика и исполнителя так же быстро, как такси: кто свободен и ближе всех, тот и получает заказ. С той разницей, что происходит это на стройке.
Что сделали
- Приложения для Android и iOS из одного кода на Flutter.
- Карты на OpenStreetMap, живые координаты исполнителя на пути к объекту.
- Подбор исполнителя по расстоянию: поиск начинается рядом и расширяется, пока заказ не найдёт кого-то.
- Ход работы: заказчик запускает счётчик, исполнитель завершает, заказчик подтверждает и ставит оценку.
- Вход по звонку-сбросу вместо СМС.
Расчёт на плохие условия
Стройка — это слабая связь, севшие телефоны и грязные руки. Три решения приняты именно из-за этого, и каждое из них видно в счёте или в надёжности.
Вход без мобильного интернета. Подтверждение номера идёт не по СМС, а звонком-сбросом: телефон звонит пару секунд и сбрасывается, код — последние цифры номера. Это работает там, где данных нет вовсе, и стоит пару тенге вместо примерно двадцати пяти за СМС.
Подбор без фонового планировщика. Радиус поиска — это функция от возраста заказа, а не результат сработавшего таймера. Заказ, который ищет пять секунд, предлагается в трёх километрах; заказ, который ищет минуту, уже не нашёл никого рядом и уходит дальше. Ничего не нужно помнить между запросами, поэтому перезапуск сервера ничего не теряет.
Двойное нажатие ничего не ломает. Каждый переход в работе — одно условное обновление в базе, проверяющее статус, из которого заказ выходит. Решает база, а не чтение с последующей записью. На плохой связи два нажатия не запустят счётчик дважды и не выставят счёт дважды.
Результат
2 тенге вместо 25
Стоимость подтверждения номера. На массовой регистрации разница в десять с лишним раз перестаёт быть мелочью.