# Архитектура первой версии

Исходные требования: [ТЗ версии 2.3](../../ТЗ-интерактивные-занятия-v2.md). Код разделён на `apps/web` (страницы браузера) и `apps/api` (HTTP API и хранение данных). API также отдаёт статические файлы веб-приложения, чтобы вход и запросы работали с одного адреса.

Модули сервера: `store.mjs` — пользователи, пароли, вход и аудит; `material-store.mjs` — библиотека и проверка слайдов; `live-store.mjs` — запуски, участники, ответы, баллы и отчёты; `server.mjs` — маршруты и права доступа. Вся подтверждённая информация хранится в SQLite. Сессия получает собственную копию материала при запуске. Обновление экранов ведущего, участника и аудитории сейчас происходит опросом API раз в 1,5 секунды.

Права: администратор управляет пользователями; ведущий и администратор создают материалы и проводят их; участник входит без аккаунта по шестизначному коду и получает случайный токен только для своего запуска. Пароли хэшируются, серверные сеансы входа передаются через HttpOnly-cookie, изменяющие запросы ведущего защищены CSRF-токеном. Экран аудитории доступен ведущему после входа.

Для размещения на сервере подготовлены контейнер приложения и HTTPS-прокси Caddy. Настройка: [deploy/README.md](../deploy/README.md). Текущая SQLite подходит для пилота одного экземпляра; целевая архитектура из ТЗ предусматривает более широкую нагрузку, внешнее хранилище и дальнейшие интеграции.
