Laneflare: ИИ-диспетчер и TMS для грузоперевозчиков-экспедиторов
Laneflare — мой собственный продукт для небольших перевозчиков-экспедиторов в США. Заявки со всех бирж грузов попадают на одну доску, система подбирает подходящую машину и готовит ставку для диспетчера. Продукт, сайт и инфраструктуру спроектировал и сделал один.
Контекст
Небольшие перевозчики-экспедиторы работают на фургонах и грузовиках и находят грузы на биржах. Диспетчер следит за десятками уведомлений, сверяет каждое с тем, где стоят машины, и отвечает брокеру вручную; груз обычно достаётся первой разумной ставке. Laneflare начался как система для одного такого автопарка и вырос в продукт для перевозчиков вроде него.
Что сделано
Одна доска для всех заявок. Заявки приходят процессом каждые две минуты, у каждой — метка биржи-источника; ушедшие с биржи помечаются как истёкшие. Статусы «Доступна», «Ставка отправлена», «Забронирована», «Истекла» и отдельный вид для каждой машины.
Сначала — подходящая машина. Каждая заявка сверяется с положением водителей, радиусом поиска, типом кузова и грузоподъёмностью, в строке видна ближайшая подходящая машина. Кредитный рейтинг брокера подтягивается по номеру MC, повтор того же направления от того же брокера помечается, брокеры с низким рейтингом уходят в скрытый вид.
Ставка в два клика. «Отправить ставку» открывает заполненное письмо: получатель, тема, итоговая цена и текст. Заявка переходит в «Ставка отправлена» и хранит сумму.
От ставки до доставки. Действия заказа проводят груз через котировку, бронь, заказ и отправку; водитель получает сообщение со ссылками на карту. Подтверждение ставки и накладная собираются в PDF из заказа. Машины и грузы — на живой карте, а каждое изменение приходит на открытые экраны по WebSocket без перезагрузки.
Сайт. laneflare.com — статичная страница без фреймворка. Таблица грузов на первом экране собрана по настройкам экранов самого продукта, поэтому на странице настоящие колонки, статусы и цвета.
Как устроено
Laneflare работает на платформе на настройках, над которой я работал в команде: экраны и процессы — YAML в отдельном репозитории, а бэкенд на .NET и фронтенд на React общие и ничего не знают о грузоперевозках. Доска, статусы, правила подбора и документы — это настройки. В бэкенд добавлены только общие кирпичи: задача подбора водителей, живые подписки, функции выражений для процессов.
По дороге ускорился движок процессов: создание заказа через процесс — со 155 до 19 мс.
Каждое изменение выкатывается автоматически на собственную инфраструктуру: сборка образа обновляет тег в репозитории кластера, ArgoCD раскатывает.

