Задача
Логистическая компания управляла заявками через Excel и мессенджеры: диспетчеры вручную распределяли заказы по водителям, отслеживали статусы в таблицах, передавали документы через WhatsApp. При росте объёма — 200+ заявок в день — система перестала работать: терялись заявки, дублировались маршруты, менеджеры не видели реальную картину.
Задача: спроектировать и построить веб-CRM, которая закроет всё это изнутри.
Что было сделано
Спроектировал схему данных: заявки, маршруты, водители, транспорт, точки доставки. PostgreSQL с партиционированием таблицы заявок по дате — объём предполагался большой.
На Laravel реализовал REST API для фронтенда и мобильного приложения водителей. На Vue — интерфейс диспетчера с реалтайм-обновлением статусов через WebSockets (Laravel Echo + Pusher-совместимый сервер).
Интеграция с 2ГИС для геокодирования адресов доставки и построения маршрутов. Экспорт накладных в PDF через wkhtmltopdf.
Деплой на VPS через Docker Compose: nginx, php-fpm, PostgreSQL, Redis, воркеры очередей.
Результат
Время обработки одной заявки сократилось с ~8 минут до ~40 секунд. Ноль потерянных заявок за первые три месяца эксплуатации. Диспетчеры перестали работать в двух окнах одновременно — всё в одном интерфейсе.
Стек подробнее
- Laravel 11 — основной бэкенд, очереди, события
- PostgreSQL 16 — хранение данных, партиционирование
- Vue 3 + Pinia — SPA интерфейс диспетчера
- Redis — кеш, очереди, pub/sub для WebSockets
- Docker Compose — локальная разработка и прод-деплой идентичны