- Заказчик
- Mitu
- Год
- 2026
- Отрасль
- Ивенты
- Формат
- Веб-сервис

- 3продукта из одного кода: облако, коробка, офлайн
- 1время на всех экранах — от суфлёра до зала
- 0запросов к серверу на каждую секунду таймера
О проекте
Задача и решение
Задача
Заказчик пришёл с идеей сервиса для ивент-продюсеров: тайминг мероприятия собирается заранее, а во время эфира каждое устройство — суфлёр спикера, экран зала, телефоны команды — должно показывать одно и то же время с точностью до секунды. Без задержек, без расхождений и без падений посреди конференции.
Что мы сделали
Мы взяли проект с нуля под ключ — от прототипа до продакшн-кластера: редактор сценария с блоками и своими колонками, пульт оператора, экраны спикера и зала, PDF-тайминг для площадки, подписки, админка платформы и маркетинговый сайт.
Из одного кода собираются три продукта: облачный SaaS, коробка для корпоративного сервера заказчика и офлайн-версия, которая работает на одном ноутбуке прямо на площадке без интернета.
Состав работ
Что вошло в проект
- Редактор сценария и пульт оператораПродукт
- Экраны спикера, зала и командыИнтерфейсы
- Синхронизация в реальном времениРазработка
- Подписки, тарифы и админка платформыБиллинг
- PDF-тайминг для площадкиРазработка
- Кластер, бэкапы и выкладка без простояИнфраструктура
Как это устроено
Решения, на которых держится проект
Что каждое решение даёт бизнесу и как оно сделано технически.
- (01)
Одно время на всех экранах
Спикер, ведущий и зал видят одинаковый таймер. Секундный сбой сети не превращается в сорванный тайминг.
Под капотомОтдельный WebSocket-сервис, состояние таймера в Redis с атомарными Lua-обновлениями и раздача событий между серверами через Pub/Sub. Клиент получает снимок и сам считает время по смещению серверных часов, поэтому каждая секунда не требует сетевого запроса.
- (02)
Два оператора не мешают друг другу
Команда ведёт эфир с нескольких ноутбуков и не боится случайно отменить действия коллеги.
Под капотомКаждая команда несёт уникальный id и номер версии состояния. Повтор отбрасывается, устаревшая команда отклоняется вместе с актуальным снимком — оптимистичная блокировка вместо гонок.
- (03)
Три продукта без трёх команд разработки
Один сервис продаётся как облако, ставится на сервер крупного клиента или работает на площадке без интернета.
Под капотомМатрица возможностей каждой редакции описана в одном файле и покрыта тестами. Офлайн-версия собирается в Docker Compose и не зависит ни от почты, ни от оплаты, ни от внешних сервисов.
- (04)
Безопасность для корпоративных клиентов
Сервису доверяют закрытые мероприятия: экран нельзя подключить без разрешения, а каждое действие администратора видно в журнале.
Под капотомПароли на Argon2, вход по passkeys, сессии с отзывом, проверка прав на каждом действии. Экраны подключаются по короткоживущим подписанным пропускам, привилегированные операции пишутся в аудит в той же транзакции.
- (05)
Обновления без остановки
Новые функции выходят в любой день, даже во время чужих мероприятий, и не сбрасывают идущий эфир.
Под капотомKubernetes, PostgreSQL на CloudNativePG с PgBouncer, ежедневные бэкапы с проверкой восстановления. Конвейер «сборка → миграция → раскатка → проверка» и совместимость схемы на время выкладки.
Технологии
Стек проекта
- Интерфейс
- Next.js 16
- React Server Components
- Tailwind CSS 4
- next-intl
- Реальное время
- Node.js
- WebSocket
- Redis Pub/Sub
- Lua-скрипты
- Данные
- PostgreSQL 17
- Drizzle ORM
- CloudNativePG
- PgBouncer
- Безопасность
- Argon2
- WebAuthn / Passkeys
- Подписанные пропуска
- Cap.js
- Инфраструктура
- Kubernetes (k3s)
- Traefik
- Ansible
- Infisical
- GitHub Actions
- Качество
- TypeScript
- Vitest
- Интеграционные тесты на Postgres и Redis
Нужен похожий проект?
Написать нам