СервераПортал
Фронтенд
React-приложение — дизайн, состояния, стриминговый чат и доступность.
Фронтенд — React-приложение, которое Nginx отдаёт как статику. Все данные —
только через /api/v1; прямых адресов NEURO CORE, MongoDB
или Qdrant во фронтенде не существует.
Принципы
- Единственный бэкенд —
/api/v1. Один типизированный API-клиент (обёртка над fetch) с общей обработкой ошибок: 401 → вход, 403 → нет доступа. - Роль решает, что видно. Разделы и данные рендерятся по роли, но реальная защита — RBAC на бэкенде.
- Без ПДн. В формах и профиле школьника нет персональных полей — только технический ID.
- Сессия в httpOnly cookie, не в localStorage.
Чат с ассистентом
Главная интерактивность портала. Ответ приходит потоком — токены рендерятся по мере прихода, а не после завершения генерации.
Требования к UX диалога:
- вопросы по одному, без давления;
- рекомендации — как варианты (1–3 профиля, 3–7 профессий), не приказ;
- состояние «ассистент недоступен» — портал продолжает работать без чата;
- пустой ретрив — честное «нет данных», не выдуманный ответ.
Транспорт стрима описан в Realtime.
Состояния страниц
Четыре состояния страницы
У каждой страницы четыре состояния, не одно: загрузка / пусто / ошибка / нет доступа. Отсутствие любого из них — баг ревью.
Дашборды
Графики аналитики (учитель, региональный контур) показывают только обезличенные агрегаты. ФИО учеников не выводится нигде, ни в каком состоянии.
Качество
| Требование | Почему |
|---|---|
| Адаптив / мобильные | Аудитория — школьники с телефонов |
| Доступные формы | Лейблы, ошибки, фокус, валидация на blur |
| Кэш данных по ролям | Ключи данных включают роль и ID — чужие данные не «протекают» |
| Skeleton-загрузка | Списки курсов и новостей не прыгают при загрузке |