Блок-схема · наведите на узел для связей

Наведите на узел для подсветки маршрута

Собственные продукты · 2023–2026

IAMEvent

Приложения для мероприятий и сервисы, которые связывают их в продукт.

От первой аудиоигры до линейки интерактивов, викторин, гостевого медиапотока, покупки, лицензирования и управления с телефона.

Ключевой результатОдна система

для продукта, покупки и проведения

В развитии
Моя ответственность

Продуктовые решения, границы приложений и общих сервисов

Что проверено

DERB использовался на мероприятиях; пульт и облачная загрузка проверены

Граница результата

Коммерческих продаж на сентябрь 2026 года пока не было

Сначала я сделал DERB, чтобы ведущий мог провести аудиоконкурс без диджейских навыков и аудиоредактора. Когда появились новые интерактивы, отдельные приложения начали дублировать покупку, лицензирование и управление показом. Я остановил развитие нескольких похожих викторин, собрал их в IamQuiz и вынес общие возможности в Console и IAM RC.

Теперь система связывает desktop-продукты, сайт и VK, покупку, лицензии, телефонный пульт и облачную доставку гостевых медиа. DERB уже использовался на мероприятиях; полный цикл управления IamQuiz с телефона и облачная загрузка PhotoWall проверены. Коммерческих продаж на сентябрь 2026 года ещё не было.

Я единолично определяю продукт: начинаю со сценария проведения, выбираю границы приложений и общих сервисов, затем проверяю связки на реальных устройствах. ИИ помогает обсуждать варианты и писать код; решения и проверка поведения остаются моей ответственностью.

01

Когда один конкурс превратился в линейку

Около трёх лет я хотел сделать такой проект. Первым стал desktop-софт DERB. До него аудиоконкурс проводили редко: требовались навыки диджея и работа в аудиоредакторе. Приложение собрало необходимые действия в игровой процесс, доступный в том числе для домашнего использования.

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

При развитии линейки я поговорил с десятью потенциальными покупателями. Все обозначили потребность в викторинах и гибкости, которой им не хватало при работе с PowerPoint. К этому моменту я уже начал примерно два-три отдельных приложения. Я остановил их раздельное развитие и перешёл к единому IamQuiz со встроенными игровыми режимами: поддерживать несколько принципиально одинаковых продуктов было бы лишней работой.

Общие возможности получили отдельное место в системе. iam_boilerplate служит Tauri-заготовкой новых приложений с готовым лицензионным циклом. iam-rc предоставляет телефонное управление по локальной сети и через интернет. Console обслуживает коммерческие права и серверные интеграции.

Почему интерактивы остались отдельными

DERB превращает работу с аудио в игру: запись фразы, её разворот и разбиение на фрагменты, попытки участника повторить услышанное и сборка результата. Отдельный фрагмент можно перезаписать. Ведущему не требуется собирать этот процесс вручную в аудиоредакторе.

BabyTell — голосование для гендер-пати и свадебного шоу. Ведущий задаёт две стороны, реквизиты и финальный таймер. Гости переводят деньги выбранной стороне, оператор вручную вносит поступившие суммы, а экран показывает соотношение, историю и итог. Есть управление с клавиатуры, локальное сохранение и вывод в отдельное окно, браузер или OBS. В банковских QR сохраняются исходные байты данных: перерисовка кода не меняет реквизиты и кириллицу в нестандартной для веба кодировке.

«Казино с тортом» — игра с ячейками, кусочками торта и фантами. Гость выбирает номер, ведущий управляет открытием и темпом показа. Рабочая карта ведущего отделена от экрана зала; доступны сетка и колесо, настройка заданий и сценического исхода. Состояние партии сохраняется, повторное вскрытие ячейки не зачисляет ставку второй раз, фанты не повторяются до исчерпания списка. Для браузерного и OBS-экрана используется общий iam-rc.

У всех трёх продуктов есть собственный сценарий проведения и общие контракты с Console для лицензирования и получения релизов. Эти небольшие приложения показывают ту же работу с деталями реального мероприятия: операторский контроль, сохранение состояния и отдельную подачу для гостей.

02

Решение: общие сервисы для разных сценариев

