Логистическая платформа · 2026
ALIGO
Логистическая экосистема, соединяющая грузовладельцев, водителей и бизнес через одну платформу — полный цикл груза, от публикации до доставки, отслеживания и оценки.
Инженерный обзор
- ~21k Строк кода
- 54 Эндпоинтов API
- 275 Автотестов
- 24 Экранов в приложении
- 23 Модулей backend
- 3 Клиентские платформы
Технологии
- Flutter
- Dart
- Material 3
- Light / Dark theme
- mapbox_maps_flutter
- geolocator
- socket_io_client
- firebase_messaging
- google_sign_in
- flutter_secure_storage
- fl_chart
- intl / l10n
- Node.js
- Express 5
- Socket.IO
- PostgreSQL
- SQLite (local)
- JWT
- bcrypt
- firebase-admin
- Telegraf
- Anthropic Claude SDK
- Mapbox Directions API
- express-rate-limit
- node:test
- Docker
- Docker Compose
- nginx
- Let's Encrypt / certbot
- PostgreSQL 16
- Render
Задача
В Узбекистане грузовладельцы и водители до сих пор находят друг друга через разрозненные каналы — звонки, Telegram-группы, личные связи.
Из-за этого цена непрозрачна, статус груза не виден, подходящего водителя трудно найти, а обратные рейсы часто идут порожняком. Нет общего процесса и нет репутации, которая переносилась бы между сторонами.
Обеим сторонам нужна одна общая система.
Решение
ALIGO объединяет грузовладельцев, водителей и бизнес в единой логистической экосистеме.
Грузовладелец публикует отправку — точка загрузки, назначение, тип груза, вес, цена и особые требования. Водители находят подходящий груз поблизости и принимают его. Дальше отправка движется по понятной машине состояний: принято → в пути → завершено, после чего обе стороны оценивают друг друга.
Сверх этого: отслеживание в реальном времени, автоматический расчёт цены, детерминированный подбор водителей, уведомления, интеграция с Telegram и AI-чат поддержки. Мобильное приложение, Telegram-бот, Telegram Mini App и админ-панель работают через один Node.js API.
Моя роль
Я построил ALIGO в одиночку — от архитектуры до продакшена.
Это включало проектирование системы и базы данных, backend и REST API, real-time слой на Socket.IO, аутентификацию и авторизацию, а также полное мобильное приложение на Flutter — 24 экрана и 41 переиспользуемый виджет, на трёх языках (~393 ключа локализации).
Также — доменную логику: жизненный цикл груза, алгоритм подбора auto-dispatch, движок ценообразования, систему уведомлений, Telegram-бот и Mini App, AI-чат поддержки и админ-панель — плюс деплой в Docker, настройку nginx и продакшен-конфигурацию PostgreSQL.
Архитектура
Backend — монолит на Express 5, организованный в сервисы — 23 сервиса над 10 моделями данных, доступные через 54 REST-эндпоинта в 8 роутерах, рядом с ними аутентификация и real-time слой.
Слой данных работает на PostgreSQL в продакшене и на SQLite локально — приложение переключается автоматически в зависимости от того, задан ли DATABASE_URL, так что логика приложения не зависит от среды базы данных.
Клиенты — приложение на Flutter, Telegram-бот и Mini App, админ-панель — общаются с одним API по REST и Socket.IO.
- Клиенты Flutter mobileTelegram-бот · Mini AppАдмин-панель
- Транспорт REST APISocket.IO
- Приложение Node.js · Express 5
- Домен СервисыAuthReal-time
- Данные PostgreSQL — продакшенSQLite — локально
Детерминированный подбор водителей
Когда груз опубликован, ALIGO подбирает водителей через систему подсчёта баллов на правилах — не машинное обучение. Сначала работают жёсткие фильтры (соответствие транспорта, доступность, ограничения по расстоянию); оставшиеся водители получают баллы, а предложения уходят раундами с истечением по TTL, которыми управляет внутренний планировщик.
Балл складывается из семи факторов:
- 01 Расстояние
- 02 Цена
- 03 Рейтинг водителя
- 04 История принятия
- 05 Любимый маршрут
- 06 Срочность дедлайна
- 07 Совместимость обратного рейса
Алгоритм детерминированный, объяснимый и тестируемый. AI не участвует в выборе водителей.
Изолированное отслеживание на Socket.IO
Живое местоположение и обновления статуса отправки идут через real-time слой на Socket.IO. У каждой отправки своя комната, и пользователь может войти только в комнату отправки, где он грузовладелец или назначенный водитель — поэтому данные конкретной отправки не попадают к посторонним.
Ассистент поддержки на Claude
В ALIGO есть AI-ассистент поддержки на Claude, отвечающий на узбекском, русском и английском. Если AI API недоступен, система откатывается к заранее заданным ответам.
Это намеренно отделено от auto-dispatch: кто повезёт груз, решают бизнес-правила, AI лишь помогает пользователям. AI применяется там, где он приносит пользу, а не вшит в основную логику.
Инженерные решения
Почему Node.js + Express, а не Django
Python и Django — среди моих основных технологий, но ядро ALIGO — это real-time: непрерывное отслеживание водителей и грузов, живой статус отправки, асинхронные уведомления, интеграции с Telegram и внешними API.
Событийная модель Node.js с асинхронным вводом-выводом — вместе с Socket.IO — естественно подошла для этой нагрузки и сохранила слой интеграций простым и единообразным. Это не утверждение, что Django не может в real-time или что Node универсально лучше; это решение по соответствию задаче.
Принцип Технология должна следовать за задачей — а не наоборот.
Сложности
- 01
Одна кодовая база, две базы данных
Локальная разработка на SQLite, продакшен на PostgreSQL — и
COUNT(),AVG(), числовые типы и форматы дат не всегда ведут себя одинаково. Я нормализую результаты запросов в JavaScript, чтобы остальное приложение видело один согласованный формат. - 02
Гонки при принятии груза
Несколько водителей могли одновременно принять один и тот же груз. Принятие — это единственный атомарный
UPDATE … WHERE status = 'open', и ручное принятие, и предложения auto-dispatch проходят через одну и ту же логику перехода состояний — поэтому один груз нельзя принять дважды. - 03
Не дать AI стать ядром
Подбор водителей намеренно сделан как детерминированные бизнес-правила, а не ML — это делает его предсказуемым, объяснимым и тестируемым. Claude используется для чата поддержки.
- 04
Спящий инстанс Render
На бесплатном тарифе Render backend может просыпаться около 50 секунд. Восстановление сессии использует повтор с задержкой, поэтому пользователей не выбрасывает на экран входа, пока сервер запускается.
Результат
ALIGO — работающая сквозная логистическая система: мобильное приложение на Flutter, Telegram-бот и Mini App, админ-панель и Node.js / Express API на PostgreSQL.
Она покрывает весь процесс — публикация, поиск, принятие, загрузка, отслеживание в реальном времени, доставка и оценка — с автоматическим ценообразованием, детерминированным подбором, уведомлениями и поддержкой на базе AI.
- Публикация груза
- Поиск
- Водитель принимает
- Загрузка
- Отслеживание в реальном времени
- Доставка
- Оценка
Интеграции
- Firebase Cloud Messaging
Push-уведомления на мобильные устройства.
- Telegram
Бот + Mini App — водители могут работать с предложениями прямо в Telegram.
- Mapbox Directions API
Расчёт расстояния и маршрута для ценообразования и отслеживания.
- Claude API
AI-ассистент поддержки внутри приложения, с откатом на заранее заданные ответы.
Ключевые функции
- Телефон + пароль
- Восстановление через Email OTP
- Google Sign-In
- Восстановление сессии
- Роли Грузовладелец / Водитель
- Профиль
- Транспорт и его возможности
- Публикация груза
- Поиск груза поблизости
- Фильтр по соответствию транспорта
- Принятие
- Загрузка
- В пути
- Завершение
- Оценка
- Отмена
- Цена по категории
- Расстояние
- Вес
- Спецоборудование
- Расчёт маршрута Mapbox
- Водители и грузы поблизости
- Срочные грузы
- Частые маршруты
- Тренды цен
- Месячная статистика
- Индикаторы подбора
- FCM push
- Уведомления в приложении
- Telegram DM
- AI-чат поддержки
- Админ-панель
- Аналитика
- Блокировка пользователей
Overview
ALIGO is a logistics ecosystem connecting cargo owners, drivers and businesses through one digital platform.
Built with a Flutter mobile application and a Node.js / Express backend, the system combines cargo management, real-time tracking, automatic pricing, deterministic driver matching, notifications, Telegram integration and an AI-powered support assistant — the full cargo lifecycle from publishing to delivery and rating.