ShopCorp

// B2B2C //// E-commerce //// React Native //// Collective Purchasing //// Corporate //// Supabase //// YooKassa //// Stripe //// Mobile App //// Real-time //

ShopCorp — B2B2C-платформа для коллективных корпоративных закупок. Решает простую и часто упускаемую задачу: дать сотрудникам компаний покупать товары повседневного спроса напрямую у производителей, минуя розничную наценку. HR-отдел компании получает инструмент мотивации персонала, поставщик — новый канал продаж с консолидированными заказами, куратор закупки — комиссионный доход по прогрессивной шкале от 1% до 5%, сотрудник — экономию до 40%. Экосистема состоит из веб-приложения для администраторов и React Native приложения для сотрудников.

Проблема и контекст

Сотрудники крупных компаний покупают одни и те же категории товаров — бытовая химия, спорттовары, электроника, продукты — в розницу с обычной наценкой 30–60%. При этом тот же объём, консолидированный на уровне компании, можно заказать у производителя по оптовой цене. Барьер — организационный: нужен кто-то, кто соберёт заявки, согласует ассортимент с поставщиком, рассчитает доставку, проконтролирует выдачу. Этот «кто-то» обычно отсутствует. ShopCorp превращает эту нишу в продукт: появляется отдельная роль «куратор», у которой есть прогрессивная мотивация (доля от оборота), и инфраструктура, которая автоматизирует всё остальное.

Что построено

Веб-приложение ShopCorp на React 19 + TypeScript 5.8 с архитектурой 68+ компонентов и 31 модулем API-клиента. Управление товарными SKU (динамические характеристики, цвет, размер, индивидуальные цены вариантов), корзина (синхронизированная между устройствами), заказы с FSM-статусами (pending → submitted → consolidated → company_received → completed), управление договорами между компаниями и поставщиками с настройкой комиссий, история заказов, избранное с Realtime-синхронизацией (v1.9.0), тикеты поддержки с категориями и приоритетами (v1.9.0), аналитика и графики на Recharts, управление пользователями и ролями (admin/curator/logist/employee) с RLS на уровне PostgreSQL. Мобильное приложение ShopCorp RN на React Native 0.81 + Expo 54: каталог с фильтрацией, корзина на Zustand, оформление заказов, real-time чат через Supabase Realtime, профиль с биометрической авторизацией (Face ID / Touch ID), админ-панель для администраторов и кураторов. Интеграция платежей: YooKassa для рублёвых платежей, Stripe для долларовых.

Архитектура и стек

Frontend Web: React 19, TypeScript 5.8, Vite 7.1, Tailwind CSS 3.4 (дизайн-система Amethyst Haze), React Router 7.5, TanStack Query 5.90, Recharts, Lucide, ~160 000 строк кода. Frontend Mobile: React Native 0.81.5, Expo 54+ с Expo Router 6, TypeScript 5.9, NativeWind 4 для Tailwind в RN с тёмной темой, Zustand 5 с персистентностью, i18next, React Native Chart Kit, ~85 000 строк. Backend: Node.js LTS, Express 5.2, TypeScript 5.4, Winston для логов, ~40+ REST-эндпоинтов с консистентным форматом. База — self-hosted Supabase (PostgreSQL 15) с Row-Level Security на ролях admin/curator/logist/employee, JWT через Supabase Auth, Supabase Realtime для подписок (избранное, корзина, статусы заказов, чат, тикеты), Supabase Storage для изображений товаров. 80+ SQL-миграций, 50+ таблиц. Платежи — YooKassa (RUB, webhook) и Stripe (USD, webhook).

Бизнес-модель и комиссии

Цена для покупателя считается как `supplier_price × (1 + totalCommission/100)`, где totalCommission состоит из фиксированной 10% комиссии платформы и переменной комиссии куратора из таблицы `contracts.commission_rate`. Итоговая наценка — 15% и выше в зависимости от договора. Округление вверх до копеек. Прогрессивная шкала комиссий куратора по каждому договору отдельно за квартал: до 100 000 ₽ — 1%, до 500 000 ₽ — 2%, до 1 000 000 ₽ — 3%, 1–2 млн — 4%, от 2 млн — 5%. В конце квартала все pending-выплаты пересчитываются по достигнутой максимальной ставке. Расчётный период сбрасывается каждый квартал.

Ключевые фичи v1.9.0 / v1.5.1

  • Двухчастная экосистема: веб + React Native iOS/Android с единой бизнес-логикой и общими Zod-схемами
  • B2B2C-модель с тремя сторонами (компания / поставщик / куратор) и прогрессивной шкалой комиссий
  • Real-time подписки через Supabase Realtime: избранное, корзина, статусы заказов, чат, тикеты
  • SKU-система с динамическими характеристиками: цвет, размер, индивидуальные цены вариантов
  • Полный цикл жизни заказа: pending → submitted → consolidated → company_received → completed
  • Тикеты поддержки с категориями, приоритетами, статусами и историей ответов
  • Полная локализация (i18next) для мобильного приложения
  • Интеграция платежей YooKassa (RUB) и Stripe (USD) с webhook-обработкой
  • Floating UI: плавающий чат, плавающая корзина, не блокирующие интерфейс
  • Maestro E2E visual tests для мобильного приложения

Безопасность

Row-Level Security на 50+ таблицах PostgreSQL разграничивает доступ по ролям: admin (полный доступ), curator (только свои договоры и комиссии), logist (только логистика и доставка), employee (только свои заказы и каталог). JWT-аутентификация через Supabase GoTrue с access/refresh-токенами. Биометрия в мобильном приложении через expo-local-authentication. Webhook-верификация платежей. Изоляция Supabase-сервиса за iptables, доступ только с фронтенд-сервера и localhost.

Production и DevOps

Frontend развёрнут на TimewebCloud App с автодеплоем из GitHub. Backend API и Supabase на собственном VPS cos-supabase.ru (5.129.249.146): PM2 для управления Node.js-процессами, Docker Compose для оркестрации Supabase, Nginx как reverse proxy. Production-домены: web на shop-corp.ru, API на api.shop-corp.ru. Текущая версия 1.9.0 (Web, февраль 2026), 1.5.1 (Mobile, март 2026). Активная разработка с регулярными релизами.

Розничная наценка — это плата за разрыв между производителем и потребителем. Если разрыв убрать, обе стороны выиграют.
// Начнём сотрудничество //
Олег Чернышов
+
Вы

Обсудим вашу задачу?

Расскажите о ситуации в компании — вместе определим, чем могу быть полезен и с чего начать.

Контакты