# Изменения Формат основан на [Keep a Changelog](https://keepachangelog.com/ru/1.1.0/), проект придерживается [семантического версионирования](https://semver.org/lang/ru/). ## [0.0.7] — 2026-07-27 Настройки устройств: выбор аудиовывода и компактная шторка на мобильном. ### Добавлено - Выбор устройства аудиовывода (динамики/наушники/Bluetooth-гарнитура) в «Настройках устройств» рядом с микрофоном и камерой. Выбор переживает перезаход в комнату. Список показывается только там, где браузер умеет им управлять (Android Chrome и другие Chromium на десктопе/мобильном); в iOS Safari поддержки нет вовсе — вместо списка короткая подсказка, что переключение звука там на стороне системы. - На мобильной ширине «Настройки устройств» открываются компактной шторкой снизу вместо модалки по центру экрана — закрывается свайпом вниз, тапом вне панели или Escape. На десктопе поведение не изменилось. ### Примечания по эксплуатации - Управлять маршрутизацией звука (принудительно включить громкую связь или перекинуть звук на Bluetooth) из браузера нельзя в принципе — это делает ОС, веб-страница может только выбрать устройство вывода там, где браузер это позволяет (`setSinkId`). ## [0.0.6] — 2026-07-27 Управление фокусом основного окна конференции: участника можно закрепить, а без закрепления окно само следует за говорящим. Плюс общий футер на всех страницах сервиса. ### Добавлено - Закрепление участника в основном окне — кнопка-булавка на плитке. Закреплённый участник держит фокус, даже когда говорят другие; повторное нажатие снимает закрепление, как и выход закреплённого из комнаты. Закреплённая плитка помечена рамкой и подсвеченной булавкой; на тач-устройствах булавка видна без наведения. - Общий футер на всех страницах, кроме комнаты конференции: версия инстанса и копирайт со ссылкой на автора. ### Изменения - Основное окно конференции следует за активным говорящим, а не удерживает выбранного один раз участника. Фокус не переключается на короткие реплики (удержание 1.2 с) и не уводится с идущей демонстрации экрана. Среди нескольких одновременно говорящих крупно показывается тот, у кого включена камера. Мини-плеер (Document PiP) работает как раньше. - Демонстрация экрана по-прежнему главнее всего: она перебивает и закрепление, а после её завершения фокус возвращается на закреплённого участника. - Футер админки заменён общим компонентом; в брендовой панели экранов входа строка копирайта с захардкоженным годом убрана — год теперь берётся текущий. ### Исправлено - Календарь: «г.» после года убрана и из подписей дней в самой сетке (видны как всплывающая подсказка и в accessibility-дереве) — в недельном и месячном виде. В 0.0.4 это было исправлено только для подписи периода. ## [0.0.5] — 2026-07-27 Контактный адрес инстанса: настраиваемый адрес для ответов на письма (уходят от `no-reply@`) и кнопка проверки почтовой конфигурации из админки. ### Добавлено - Настройка «Контактный адрес» в админке (вкладка «Настройки») — email подставляется в заголовок `Reply-To` писем подтверждения регистрации, приглашений на конференции и саммари; при выключенной настройке `Reply-To` не проставляется, поведение как раньше. - Кнопка «Отправить тестовое письмо» — синхронная проверка почтовой конфигурации без регистрации фиктивного пользователя. Получатель по умолчанию — email текущего администратора, можно указать другой. Результат виден сразу: успех либо текст ошибки транспорта (сервер недоступен/получатель отклонён), без логина и пароля SMTP в ответе. ## [0.0.4] — 2026-07-26 Календарь конференций: перестроен в раскладку «календарь во всю ширину плюс модальные окна» — карточки событий разгружены, подробности вынесены во всплывающее окно. ### Изменения - Форма создания и редактирования конференции больше не занимает постоянную колонку справа, а открывается в модальном окне — по кнопке «Новая конференция», по карандашику на карточке события или из информационного окна. Добавлен общий хук `useModalDismiss` (закрытие по Escape и возврат фокуса на элемент, из которого окно открыли). - Блок календаря занимает всю ширину страницы. - Карточка события в сетке содержит только название (обрезается многоточием и больше не вылезает за границы ячейки) и — у организатора — кнопку редактирования. Время, номер и статус переехали в информационное окно. - Клик по карточке события всегда открывает информационное окно, в том числе для своих конференций: редактирование стало отдельным действием. - Информационное окно вхождения дополнено статус-бейджем и кнопкой «Редактировать» для организатора. ### Исправления - Подпись периода в недельном и месячном виде больше не содержит «г.» (форматирование через `Intl.DateTimeFormat` вместо локали FullCalendar). ## [0.0.3] — 2026-07-26 Мобильная версия: адаптивная вёрстка для узких экранов на ключевых экранах сервиса, найденная и поправленная по итогам ручного прохода по мобильному интерфейсу. ### Исправления - Вход/регистрация (`AuthLayout`): заголовок «Ваша инфраструктура» вылезал за край брендовой панели на узких экранах — кегль теперь адаптивно уменьшается (`clamp()`) вместо обрезки. - Комната конференции: топбар и тулбар не помещались на мобильной ширине (тулбар с 8 кнопками физически шире экрана, крайние кнопки были обрезаны без возможности до них докрутить). На мобильном тулбар сокращён до микрофона/камеры/устройств/чата/выхода (демонстрация экрана, полноэкранный режим и мини-окно скрыты — редко нужны с телефона), в топбаре скрыты название конференции и строка статуса, а чип «№ … / Пригласить» оставлен — с телефона он нужнее. - Админка: заголовок и 4 вкладки раздела не помещались в ширину (вкладки переносятся в 2 ряда, поясняющий текст под заголовком скрыт на мобильном); таблицы «Конференции» и «Пользователи» обрезались вбок — на мобильном в них остаются только ключевые колонки, название конференции стало кнопкой, открывающей то же окно редактирования, что и раньше (туда же добавлена кнопка удаления — на мобильном столбец действий скрыт). - Подключение к конференции (`/join`): кнопка «Ввести другую ссылку или номер» на экране завершённой конференции вылезала за карточку на узких экранах (единственная кнопка на этом флоу без формы-обёртки, задающей ей ширину, а `.btn` держит `white-space: nowrap`). ## [0.0.2] — 2026-07-26 Релиз воспроизводимого боевого развёртывания: конфигурация деплоя перенесена в репозиторий как источник истины, устранён инцидент безопасности, добавлена пошаговая инструкция для девопсов. ### Безопасность - `postgres` и `redis` сняты с публикации на `0.0.0.0` и привязаны к `127.0.0.1` (docker писал DNAT в обход `ufw`, порты были открыты в интернет). - Порты `backend`, `livekit`-signaling, `prometheus`, `grafana`, `llm` также переведены на loopback — наружу остаются только `80/443/7881` (+ UDP `54000-54100`). - Для `redis` включена обязательная аутентификация (`--requirepass`); пароль проброшен во всех потребителей (backend, worker, exporter, livekit, egress). ### Развёртывание и инфраструктура - `nginx`/`coturn`/`livekit`: TLS на 443, http→https редирект, ACME-webroot; конфиги вынесены в `*.template` и рендерятся через `deploy/render-templates.sh` (`envsubst`). Секреты — только из `.env`, обязательны (`${VAR:?}`), без небезопасных дефолтов. - `--env-file .env` добавлен во все вызовы `docker compose` (без него compose не подхватывал корневой `.env` и брал dev-дефолты — корень бага «конференции не работают у других» и `WARN: LIVEKIT_API_KEY not set`). - Мониторинг развязан от опционального LLM: `job=llm`/алерт `LlmDown` закомментированы для профилей без `llm`/`llm-gpu`. - `install.sh`: fail-fast валидация — установка останавливается с понятной ошибкой, если на боевом домене остались dev-плейсхолдеры (`example.com`, `ws://localhost`, `devkey` и т.п.), вместо тихого подъёма нерабочего прода. - `install.sh`: флаг `--monitoring` (Grafana/Prometheus раньше не поднимались ни в одном пресете). - `.env.example` покрывает все параметры деплоя; дефолтные профили — `media,monitoring`. ### Исправления - `nginx`: `/openapi.json` больше не перехватывается SPA-фолбэком, а отдаётся схемой backend. - Предупреждение в `.env.example`: `LIVEKIT_PUBLIC_URL` в HTTPS-проде обязан быть `wss://`. ### Документация - Добавлено `docs/deploy/DEPLOYMENT.md` — полное руководство от голой Ubuntu 24 до рабочего `https://<домен>`: SSL, `.env`, профили, траблшутинг, доступ к мониторингу через ssh-туннель, описание панелей, runbook включения транскрибации/суммаризации. Ссылки добавлены в `README.md`. - `docs/deploy/install.md`: задокументирован флаг `--monitoring`. ### Примечания по эксплуатации - На боевом сервере исправлен certbot deploy-hook (`nginx -s reload` → `restart`): без этого после автопродления сертификата nginx продолжал бы отдавать старый. - TURN-раздача клиентам (`rtc.turn_servers` + TURN/TLS на 443) остаётся опциональной — кросс-сетевое медиа проверено вживую и работает без неё; нужна только для экстремального NAT (CGNAT/жёсткий корпоративный firewall). ## [0.0.1] Первоначальная версия VidConf. [0.0.7]: https://github.com/MaxRonzhin/vidconf_rel/releases/tag/v0.0.7 [0.0.6]: https://github.com/MaxRonzhin/vidconf_rel/releases/tag/v0.0.6 [0.0.5]: https://github.com/MaxRonzhin/vidconf_rel/releases/tag/v0.0.5 [0.0.4]: https://github.com/MaxRonzhin/vidconf_rel/releases/tag/v0.0.4 [0.0.3]: https://github.com/MaxRonzhin/vidconf_rel/releases/tag/v0.0.3 [0.0.2]: https://github.com/MaxRonzhin/vidconf_rel/releases/tag/v0.0.2 [0.0.1]: https://github.com/MaxRonzhin/vidconf_rel/releases/tag/v0.0.1