Все кейсы
E-commerce · ERP

PAINKILLER — магазин и склад в одном

Бренд уличной одежды PAINKILLER продавал через маркетплейсы и терял на комиссиях, обезличенной витрине и чужих правилах. Мы собрали собственную площадку — магазин, склад, бухгалтерию, доставку и AI-примерку в одном продукте — и перевели продажи на свой сайт.

1
сайт + склад + учёт
AI
примерка и подбор размера
PAINKILLERAI-примерка
2 490 ₽
4 690 ₽
3 290 ₽

Задача

PAINKILLER зависел от маркетплейсов: высокие комиссии, ноль контроля над витриной и клиентом, аналитика — чужая. Учёт, остатки и заказы жили в разрозненных таблицах и сервисах.

Нужна была собственная площадка, закрывающая весь цикл — от карточки товара до фискального чека и доставки — и управляемая из одной админки.

Решение

Собрали монорепо из трёх слоёв: SPA на React + TypeScript (Vite), REST API на FastAPI (async) и PostgreSQL. Отдельный SPA-админ на том же стеке — склад с распределением по точкам, загрузки товара, бухгалтерия, статусы заказов.

Платежи через Робокассу с фискализацией по 54-ФЗ и snapshot-ценами в позициях заказа: изменение прайса не ломает историю продаж. Доставка — СДЭК и Яндекс, вызываются параллельно; фоновые задачи (письма, заявки в СДЭК/Яндекс, уведомления в Telegram) — на Celery + Redis.

Личный кабинет с AI-примеркой: клиент загружает фото и видит себя в товаре (kie.ai · SeedDream), плюс подбор размера по параметрам. Безопасность — audit-log подозрительных событий, rate-limit, CSRF, httpOnly-cookies, CSP.

Результат

Сайт, управление и склад закрыты одним продуктом. PAINKILLER переехал с маркетплейсов на собственную площадку — со своей витриной, данными о клиентах и полной маржой.

Вся инфраструктура — в Docker на одном сервере: nginx, авто-SSL и деплой через GitHub Actions. Один репозиторий, async везде, где можно.

Что внутри

AI-примерка

Клиент загружает фото и видит себя в товаре — kie.ai · SeedDream. Плюс подбор размера по параметрам.

54-ФЗ и snapshot-цены

Фискальные чеки через Робокассу. Цена фиксируется в позиции заказа — история продаж не плывёт.

Склад с распределением

Остатки по точкам, резерв при оплате, загрузки товара — всё из админки.

Доставка СДЭК + Яндекс

ПВЗ и курьер по РФ, экспресс по Москве, самовывоз. API вызываются параллельно.

Личный кабинет

Заказы, статусы, профиль, история. Клиент остаётся с брендом, а не с маркетплейсом.

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

Audit-log, rate-limit, CSRF, httpOnly-cookies, CSP, капча на регистрации.

Под капотом

Заказ, оплата и доставка — одной транзакцией.

Async-обработка: snapshot цен, резерв на складе, фискальный чек по 54-ФЗ и заявка в СДЭК — параллельно, с уведомлением команды в Telegram.

PYorders.pyFastAPI · async
$ POST /orders → 201 · чек в ОФД · трек СДЭК создан
Архитектура

Три слоя, всё в Docker на одном сервере.

nginxSPA · ReactAdmin SPAFastAPIasync RESTCeleryPostgreSQLsnapshot ценRedis 7кеш · брокерMinIO · S3фото товаров

Стек

Frontend
  • React 18
  • TypeScript
  • Vite 6
  • React Router 7
  • TanStack Query
  • Zustand
  • Tailwind
  • Framer Motion
  • PWA
Backend
  • Python 3.12
  • FastAPI
  • SQLAlchemy 2 · async
  • Alembic
  • Pydantic v2
  • Celery
Данные
  • PostgreSQL 18
  • PgBouncer
  • Redis 7
  • MinIO · S3
Инфраструктура
  • Docker
  • nginx
  • Let's Encrypt
  • GitHub Actions
  • Timeweb Cloud
Платежи
  • Робокасса
  • 54-ФЗ · ОФД
Доставка
  • СДЭК API
  • Яндекс Доставка
  • Самовывоз
AI
  • kie.ai
  • SeedDream 4.5
Безопасность
  • Resend
  • Telegram Bot
  • audit-log
  • rate-limit
  • CSRF · CSP
🥷 Код принят. Хочешь к нам — расшифруй и пришли разгадку на hello@itkiller.pro:
SVRLLVJFQURZLVRPLUJVSUxE