Панелька
Весь учебный процесс в одном окне — от зачисления до защиты проекта
«Панелька» — единое окно учебного процесса: люди и группы, занятия с журналом, домашние задания, проекты, недельные отчёты и аналитика. Занятия и встречи идут внутри системы — с видеокомнатой, записью и AI-конспектом. Продукт работает в проде в IT-академии Lad и готов к внедрению в других компаниях.
Быстрая заявка Ответим в течение 24 ч. Достаточно контакта и пары слов о задаче.
Задача
Контекст
Учебный процесс разложен по инструментам, которые не знают друг о друге: расписание и группы — в таблице, посещаемость — во второй, домашние задания — в личных сообщениях, отчёты стажёров — в переписке, проекты — в отдельном трекере, созвоны — в стороннем сервисе.
В такой схеме нет единой картины: любой вопрос руководителя превращается в ручную выборку, а история уходит вместе с перепиской. Данные вроде бы есть, но собрать из них ответ нельзя.
Что именно не работало:
- состав группы не связан с занятиями: группа в таблице живёт отдельно от того, кто и когда у неё вёл;
- «не отмечено» неотличимо от «не пришёл», процент показывается без знаменателя;
- что прислали по заданию и что ответили, не сохраняется нигде;
- долги стажёров считаются вручную и задним числом;
- знания уходят с человеком: уволился преподаватель — работы остались непроверенными.
Чего ждали от продукта
Ожидания сформулировали до начала работы:
- один инструмент на весь цикл — от зачисления до защиты проекта;
- кабинет под каждую роль, а не один «админ-доступ»;
- занятия и встречи внутри системы: с видеокомнатой, записью и конспектом;
- домашние задания как часть процесса, а не в мессенджере;
- цифры со знаменателем и честной пометкой «мало данных».
Решение
Одно окно вместо шести инструментов
Спроектировали модель предметной области, в которой всё связано: занятие знает группу, задание — занятие, отчёт — свою неделю и версию формы, проект — свою команду. Сущности не дублируют друг друга: качество участия считается из ролей, связь «наставник — стажёр» выводится из направления. Поэтому смена наставника не рвёт состав стажёров, а смена роли не выбрасывает человека из направления.
Шесть кабинетов под семь ролей
Кабинеты собраны под роль, а не под «уровень доступа»:
- администратор, 20 экранов: реестры людей, слушателей и стажёров, направления с составом по ролям, наборы, группы, проекты, занятия и журнал, две аналитики, журнал аудита, раздел AI, импорт из таблицы и выгрузка в Excel;
- менеджер, 4 экрана: «требуют внимания», люди, слушатели, заметки о человеке — удалений, аналитики и проектов у него нет по устройству, а не по настройке;
- преподаватель, 10 экранов: свои группы, занятия с материалами и записями, журнал-матрица «занятие × студенты» с сохранением одной транзакцией, домашние задания с проверкой и перепиской, аналитика по шести срезам, публичное расписание группы по ссылке-токену;
- наставник, 11 экранов: стажёры, встречи общие и точечные вместе с повторяющимися сериями, конструктор формы отчёта с живым предпросмотром, доска недели, лента отчётов с поиском по тексту ответов;
- стажёр и руководитель проекта, 6 экранов: форма недели, черновик, отправка, история с ответами по той версии формы, что была, разбор от наставника, карточка проекта;
- слушатель, 5 экранов: группа и преподаватель, занятия, посещаемость со сводкой, домашние задания со сдачей и перепиской, свои показатели без сравнения с сокурсниками.
Общие экраны переиспользуются между кабинетами: карточка группы, журнал занятия, карточка человека, лента комментариев, команда проекта, доска недели. Переключение кабинетов — в шапке, без повторного входа.
Права как модель, а не набор галочек
Семь ролей с рангами: править можно только тех, кто ниже по рангу. В браузер уезжают возможности, а не роль, поэтому запрет выражается отсутствием кода, а не проверкой в каждом обработчике. Новый кабинет добавляется как часть модели.
Видео и AI внутри занятия
Занятия и встречи проходят в самой панели:
- видеокомната: камера, микрофон, демонстрация экрана, сетка участников, поднятая рука;
- модерация с уровнями прав: отключить чужую дорожку и выгнать участника — с подтверждением;
- запись в хранилище: общая видеозапись для просмотра и аудиодорожка для распознавания;
- посещаемость собирается из событий комнаты, но ручная отметка преподавателя важнее;
- повторяющиеся серии по расписанию, каждая встреча переносится и отменяется отдельно;
- AI-конвейер: нарезка длинных записей, распознавание, разметка спикеров по таймлайну активности, конспект занятия с содержанием, цитатами и контрольными вопросами — конспект публикуется в материалы занятия;
- расход считается по фактам: токены, секунды аудио, модель — и пересчитывается по прошедшим встречам при смене тарифа.
Если видеосервер недоступен, журнал и материалы продолжают работать — недоступна только кнопка «подключиться».
Аналитика на честных знаменателях
Собрали 13 срезов: посещаемость, активность и задания по группам, студентам и преподавателям; отчёты по неделям, стажёрам, наставникам и направлениям; встречи по стажёрам, наставникам и неделям. Знаменатель всегда рядом с процентом — «75 %» без «из скольких» не показывается. «Не отмечено» — отдельная цифра, а не прогул; отпуск освобождает от долга, будущее не портит статистику. Те же правила счёта работают на экране и в выгрузке CSV.
Отчёты, реестры и материалы
Работа с людьми, отчётами и файлами:
- конструктор формы недельного отчёта из 11 типов полей; версии формы неизменяемы, поэтому старые отчёты читаются в том виде, в каком их заполняли;
- доска недели: подопечные строками, состояние колонкой, сверху «не сдали: 3» — клик фильтрует;
- три реестра — пользователи, слушатели, стажёры — с одной карточкой человека на все и восемью фильтрами, включая «без группы» и «без направления»;
- статус участия и доступ — разные вещи: «что человек делает в программе» и «открыт ли вход»;
- импорт из таблицы в два шага: сначала предпросмотр — что создастся, что пропустится, где ошибки, — потом запись; существующее не перезаписывается;
- материалы живут в хранилище без публичных ссылок: файл кладётся подписанным запросом, ссылка кэшируется, поэтому вся группа пользуется одним адресом;
- девять образов собирает CI, миграции выполняются при старте сервиса, откат — по тегу образа.
Что делали мы
Продукт собственный: модель, бэкенд, интерфейс и контур эксплуатации собраны внутри студии, без соисполнителей и субподрядчиков.
Наша работа целиком:
- модель предметной области и общее ядро домена;
- семь сервисов на FastAPI, у каждого своя база; права проверяются на входе, инварианты — в домене;
- шесть кабинетов и 61 экран, включая переиспользуемые общие экраны;
- видео и запись: видеосервер, вебхуки, планировщик серий, модерация, восстановление записей, застрявших в промежуточном состоянии;
- AI-обработка: нарезка, распознавание, разметка спикеров, сборка конспекта, учёт расхода;
- аналитика и работа с файлами: одинаковые правила счёта на всех экранах и в выгрузке;
- интерфейс и доступность: одна непрерывная поверхность, светлая и тёмная темы без вспышки, фильтры в адресной строке, тап-таргеты от 44 пикселей, диалоги с фокусом и подписями для скринридера;
- серверный рендеринг с настоящей авторизацией и разделённым кэшем;
- контур развёртывания, тесты, документация и регламенты эксплуатации.
Внешние компоненты — видеосервер LiveKit, хранилище S3/MinIO и OpenAI-совместимый провайдер распознавания и языковой модели — подключены как сменные адаптеры: провайдера AI можно сменить настройками, не трогая домен.
Результат
Продукт работает в проде в IT-академии Lad и готов к внедрению в других компаниях: контур поднимается целиком одним compose-файлом, откат — по тегу образа. Учебный цикл закрыт в одном месте — от зачисления до защиты проекта.
Что получилось:
- единый контур вместо шести инструментов: все кабинеты живут в одной оболочке и переключаются без повторного входа;
- кабинет под каждую роль вместо одного «админ-доступа», права разграничены по умолчанию;
- видео и AI стали частью занятия: посещаемость собирается из событий комнаты и уступает ручной отметке, конспект занятия становится его материалом;
- цифрам можно верить: одинаковые знаменатели на всех экранах и в выгрузке, «не отмечено» отделено от прогула;
- история не переписывается: версии формы отчёта неизменяемы, сообщения не редактируются, сдачу нельзя закрыть задним числом;
- продукт переносится на нового заказчика без переделки домена: внешние системы подключаются адаптерами, а провайдер AI меняется настройками;
- главный риск внедрения снят — систему можно развивать: доменные правила, права и аналитические знаменатели закреплены тестами, каждая предметная область описана в документации.
Выводы
Права оказались моделью, а не набором галочек. Ранги ролей и возможности вместо роли в браузере дали добавлять кабинет как часть модели, а не как ещё одну проверку в каждом обработчике; запрет выражается отсутствием кода, а не условием.
Аналитика со знаменателем дороже в разработке, чем просто процент: нужно определить, какие занятия и недели человек обязан был отработать. Мы выбрали дорогой вариант сознательно — именно поэтому цифрам начинают верить, а «не отмечено» не превращается в прогул.
Продуктовые принципы оказались важнее отдельных функций: сдачу нельзя закрыть ни по сроку, ни после курса, ни вручную; ручное слово важнее автоматики; рейтингов нет — стажёр видит свои цифры, но не чужие; неполная картина выглядит неполной и говорит об этом прямо. Эти решения дороже, но именно они делают инструмент рабочим, а не отчётным.
Отдельный вывод — про порядок работ: сначала модель домена и правила, потом экраны. Права, знаменатели и статусы, заложенные в модель, не приходится повторять в каждом обработчике, а кабинет собирается поверх уже готовых правил; обратный порядок стоил бы переписывания.
Лицензия и внедрение
- Режим
- Возможна лицензия
- Состояние продукта
- В продакшене
Лицензия на инсталляцию: разворачиваем продукт на вашей инфраструктуре, исходный код и обновления — по договору.
Условия лицензирования и внедрения обсуждаются индивидуально. Информация на странице не является офертой.
Технические решения
Лицензия, внедрение или похожий продукт
Продукт можно лицензировать и развернуть у вас, внедрить под ваши процессы или разработать похожее решение с нуля. Опишите задачу — вернёмся с вариантами и сроками.