Часть Роль в системе
DERB Desktop-аудиоигра с активацией через Console
BabyTell Мини-интерактив для гендер-пати с операторским управлением и экраном для гостей
«Казино с тортом» Свадебный мини-интерактив с игровым полем, призами и заданиями
IamQuiz Подготовка и проведение нескольких типов викторин; операторский пульт и отдельный экран зала
PhotoWall Рабочее место оператора: получение гостевых материалов, модерация, локальное хранение и показ
IAM Console Приложения, тарифы, пользователи, платежи, лицензии, настройки AI-интеграций и управление облачными сессиями PhotoWall
Лендинг и продуктовые страницы Объяснение сценариев, демонстрация продуктов, выбор лицензии и покупка на сайте
Веб-кабинет Собственные лицензии, получение кода, скачивание приложений и продление
VK Mini App Каталог и самообслуживание внутри VK с общей системой тарифов, платежей и лицензий
VK-бот Диалоговые сценарии, кампании и переходы к продуктам
IAM RC Общий транспорт: телефонный пульт IamQuiz и локальный сервер экранов, используемый также Cake Casino
PhotoWall Cloud Гостевая веб-страница, приём файлов, очередь обработки, приватное хранилище и выдача подготовленных материалов

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

Главные связи продуктов IAMEvent
flowchart LR
    Buyer["Покупатель · сайт или VK"] --> Console["IAM Console"]
    Console -->|"Лицензия"| Apps["DERB · BabyTell · Cake Casino · IamQuiz · PhotoWall"]
    Phone["Телефон ведущего"] --> RC["IAM RC"] --> Apps
    Guests["Телефоны гостей"] --> Cloud["PhotoWall Cloud"] --> Apps
    Apps --> Screen["Экран зала"]

Полная схема ниже раскрывает отдельные каналы покупки, управления и доставки медиа.

Покупка, лицензии, управление и показ в IAMEvent
flowchart TB
    WEB["Лендинг и страницы продуктов"] --> BUY["Покупка и веб-кабинет"]
    BUY --> C["IAM Console"]
    MINI["VK Mini App: каталог, покупка, кабинет"] --> C
    BOT["VK-бот: диалоговые сценарии"] --> C
    C <-->|"Платежи и подтверждение оплаты"| PAY["ЮKassa"]
    D["DERB / BabyTell / Казино с тортом"] <-->|"Активация и проверка лицензий"| C
    QUIZ["IamQuiz"] <-->|"Генерация сценария"| C
    C <-->|"Запросы к модели"| LLM["LLM-провайдер"]
    QUIZ <-->|"Схема пульта и команды"| RC["IAM RC: LAN / интернет"]
    PHONE["Телефон ведущего"] <--> RC
    CAKE["Казино с тортом: браузерный / OBS-экран"] <-->|"Локальный транспорт"| RC
    PW["PhotoWall desktop"] <-->|"Управление сессией и доступом"| C
    C <-->|"Команды и подтверждения"| CLOUD["PhotoWall Cloud"]
    GUEST["Телефоны гостей"] -->|"Загрузка материалов"| CLOUD
    CLOUD -->|"Подготовленные медиа"| PW
    PW --> SCREEN["Экран зала / браузер / OBS"]

Первый путь покупателя: сайт и кабинет

Лендинг показывает три мини-интерактива: DERB, BabyTell и «Казино с тортом». Каждый объясняется через действие на мероприятии и визуальную сцену. Посетитель переходит на отдельную страницу продукта с описанием, демонстрацией, порядком использования, ответами на вопросы и вариантами лицензии. IamQuiz и PhotoWall представлены на главной как следующие продукты.

Цены и оформление приложений приходят из Console. Содержание продуктовых страниц — заголовки, преимущества, шаги, FAQ, видео и скриншоты — хранится в данных витрины. Публикацией страницы и доступными тарифами управляет владелец через админку; предложения формируются из общей модели приложений и тарифов.

Покупатель выбирает вариант лицензии, входит через VK ID и оформляет оплату на сайте. Веб-покупка использует тот же серверный checkout, что и Mini App. При повторной покупке сервер определяет, нужно ли продлить существующую лицензию. Веб-кабинет использует общую загрузку лицензионных данных: показывает собственные доступы, скачивание приложений и продление; код активации запрашивается отдельным действием пользователя.

В системе также есть события воронки: просмотр продукта, начало покупки, идентификация и привязка к оплате. Это подготовленный механизм анализа пути покупателя.

Второй путь покупателя: VK Mini App

