Система управления доставкой 19-литровой воды с контролем курьеров, антифрод-проверкой и интеграцией с телематикой.
- Антиобман: курьеры не могут "рисовать" доставки — сервер проверяет GPS машины.
- Контроль тары: понятно, кто сколько бутылей должен.
- Контроль денег: сверка кассы по сменам.
- SLA: видно просроченные заказы (>2 часов).
- Управляемость: отчёты, логи, карта треков.
Проект построен как монорепозиторий (Monorepo).
┌─────────────────────────────────────────────────────────────────┐
│ CLIENTS │
├─────────────────┬─────────────────┬─────────────────────────────┤
│ Web Admin │ Courier PWA │ Integrations │
│ (React/Vite) │ (React/PWA) │ (Intake, Telematics) │
└────────┬────────┴────────┬────────┴──────────────┬──────────────┘
│ │ │
▼ ▼ ▼
┌─────────────────────────────────────────────────────────────────┐
│ API (NestJS) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────────────┐ │
│ │ Auth │ │ Orders │ │ Shifts │ │ Delivery Proof │ │
│ │ RBAC │ │ Customers│ │ Vehicles │ │ (Anti-fraud) │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────────────┘ │
└────────────────────────────┬────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ SQLite + Prisma │
└─────────────────────────────────────────────────────────────────┘
| Роль | Описание | Ключевые функции |
|---|---|---|
ADMIN |
Полный доступ | Настройки, пользователи, отчёты |
OPERATOR |
Работа с заказами | Создание заказов, назначение курьеров |
WAREHOUSE |
Склад | Открытие/закрытие смен, приём тары/денег |
COURIER |
Курьер | PWA: список заказов, доставка, proof |
MANAGER |
Менеджер | Отчёты, аналитика (read-only) |
- Node.js + NestJS — API framework
- Prisma — ORM
- SQLite — база данных (локальный файл
dev.db) - JWT — авторизация
- React + Vite — сборка
- Tailwind + shadcn/ui — UI
- TanStack Query — data fetching
- Leaflet — карты (OSM)
- React + Vite — сборка
- Workbox — service worker
- IndexedDB — offline storage
В корне проекта:
npm installИнициализация SQLite и заливка тестовых данных:
# Применить миграции
npm run db:migrate
# Сгенерировать Prisma Client
npm run db:generate
# Залить сид-данные (пользователи, товары и т.д.)
npm run db:seedМожно запускать приложения в разных терминалах:
API (Backend)
npm run api:dev
# Запустится на http://localhost:3000
# Swagger документация: http://localhost:3000/docsWeb Admin (Панель администратора)
npm run web:dev
# Запустится на http://localhost:5173Courier PWA (Приложение курьера)
npm run pwa:dev
# Запустится на http://localhost:5174| Роль | Телефон | Пароль |
|---|---|---|
| Admin | +99361000001 | Tm123456 |
| Operator | +99361000002 | Tm123456 |
| Warehouse | +99361000003 | Tm123456 |
| Courier 1 | +99361000010 | Tm123456 |
| Courier 2 | +99361000011 | Tm123456 |
apps/api— Бэкенд на NestJSapps/web-admin— Админка для диспетчеров и операторовapps/courier-pwa— Мобильное веб-приложение для водителей