Кабинет продавца и витрина: что входит в разработку
Мы разрабатываем витрину и кабинет продавца для маркетплейса. Плохой интерфейс — это недельный onboarding, поток обращений в поддержку и отток поставщиков. Наша команда создает модули, которые сокращают время внесения товаров до 2 часов, а обработку заказов — до минут. Типичные боли: продавцы тратят часы на заполнение карточек, не видят актуальные остатки, теряют заказы в статусах. Наше решение — модуль с динамическими формами, материализованными метриками и API для интеграции служб доставки. Например, для заказчика из сегмента DIY мы разработали кабинет, где продавец загружает 500+ товаров за 15 минут через Excel-шаблон с валидацией. Это позволило сократить time-to-listing на 70%. В этой статье разберем архитектуру, ключевые разделы, массовый импорт, дашборд с живыми метриками, обработку заказов, права доступа и сроки разработки. Вы получите готовую roadmap для реализации модуля. Закажите консультацию — оценим проект бесплатно.
Как устроена архитектура кабинета продавца?
Кабинет продавца — отдельное SPA или набор страниц, изолированных от покупательской части. Он работает в рамках той же кодовой базы (Laravel/Node.js), но через отдельный middleware-стек с проверкой роли seller и привязкой к shop_id. Разделы: дашборд с метриками (выручка, заказы, конверсия, рейтинг), управление товарами (создание, редактирование, массовый импорт через Excel/CSV), управление заказами (статусы, трекинг, этикетки), финансы (баланс, история выплат), настройки магазина (описание, логотип, политики возврата).
Витрина продавца (публичная страница)
Публичная витрина — /shop/{slug} с подборкой товаров, информацией о продавце и блоком рейтинга. Генерируется на сервере для SEO. Включает агрегированные данные: средний рейтинг, количество отзывов, процент выкупа. Фильтрацию и поиск внутри магазина, кнопку подписки на магазин, блок последних отзывов с ответами продавца.
Как реализовать массовый импорт товаров без downtime?
Форма создания товара — сложный компонент с зависимыми полями. Набор атрибутов меняется в зависимости от категории: для электроники — гарантия и характеристики, для одежды — размерная сетка и состав. Реализуется через динамическую схему атрибутов, хранящуюся в базе:
category_attributes (category_id, attribute_name, type, required, options)
product_attribute_values (product_id, attribute_id, value)
Массовый импорт через очередь: файл загружается на S3, задача разбирает его построчно, создаёт товары и фото. Отчёт об ошибках возвращается продавцу по email или в UI. Такой подход гарантирует отсутствие блокировок и возможность обрабатывать сотни товаров за минуты.
Дашборд — метрики в реальном времени
Данные дашборда не строятся по запросу — слишком дорого. Используем материализацию: таблица seller_stats обновляется раз в час через scheduled job. Данные за текущий день считаются live через Redis-счётчики. Графики строятся на основе order_daily_aggregates — таблицы с предагрегированными данными по дням. Для визуализации используем Recharts или Chart.js. Компонент дашборда получает данные через отдельный API-endpoint, не смешивая их с основным CRUD.
| Метрика |
Источник |
Обновление |
| Выручка |
order_daily_aggregates |
Раз в час |
| Заказы за сегодня |
Redis |
Live |
| Конверсия |
seller_stats |
Раз в час |
| Рейтинг |
DB (суммарный) |
Live |
Обработка заказов продавцом
Продавец видит только заказы, содержащие его товары. Интерфейс обработки:
- Подтверждение заказа (переход в статус
confirmed, уведомление покупателю).
- Передача в доставку: ввод трек-номера или вызов API службы доставки.
- Отметка отправки: статус
shipped, автоматический email покупателю.
- Обработка возвратов: запрос возврата от покупателя → решение продавца → финансовая операция.
Каждый переход статуса логируется в order_status_history с timestamps и actor_id.
Права доступа внутри кабинета
У крупного продавца может быть команда. Нужна система ролей внутри магазина:
| Роль |
Товары |
Заказы |
Финансы |
Настройки |
| Владелец |
R/W |
R/W |
R/W |
R/W |
| Менеджер |
R/W |
R/W |
R |
— |
| Склад |
R |
R/W |
— |
— |
Реализуется через Laravel Authorization с tenant-scope: shop_id привязывается к каждой роли.
Технический стек и сроки
Backend: Laravel с Eloquent, политики Gate/Policy, очереди на Redis/Horizon.
Frontend: React с React Hook Form, TanStack Query, компоненты Shadcn/ui.
Хранение файлов: S3 (MinIO для self-hosted), генерация presigned URL для загрузки напрямую с браузера.
Базовый кабинет (товары + заказы + дашборд без сложной аналитики) — 3–4 недели. Полный модуль с массовым импортом, ролями в команде и финансовым разделом — 6–8 недель.
Что входит в работу
- Аналитика и проектирование архитектуры.
- Реализация всех разделов кабинета.
- Массовый импорт товаров.
- Система ролей и прав доступа.
- Интеграция со службами доставки.
- Тестирование (unit, integration, e2e).
- Деплой и настройка инфраструктуры.
- Документация и обучение команды.
- Поддержка после запуска.
Наша команда имеет 5+ лет опыта в разработке маркетплейсов и более 10 успешных проектов. Наше решение на 30% быстрее типовых шаблонов за счёт Server Components и кэширования. Свяжитесь с нами — получите консультацию и оценку вашего проекта.
Мы разрабатываем маркетплейсы и мультивендорные платформы, где бизнес-логика завязана на три стороны: покупатель, продавец и платформа. Ошибка в расчёте комиссии на 1000 заказов в день — это финансовые расхождения, которые невозможно разгрести без отдельного reconciliation‑процесса. Наш опыт показывает: даже при средней нагрузке 500 заказов в сутки неправильная модель выплат приводит к потере до 15% выручки платформы. Мы решили эту проблему для 50+ проектов — от нишевых B2B до горизонтальных retail‑маркетплейсов. Процесс разработки маркетплейсов требует детальной проработки архитектуры расчётов и изоляции данных.
Как избежать расхождений в расчётах комиссий
Расчёт комиссии — самая критичная часть, где ошибки стоят денег. Правило первое: никогда не хранить комиссию как производную, всегда как факт. В момент создания заказа фиксируем: сумму заказа, процент комиссии платформы в этот момент, абсолютное значение комиссии, сумму к выплате продавцу. Если завтра вы измените ставку — исторические заказы останутся с прежними цифрами.
Модели комиссий (используем одну из или комбинируем):
| Модель |
Принцип |
Типичный сценарий |
| Фиксированный процент |
5% с каждой продажи |
Простые торговые площадки |
| Дифференцированный по категориям |
Электроника 3%, одежда 8% |
Маркетплейсы с разными маржами |
| Tiered по обороту |
До 100k — 10%, от 100k — 7% |
B2B‑платформы с объёмными скидками |
| Смешанный |
% + фиксированная сумма за транзакцию |
Высокорисковые или дорогие товары |
Мы используем Stripe Connect как базовый стандарт. Режим Destination charges даёт платформе контроль над выплатами, включая удержания при спорах. Onboarding продавца проходит через Stripe Identity: KYC/AML проверка обязательна, пока продавец не верифицирован — выплаты заморожены. Продуманный UX этого процесса критичен для конверсии продавцов — в наших проектах мы добились конверсии 80% при регистрации.
Escrow и холдирование — пример реализации
Деньги с покупателя списываются сразу, продавцу переводятся с задержкой 7–14 дней после подтверждения получения. Это защита от мошенничества и возможность удержания при спорах. Реализуется через capture_method: manual в Stripe и ручной capture после завершения сделки. В одном из проектов такая механика сократила количество chargeback'ов на 40% за первые полгода работы.
Почему архитектура мультиарендности критична для изоляции данных
Первый шаг — выбор архитектуры мультиарендности. В shared‑schema режиме все продавцы в одних таблицах с vendor_id. Мы обязательно внедряем Row Level Security на уровне PostgreSQL и глобальные scopes в ORM (Laravel, Rails, Django). Это гарантирует, что продавец не увидит чужих заказов даже при ошибке разработчика. Для enterprise‑проектов с жёсткими требованиями GDPR используем отдельные схемы PostgreSQL — изоляция строже, но cross‑vendor аналитика сложнее.
Как реализовать складские остатки без race condition
Два покупателя одновременно добавляют последний товар в корзину. Кто его купит? Применяем optimistic locking при создании заказа:
UPDATE inventory
SET reserved = reserved + 1
WHERE product_id = ? AND (quantity - reserved) >= 1
Атомарная операция — второй запрос вернёт 0 затронутых строк и получит ошибку «товар закончился». Типичная схема для высоконагруженных маркетплейсов.
Сравнение подходов к каталогу товаров
| Аспект |
Unified‑каталог (Amazon‑like) |
Per‑vendor‑каталог (Avito‑like) |
| Единая карточка товара |
Да, product → offers |
Нет, каждый продавец свою |
| SEO |
Оптимизируется по карточке |
Дубликаты, но быстрее запуск |
| UX покупателя |
Выше (сравнение цен) |
Ниже (много дублей) |
| Сложность разработки |
Высокая (модерация атрибутов) |
Средняя |
| Конверсия покупки |
На 25% выше |
Ниже |
Для нишевого B2B маркетплейса мы чаще выбираем per‑vendor — быстрее запускается. Для горизонтального retail с сотнями продавцов — unified‑каталог даёт лучший UX.
Пайплайн модерации: автоматика и ручная верификация
Маркетплейс несёт ответственность за контент продавцов. Типовые проблемы: поддельные товары, запрещённые категории, манипуляция ценами, фейковые отзывы. Выстраиваем трёхуровневый пайплайн:
- Автоматические проверки при публикации: обязательные поля, соответствие категории, стоп‑лист слов, дубликаты через хеш изображения.
- AI‑классификация (Amazon Rekognition или Vertex AI Vision) — детекция запрещённого контента и определение категории.
- Очередь ручной проверки для flagged товаров.
Статусная машина: draft → pending_review → active / rejected → suspended. Каждый переход — событие с причиной и модератором. Продавец получает уведомление с конкретной причиной отказа, а не «нарушение правил». Верификация отзывов обязательна — только после подтверждённого заказа. Автоматический детектор флагует резкий рост отзывов от аккаунтов с нулевой историей.
Поиск и рекомендации
Поиск по маркетплейсу с разными продавцами и сотнями тысяч товаров — это Elasticsearch или OpenSearch, не SQL LIKE. Векторный поиск для семантики, фасетная фильтрация через агрегации. Персонализированная лента на основе коллаборативной фильтрации. A/B тестирование алгоритмов ранжирования обязательно — интуиция здесь плохой советчик.
Процесс работы
Маркетплейс — итеративная разработка. MVP: регистрация продавцов, каталог товаров, корзина и checkout через Stripe Connect, базовая модерация. После запуска — данные о реальном использовании определяют приоритеты следующих итераций.
Типичный порядок:
- MVP (3–4 месяца)
- Аналитика и обратная связь
- Первый расширенный релиз (2–3 месяца)
- Масштабирование и оптимизация
Сроки и стоимость
- MVP маркетплейса (каталог, checkout, базовые профили продавцов): 3–5 месяцев.
- Полнофункциональный маркетплейс с модерацией, расширенной аналитикой, мобильным приложением: 8–18 месяцев.
- Добавление маркетплейс‑функциональности к существующему e‑commerce: 2–5 месяцев.
Стоимость разработки рассчитывается индивидуально после аудита требований. Ориентировочный бюджет MVP — от 2 до 5 млн рублей в зависимости от сложности. Точную оценку дадим на бесплатном предпроектном обследовании.
Что входит в работу
- Проектная документация: архитектура, схемы данных, API‑спецификации (OpenAPI).
- Доступы к репозиторию, CI/CD, документации по развёртыванию.
- Обучение команды заказчика работе с платформой.
- Техническая поддержка в течение первого месяца после запуска.
Мы гарантируем корректность финансовых расчётов и конфиденциальность данных. Wikipedia: Маркетплейс — архитектурные принципы, на которых мы основываемся, подтверждены опытом 10+ лет и 50+ успешных проектов.
Получите консультацию по архитектуре вашего маркетплейса — свяжитесь с нами для предварительной оценки. Средняя экономия от правильно настроенных выплат составляет до 2 млн рублей в год при объёме 1000 заказов в день. Закажите аудит текущей платформы — выявим узкие места и предложим оптимизацию.