Mini App предоставляет собственный путь покупателя в клиенте VK. Сервер проверяет подписанные параметры запуска и связывает действия с пользователем. Интерфейс использует VKUI, тему и отступы среды VK, учитывает мобильный и desktop-режимы. Каталог и кабинет работают с теми же приложениями, тарифами и лицензиями, что сайт и Console.

Владелец редактирует содержание, оформление, порядок и видимость витрины из админки. Покупатель выбирает продукт, период доступа и вариант тарифа с нужным числом устройств. Интерфейс учитывает существующую лицензию и объясняет продление; предложения без открытого тарифа показываются как будущие. Промокоды и закрытые предложения имеют общий вход.

Оплата встроена через ЮKassa. Результат определяется серверным состоянием заказа; при недоступности виджета предусмотрен переход на отдельную страницу оплаты. После покупки кабинет продолжает пользовательский путь: срок доступа, приложения для скачивания, код активации по отдельному тапу, привязанные устройства, освобождение места и продление лицензии.

VK-бот обслуживает диалоговый канал: карточку DERB, сценарии получения доступа и покупки, кампании и промокоды. Он связан с общей серверной логикой Console. Сайт, бот и Mini App дают разные точки входа в одну модель продуктов и прав доступа; обязательной последовательности между этими каналами нет.

Как покупка превращается в работающую лицензию

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

В цепочке оплаты сервер проверяет событие через API ЮKassa. Выдача лицензии оформлена отдельной операцией с состояниями выполнения. Лицензия, коды, связь с продажей и успешный результат выдачи сохраняются транзакционно; повторные события учитывают уже начатую или завершённую операцию. Ошибку выдачи можно обработать отдельно от состоявшейся оплаты.

При активации одноразовый код, лимит устройств и новая привязка проверяются в одной транзакции под блокировкой строки лицензии. Блокировка сериализует конкурирующие запросы перед подсчётом свободных мест. При ошибке транзакция откатывается, сохраняя неиспользованный код и прежнюю рабочую привязку устройства.

Console подписывает условия доступа Ed25519. Tauri-клиент проверяет подпись, устройство и срок действия; локальная запись связана с контрольными данными в системном хранилище учётных данных. Предусмотрены периодическая проверка с сервером и ограниченное время работы без неё. Подтверждённый сервером отзыв удаляет локальные лицензионные данные.

В аудиоприложении проверка стоит также перед финальной обработкой раунда в Rust. Лицензирование тем самым связано с выполнением основной функции. В шаблоне новых приложений уже подготовлены активация, ревалидация, отвязка устройства и отображение состояния лицензии.

03

Проведение: викторина, пульт и материалы гостей

В одной студии собраны бумажный квиз, «Миллионер», «Сто к одному» и «Своя игра». Режимы используют общие проекты, хранение медиа, сохранение сессии и механизм передачи состояния экрану зала. У каждого режима остаются собственные правила и команды. Новый режим добавляет свою механику к существующей основе.

Оператор управляет ходом шоу, а экран зала получает состояние для отображения. Например, в «Миллионере» исходный правильный ответ хранится отдельно от сценического решения: ведущий может признать ответ игрока правильным либо раскрыть такой исход отдельным постановочным действием. Это позволяет адаптировать проведение под мероприятие, сохраняя исходные данные вопроса.

Для ведущего, координатора или помощника нужен доступ с телефона. В IamQuiz встроен локальный сервер из iam-rc; для подключения через интернет используется облачный WebSocket relay. Приложение отправляет описание доступного сейчас пульта, а общий телефонный интерфейс отображает его и возвращает команды. Поэтому транспорт и renderer можно использовать в следующих продуктах, задавая для них другую схему пульта.

Механизм включает подключение с PIN и разрешением оператора, повторное соединение и передачу текущего состояния. Полный цикл управления IamQuiz с настоящего телефона я проверил.

Как ИИ вошёл в подготовку викторины

Для бумажного квиза реализован путь: описание мероприятия → форма уточнений → генерация → просмотр результата → добавление или замена раундов в редакторе. Готовые данные становятся частью проекта игры.

Desktop обращается через Rust к Console, где находятся настройки моделей, промпты, проверка доступа, квоты и учёт использования. Приложение передаёт версию и JSON Schema результата, которую определяет игровой модуль. Сервер проверяет структуру ответа; клиент преобразует её в данные редактора. При ошибке формата предусмотрена повторная попытка с описанием ошибки.

