Кейс разработки
TopReels — биржа UGC-креаторов: задания брендов, съёмка видео, модерация, выплаты и встроенное обучение
О проекте
TopReels — платформа группы 1SELLER (ООО «Первый Селлер»), где бренды размещают задания, а креаторы снимают под них видео. Полный цикл: задание → отклик → съёмка → модерация → публикация → выплата. В боевой эксплуатации (topreels.ru): 45 креаторов, более 1080 снятых видео, 19 брендов.
1. Задача
Нужна была собственная площадка для масштабного производства UGC-видео силами внешних креаторов — с прозрачными деньгами и без ручного учёта:
- Двусторонний маркетплейс — кабинеты бренда и креатора, командная работа модераторов на стороне бренда.
- Модерация видео — жизненный цикл от приёмки до оплаты с защитой от двойной обработки.
- Кошелёк и выплаты — баланс креатора, совпадающий с суммой «к оплате» у бренда, выплаты пакетом.
- Грейды и рейтинги — ставка за видео зависит от уровня креатора.
- Онбординг новичков — обучение и проверка перед допуском на площадку.
- API для «фермы телефонов» — машинная выгрузка одобренных видео для публикации.
Готовые биржи фриланса не закрывают связку «задание бренда → проверка видео → грейдовая ставка → пакетная выплата → публикация в соцсетях бренда». Платформа разрабатывалась с нуля.
2. Архитектура решения
Монорепозиторий на pnpm + Turborepo: веб-приложение, отдельный сервер реального времени и общие пакеты. Деплой в Docker.
| Параметр | Значение |
|---|---|
| Frontend / Backend | Next.js 15 (App Router, Server Actions) + React 19 + Tailwind + shadcn/ui + TanStack Query |
| ORM / БД | Drizzle ORM (мигрировано с Prisma) + PostgreSQL (Supabase) |
| Реальное время | Socket.io в отдельном контейнере (чат бренд ↔ креатор) |
| Медиа | MinIO (S3) self-hosted, раздача через nginx с кэшем |
| Авторизация / почта | NextAuth + Resend |
| Инфра | VPS, docker-compose (web / ws / minio), GitHub Actions, миграции inline-SQL |
2.1. Ключевые доменные инварианты
- Жизненный цикл видео:
на проверке → одобрено → оплачено(+ на доработку / отклонено); блокировка под воркера через отдельные поля, а не статусом. - Инвариант кошелька: доступный баланс креатора = сумме вознаграждений со статусом «одобрено» — всегда сходится с «к оплате» в кабинете бренда.
- Грейды по количеству принятых видео (3 уровня), пересчёт ретроактивно; выплаты — единой операцией по пятницам.
2.2. Онбординг и обучение
Новый креатор проходит оферту, затем обязательный курс (просмотр ≥80% + квиз ≥70% + тестовое видео) и аппрув куратора — только после этого площадка открывается. Гейт защищён в двух местах: и в навигации, и в серверных экшенах. Learning Center вынесен в отдельную схему БД, плеер собственный на hls.js с HLS-ладдером качества.
3. Главная инженерная сложность
Самое сложное — деньги и доступ: баланс должен сходиться до рубля при пакетных выплатах, а машинная «ферма телефонов» — забирать видео по API, не мешая ручной модерации.
| Узел | Решение |
|---|---|
| Кошелёк | Леджер транзакций + инвариант «баланс = Σ одобренных», защита от ухода в минус при выплате |
| Параллельная обработка | Блокировка видео под воркера на время (lockedBy / lockedUntil), а не статусом — нет гонок |
| API для фермы | Bearer-токены с правами в JSON, идемпотентные публикации, выдача по публичному ID |
Результат
Производство UGC поставлено на поток: 45 креаторов и свыше 1080 снятых видео прошли через единый конвейер модерации и выплат, без ручного сведения балансов в Excel.
4. Эффект для бизнеса
- Поток контента — масштабное производство видео внешними креаторами под задания брендов.
- Прозрачные деньги — баланс креатора и «к оплате» у бренда всегда совпадают.
- Качество на входе — обязательный онбординг отсекает неподготовленных новичков.
- Автоматизация публикаций — API отдаёт одобренные видео машинному воркеру.
5. Технологический стек — кратко
| Параметр | Значение |
|---|---|
| Frontend / Backend | Next.js 15 + React 19 |
| ORM / БД | Drizzle + PostgreSQL (Supabase) |
| Реальное время | Socket.io |
| Медиа | MinIO (S3) |
| Монорепо | pnpm + Turborepo |
| Инфра | Docker Compose, GitHub Actions |
Кейс подготовлен на основе технической архитектуры платформы TopReels (ООО «Первый Селлер»). Описывается инженерное решение; персональные данные креаторов и брендов не публикуются.