К нам в Doubletapp обратились организаторы Fame to Flame — федерального танцевального чемпионата. Онлайн-часть ивента планировалась как ядро всей механики конкурса — регистрация участников, загрузка видео, голосование, работа с чеками. При декомпозиции задач мы поняли, что сложность здесь на стыке: видеостриминг, антифрод, всплески нагрузки и жёсткий дедлайн в два месяца. Но у нас было мощное оружие — опыт.

С 2018 года мы создаём цифровые инструменты для организации мероприятий:
разработали и поддерживаем мобильные приложения (iOS, Android), сайт и CRM для международного музыкального фестиваля Ural Music Night;
сайт и CRM для шоукейс-фестиваля актуальной музыки New/Open;
создали цифровую инфраструктуру для книжного фестиваля «Красная строка» — от сайта до системы управлени�� заявками;
спроектировали и запустили портал и административную панель для Международного фестиваля студенческого спорта в Екатеринбурге;
организовали несколько крупных рекламных спецпроектов с многочисленной аудиторией (NDA).
Для Fame to Flame мы разработали мини-приложение в экосистеме VK. Нужно было учесть особенности платформы, выверить пользовательские сценарии и заложить запас прочности на случай резкого роста аудитории. В итоге получился VK Mini App с собственным стримингом.
В статье подробно разберём, какие ключевые технические решения сделали платформу стабильной и удобной, несмотря на все вызовы.
Содержание:
Что хотел заказчик
Онлайн-часть Fame to Flame должна была выполнять сразу несколько ролей: быть витриной конкурса, площадкой для пользовательского контента и транзакционным слоем, связывающим офлайн-покупки с цифровой активностью.
Главная инженерная сложность возникала на уровне комбинации фич. Нужно было поддержать три разных пользовательских потока:
танцоры загружают видео
зрители массово смотрят и голосуют
организаторы управляют конкурсной логикой
При этом нагрузка была неравномерной. В дни запусков этапов и во время финального стрима ожидались резкие пики, поэтому архитектуру изначально проектировали под худший сценарий.
В качестве клиентской платформы организаторы выбрали VK Mini App, потому что танцоры, их поклонники, члены жюри и просто любители уличных танцев уже есть на платформе: их не нужно дополнительно привлекать, регистрировать на стороннем сервисе или просить устанавливать отдельное приложение. Это сразу сокращало барьер входа и повышало вовлечённость.
Почему VK подошёл идеально для мини‑аппа такого масштаба?
Удобная авторизация, мы не теряем зрителей на этапе регистрации;
есть возможность привлечения трафика через магазин приложений в VK;
потенциальная интеграция с возможностями платформы, которые доступны только после авторизации. Например, мы загружали видео участника к нему на страницу, что потенциально дополнительно генерило трафик для конкурса;
не роняем retension, т.к. приложение отображается в списке приложений пользователя в VK.
Видео: главный источник сложности
Очень быстро стало ясно, что узким местом станет видео. Для системы это тяжёлые файлы, непредсказуемые паттерны просмотра и высокий риск деградации UX.
Изначально рассматривали стандартный VK-плеер. Но в конкурсной механике требовался полный контроль над контентом после загрузки, поэтому в итоге выбрали собственный стриминг-контур.
Мы реализовали HTTP-стриминг с сегментацией видео по модели HLS (HTTP Live Streaming). Такой подход:
ускоряет старт воспроизведения
позволяет начинать просмотр с произвольной позиции
даёт адаптивное качество под канал пользователя
Для мобильной аудитории это оказалось критично.
GPU-транскодинг под пользовательскую загрузку
Следующий риск — массовая загрузка пользовательских видео. CPU-кодирование в таком сценарии быстро становится бутылочным горлышком, поэтому в архитектуру сразу заложили аппаратное ускорение.
Конвертация выполняется на GPU через NVENC/NVDEC. Аппаратные блоки хорошо распараллеливают кодирование, при этом CPU остаётся доступным для:
обработки HTTP-запросов
работы с PostgreSQL и Redis
Выполнения фоновых задач.
Важно учитывать, что аппаратное кодирование масштабируется с ограничениями по количеству параллельных сессий на GPU, поэтому при расчёте ёмкости мы закладывали запас по воркерам.
На практике это заметно стабилизировало систему под пиками загрузки: пользователь получает быстрый отклик при аплоаде, а backend сохраняет предсказуемую утилизацию CPU.
Асинхронный пайплайн обработки
Бэкенд построен на Django Ninja. Поверх развернули классический стек:
PostgreSQL — основное хранилище
Redis — кэш и брокер
Celery — фоновые задачи
Ключевой принцип — тяжёлая обработка не блокирует пользовательские операции.
Когда танцор загружает видео:
API быстро принимает файл
задача ставится в очередь
Celery-воркеры выполняют транскодинг
формируются профили качества: 480p / 720p / 1080p
Такой пайплайн сохраняет отзывчивость интерфейса даже при всплесках загрузок.
Тот же механизм используется для сервисной логики — обновления рейтингов и проведения розыгрышей.

