PAINKILLER — магазин и склад в одном
Бренд уличной одежды PAINKILLER продавал через маркетплейсы и терял на комиссиях, обезличенной витрине и чужих правилах. Мы собрали собственную площадку — магазин, склад, бухгалтерию, доставку и AI-примерку в одном продукте — и перевели продажи на свой сайт.
Задача
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.
Три слоя, всё в Docker на одном сервере.
Стек
- React 18
- TypeScript
- Vite 6
- React Router 7
- TanStack Query
- Zustand
- Tailwind
- Framer Motion
- PWA
- 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
- Яндекс Доставка
- Самовывоз
- kie.ai
- SeedDream 4.5
- Resend
- Telegram Bot
- audit-log
- rate-limit
- CSRF · CSP