Команда Mojarung | BezumHack 2026 | Кейс от Astro Technologies
Seamless — интегрированная корпоративная платформа, объединяющая управление задачами (Kanban-core), документооборот (Docs-core) и CI/CD-интеграцию в единое рабочее пространство. Платформа решает ключевую боль компаний — разрозненность сервисов и ручное связывание информации между ними.
- Проблема и решение
- Архитектура системы
- Сущности и их связи
- Реализованные оптимизации
- Технологический стек
- Быстрый старт
- Структура репозитория
| # | Боль | Корень проблемы | Влияние |
|---|---|---|---|
| 1 | Разрозненная документация | Документы в Google Docs/Drive не привязаны к задачам, нет версионирования, нет статусов | Потеря контекста решений, невозможность отследить «почему» |
| 2 | Ручное планирование встреч | Календарь — только инструмент согласования дат, встречи не связаны с задачами | Суммаризация, записи, решения теряются |
| 3 | Слабая CI/CD интеграция | Таск-трекер и репозиторий связаны поверхностно (только статусы PR) | Нет сквозного цитирования документов, нет привязки к встречам |
| 4 | Информационные силосы | Уведомления разбросаны по разным сервисам | Пропущенные упоминания, дублирование информации |
┌─────────────────────────────────────────────────────────────────────┐
│ SEAMLESS PLATFORM │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌────────────────────────┐ │
│ │ DOCS-CORE │◄─►│ KANBAN-CORE │◄─►│ CI/CD-CORE │ │
│ │ │ │ │ │ │ │
│ │ • Документы │ │ • Задачи │ │ • Ветки по задачам │ │
│ │ • Версии │ │ • Эпохи │ │ • Статусы по PR │ │
│ │ • Статусы │ │ • Встречи │ │ • Релизы │ │
│ │ • Виджеты │ │ • Доски │ │ • Автосвязь документов │ │
│ └──────┬───────┘ └──────┬───────┘ └───────────┬────────────┘ │
│ │ │ │ │
│ └──────────────────┼───────────────────────┘ │
│ │ │
│ ┌─────────────▼──────────────┐ │
│ │ ЕДИНАЯ СИСТЕМА УВЕДОМЛЕНИЙ │ │
│ │ + ОБЩИЙ КОНТЕКСТ СУЩНОСТЕЙ │ │
│ └────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────┘
Ключевая ценность: пользователь работает в одном окне. Контекст переносится между подсистемами автоматически — создание встречи из задачи наследует участников и документы, правка документа уведомляет исполнителя задачи, PR автоматически обновляет статус на доске.
Платформа построена по принципу модульного монорепо с единым docker-compose.yaml:
graph TB
subgraph "Frontend Layer"
NGINX["Nginx Reverse Proxy<br/>SSL / Load Balancing"]
FE["Worklenz Frontend<br/>React + Vite + Ant Design"]
end
subgraph "Backend Layer"
BE["Worklenz Backend<br/>Node.js + Express + Socket.IO"]
MEET["Meeting Service<br/>WebRTC + Socket.IO"]
end
subgraph "AI Layer"
RIVA["NVIDIA Riva ASR<br/>Speech-to-Text"]
DS["DeepSeek V3<br/>Суммаризация"]
end
subgraph "Data Layer"
PG[(PostgreSQL 15)]
REDIS[(Redis 7)]
MINIO[(MinIO<br/>S3-совместимое хранилище)]
end
NGINX --> FE
NGINX --> BE
NGINX --> MEET
FE <-->|WebSocket| BE
MEET --> RIVA
RIVA --> DS
BE --> PG
BE --> REDIS
BE --> MINIO
| Сервис | Образ | Назначение |
|---|---|---|
postgres |
PostgreSQL 15 Alpine | Основная БД: проекты, задачи, документы, пользователи |
redis |
Redis 7 Alpine | Кэш сессий, real-time данные, очереди уведомлений |
minio |
MinIO | S3-совместимое хранилище файлов и вложений |
backend |
Node.js (Express) | REST API + WebSocket сервер для всех core-подсистем |
frontend |
React (Vite) | SPA с Ant Design, Kanban-доски, документы, уведомления |
nginx |
Nginx 1.27 | Реверс-прокси, SSL-терминация, маршрутизация |
app (videoconference_ai) |
Node.js + Python + FFmpeg | Видеоконференции с WebRTC, запись и AI-обработка |
db-backup |
PostgreSQL Alpine | Автоматические бэкапы БД каждые 24ч |
certbot |
Certbot | Автоматическое получение и обновление SSL-сертификатов |
erDiagram
PROJECT ||--o{ EPOCH : "содержит"
EPOCH ||--o{ TASK : "включает"
EPOCH ||--o{ DOCUMENT : "имеет"
TASK ||--o{ DOCUMENT : "привязан к"
TASK ||--o{ MEETING : "инициирует"
TASK ||--o{ COMMENT : "обсуждается в"
TASK }o--o{ LABEL : "помечен"
TASK }o--|| STATUS : "имеет"
MEETING ||--o{ RECORDING : "записывается в"
RECORDING ||--|| SUMMARY : "суммаризируется в"
DOCUMENT ||--o{ VERSION : "версионируется"
PROJECT }o--o{ USER : "участвуют"
USER }o--|| ROLE : "имеет"
TASK }o--o{ USER : "назначены"
RELEASE ||--|| EPOCH : "завершает"
NOTIFICATION }o--|| USER : "адресовано"
| Сущность | Описание | Ключевые связи |
|---|---|---|
| Проект | Верхнеуровневая единица. Содержит все данные по заказу | → Эпохи, Участники, Документы |
| Эпоха (Спринт) | Временной отрезок с целями и дедлайнами | → Задачи, Документы, Релиз |
| Задача | Атомарная единица работы на Kanban-доске | → Документы, Встречи, Комментарии, Подзадачи, Метки, Статус |
| Документ | Структурированный текст с версионированием | → Задачи, Эпоха, Версии, Статус документа |
| Встреча | Видеоконференция с WebRTC | → Задачи, Документы, Участники, Запись, Суммаризация |
| Запись встречи | WebM-аудио/видео записи конференций | → Встреча, Транскрипция, Суммаризация |
| Суммаризация | AI-генерированный отчёт по встрече | → Встреча, Задача (в комментариях) |
| Релиз | Событие завершения Эпохи | → Эпоха, CI/CD пайплайн |
| Уведомление | Единое оповещение пользователя | → Любая сущность (полиморфное) |
| Комментарий | Обсуждение с цитированием | → Задача, Документ (прямое цитирование) |
| Метка (Label) | Классификатор задач | → Задачи (many-to-many) |
| Статус | Состояние задачи на доске | → Задачи, Фазы |
| Роль | Docs-core | Kanban-core | CI/CD-core | Область видимости |
|---|---|---|---|---|
| Заказчик | 📖 Общие бизнес-документы Эпохи | 📖 Свой проект (только просмотр) | ❌ | Один проект |
| Разработчик | 📖📝 Технические документы своих задач | 📖📝 Задачи, на которые назначен | 📖 Свои PR и ветки | Несколько проектов |
| Менеджер | 📖📝 Все документы | 📖📝🗑 Полный доступ ко всем задачам | 📖📝 Релизы, обзор PR | Все проекты |
Важно: Docs-core разделён на области видимости:
- 🟢 Общие документы Эпохи — доступны всем ролям проекта (бизнес-требования, общие цели)
- 🟡 Технические документы задач — доступны менеджеру и назначенному разработчику
- 🔴 Внутренние документы — доступны только менеджерам (бюджеты, контракты)
- Древовидная структура: Документы организованы по проектам → эпохам → задачам
- Контекстная видимость: Разделение на общие бизнес-документы (видны заказчику) и технические (только разработчик + менеджер)
- Папки проектов с автоматическим наследованием прав доступа
- История изменений документов с возможностью отката
- Привязка итерации к обоснованию: каждая версия может ссылаться на встречу или обсуждение, послужившее причиной изменения
- Статусы документов: Черновик → На рассмотрении → Утверждён — процесс согласования через участников
- Виджет статуса задачи внутри документа — актуальный статус задачи отображается без перехода в Kanban
- Цитирование из документа в задачу — прямые ссылки с превью текста
- Drag-and-drop доски с колонками по статусам
- Группировка по статусам, приоритетам, меткам, фазам
- Фильтрация и поиск задач в реальном времени
- Подзадачи и зависимости между задачами
- Фазы (Эпохи/Спринты) с отслеживанием прогресса
- Создание встречи из карточки задачи — автоматическое наследование участников, связанных документов и контекста задачи
- Выбор тайм-слотов — организатор предлагает слоты, участники отмечают удобные; система автоматически определяет ближайшее совпадение
- Автоматическая привязка к сущностям — встреча наследует все связи задачи (документы, эпоха, подзадачи)
Пайплайн обработки видеоконференции:
Завершение встречи
│
▼
┌─────────────────────┐
│ WebM → WAV (FFmpeg) │ Извлечение аудио, 16kHz моно
└─────────┬───────────┘
▼
┌─────────────────────┐
│ NVIDIA Riva ASR │ Speech-to-Text транскрипция (gRPC API)
└─────────┬───────────┘
▼
┌─────────────────────┐
│ Форматирование чата │ Объединение аудио-транскрипции + текстового чата
└─────────┬───────────┘
▼
┌─────────────────────┐
│ DeepSeek V3 LLM │ Структурированная Markdown-суммаризация:
│ │ • Основные темы обсуждения
│ │ • Список задач / Планы (Action Items)
│ │ • Выжимка из чата
└─────────┬───────────┘
▼
Результат привязан
к карточке задачи
Ключевые особенности:
- 🎥 Автоматическая запись — стелс-режим, один из участников автоматически назначается record-host
- 💬 Сохранение чата — история сообщений с таймстемпами
- 📝 Структурированный отчёт — Markdown-документ с выделением Action Items
- 🔗 Привязка к задаче — суммаризация автоматически попадает в карточку задачи
- Прямое цитирование документов в задачах — при добавлении цитаты из документа в карточку задачи текст отображается с превью и ссылкой на исходный документ
- Обновления в документе → уведомление в задаче — если задача в статусе «Требуется информация», дополнение привязанного документа автоматически цитируется в обсуждении задачи
- Автоматическое обновление статусов по PR — при открытии Pull Request с идентификатором задачи (
TASK-XXX) статус на доске обновляется автоматически:- PR открыт →
In Review - PR одобрен →
Approved - PR вмержен →
Done
- PR открыт →
- Иерархия веток привязана к задачам:
feature/TASK-123-название
- Мануальная привязка документов к задачам через UI
- Автоматическая привязка по упоминаниям — при упоминании идентификатора задачи в документе создаётся двусторонняя связь
- Фазы/Эпохи отражаются и в Kanban (группировка задач), и в Docs (иерархия документов вокруг спринта)
- Автоматический прогресс спринта — процент выполнения рассчитывается из статусов задач внутри эпохи
- Полиморфные уведомления — упоминание в комментарии к документу и упоминание в обсуждении задачи приходят в одно место
- Группировка по контексту — уведомления агрегируются по проекту и по типу сущности
- Real-time через Socket.IO — мгновенная доставка через WebSocket
- Единое рабочее пространство — переключение между Kanban, документами и встречами без перехода между сервисами
- Контекстные действия — кнопка «Создать встречу» прямо из карточки задачи
- Сквозной поиск по всем сущностям
- Табы внутри проекта — Tasks List / Board / Gantt / Insights в одном виде
- Task Drawer — боковая панель задачи с полным контекстом: документы, комментарии, вложения, чеклисты
- Drag-and-drop на Kanban-доске
- Темная/светлая тема с плавным переключением
| Технология | Версия | Назначение |
|---|---|---|
| React | 18 | UI-фреймворк |
| TypeScript | 5 | Типизация |
| Vite | — | Сборка и HMR |
| Ant Design | — | UI-библиотека компонентов |
| Redux Toolkit | — | Управление состоянием |
| Socket.IO Client | — | Real-time WebSocket |
| React Router v6 | — | Маршрутизация (SPA) |
| i18next | — | Интернационализация |
| Технология | Версия | Назначение |
|---|---|---|
| Node.js | 20 | Среда выполнения |
| Express | — | HTTP-сервер и REST API |
| Socket.IO | — | WebSocket для real-time обновлений |
| PostgreSQL | 15 | Основная БД |
| Redis | 7 | Кэш сессий, pub/sub |
| MinIO | — | S3-совместимое хранилище файлов |
| Passport.js | — | Аутентификация (JWT + сессии) |
| Технология | Назначение |
|---|---|
| WebRTC | Peer-to-peer видеоконференции |
| NVIDIA Riva ASR | Speech-to-Text транскрипция |
| DeepSeek V3 (via NVIDIA API) | LLM-суммаризация встреч |
| FFmpeg | Конвертация аудио (WebM → WAV) |
| Python 3 | Пайплайн AI-обработки |
| Технология | Назначение |
|---|---|
| Docker + Docker Compose | Контейнеризация и оркестрация |
| Nginx | Реверс-прокси, SSL-терминация |
| Let's Encrypt (Certbot) | Бесплатные SSL-сертификаты |
- Docker (≥ 20.x)
- Docker Compose (≥ 2.x)
NVIDIA_API_KEYдля работы AI-суммаризации (получить на NVIDIA NGC)
# 1. Клонировать репозиторий
git clone https://github.com/Mojarung/bezumhack_2026.git
cd bezumhack_2026
# 2. Скопировать и настроить переменные окружения
cp .env.example .env
# Отредактировать .env — указать пароли и NVIDIA_API_KEY
# 3. Автоматическая настройка (генерация секретов + SSL)
chmod +x manage.sh
./manage.sh
# Выбрать пункт меню "Auto Configure" → "Start Services"
# ИЛИ вручную:
docker compose --profile express up -d| Сервис | URL |
|---|---|
| Платформа | https://localhost |
| Видеоконференции | http://localhost:3000 |
| MinIO Console | http://localhost:9001 |
⚠️ При локальном запуске с self-signed SSL браузер покажет предупреждение — нажмите «Advanced» → «Proceed».
Платформа поставляется с интерактивным скриптом управления manage.sh:
./manage.shДоступные операции:
▶️ Запуск / ⏹ остановка / 🔄 перезапуск сервисов- 📊 Просмотр статуса и логов каждого контейнера
- 💾 Бэкап и восстановление данных
- 🔧 Автоконфигурация окружения
- 🔒 Настройка SSL (self-signed / Let's Encrypt)
- 🏗 Сборка Docker-образов
bezumhack_2026/
├── docker-compose.yaml # Общий compose-файл (все сервисы)
├── .env.example # Шаблон переменных окружения
├── manage.sh # Интерактивный скрипт управления
│
├── worklenz-backend/ # Backend API (Node.js + Express)
│ ├── src/
│ │ ├── controllers/ # REST-контроллеры (задачи, проекты, документы...)
│ │ ├── routes/ # Маршрутизация API
│ │ ├── services/ # Бизнес-логика
│ │ ├── models/ # Модели данных
│ │ ├── socket.io/ # WebSocket-обработчики (real-time)
│ │ ├── middlewares/ # Auth, CORS, валидация
│ │ └── migrations/ # Миграции БД
│ ├── database/ # SQL-схемы и начальные данные
│ └── Dockerfile
│
├── worklenz-frontend/ # Frontend SPA (React + Vite)
│ ├── src/
│ │ ├── components/ # UI-компоненты (Kanban, Task Drawer, Gantt...)
│ │ ├── features/ # Redux-слайсы (enhanced-kanban, task-drawer...)
│ │ ├── pages/ # Страницы (проекты, настройки, отчёты)
│ │ ├── api/ # API-клиенты
│ │ ├── hooks/ # React-хуки
│ │ └── services/ # Вспомогательные сервисы
│ └── Dockerfile
│
├── videoconference_ai/ # Сервис видеоконференций + AI
│ ├── backend/
│ │ ├── server.js # WebRTC-сигналинг + Socket.IO
│ │ └── postprocess.py # AI-пайплайн (Riva ASR → DeepSeek → Summary)
│ ├── frontend/
│ │ ├── index.html # UI конференции
│ │ ├── main.js # WebRTC-клиент, управление потоками
│ │ └── style.css # Стили конференции
│ └── Dockerfile
│
├── nginx/ # Конфигурация Nginx
│ ├── nginx.conf # Основной конфиг
│ └── conf.d/worklenz.conf # Виртуальный хост + проксирование
│
└── scripts/
└── db-init-wrapper.sh # Скрипт инициализации БД
Требование ТЗ: приоритет open-source и self-host. Все компоненты (PostgreSQL, Redis, MinIO, Nginx) развёртываются локально. AI-сервисы работают через API NVIDIA, но модель Riva ASR может быть развёрнута on-premise.
Минимальный порог входа для развёртывания. Один docker compose up поднимает всю платформу — от БД до AI-суммаризации. Нет необходимости настраивать 5–7 разных сервисов вручную.
Видеоконференции — ключевая точка генерации контекста (записи, суммаризации). Встраивая WebRTC и AI-пайплайн в платформу, мы получаем seamless интеграцию: запись автоматически привязывается к задаче, суммаризация появляется в карточке.
- ❌ Корпоративный мессенджер — не реализован намеренно. Telegram/Slack значительно превосходят любой встроенный чат; нет смысла создавать ухудшенный аналог (как указано в ТЗ).
- ❌ Автоматическое развёртывание кода — CI/CD-core фокусируется на методологии (иерархия веток, PR, релизы), а не на deployment pipelines.
Проект разработан в рамках хакатона BezumHack 2026.
Seamless — когда все сервисы работают как один.