Техническое задание: AdWall
Легальная рекламная площадка для блогеров и рекламодателей
Версия: 2.1 Дата: 06.04.2026 Клиент: Максим / Александр Формат: Equity-партнёрство (AiDevTeam — технологический партнёр, 15-20%) Подготовил: AiDevTeam
Содержание
Часть I: Продукт
- О проекте
- Целевая аудитория и роли
- Конкурентный анализ
- Функциональные требования
- Пользовательские сценарии
Часть II: Техническая архитектура
- Архитектура системы
- Компоненты системы
- Контент-модерация и безопасность
- Маркировка рекламы и ОРД
- Рекомендательная система
- Монетизация — техническая реализация
- Модель данных
- API-спецификация
Часть III: Реализация
- Стек технологий
- Инфраструктура и деплой
- Нефункциональные требования
- Дизайн и UX
- Стратегия тестирования
- Этапы реализации (MVP → Full)
- Дорожная карта
- Команда проекта
- Риски и митигация
- Открытые вопросы
- Глоссарий
Главное
Ситуация. С 1 сентября 2025 года реклама на Instagram и Facebook полностью запрещена в России. 59% блогеров ушли в Telegram, но легальной централизованной площадки для рекламы не существует. Рынок инфлюенсер-маркетинга — ₽58 млрд в 2024 году (рост 30%+ в год), при этом ~25% рекламы в Telegram размещается без маркировки. Штрафы за отсутствие erid: 187 постановлений за 5 месяцев 2025 года на ₽11.5 млн.
Что решает AdWall.
| # | Результат | Эффект |
|---|---|---|
| 1 | Единая легальная площадка | Блогеры размещают рекламу без юридических рисков, со встроенной маркировкой |
| 2 | Автоматическая маркировка через ОРД | 100% compliance с ФЗ о рекламе — erid, ЕРИР, отчётность |
| 3 | Агрегация аудитории всех блогеров | Крупные рекламодатели покупают рекламные места на площадке с трафиком |
| 4 | Бесплатно для блогеров | Блогеры не платят комиссию — монетизация через продажу рекламных мест |
Суть продукта. AdWall — Pinterest-подобная витрина с вертикальным видео (TikTok-механика). Блогер в своих соцсетях (Telegram, VK, Max) упоминает товар и даёт ссылку на AdWall. На платформе — легальное размещение: название, описание, промо, ссылка на покупку, автоматическая маркировка erid. У каждого блогера — стилизованная страница-портфолио. Площадка зарабатывает на продаже рекламных мест в интерфейсе крупным рекламодателям (баннеры, промо-позиции, подборки по тегам).
Стратегический партнёр. Минцифры рассматривается как стратегический партнёр — для легитимизации продукта и защиты от блокировки. При этом AdWall позиционируется как частная площадка — не связанная с государством напрямую. Это критично для доверия блогеров и рекламодателей: пользователи охотнее идут на частную платформу, чем на государственную.
1. О проекте
1.1 Концепция
AdWall — легальная рекламная платформа, объединяющая три модели:
- Pinterest — визуальный каталог с карточками товаров и услуг, организация по коллекциям и категориям
- TikTok — вертикальное видео как основной формат контента, свайп-лента для бесконечного скролла
- Telegram — прямая коммуникация между блогером и аудиторией, подписки, уведомления
Блогер создаёт рекламный контент (видео-обзор, фото с описанием, текстовую рекомендацию) и публикует его на платформе. В своих соцсетях блогер размещает ссылку: "Подробнее — на AdWallе". Пользователь переходит, смотрит контент, открывает для себя другие товары через рекомендации и хэштеги.
1.2 Бизнес-модель
Ключевой принцип: блогеры не платят. Монетизация — через продажу рекламных мест крупным рекламодателям.
| Источник дохода | Модель | Описание |
|---|---|---|
| Рекламные места в интерфейсе | CPM / фиксированная цена | Баннеры, промо-позиции в ленте, брендированные подборки |
| Промо-размещения по тегам | Аукцион / фикс | Приоритетное отображение по поисковым тегам (#обзор, #красота) |
| Брендированные страницы | Подписка | Рекламодатель ведёт свою страницу с совместными публикациями с блогерами |
| Партнёрские программы | CPA/CPC | Оплата за переходы/покупки через платформу |
| Подписка Pro (блогеры) | Ежемесячная | Расширенная аналитика, продвинутый профиль, приоритетная модерация |
Почему не комиссия с блогеров: блогеры и так несут множество расходов (налоги, 3% сбор, оплата контента). Комиссия их отпугнёт. Бесплатная площадка привлекает блогеров → трафик → рекламодатели покупают размещения.
1.3 Ключевые принципы
- Легальность — вся реклама маркируется через ОРД, compliance с ФЗ о рекламе
- Безопасность — AI-модерация + ручная модерация, фильтрация запрещённого контента
- Стиль — дизайн на уровне лучших мировых продуктов, визуальное впечатление в приоритете
- Mobile-first — основной канал потребления — мобильные устройства
- Прозрачность — открытая статистика, понятные комиссии, честные правила
2. Целевая аудитория и роли
2.1 Роли в системе
| Роль | Описание | Ключевые потребности |
|---|---|---|
| Блогер | Создатель контента, рекламирует товары/услуги | Легальное размещение, монетизация, аналитика |
| Рекламодатель | Бренд/компания, размещает рекламу через блогеров | Доступ к аудитории, подбор блогеров, ROI-аналитика |
| Пользователь | Потребитель контента, потенциальный покупатель | Интересный контент, удобный поиск, честные рекомендации |
| Модератор | Сотрудник платформы | Инструменты модерации, очередь задач, AI-помощник |
| Админ | Управление платформой | Дашборды, настройки, финансы, отчётность |
2.2 Портрет аудитории
Блогеры:
- 18–45 лет, активные в соцсетях
- Аудитория от 1K до 10M+ подписчиков
- Ниши: lifestyle, beauty, tech, food, travel, fitness, fashion
- Боль: нет удобной централизованной площадки для легальной рекламы, страх штрафов за немаркированную рекламу
Рекламодатели:
- Онлайн-магазины, D2C-бренды, маркетплейс-селлеры
- Бюджет на influencer-маркетинг от 50K до 5M+ руб/мес
- Боль: сложно найти релевантных блогеров, непрозрачная отчётность, юридические риски
Пользователи:
- 16–55 лет, активные онлайн-покупатели
- Доверяют рекомендациям блогеров больше, чем прямой рекламе
- Привыкли к TikTok/Instagram/Pinterest как к способу открывать новые товары
3. Конкурентный анализ
3.1 Прямые конкуренты
| Параметр | Яндекс.Ритм | AdWall |
|---|---|---|
| Фокус | Стрит-ритейл, бренды | Блогеры, онлайн-продавцы |
| Масштаб | 4000+ бизнесов, 56М аудитория | — (новый продукт) |
| Формат | Вертикальное видео | Видео + фото + текст |
| Блогеры | Ограниченно (с авг 2025) | Ядро платформы |
| Монетизация блогеров | Нет | Бесплатно для блогеров |
| Мессенджер | Нет | Чат блогер ↔ рекламодатель |
| Маркировка рекламы | Через Яндекс-экосистему | Автоматическая через ОРД (multi-ORD) |
| UX | Стандартный Яндекс | Премиальный, стильный |
Почему Ритм не закрывает рынок: нет прямой монетизации для блогеров, нет мессенджера, нет социальных функций, изначально строился для брендов, а не для создателей контента. 56М аудитории, но CTR всего 2.4%.
3.2 Косвенные конкуренты
- VK Клипы / VK Видео — 82.8М MAU, монетизация авторов (VK AdBlogger: 1.1 млрд руб в 2025). Но это соцсеть, не рекламная витрина
- Telegram — ₽38 млрд рекламы в 2025, но ~25% без маркировки. Нет централизованной рекламной площадки
- Instagram — запрещена с 01.09.2025 для рекламы. 59% блогеров ушли
- Яндекс.Дзен — MAU упала с 77М до 66М, видеомонетизация удалена в апреле 2025
3.3 Международный референс: LTK (LikeToKnowIt)
LTK — американская платформа, являющаяся прямым аналогом AdWall. Ключевые метрики:
| Параметр | Значение |
|---|---|
| Годовые продажи через платформу | ₽430+ млрд ($5 млрд+) |
| Количество блогеров | 350 000 |
| Комиссия блогерам | 16% (диапазон 10-25%) |
| Модель | Блогер → ссылка → LTK → товар → покупка |
Ключевая UX-фича LTK: пользователь наводит палец на фото → видит цену и ссылку на каждый объект (платье, сумка, обувь). Мгновенное решение о покупке без перехода на другую страницу.
LTK заблокирован в App Store в РФ. Это создаёт дополнительную возможность — российские блогеры не имеют доступа к этому инструменту.
3.4 Конкурентные преимущества AdWall
- Уникальная площадка "блогер → легальная реклама" — блогер ведёт из соцсетей на AdWall, где всё легально
- Бесплатно для блогеров — нет барьера входа, комиссий, сборов
- Автоматическая маркировка — erid "из коробки", блогер не думает о compliance
- Стратегическое партнёрство — легитимизация на государственном уровне, при этом платформа воспринимается как частная
- Пост-Instagram рынок — идеальный тайминг: блогерам некуда идти
4. Функциональные требования
4.1 Модуль: Контент-лента
Основной экран приложения — бесконечная лента контента.
| # | Функция | Описание | Приоритет |
|---|---|---|---|
| Ф1.1 | Свайп-лента | Вертикальный скролл видео (TikTok-стиль) | MVP |
| Ф1.2 | Сетка-каталог | Pinterest-сетка с карточками (фото + цена) | MVP |
| Ф1.3 | Переключение режимов | Табы: "Лента" / "Каталог" / "Подписки" | MVP |
| Ф1.4 | Pull-to-refresh | Обновление контента свайпом вниз | MVP |
| Ф1.5 | Категории | Фильтрация по нишам (beauty, tech, food и т.д.) | MVP |
| Ф1.6 | Хэштеги | Поиск и навигация по тегам (#обзор, #красота) | MVP |
| Ф1.7 | Персональные рекомендации | ML-лента на основе интересов пользователя | v2 |
| Ф1.8 | Геолокация | Контент с привязкой к городу/региону | v2 |
4.2 Модуль: Профиль блогера
| # | Функция | Описание | Приоритет |
|---|---|---|---|
| Ф2.1 | Портфолио | Сетка опубликованных материалов | MVP |
| Ф2.2 | Статистика | Просмотры, подписчики, вовлечённость | MVP |
| Ф2.3 | Категории контента | Организация по коллекциям/нишам | MVP |
| Ф2.4 | Верификация | Синяя галочка для подтверждённых блогеров | MVP |
| Ф2.5 | Рейтинг | Рейтинг на основе качества контента и отзывов | v2 |
| Ф2.6 | Медиа-кит | Автоматически генерируемый медиа-кит (PDF) | v2 |
| Ф2.7 | Связанные соцсети | Ссылки на Telegram, VK, YouTube и т.д. | MVP |
| Ф2.8 | Подписка на блогера | Push-уведомления о новых публикациях | MVP |
4.3 Модуль: Создание контента
| # | Функция | Описание | Приоритет |
|---|---|---|---|
| Ф3.1 | Загрузка видео | Вертикальное видео до 3 минут, сжатие на сервере | MVP |
| Ф3.2 | Загрузка фото | До 10 фото с описанием, карусель | MVP |
| Ф3.3 | Текстовый пост | Рекомендация товара/услуги в текстовом формате | MVP |
| Ф3.4 | Привязка товара | Карточка товара: название, цена, ссылка на покупку | MVP |
| Ф3.5 | Хэштеги и категории | Теги для навигации и поиска | MVP |
| Ф3.6 | Черновики | Сохранение незаконченных публикаций | MVP |
| Ф3.7 | Встроенный видеоредактор | Обрезка, фильтры, текст поверх видео | v2 |
| Ф3.8 | Шаблоны | Готовые шаблоны для рекламных постов | v2 |
| Ф3.9 | Auto-ERID | При публикации: запрос erid через ОРД → наложение erid прямо на изображение/видео + добавление в текст поста. Блогер не делает ничего вручную | MVP |
| Ф3.10 | Превью перед публикацией | Предпросмотр как видит пользователь (с маркировкой) | MVP |
| Ф3.11 | Интерактивные метки на фото (LTK-стиль) | Нажатие на объект в фото → всплывает цена и ссылка на покупку | v2 |
4.4 Модуль: Карточка товара/услуги
| # | Функция | Описание | Приоритет |
|---|---|---|---|
| Ф4.1 | Информация о товаре | Название, описание, цена, фото | MVP |
| Ф4.2 | Ссылка на покупку | Переход на сайт продавца / маркетплейс | MVP |
| Ф4.3 | Промокод | Персональный промокод блогера | MVP |
| Ф4.4 | Сравнение цен | Цена в разных магазинах (парсинг) | v3 |
| Ф4.5 | Отзывы пользователей | Отзывы людей, купивших через платформу | v2 |
| Ф4.6 | "Хочу!" кнопка | Сохранение в вишлист пользователя | MVP |
| Ф4.7 | Статистика переходов | Счётчик кликов для блогера | MVP |
4.5 Модуль: Рекламный кабинет (для покупателей рекламных мест)
| # | Функция | Описание | Приоритет |
|---|---|---|---|
| Ф5.1 | Создание рекламной кампании | Бюджет, период, тип инвентаря (баннер, промо, тег) | MVP |
| Ф5.2 | Управление креативами | Загрузка баннеров, настройка текстов, превью | MVP |
| Ф5.3 | Таргетинг | По категориям, географии, аудитории блогеров | MVP |
| Ф5.4 | Аналитика кампании | Показы, CTR, переходы, ROI | MVP |
| Ф5.5 | Оплата и биллинг | Пополнение баланса (безнал для юрлиц), акты | MVP |
| Ф5.6 | Брендированная страница | Своя страница рекламодателя с совместными публикациями | v2 |
| Ф5.7 | Совместные публикации | Спонсорский контент блогер + бренд | v2 |
| Ф5.8 | Автоматический подбор блогеров | AI-матчинг под задачу рекламодателя | v3 |
4.6 Модуль: Поиск и навигация
| # | Функция | Описание | Приоритет |
|---|---|---|---|
| Ф6.1 | Полнотекстовый поиск | По названиям, описаниям, хэштегам | MVP |
| Ф6.2 | Поиск по категориям | Дерево категорий (мода → платья → вечерние) | MVP |
| Ф6.3 | Поиск блогеров | По нише, аудитории, городу | MVP |
| Ф6.4 | Автоподсказки | Выпадающие подсказки при вводе | MVP |
| Ф6.5 | Трендовые запросы | Популярные поисковые запросы за день/неделю | v2 |
| Ф6.6 | Голосовой поиск | Поиск голосом (интеграция с ASR) | v3 |
4.7 Модуль: Уведомления и подписки
| # | Функция | Описание | Приоритет |
|---|---|---|---|
| Ф7.1 | Push-уведомления | Новый контент от подписок, статус модерации | MVP |
| Ф7.2 | Email-дайджест | Еженедельная подборка рекомендаций | v2 |
| Ф7.3 | Уведомления в приложении | Колокольчик с историей событий | MVP |
| Ф7.4 | Подписка на хэштег | Уведомления о новых публикациях по тегу | v2 |
4.8 Модуль: Мессенджер
| # | Функция | Описание | Приоритет |
|---|---|---|---|
| Ф8.1 | Чат блогер ↔ рекламодатель | Обсуждение условий сотрудничества | MVP |
| Ф8.2 | Шаблоны сообщений | Быстрые ответы на типовые запросы | v2 |
| Ф8.3 | Обмен файлами | Брифы, ТЗ, примеры контента | MVP |
| Ф8.4 | Интеграция со сделкой | Привязка чата к рекламной кампании | v2 |
4.9 Модуль: Аналитика
| # | Функция | Описание | Приоритет |
|---|---|---|---|
| Ф9.1 | Дашборд блогера | Просмотры, переходы, доход, динамика | MVP |
| Ф9.2 | Дашборд рекламодателя | Охват, CPC, CPA, ROI по кампаниям | MVP |
| Ф9.3 | Дашборд админа | GMV, активные пользователи, модерация | MVP |
| Ф9.4 | Экспорт отчётов | CSV, PDF для бухгалтерии | v2 |
| Ф9.5 | Воронка конверсий | Просмотр → клик → переход → покупка | v2 |
4.10 Модуль: Админ-панель
| # | Функция | Описание | Приоритет |
|---|---|---|---|
| Ф10.1 | Управление пользователями | Блокировка, верификация, роли | MVP |
| Ф10.2 | Очередь модерации | Контент на проверке, AI-рекомендации | MVP |
| Ф10.3 | Финансы | Транзакции, комиссии, выплаты | MVP |
| Ф10.4 | Настройки платформы | Категории, правила, лимиты | MVP |
| Ф10.5 | Отчётность для ОРД | Выгрузка данных о маркированной рекламе | MVP |
| Ф10.6 | Мониторинг | Здоровье системы, ошибки, очереди | MVP |
5. Пользовательские сценарии
5.1 Блогер публикует рекламный контент
Как блогер, я хочу опубликовать видео-обзор товара, чтобы заработать на рекламе.
| Шаг | Действие | Ожидаемый результат |
|---|---|---|
| 1 | Блогер нажимает "+" в приложении | Открывается экран создания контента |
| 2 | Выбирает "Видео" и записывает/загружает ролик | Видео загружается, отображается превью |
| 3 | Добавляет описание, хэштеги, категорию | Поля заполнены, автоподсказки по тегам |
| 4 | Привязывает карточку товара (название, цена, ссылка) | Карточка прикреплена к публикации |
| 5 | Выбирает рекламодателя из списка или указывает "самореклама" | Определён плательщик рекламы |
| 6 | Нажимает "Опубликовать" | Система автоматически добавляет маркировку "Реклама", контент отправляется на модерацию |
| 7 | Модерация (AI + ручная) одобряет контент | Push: "Публикация одобрена", контент появляется в ленте |
| 8 | Блогер делится ссылкой в своих соцсетях | Пользователи переходят на платформу |
5.2 Пользователь открывает товар через контент
Как пользователь, я хочу найти интересный товар через рекомендацию блогера.
| Шаг | Действие | Ожидаемый результат |
|---|---|---|
| 1 | Пользователь видит ссылку на AdWall в Telegram блогера | Переходит по ссылке |
| 2 | Открывается контент блогера (видео/фото) | Полноэкранный просмотр с карточкой товара внизу |
| 3 | Пользователь свайпит вверх | Подробная информация о товаре, цена, ссылка на покупку |
| 4 | Нажимает "Купить" | Переход на сайт продавца/маркетплейс |
| 5 | Продолжает скроллить ленту | Алгоритм показывает похожие товары от других блогеров |
| 6 | Нажимает "Хочу!" на понравившемся товаре | Товар сохраняется в вишлист |
| 7 | Подписывается на блогера | Уведомления о новых публикациях |
5.3 Рекламодатель запускает кампанию
Как рекламодатель, я хочу найти подходящих блогеров и запустить рекламную кампанию.
| Шаг | Действие | Ожидаемый результат |
|---|---|---|
| 1 | Регистрируется как рекламодатель | Доступ к рекламному кабинету |
| 2 | Создаёт кампанию: товар, бюджет, целевая аудитория | Кампания в статусе "Черновик" |
| 3 | Подбирает блогеров: фильтр по нише, аудитории, рейтингу | Список подходящих блогеров с метриками |
| 4 | Отправляет предложение выбранным блогерам | Блогеры получают уведомление |
| 5 | Блогер принимает, создаёт контент | Контент на одобрении у рекламодателя |
| 6 | Рекламодатель одобряет контент | Контент публикуется, бюджет списывается |
| 7 | Смотрит аналитику: охват, переходы, конверсии | Дашборд обновляется в реальном времени |
5.4 Модератор проверяет контент
Как модератор, я хочу быстро проверить контент и предотвратить нарушения.
| Шаг | Действие | Ожидаемый результат |
|---|---|---|
| 1 | Открывает очередь модерации | Список контента, отсортированный по приоритету (AI-флаги первыми) |
| 2 | AI уже проверил контент и отметил потенциальные нарушения | Красные/жёлтые метки с описанием проблемы |
| 3 | Просматривает контент, читает AI-заключение | Контекст нарушения понятен |
| 4 | Одобряет или отклоняет с причиной | Автору приходит уведомление с объяснением |
| 5 | При блокировке — контент снимается, аккаунт получает предупреждение | Система ведёт счётчик нарушений |
5.5 Администратор просматривает отчётность
Как администратор, я хочу видеть состояние платформы и финансов.
| Шаг | Действие | Ожидаемый результат |
|---|---|---|
| 1 | Открывает админ-дашборд | Ключевые метрики: DAU, GMV, контент/день |
| 2 | Проверяет финансы | Баланс, транзакции, комиссии, выплаты |
| 3 | Генерирует отчёт для ОРД | Выгрузка маркированных рекламных материалов |
| 4 | Просматривает очередь модерации | Количество контента в очереди, среднее время проверки |
6. Архитектура системы
6.1 Общая схема
flowchart TB
subgraph Clients["Клиенты"]
iOS["iOS-приложение"]
Android["Android-приложение"]
Web["Веб-приложение"]
end
subgraph Gateway["API Gateway"]
APIGW["Nginx / Traefik"]
CDN["CDN (видео/фото)"]
end
subgraph Core["Ядро платформы"]
API["API Server"]
Auth["Auth Service"]
Content["Content Service"]
Feed["Feed Service"]
Search["Search Engine"]
end
subgraph Business["Бизнес-сервисы"]
Ads["Ads Service"]
Billing["Billing Service"]
Chat["Chat Service"]
Notify["Notification Service"]
end
subgraph AI["AI / ML"]
Mod["Модерация"]
Reco["Рекомендации"]
ORD["ОРД-маркировка"]
end
subgraph Data["Хранилище"]
DB["PostgreSQL"]
Cache["Redis"]
S3["Object Storage"]
ES["Полнотекстовый поиск"]
Queue["Очередь задач"]
end
Clients --> Gateway
Gateway --> Core
Core --> Business
Core --> AI
Core --> Data
Business --> Data
AI --> Data
style Clients fill:#172554,stroke:#3b82f6
style Gateway fill:#3b0764,stroke:#a855f7
style Core fill:#14532d,stroke:#22c55e
style Business fill:#78350f,stroke:#f59e0b
style AI fill:#450a0a,stroke:#ef4444
style Data fill:#172554,stroke:#3b82f6
6.2 Принципы архитектуры
| Принцип | Описание |
|---|---|
| Модульный монолит → микросервисы | Стартуем как модульный монолит для скорости, выделяем сервисы по мере роста |
| Mobile-first API | API оптимизирован под мобильные клиенты (пагинация, сжатие, offline) |
| Event-driven | Асинхронная обработка через очередь (модерация, конвертация видео, уведомления) |
| CDN для медиа | Видео и фото раздаются через CDN, бэкенд не участвует в раздаче |
| Горизонтальное масштабирование | Stateless API-серверы за балансировщиком |
6.3 Поток данных: публикация контента
flowchart TB
Upload["Блогер загружает видео"]
Validate["Валидация формата и размера"]
S3["Сохранение в Object Storage"]
Queue["Очередь обработки"]
Transcode["Транскодирование (240p, 480p, 720p, 1080p)"]
Thumbnail["Генерация превью"]
AICheck["AI-модерация (NSFW, текст, бренды)"]
ORDMark["Маркировка ОРД"]
ModQueue["Очередь ручной модерации"]
Publish["Публикация в ленту"]
Index["Индексация в поиске"]
Notify["Уведомление подписчикам"]
Upload --> Validate --> S3 --> Queue
Queue --> Transcode
Queue --> Thumbnail
Queue --> AICheck
Transcode --> ModQueue
AICheck --> ModQueue
Thumbnail --> ModQueue
ModQueue --> ORDMark --> Publish
Publish --> Index
Publish --> Notify
style Upload fill:#172554,stroke:#3b82f6
style AICheck fill:#450a0a,stroke:#ef4444
style ORDMark fill:#78350f,stroke:#f59e0b
style Publish fill:#14532d,stroke:#22c55e
7. Компоненты системы
7.1 Content Service — управление контентом
Назначение: CRUD операции над публикациями, управление медиафайлами, организация по категориям и хэштегам.
Ключевые функции:
- Загрузка и валидация медиа (видео до 3 мин / 500 MB, фото до 10 шт / 50 MB)
- Транскодирование видео в адаптивные разрешения (HLS)
- Генерация превью (thumbnail) из первого кадра или выбранного фрейма
- Привязка карточек товаров к публикациям
- Управление черновиками и статусами публикации
Статусы публикации:
draft → pending_moderation → approved → published → archived
→ rejected (с причиной)
7.2 Feed Service — формирование ленты
Назначение: Сборка персонализированной ленты контента для каждого пользователя.
Алгоритм формирования ленты (MVP):
- Подписки — контент от блогеров, на которых подписан пользователь (40% ленты)
- Категории — контент из выбранных пользователем категорий (30%)
- Тренды — самый популярный контент за последние 24 часа (20%)
- Промо — рекламные размещения с пометкой (10%)
Алгоритм формирования ленты (v2 — ML):
- Коллаборативная фильтрация (похожие пользователи смотрели X)
- Content-based рекомендации (embeddings контента)
- Учёт поведения: время просмотра, лайки, переходы, "Хочу!"
7.3 Auth Service — авторизация
Назначение: Регистрация, авторизация, управление сессиями и ролями.
Методы авторизации:
- Телефон + SMS-код (основной для РФ)
- Email + пароль
- OAuth: VK, Яндекс, Telegram
- Apple Sign In / Google Sign In (для мобильных)
Роли и права:
| Роль | Публикация | Рекламный кабинет | Модерация | Админка |
|---|---|---|---|---|
| Пользователь | -- | -- | -- | -- |
| Блогер | + | -- | -- | -- |
| Рекламодатель | -- | + | -- | -- |
| Модератор | -- | -- | + | -- |
| Админ | + | + | + | + |
7.4 Ads Service — рекламные кампании
Назначение: Управление рекламными кампаниями, матчинг блогеров с рекламодателями, биллинг.
Жизненный цикл кампании:
created → active → matching → in_progress → review → completed → settled
Модели оплаты:
| Модель | Описание | Когда используется |
|---|---|---|
| CPP (Cost Per Post) | Фиксированная оплата за публикацию | Основная модель |
| CPC (Cost Per Click) | Оплата за переход на сайт рекламодателя | Для performance-кампаний |
| CPM (Cost Per Mille) | Оплата за 1000 показов | Для охватных кампаний |
| Revenue Share | % от продаж через промокод/ссылку | Для партнёрских программ |
7.5 Billing Service — финансы и расчёты
Назначение: Управление балансами, транзакциями, комиссиями и выплатами.
Финансовый поток:
Рекламодатель → пополнение баланса → заморозка суммы при запуске кампании
→ списание при выполнении условий → комиссия платформы (%)
→ начисление блогеру → вывод средств блогеру
Комиссии платформы (предварительно):
| Операция | Комиссия |
|---|---|
| Размещение рекламного контента | 15-25% |
| Промо-размещения (топ ленты) | Фиксированная цена |
| Вывод средств блогером | 0% (до лимита) / 1% |
| Транзакции CPC/CPA | 10-20% |
7.6 Chat Service — мессенджер
Назначение: Коммуникация между блогерами и рекламодателями в рамках сделок.
Технические требования:
- WebSocket для реального времени
- Хранение истории сообщений
- Обмен файлами (брифы, ТЗ, примеры)
- Привязка чата к рекламной кампании
- Push-уведомления о новых сообщениях
7.7 Notification Service — уведомления
Назначение: Отправка push-уведомлений, email и in-app уведомлений.
Типы уведомлений:
| Событие | Push | In-app | |
|---|---|---|---|
| Новая публикация от подписки | + | -- | + |
| Контент одобрен/отклонён | + | + | + |
| Новое сообщение в чате | + | -- | + |
| Предложение от рекламодателя | + | + | + |
| Выплата зачислена | + | + | + |
| Еженедельный дайджест | -- | + | -- |
8. Контент-модерация и безопасность
Этот раздел критически важен для презентации Минцифры.
8.1 Трёхуровневая система модерации
flowchart TB
Upload["Загрузка контента"]
subgraph L1["Уровень 1: Автоматическая"]
NSFW["NSFW-детектор"]
Text["Анализ текста (мат, экстремизм)"]
Brand["Детектор товарных знаков"]
Dup["Детектор дубликатов"]
end
subgraph L2["Уровень 2: AI-ассистент"]
LLM["LLM-анализ контекста"]
Score["Scoring: 0-100"]
end
subgraph L3["Уровень 3: Ручная"]
Human["Модератор"]
Appeal["Апелляция"]
end
Auto["Авто-одобрение (score > 90)"]
Reject["Авто-отклонение (score < 20)"]
Review["На проверку (20-90)"]
Upload --> L1
L1 --> L2
L2 --> Auto
L2 --> Reject
L2 --> Review --> L3
style L1 fill:#450a0a,stroke:#ef4444
style L2 fill:#78350f,stroke:#f59e0b
style L3 fill:#14532d,stroke:#22c55e
8.2 Категории запрещённого контента
| Категория | Детекция | Действие |
|---|---|---|
| Порнография / NSFW | Falconsai/nsfw_image_detection (open-source CV) | Мгновенная блокировка |
| Токсичный текст | rubert-tiny-toxicity (ROC AUC 0.9937 для русского) | Фильтрация + предупреждение |
| Наркотики | Текст + CV + LLM | Мгновенная блокировка |
| Экстремизм, терроризм | Текст + LLM + база Минюста | Мгновенная блокировка + отчёт (обязательно по закону) |
| Мошенничество | LLM-анализ + поведенческие паттерны | Блокировка + предупреждение |
| Нарушение авторских прав | pHash fingerprinting + жалобы | Снятие + уведомление |
| Контент с запрещённых площадок | Проверка ссылок на заблокированные домены | Блокировка ссылки |
Стоимость модерации (бенчмарки): AI — ~₽0.1-1 за текст, ~₽1-5 за изображение. Ручная модерация — ₽30-60К/мес за модератора. При 10K DAU (~50K единиц контента/день): 85-95% автоматически, 1-2 модератора для уровней 2-3.
8.3 Политика безопасности
- Верификация блогеров — паспорт или ИНН для подтверждения личности
- Верификация рекламодателей — ИНН + выписка ЕГРЮЛ/ЕГРИП
- Rate limiting — защита от спама и ботов
- Жалобы пользователей — кнопка "Пожаловаться" на каждой публикации
- Система штрафов — 3 предупреждения → временная блокировка → бан
- Прозрачность — публичный отчёт о модерации (кол-во проверок, блокировок, апелляций)
8.4 Данные для Минцифры
Платформа предоставляет регулятору:
- API для получения статистики модерации
- Ежемесячные отчёты о заблокированном контенте
- Доступ к системе жалоб
- Инструменты экстренной блокировки по запросу регулятора
9. Маркировка рекламы и ОРД
9.1 Требования ФЗ о рекламе
С 1 сентября 2022 года вся интернет-реклама в РФ подлежит маркировке:
| Требование | Реализация в AdWall |
|---|---|
| Пометка "Реклама" | Автоматически добавляется к каждой публикации |
| Указание рекламодателя | ИНН рекламодателя в карточке |
| Токен рекламного креатива | Генерируется через API ОРД |
| Отчётность в ЕРИР | Автоматическая выгрузка через ОРД |
9.2 Архитектура ОРД-интеграции: ORD Gateway
Реестр ОРД меняется (8 операторов на 2026 год, последний добавлен в декабре 2025), API версии обновляются, тарифы переходят из беты в платный режим. Поэтому архитектурно закладываем адаптерный слой (ORD Gateway) — единый интерфейс для работы с любым ОРД.
flowchart TB
Create["Блогер создаёт публикацию"]
Meta["Сбор метаданных"]
GW["ORD Gateway (адаптерный слой)"]
subgraph ORDs["Операторы рекламных данных"]
Y["Яндекс ОРД"]
VK["VK ОРД"]
Other["Другие ОРД"]
end
Token["erid получен"]
Mark["Маркировка в UI"]
Publish["Публикация"]
Report["Ежемесячная отчётность"]
Create --> Meta --> GW
GW --> ORDs
ORDs --> Token --> Mark --> Publish
Publish --> Report
style GW fill:#78350f,stroke:#f59e0b
style ORDs fill:#172554,stroke:#3b82f6
style Publish fill:#14532d,stroke:#22c55e
9.3 Выбор ОРД
| ОРД | Тарифы | Sandbox | API | Рекомендация |
|---|---|---|---|---|
| Яндекс ОРД | Бесплатно (тарифы пересматриваются с 02.2026) | Есть | REST, OAuth2, Swagger | Старт |
| VK ОРД | Бесплатно | Демо-кабинет | REST | Резервный |
| МедиаСкаут (МТС) | 1% от бюджета, мин ₽1000/мес | Нет | REST | На перспективу |
| Озон ОРД | Мин ₽5000/мес | Есть | REST | На перспективу |
Стратегия: Старт с Яндекс ОРД (лучшие доки, sandbox, бесплатно). VK ОРД — резервный. ORD Gateway позволяет подключать новые ОРД без переписывания логики.
9.4 Что маркируется автоматически
- Каждая публикация с привязкой к товару/услуге → автоматический запрос erid
- erid отображается: поверх видео, в подписи поста, как GET-параметр в ссылках
- Пометка "Реклама" + ИНН рекламодателя — в каждой карточке
- Ежемесячная отчётность: статистика показов, суммы, закрывающие акты → автоматически в ЕРИР через ОРД
- Блогер не взаимодействует с ОРД напрямую — всё встроено в UX публикации
10. Рекомендательная система
10.1 Фаза 0 (до 500 пользователей): правила и ручная курация
Правила дают 50-70% ценности ML-рекомендаций и являются правильной стартовой точкой.
| Сигнал | Вес | Описание |
|---|---|---|
| Категории пользователя | 30% | Выбранные при регистрации интересы |
| Подписки | 25% | Контент от подписанных блогеров |
| Популярность | 20% | Просмотры, лайки, "Хочу!" за 24ч |
| Свежесть | 15% | Новый контент приоритетнее |
| Промо (рекламные места) | 10% | Оплаченные размещения рекламодателей (с пометкой erid) |
10.2 Фаза 1 (500-5000 пользователей): LightFM
- LightFM — гибридная модель, сочетает content-based (категории, теги, embeddings изображений) и collaborative filtering
- Хорошо работает при cold-start (мало данных о пользователях)
- Индивидуальная персонализация начинает работать при 1000+ пользователей с 5+ взаимодействиями
10.3 Фаза 2 (5000+ пользователей): Two-tower + CatBoost
- Two-tower модель (user tower + item tower) — state-of-the-art для Pinterest, TikTok, YouTube
- Item embeddings вычисляются offline, user embeddings — в реальном времени
- CatBoost для ранжирования — нативная работа с категориальными фичами (используется VK Discovery)
- FAISS для approximate nearest neighbor search
10.4 Рекламный слой в рекомендациях
Критически важно: как только алгоритм "продвигает" рекламный контент (boost, промо-позиции) — это автоматически запускает контур ОРД/ЕРИР. Рекламный инвентарь строго отделён от органической ленты и всегда маркирован erid.
10.5 Метрики качества
| Метрика | Цель | Описание |
|---|---|---|
| CTR ленты | > 5% | Доля публикаций, на которые кликнули |
| Время просмотра | > 30 сек | Среднее время на публикацию |
| Scroll depth | > 10 | Среднее число карточек за сессию |
| Conversion rate | > 1% | Доля переходов на сайт продавца |
11. Монетизация — техническая реализация
11.1 Модель: продажа рекламных мест (медийная модель)
Блогеры используют платформу бесплатно. Доход платформы — от продажи рекламных размещений крупным рекламодателям (бренды, маркетплейсы, банки, телеком).
flowchart TB
subgraph Advertisers["Рекламодатели"]
Brand["Бренды (Сбербанк, МТС)"]
Market["Маркетплейсы"]
Agency["Рекламные агентства"]
end
subgraph Platform["Платформа"]
AdBalance["Баланс рекламодателя"]
AdEngine["Рекламный движок"]
Analytics["Аналитика показов"]
end
subgraph Inventory["Рекламный инвентарь"]
Banner["Баннеры в ленте"]
Promo["Промо-позиции"]
Tags["Подборки по тегам"]
BrandPage["Брендированные страницы"]
end
Advertisers --> AdBalance --> AdEngine
AdEngine --> Inventory
Inventory --> Analytics
style Advertisers fill:#14532d,stroke:#22c55e
style Platform fill:#78350f,stroke:#f59e0b
style Inventory fill:#172554,stroke:#3b82f6
11.2 Типы рекламного инвентаря
| Тип | Описание | Модель оплаты |
|---|---|---|
| Баннеры в ленте | Нативные рекламные карточки между контентом блогеров | CPM (за 1000 показов) |
| Промо-позиции | Приоритетное размещение в топе ленты/категории | Фиксированная цена / день |
| Тегированные подборки | Брендированная подборка по хэштегу (#красота от бренда X) | Фикс / неделя |
| Брендированная страница | Полноценная страница рекламодателя с совместными публикациями с блогерами | Подписка / месяц |
| Нативные интеграции | Совместные публикации блогер + бренд (отмечены как спонсорские) | CPC / CPM |
11.3 Финансовый поток
- Рекламодатель (юрлицо) пополняет баланс по безналичному расчёту
- Создаёт рекламную кампанию: выбирает тип инвентаря, бюджет, период
- Рекламный движок показывает размещения целевой аудитории
- Списание по факту показов/кликов или по фиксированному графику
- Аналитика: охват, CTR, переходы — в рекламном кабинете
11.4 Платёжная инфраструктура
| Провайдер | Для чего | Комиссия |
|---|---|---|
| ЮKassa (эскроу "Безопасная сделка") | Приём платежей от рекламодателей, hold до 180 дней | 3.5% (карты) |
| Т-Касса | Альтернативный приём, СБП | 2.19-2.69% (карты), 0.4-0.7% (СБП) |
| Безналичный расчёт | Для крупных рекламодателей (юрлица) | 0% (банковский перевод) |
Важно: ЮKassa прекратила обслуживание самозанятых с 29.12.2025. Если в будущем появятся выплаты блогерам — использовать Рокет Ворк или WinWork для mass payouts.
11.5 Юридическая структура
| Параметр | Решение |
|---|---|
| Юрлицо | ООО на УСН "Доходы" (6%) |
| Роль в рекламной цепочке | Рекламораспространитель (площадка) |
| 3% рекламный сбор | Платит площадка с дохода от распространения рекламы |
| ФЗ-152 | Хранение ПДн строго в РФ, регистрация как оператор ПДн |
| Блогеры | Не платят комиссию, самостоятельно платят свои налоги и 3% сбор со своего рекламного дохода |
12. Модель данных
12.1 Основные сущности
flowchart TB
subgraph Users["Пользователи"]
User["User"]
Blogger["BloggerProfile"]
Advertiser["AdvertiserProfile"]
end
subgraph Content["Контент"]
Post["Post"]
Media["Media"]
Product["ProductCard"]
Tag["Tag"]
end
subgraph Ads["Реклама"]
Campaign["Campaign"]
Deal["Deal"]
Transaction["Transaction"]
end
subgraph Social["Социальное"]
Follow["Follow"]
Wishlist["Wishlist"]
Message["Message"]
end
User --> Blogger
User --> Advertiser
Blogger --> Post
Post --> Media
Post --> Product
Post --> Tag
Advertiser --> Campaign
Campaign --> Deal
Deal --> Blogger
Deal --> Transaction
User --> Follow
User --> Wishlist
Wishlist --> Product
style Users fill:#172554,stroke:#3b82f6
style Content fill:#14532d,stroke:#22c55e
style Ads fill:#78350f,stroke:#f59e0b
style Social fill:#3b0764,stroke:#a855f7
12.2 Схема данных (ключевые таблицы)
Пользователи:
{
"User": {
"id": "uuid",
"phone": "+79001234567",
"email": "user@example.com",
"display_name": "Анна Иванова",
"avatar_url": "https://cdn.blogmarket.ru/avatars/uuid.jpg",
"role": "blogger | advertiser | user | moderator | admin",
"is_verified": true,
"inn": "770100001234",
"created_at": "2026-04-01T10:00:00Z"
}
}
Профиль блогера:
{
"BloggerProfile": {
"user_id": "uuid",
"bio": "Обзоры техники и гаджетов",
"categories": ["tech", "gadgets"],
"social_links": {
"telegram": "@annareviews",
"vk": "https://vk.com/annareviews",
"youtube": "https://youtube.com/@annareviews"
},
"subscribers_count": 15420,
"total_views": 2340000,
"avg_engagement_rate": 4.2,
"rating": 4.8,
"is_verified": true,
"verified_at": "2026-03-15T00:00:00Z"
}
}
Публикация:
{
"Post": {
"id": "uuid",
"blogger_id": "uuid",
"type": "video | photo | text",
"title": "Обзор беспроводных наушников",
"description": "Тестировала 2 недели — вот что думаю...",
"status": "draft | pending_moderation | approved | published | rejected | archived",
"rejection_reason": null,
"category": "tech",
"tags": ["наушники", "обзор", "техника"],
"ad_marker": {
"is_ad": true,
"advertiser_inn": "770100001234",
"advertiser_name": "ООО Аудиотех",
"erid": "2VtzqwP1234",
"ord_token_created_at": "2026-04-01T12:00:00Z"
},
"stats": {
"views": 12500,
"likes": 890,
"wishlist_adds": 234,
"clicks": 567,
"shares": 45
},
"media": ["uuid-1", "uuid-2"],
"product_card_id": "uuid",
"published_at": "2026-04-01T14:00:00Z",
"created_at": "2026-04-01T10:00:00Z"
}
}
Карточка товара:
{
"ProductCard": {
"id": "uuid",
"name": "Беспроводные наушники XSound Pro",
"description": "Активное шумоподавление, 30 часов работы",
"price": 8990,
"currency": "RUB",
"image_urls": ["https://cdn.blogmarket.ru/products/uuid-1.jpg"],
"purchase_url": "https://shop.example.com/xsound-pro",
"promo_code": "ANNA10",
"promo_discount": "10%",
"seller_name": "Аудиотех",
"seller_url": "https://shop.example.com"
}
}
Рекламная кампания:
{
"Campaign": {
"id": "uuid",
"advertiser_id": "uuid",
"name": "Запуск XSound Pro — весна 2026",
"product_card_id": "uuid",
"budget": 500000,
"budget_spent": 125000,
"status": "draft | active | paused | completed | cancelled",
"payment_model": "cpp | cpc | cpm | revenue_share",
"target_categories": ["tech", "lifestyle"],
"target_audience": {
"age_min": 18,
"age_max": 45,
"regions": ["Москва", "Санкт-Петербург"]
},
"start_date": "2026-04-01",
"end_date": "2026-05-01",
"created_at": "2026-03-25T10:00:00Z"
}
}
13. API-спецификация
13.1 Основные эндпоинты
Авторизация:
| Метод | Путь | Описание |
|---|---|---|
| POST | /api/v1/auth/send-code |
Отправить SMS-код |
| POST | /api/v1/auth/verify-code |
Подтвердить код, получить JWT |
| POST | /api/v1/auth/oauth/{provider} |
OAuth через VK/Yandex/Telegram |
| POST | /api/v1/auth/refresh |
Обновить JWT-токен |
| DELETE | /api/v1/auth/logout |
Выход |
Контент:
| Метод | Путь | Описание |
|---|---|---|
| GET | /api/v1/feed |
Персонализированная лента |
| GET | /api/v1/feed/trending |
Трендовый контент |
| GET | /api/v1/posts/{id} |
Детали публикации |
| POST | /api/v1/posts |
Создать публикацию |
| PATCH | /api/v1/posts/{id} |
Обновить черновик |
| DELETE | /api/v1/posts/{id} |
Удалить публикацию |
| POST | /api/v1/posts/{id}/publish |
Отправить на модерацию |
| POST | /api/v1/media/upload |
Загрузить медиафайл |
Профили:
| Метод | Путь | Описание |
|---|---|---|
| GET | /api/v1/users/{id} |
Профиль пользователя |
| GET | /api/v1/bloggers/{id} |
Профиль блогера + публикации |
| GET | /api/v1/bloggers/{id}/stats |
Статистика блогера |
| POST | /api/v1/bloggers/{id}/follow |
Подписаться |
| DELETE | /api/v1/bloggers/{id}/follow |
Отписаться |
Рекламный кабинет:
| Метод | Путь | Описание |
|---|---|---|
| GET | /api/v1/campaigns |
Список кампаний |
| POST | /api/v1/campaigns |
Создать кампанию |
| PATCH | /api/v1/campaigns/{id} |
Обновить кампанию |
| GET | /api/v1/campaigns/{id}/stats |
Аналитика кампании |
| POST | /api/v1/campaigns/{id}/deals |
Предложить сделку блогеру |
| PATCH | /api/v1/deals/{id} |
Принять/отклонить сделку |
Поиск:
| Метод | Путь | Описание |
|---|---|---|
| GET | /api/v1/search?q={query} |
Полнотекстовый поиск |
| GET | /api/v1/search/bloggers?category={cat} |
Поиск блогеров |
| GET | /api/v1/categories |
Дерево категорий |
| GET | /api/v1/tags/trending |
Трендовые теги |
Финансы:
| Метод | Путь | Описание |
|---|---|---|
| GET | /api/v1/billing/balance |
Баланс (блогер/рекламодатель) |
| POST | /api/v1/billing/topup |
Пополнение баланса |
| POST | /api/v1/billing/withdraw |
Заявка на вывод средств |
| GET | /api/v1/billing/transactions |
История транзакций |
Модерация:
| Метод | Путь | Описание |
|---|---|---|
| GET | /api/v1/moderation/queue |
Очередь на проверку |
| POST | /api/v1/moderation/{post_id}/approve |
Одобрить |
| POST | /api/v1/moderation/{post_id}/reject |
Отклонить с причиной |
| POST | /api/v1/reports |
Жалоба на контент |
Мессенджер:
| Метод | Путь | Описание |
|---|---|---|
| GET | /api/v1/chats |
Список диалогов |
| GET | /api/v1/chats/{id}/messages |
Сообщения диалога |
| POST | /api/v1/chats/{id}/messages |
Отправить сообщение |
| WebSocket | /ws/chats |
Real-time сообщения |
13.2 Пример запроса: создание публикации
Request:
POST /api/v1/posts
Content-Type: application/json
Authorization: Bearer <jwt>
{
"type": "video",
"title": "Обзор наушников XSound Pro",
"description": "Тестировала 2 недели в метро, спортзале и дома...",
"category": "tech",
"tags": ["наушники", "обзор", "техника", "xsound"],
"media_ids": ["uuid-media-1"],
"product_card": {
"name": "XSound Pro",
"price": 8990,
"purchase_url": "https://shop.example.com/xsound-pro",
"promo_code": "ANNA10"
},
"ad_info": {
"advertiser_id": "uuid-advertiser",
"campaign_id": "uuid-campaign"
}
}
Response (201 Created):
{
"id": "uuid-post",
"status": "draft",
"ad_marker": {
"is_ad": true,
"erid": null,
"status": "pending_ord_registration"
},
"created_at": "2026-04-01T10:00:00Z"
}
13.3 Коды ошибок
| Код | Описание |
|---|---|
| 400 | Невалидные данные (описание ошибки в теле ответа) |
| 401 | Не авторизован |
| 403 | Нет прав (роль не соответствует) |
| 404 | Ресурс не найден |
| 409 | Конфликт (дублирование, уже существует) |
| 413 | Файл слишком большой |
| 429 | Слишком много запросов (rate limit) |
| 500 | Внутренняя ошибка сервера |
14. Стек технологий
14.1 Клиентские приложения
| Компонент | Технология | Обоснование |
|---|---|---|
| iOS | Swift + SwiftUI | Нативная производительность, плавные анимации |
| Android | Kotlin + Jetpack Compose | Нативная производительность, Material Design |
| Веб-приложение | Next.js (React) | SSR, SEO для контента, общий код с PWA |
| Видеоплеер | ExoPlayer (Android) / AVPlayer (iOS) | HLS-стриминг, адаптивный битрейт |
Альтернатива: React Native / Flutter для кросс-платформенной разработки (быстрее, дешевле, но компромисс по UX).
14.2 Backend
| Компонент | Технология | Обоснование |
|---|---|---|
| API-сервер | Go / Node.js | Высокая производительность, параллелизм |
| БД (основная) | PostgreSQL | JSONB, полнотекстовый поиск, надёжность |
| Кэш / сессии | Redis | Скорость, pub/sub для реального времени |
| Очередь задач | Redis (BullMQ) или RabbitMQ | Асинхронная обработка (модерация, видео) |
| Полнотекстовый поиск | Elasticsearch / Meilisearch | Быстрый поиск по контенту, хэштегам |
| Хранение медиа | S3-совместимое (MinIO / Yandex Object Storage) | Масштабируемое хранение видео/фото |
| CDN | CDNvideo (основной) / Gcore (резервный) | Быстрая раздача видео по РФ. Cloudflare НЕ применим — дросселируется Роскомнадзором |
| WebSocket | Centrifugo | Real-time (чат, уведомления, лента) |
14.3 AI / ML
| Задача | Технология | Обоснование |
|---|---|---|
| Модерация контента (NSFW) | Open-source CV модель | Offline, без зависимости от внешних API |
| Модерация текста | LLM (через API) | Понимание контекста, сарказма, скрытой рекламы |
| Рекомендации (v2) | Two-tower модель | State-of-the-art для рекомендательных систем |
| Embeddings контента | Embedding-модель | Семантический поиск и рекомендации |
14.4 DevOps / Инфраструктура
| Компонент | Технология | Обоснование |
|---|---|---|
| Контейнеризация | Docker + Docker Compose | Единообразная среда, простой деплой |
| Оркестрация | Kubernetes (при масштабировании) | Автоскейлинг, rolling updates |
| CI/CD | GitHub Actions | Автоматическое тестирование и деплой |
| Мониторинг | Prometheus + Grafana | Метрики, алерты, дашборды |
| Логирование | Loki / ELK Stack | Централизованные логи |
| Транскодирование видео | FFmpeg (в контейнере) | Конвертация в HLS, превью, resize |
15. Инфраструктура и деплой
15.1 Серверные требования и стоимость (данные из исследования)
| Этап | Compute | Storage | CDN | Транскодирование | Итого/мес |
|---|---|---|---|---|---|
| MVP (1K DAU) | ₽3-5K | ₽0.5-1.5K | ₽2-5K | ₽1-3K | ₽8.5-19.5K/мес |
| Рост (10K DAU) | ₽15-30K | ₽5-15K | ₽20-50K | ₽5-15K | ₽55-130K/мес |
| Масштаб (100K+ DAU) | ₽100-200K | ₽50-150K | ₽150-400K | ₽30-100K | ₽380-950K/мес |
Цены: Yandex Cloud / Selectel / VK Cloud. Хостинг строго в РФ (ФЗ-152).
15.2 Структура деплоя (MVP)
┌─────────────────────────────────────────┐
│ Reverse Proxy (Nginx / Caddy) │
│ SSL termination, routing │
├─────────────────────────────────────────┤
│ Web App (Next.js) :3000 │
│ API Server (Go/Node) :8000 │
│ Centrifugo (WebSocket) :8001 │
├─────────────────────────────────────────┤
│ PostgreSQL :5432 │
│ Redis :6379 │
│ Meilisearch :7700 │
├─────────────────────────────────────────┤
│ MinIO (Object Storage) :9000 │
│ Worker (транскодирование, модерация) │
└─────────────────────────────────────────┘
15.3 CDN для медиаконтента
- Видео и фото раздаются через CDN (edge-серверы в крупных городах РФ)
- Оригиналы хранятся в Object Storage
- CDN автоматически кэширует по географии
16. Нефункциональные требования
| # | Параметр | Порог (MVP) | Порог (Scale) |
|---|---|---|---|
| N1 | Время загрузки ленты (p95) | <= 2 сек | <= 1 сек |
| N2 | Время начала воспроизведения видео | <= 3 сек | <= 1.5 сек |
| N3 | Время загрузки медиа (100 MB видео) | <= 30 сек | <= 15 сек |
| N4 | API response time (p95) | <= 500 мс | <= 200 мс |
| N5 | Доступность (uptime) | >= 99% | >= 99.9% |
| N6 | Одновременных пользователей | >= 100 | >= 10 000 |
| N7 | Время модерации (AI + ручная) | <= 2 ч | <= 30 мин |
| N8 | Размер мобильного приложения | <= 50 MB | <= 50 MB |
| N9 | Время регистрации | <= 1 мин | <= 1 мин |
| N10 | Покрытие тестами (backend) | >= 60% | >= 80% |
17. Дизайн и UX
17.1 Визуальная концепция
"Должно быть всё выглядеть очень стильно" — Александр, из встречи 24.03
| Параметр | Описание |
|---|---|
| Стиль | Премиальный, чистый, минималистичный |
| Референсы | Pinterest (сетка), TikTok (свайп-лента), Instagram (Stories) |
| Цвета | Тёмная тема (основная) + светлая тема. Акцентный цвет — на выбор |
| Типография | Современные sans-serif шрифты (Inter, SF Pro, Manrope) |
| Анимации | Плавные переходы, micro-interactions, skeleton loading |
| Иконки | Outlined стиль, консистентный размер |
17.2 Ключевые экраны
| # | Экран | Описание |
|---|---|---|
| 1 | Онбординг | 3-4 слайда: концепция, выбор интересов, роль |
| 2 | Лента (видео) | Полноэкранный вертикальный свайп, как TikTok |
| 3 | Лента (каталог) | Pinterest-сетка с карточками товаров |
| 4 | Профиль блогера | Шапка + статистика + сетка контента |
| 5 | Карточка товара | Фото/видео + описание + цена + "Купить" / "Хочу!" |
| 6 | Создание публикации | Пошаговый wizard: медиа → описание → товар → превью |
| 7 | Рекламный кабинет | Дашборд с кампаниями, аналитикой, блогерами |
| 8 | Мессенджер | Список чатов + диалог (как в Telegram) |
| 9 | Поиск | Строка поиска + категории + тренды |
| 10 | Настройки | Профиль, уведомления, безопасность, выплаты |
17.3 Адаптивность
| Платформа | Приоритет | Подход |
|---|---|---|
| iOS | Высший | Нативное приложение |
| Android | Высший | Нативное приложение |
| Веб (desktop) | Средний | Адаптивный веб-сайт |
| Веб (mobile) | Средний | PWA + адаптивная вёрстка |
18. Стратегия тестирования
| Уровень | Что тестируем | Инструменты | Покрытие |
|---|---|---|---|
| Unit | Бизнес-логика, сервисы | Jest / Go test | >= 70% |
| Integration | API endpoints, БД | Supertest / httptest | Все эндпоинты |
| E2E (веб) | Ключевые пользовательские пути | Playwright | 10 основных сценариев |
| E2E (мобайл) | Регистрация, публикация, покупка | Detox / Maestro | 5 основных сценариев |
| Performance | Нагрузка на API, ленту | k6 / Artillery | NFR-пороги |
| Security | OWASP Top 10, инъекции | OWASP ZAP, ручной аудит | Перед запуском |
| Модерация | Точность AI-модерации | Ручная оценка на тестовом наборе | Precision > 95%, Recall > 90% |
19. Этапы реализации (MVP → Full)
19.1 MVP (Minimum Viable Product)
Цель: Работающая площадка для демонстрации и первых пользователей.
| Что входит | Что НЕ входит |
|---|---|
| Регистрация (телефон + SMS) | OAuth (VK, Yandex) |
| Лента контента (видео + каталог) | ML-рекомендации |
| Публикация контента (видео + фото) | Встроенный видеоредактор |
| Карточка товара с ссылкой | Сравнение цен |
| Базовый поиск и категории | Голосовой поиск |
| Профиль блогера | Автогенерация медиа-кита |
| Подписки и уведомления | Email-дайджест |
| AI-модерация (NSFW + текст) | Рекомендательная ML-модель |
| Автомаркировка рекламы (ОРД) | Множественные ОРД |
| Рекламный кабинет (CPP) | CPC/CPM/Revenue Share |
| Мессенджер (базовый чат) | Шаблоны, привязка к сделкам |
| Админ-панель | Расширенная аналитика |
| Веб-приложение (PWA) | Нативные iOS/Android |
| Оплата (Юкасса) | Безналичный расчёт для юрлиц |
19.2 v2 — Рост
- ML-рекомендации (Two-tower модель)
- Нативные iOS + Android приложения
- Расширенный рекламный кабинет (CPC, CPM)
- Аналитика и отчёты (воронки, ROI)
- OAuth авторизация
- Email-дайджест
- Отзывы пользователей
- Рейтинг блогеров
- Расширенная модерация (fingerprinting, жалобы)
19.3 v3 — Масштаб
- Автоматический матчинг блогеров (AI)
- Revenue Share модель
- Сравнение цен (парсинг маркетплейсов)
- Голосовой поиск
- Геолокация
- Встроенный видеоредактор
- API для интеграции с внешними системами
- Партнёрская программа (реферальная)
20. Дорожная карта
gantt
title Дорожная карта AdWall
dateFormat YYYY-MM-DD
excludes weekends
section Фаза 0: Подготовка
Дизайн UI/UX (прототипы) :design, 2026-04-14, 15d
Презентация для Минцифры :pres, 2026-04-14, 10d
Архитектура и DevOps setup :arch, 2026-04-14, 10d
section Фаза 1: MVP Backend
Auth + Users + Profiles :auth, after arch, 10d
Content Service + Media :content, after auth, 15d
Feed Service :feed, after content, 10d
Модерация (AI) :mod, after content, 10d
ОРД-интеграция :ord, after mod, 10d
section Фаза 2: MVP Frontend
Веб-приложение (Next.js) :web, after feed, 20d
Лента + Каталог :lens, after feed, 15d
Создание контента :create, after lens, 10d
Поиск и навигация :search, after lens, 10d
section Фаза 3: Бизнес-логика
Рекламный кабинет :ads, after ord, 15d
Биллинг и платежи :bill, after ads, 15d
Мессенджер :chat, after web, 10d
Админ-панель :admin, after bill, 10d
section Фаза 4: Запуск
Тестирование и QA :qa, after admin, 10d
Пилотный запуск (beta) :beta, after qa, 5d
Итерации по обратной связи :iter, after beta, 10d
20.1 Ключевые вехи
| Дата | Веха | Результат |
|---|---|---|
| Конец апреля 2026 | Презентация для Минцифры | Визуальная презентация + прототип |
| Конец мая 2026 | MVP Backend готов | API, модерация, ОРД работают |
| Конец июня 2026 | MVP Frontend готов | Веб-приложение, лента, публикация |
| Середина июля 2026 | Бизнес-логика | Рекламный кабинет, платежи, чат |
| Конец июля 2026 | Beta-запуск | Приглашённые блогеры + рекламодатели |
| Сентябрь 2026 | Публичный запуск | Открытая регистрация |
21. Команда проекта
21.1 Необходимые роли
| Роль | Кол-во | Основные задачи |
|---|---|---|
| Tech Lead / Архитектор | 1 | Архитектура, код-ревью, ключевые решения |
| Backend-разработчик | 2 | API, бизнес-логика, интеграции |
| Frontend-разработчик | 1 | Веб-приложение (Next.js) |
| Mobile-разработчик | 1-2 | iOS + Android (с v2) |
| AI/ML-инженер | 1 | Модерация, рекомендации |
| UI/UX-дизайнер | 1 | Интерфейсы, прототипы, дизайн-система |
| DevOps | 0.5 | Инфраструктура, CI/CD, мониторинг |
| QA-инженер | 1 | Тестирование, автотесты |
| Product Manager | 1 | Приоритизация, roadmap, общение с клиентом |
21.2 Минимальная команда (MVP)
Для MVP достаточно:
- 1 Tech Lead (fullstack) + 1 Backend + 1 Frontend + 0.5 AI + 0.5 DevOps + 1 дизайнер
- Итого: 5-6 человек
22. Риски и митигация
| # | Риск | Вероятность | Влияние | Митигация |
|---|---|---|---|---|
| R1 | Минцифры не входит как партнёр | Средняя | Высокое | Платформа спроектирована compliance-first — работает легально без партнёрства. Минцифры = ускоритель, не блокер |
| R2 | Блокировка Роскомнадзором | Низкая | Критическое | ОРД-интеграция, полная маркировка, реестр 10K+, прозрачная отчётность. Партнёрство с Минцифры снижает риск |
| R3 | Изменение закона о рекламе | Средняя | Высокое | ORD Gateway (адаптерный слой) — быстрая адаптация к новым требованиям |
| R4 | Конкуренция (Яндекс.Ритм и VK) | Средняя | Среднее | Фокус на блогерах (бесплатно), а не на брендах. Мессенджер, стилизованные страницы, UX |
| R5 | Холодный старт (нет блогеров) | Высокая | Высокое | Привлечение 50-100 блогеров через личные контакты Максима. Бесплатность снижает барьер |
| R6 | Низкое качество AI-модерации | Средняя | Высокое | Трёхуровневая система (AI + scoring + ручная). rubert-tiny-toxicity для русского (ROC AUC 0.9937) |
| R7 | Рекламодатели не покупают места | Средняя | Высокое | Без критической массы блогеров и трафика — нет рекламодателей. Фокус на росте аудитории в первые 6 мес |
| R8 | Мошенничество (накрутки) | Высокая | Среднее | Верификация аккаунтов, anti-fraud, проверка статуса 10K+ через API РКН |
quadrantChart
title Risk Map
x-axis "Low probability" --> "High probability"
y-axis "Low impact" --> "High impact"
R1 MinCifry exit: [0.5, 0.75]
R2 RKN block: [0.2, 0.95]
R3 Law change: [0.4, 0.75]
R4 Competition: [0.5, 0.5]
R5 Cold start: [0.7, 0.8]
R6 AI quality: [0.4, 0.7]
R7 No advertisers: [0.5, 0.8]
R8 Fraud: [0.7, 0.5]
23. Открытые вопросы
| # | Вопрос | Контекст | Варианты |
|---|---|---|---|
| 1 | Нативные приложения или кросс-платформа? | Мобильное приложение — приоритет (пользователи приходят из мобильных соцсетей). Нативные дают лучший UX, но стоят x2 | A) PWA на старте, нативные с v2 (рекомендуем); B) Flutter/React Native сразу; C) Нативные iOS + Android |
| 2 | Хостинг | Данные обязаны храниться в РФ (ФЗ-152). Зарубежные облака исключены | A) Yandex Cloud (рекомендуем — S3, CDN, compute); B) Selectel; C) VK Cloud |
| 3 | Язык бэкенда | Зависит от команды и планов масштабирования | A) Go (производительность); B) Node.js/TypeScript (скорость разработки); C) Python (ML-интеграции) |
| 4 | Ценообразование рекламных мест | Нет бенчмарков для новой площадки. Нужна стартовая pricing strategy | A) CPM ₽50-200 (аналог Telegram Ads); B) Фиксированные пакеты; C) Аукционная модель |
| 5 | Позиционирование для Минцифры | Как подать проект, чтобы максимизировать интерес к партнёрству | A) "Импортозамещение Instagram для рекламы"; B) "Легальная площадка — антидот серому рынку"; C) "Инструмент прозрачности рекламного рынка" |
| 6 | Референс: LTK (LikeToKnowIt) | Идентифицировано по скриншоту. Ключевая фича — интерактивные метки на фото (нажатие → цена/ссылка). Заблокирован в App Store в РФ | Фича "интерактивные метки" заложена в roadmap v2 |
| 7 | Доля Минцифры | Какую долю/формат предлагать? | Требует отдельной проработки с юристом |
24. Глоссарий
| Термин | Определение |
|---|---|
| ОРД | Оператор рекламных данных — организация, через которую маркируется реклама в интернете |
| ЕРИР | Единый реестр интернет-рекламы — государственная система учёта рекламы |
| erid | Уникальный токен рекламного креатива, присваиваемый ОРД |
| CPP | Cost Per Post — оплата за одну рекламную публикацию |
| CPC | Cost Per Click — оплата за один клик (переход) |
| CPM | Cost Per Mille — оплата за 1000 показов |
| CPA | Cost Per Action — оплата за целевое действие (покупку, регистрацию) |
| GMV | Gross Merchandise Value — общий объём транзакций на платформе |
| DAU | Daily Active Users — ежедневная активная аудитория |
| HLS | HTTP Live Streaming — протокол адаптивного видеостриминга |
| CDN | Content Delivery Network — сеть доставки контента |
| NSFW | Not Safe For Work — контент для взрослых |
| PWA | Progressive Web App — веб-приложение с функциями нативного |
| Эскроу | Условное депонирование — заморозка средств до выполнения условий |
| ФЗ-152 | Федеральный закон о персональных данных |
| Медиа-кит | Документ с данными о блогере (аудитория, охваты, стоимость размещения) |
Техническое задание является предварительным и будет уточняться по мере получения ответов на открытые вопросы.
Подготовлено: AiDevTeam Дата: 01.04.2026