Промпты для уточнения и генерации, а также используемые модели редактируются в Console. Изменения промптов версионируются; в журнале остаются модель, расход токенов и версия настроек. Их можно настраивать без пересборки desktop-приложения в рамках существующего формата результата.

Полный цикл я прошёл и получил сгенерированную викторину. На том этапе проверял интеграцию; качество вопросов меня не устроило. Следующий этап для этой функции — доведение контента настройками и проверкой результата.

Как материалы гостей доходят до экрана

PhotoWall соединяет гостевой телефон, облачную обработку и рабочее место оператора. Оператор создаёт мероприятие, получает гостевую ссылку и QR. Гости открывают веб-страницу и отправляют разрешённые материалы: фотографии, видео, текст или рисунки. Desktop получает их, даёт оператору одобрить публикацию и выводит одобренные материалы на экран.

Console отвечает за право на сессию и её жизненный цикл, Photocloud — за приём и подготовку медиа, desktop — за локальный проект и показ. Управляющие команды сохраняются вместе с желаемым состоянием, подписываются и могут доставляться повторно. Подтверждение облака обновляет фактическое состояние: оператор видит разницу между запросом и его исполнением.

Медиа проходят напрямую через Photocloud: проверка файла, резервирование вместимости в PostgreSQL, приватное хранение в S3/MinIO и очередь BullMQ/Redis. Отдельный worker готовит изображения через Sharp и видео через FFmpeg. Desktop получает временное разрешение MediaLease и скачивает результат в локальный кеш. После этого показ не зависит от облачных ссылок.

Оператор одобряет материалы перед показом. Приём гостей, воспроизведение и завершение мероприятия управляются отдельно.

Нативное окно, браузер и OBS используют один renderer. При переподключении экран получает полный снимок состояния. Локальный проект сохраняется через временный файл и атомарную замену; облачные материалы удаляются по сроку хранения.

Штатная загрузка PhotoWall ↔ Photocloud работает и проверена мной. Остаются замечания к оформлению и проверка сценария с 300+ фотографиями через облако.

04

Проверка: устройства, процессы и результат

Область Применённые технологии
Desktop и интерфейсы Tauri, Rust, React, TypeScript, Vite
Console, сайт и API Next.js, PostgreSQL, Prisma; VKUI для Mini App
Связь между приложениями HTTP API, WebSocket, схемы сообщений, подписанные команды
Доступ Ed25519, привязка устройств, системное хранилище учётных данных
Обработка медиа BullMQ, Redis, S3/MinIO, Sharp, FFmpeg
Доставка и окружение Docker Compose, скрипты сборки и развёртывания

В репозиториях есть код тестов конкурентной активации, повторной выдачи лицензии, переходов игровых состояний, пульта и команд PhotoWall. Результаты моих ручных проверок перечислены ниже. Для Console подготовлен процесс развёртывания с резервной копией БД, миграциями, проверкой здоровья приложения и возвратом к предыдущему образу при неудачном старте.

Работающие сценарии и граница результата

Направление Что уже получено
DERB Приложение использовалось на мероприятиях; аудиоконкурс доступен без работы в отдельном аудиоредакторе
BabyTell и Cake Casino Реализованы два самостоятельных мини-интерактива с операторским управлением, сохранением состояния и экраном для гостей
Сайт и VK Mini App Реализованы продуктовые страницы, выбор лицензии, покупка и кабинеты на общей модели данных
IamQuiz + RC Несколько игровых режимов в общей студии; полный цикл управления с телефона проверен
AI-генерация Викторина получена через встроенную цепочку; настройка качества контента остаётся следующим этапом
PhotoWall + Photocloud Штатная облачная загрузка работает; обработка, локальное получение, операторская модерация и показ связаны в приложении
Общая инфраструктура Реализованы лицензирование, платёжная интеграция, пользовательские поверхности и управление сервисами

На сентябрь 2026 года коммерческих продаж пока не было.

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

05

Следующий шаг: общая среда ShowDesk

Развитие отдельных интерактивов привело меня к следующему направлению — ShowDesk, общей среде проведения мероприятий с подключаемыми игровыми модулями. В прототипе реализованы ядро микшера, отдельный зрительский вывод и контракт модулей с примером Randomizer. Дальнейшее видение — SDK, маркетплейс конкурсов и персональные интерактивы, создаваемые с помощью AI. Архитектура и логика этого перехода описаны в отдельном кейсе ShowDesk.