Подготовка к пиковым нагрузкам
Пиковые сценарии были предсказуемы: старты этапов, массовые голосования, финальный стрим. Фокус сместился с чистого ускорения на устойчивость под пиковыми нагрузками.
Мы использовали многоуровневое кэширование.
На сервере: Redis забирает значительную часть горячих запросов, снижая давление на PostgreSQL.
На клиенте: часть данных живёт в браузерном кэше — например, редко меняющиеся справочники.
Рейтинги: для рейтингов применили materialized view с периодическим refresh, чтобы тяжёлые выборки не пересчитывались на каждый запрос и данные оставались актуальными.
Дополнительно включили:
условные HTTP-запросы (ETag / Last-Modified)
gzip-сжатие статики.
По отдельности эти оптимизации дают умеренный эффект, вместе — заметно разгружают систему под пиками.
Наблюдаемость и раннее обнаружение деградации
Мониторинг собрали на классическом стеке Prometheus + Grafana + Alertmanager + Loki (он помог расследовать инциденты и баги).
Мы снимаем:
инфраструктурные метрики
latency API
нагрузку на ключевые сервисы
Важно было видеть как сам факт деградации, так и предшествующий ей тренд.
Alertmanager отправляет уведомления в Telegram при выходе за пороги. Централизованное логирование помогает быстро коррелировать ошибки между сервисами. В продакшене это несколько раз позволило поймать пограничные сценарии до пользовательских жалоб.
Модерация VK как часть production-цикла
В VK Mini Apps приложение проходит полноценную модерацию, включая публичное бета-тестирование через VK Testers. Этот этап мы заложили в таймлайн как полноценную фазу проекта.
В резерве держали план миграции в Telegram: backend уже был к этому готов, фронтенд потребовал бы адаптации под другой SDK.
В итоге приложение прошло модерацию без критичных правок.
Мы подготовили чек-лист для тех, кто еще не сталкивался с модерацией мини-приложений в VK.
Забирайте чек-лист и проходите модерацию с первой попытки.
Фронтенд и кастомный видеоплеер
На фронте ключевым решением стал отказ от коробочного iFrame-плеера VK. Требовалась полностью управляемая свайп-лента, кастомные реакции и предсказуемая работа при нестабильной сети.
Фронтенд реализован как SPA и раздаётся статикой через Nginx.
Мы активно используем:
агрессивное кэширование
lazy-подгрузку видео
предзагрузку следующего элемента ленты
Для короткой видеоленты это напрямую влияет на «липкость» скролла и пользовательский опыт.
Интеграция с VK Mini Apps SDK закрывает:
авторизацию
работу с QR
публикацию видео в профиль пользователя.
Результаты
На платформе зарегистрировалось более 80 000 пользователей, приложение запустили около 260 000 раз, организаторы разыграли 4000 призов, а финальный стрим прошёл без деградации сервиса.
Онлайн-часть спокойно пережила пиковые нагрузки, после чего заказчик масштабировал механику и продолжил использовать решение.
Проект Fame to Flame мы делали в сотрудничестве с командой маркетингового агентства ADV Cake: коллеги управляли коммуникациями и креативом, а мы отвечали за архитектуру и разработку.
Если вы планируете
конкурс или UGC-механику с видео
мини-приложение в VK, Telegram и на других платформах,
продукт с ожидаемыми пиками нагрузки — приходите обсудить задачу.
Мы проектируем мини-приложения и highload-механики под реальные пользовательские сценарии и помогаем запускаться в сжатые сроки.
