K2 STUDIO

Продукты под ключ

← Все кейсы

Amiga

Яндекс.Такси для стройки: заказчик вызывает рабочего так же, как машину — видит его на карте, следит за подъездом и платит по факту. Приложения для Android и iOS, подбор исполнителя по расстоянию, живые координаты.

Заказчик
Собственный продукт
Годы
2026 — по сей день
Объём работ
Продукт, мобильные приложения, сервер, интеграции, эксплуатация
Стек
Flutter — Android и iOS, OpenStreetMap, Python и FastAPI, PostgreSQL с PostGIS
Команда
Инга — продукт и проект, Геннадий — разработка

Задача

Рабочего на объект ищут обзвоном: заказчик перебирает знакомых бригадиров, бригадир перебирает своих, и всё это занимает часы. Сколько стоила работа и когда её начали, потом никто точно не скажет.

Задача — свести заказчика и исполнителя так же быстро, как такси: кто свободен и ближе всех, тот и получает заказ. С той разницей, что происходит это на стройке.

Что сделали

  • Приложения для Android и iOS из одного кода на Flutter.
  • Карты на OpenStreetMap, живые координаты исполнителя на пути к объекту.
  • Подбор исполнителя по расстоянию: поиск начинается рядом и расширяется, пока заказ не найдёт кого-то.
  • Ход работы: заказчик запускает счётчик, исполнитель завершает, заказчик подтверждает и ставит оценку.
  • Вход по звонку-сбросу вместо СМС.

Расчёт на плохие условия

Стройка — это слабая связь, севшие телефоны и грязные руки. Три решения приняты именно из-за этого, и каждое из них видно в счёте или в надёжности.

Вход без мобильного интернета. Подтверждение номера идёт не по СМС, а звонком-сбросом: телефон звонит пару секунд и сбрасывается, код — последние цифры номера. Это работает там, где данных нет вовсе, и стоит пару тенге вместо примерно двадцати пяти за СМС.

Подбор без фонового планировщика. Радиус поиска — это функция от возраста заказа, а не результат сработавшего таймера. Заказ, который ищет пять секунд, предлагается в трёх километрах; заказ, который ищет минуту, уже не нашёл никого рядом и уходит дальше. Ничего не нужно помнить между запросами, поэтому перезапуск сервера ничего не теряет.

Двойное нажатие ничего не ломает. Каждый переход в работе — одно условное обновление в базе, проверяющее статус, из которого заказ выходит. Решает база, а не чтение с последующей записью. На плохой связи два нажатия не запустят счётчик дважды и не выставят счёт дважды.

Результат

2 тенге вместо 25

Стоимость подтверждения номера. На массовой регистрации разница в десять с лишним раз перестаёт быть мелочью.

Обсудить похожую задачу