CRM для управления товарами и заказами на маркетплейсах (Ozon, Wildberries) с интеграцией МойСклад и встроенным AI-ассистентом. Селлер в одном окне видит все заказы, остатки на складах, финансовую аналитику и может задавать вопросы языком — без листания 10 вкладок маркетплейсов.
С нуля спроектирована и реализована fullstack-система с мультитенантной архитектурой:
• Backend: NestJS + TypeScript, PostgreSQL 15, Redis (кэш, очереди, Pub/Sub)
• Frontend: React 18 + Vite + Ant Design, два раздельных приложения (панель оператора + админка тенантов)
• Интеграции: Ozon API (FBO/FBS, заказы, остатки, финансы), Wildberries API (заказы, отчёты о продажах), МойСклад (отгрузки, складские остатки)
• AI-агент: встроенный чат с доступом к реальным данным (остатки по артикулу, продажи, цены) через гибридный SQL-ассистент — LLM генерирует запросы к БД с tenant-изоляцией
• Аналитика: Cube.js слой с графиками, круговыми диаграммами, фильтром по складам; страница анализа остатков с подсветкой низких позиций
• Инфраструктура: Docker, node-cron с блокировками, долгоживущие JWT для синхронизаций, защита маршрутов по ролям
Ключевые фичи: плоская таблица остатков по 5 складам, учёт дубликатов заказов (FBO/FBS), финансовая сводка с fallback при недоступности API, cron-задачи внутри приложения без внешних триггеров.
• Управление заказами вместо 2 часов в день — 15 минут
• Все каналы продаж в одном интерфейсе, больше не надо прыгать между Ozon/WB/МойСклад
• AI-ассистент отвечает на вопросы по остаткам и продажам за секунды вместо ручного поиска
• Автоматическая синхронизация 4 раза в час — товары, заказы, остатки, финансы
• Мультитенантность: один инстанс обслуживает несколько магазинов с полной изоляцией данных
• Кодовая база ~15k строк, покрытие API-тестами, документация в Swagger