04. Руководство student
Аудитория. Ученик, проходящий курс. Минимально знать что такое браузер.
Вход
- Открой http://127.0.0.1:3500/login (в проде — адрес вашей школы).
- Введи email и пароль, выданные школой.
- Демо-учётка в dev:
student@local/change_me_locally.
После входа попадёшь на /dashboard.
Что видит student
- Свои курсы (
/courses). - Прогресс по каждому (позже — Phase 6).
- Подписка школы (видно ли, доступен ли курс).
Нет доступа к:
/analytics(аналитика — для school_admin / teacher).- Редактору курса (
/courses/[id]/edit) — 403. - Чужим школам.
Как проходить курс
/courses→ выбрать курс → открывается/courses/[id](текущая опубликованная версия).- Страница структурирована: Модуль → Лекция → Блок.
- Каждый блок — один из 11 типов. Читай / отвечай / интерактивь.
Типы блоков и что с ними делать
| Тип | Что делать |
|---|---|
text |
Просто читай. Подсвеченные слова со {{term:...}} — ховер показывает определение из глоссария |
quiz_single |
Выбери один вариант и нажми «Проверить» |
quiz_multi |
Выбери все подходящие варианты и нажми «Проверить» |
flashcard_deck |
Переворачивай карточку (front→back), листай next/prev |
ordering |
Перетащи элементы в правильный порядок |
matching |
Соедини пары линиями (drag-and-drop) |
fill_in_the_blank |
Впиши пропущенные слова в поля |
code_runner |
Напиши код в Monaco-редакторе, нажми «Run» — Judge0 исполнит и покажет вывод |
image |
Просто смотришь картинку |
audio |
Нажми play |
embed |
Видео — play |
События, которые система пишет автоматически
Когда ты открываешь блок — отправляется view.
Когда отвечаешь — attempt + pass или fail.
Когда заканчиваешь модуль/курс — complete.
Пропускаешь блок — skip.
Эти события идут в learner_events (через POST /learner/events). Они нужны для двух вещей:
- Аналитика для teacher'а (агрегаты, не персональные данные).
- Адаптивные подсказки тебе (см. ниже).
«Нужна подсказка?» (адаптивное обучение)
Если ты ошибся в интерактивном блоке (quiz_*, flashcard_deck, fill_in_the_blank, ordering, matching), под блоком появится кнопка «Нужна подсказка?».
Нажми — и AI-агент AdaptiveSupplementer сгенерирует для тебя дополнительный блок:
- короткое пояснение (
text), или - мини-quiz по той же теме, или
- набор flashcard'ов.
Ограничения:
- до 5 подсказок на ученика в день на всю платформу. После —
429 adaptive_daily_cap_reached; - один и тот же блок закэширован — повторный клик даёт тот же результат (кэш в
adaptive_blocks).
Смысл: не рассказать правильный ответ, а помочь понять тему на другом материале.
Оплата (если у школы платная подписка)
- Если доступ к курсу закрыт — школа направит на
/billing. - Выбирай провайдера (stripe / vipps / paypal / mock).
- Хочешь проверить без реальной оплаты в dev —
mock→ «Pay» → всё работает. - После успешной оплаты —
/billing/success, доступ к курсу открывается автоматически (webhook приходит на сервер идемпотентно).
Мобильная версия
Frontend — Next.js на Tailwind + мобайл-first дизайн-система .lms-*. Открывай тот же URL с телефона — работает.
Отдельное приложение Capacitor — в Phase 6+.
Частые вопросы
Почему меня разлогинило? Access-токен живёт 15 минут, но refresh-токен — 2 месяца, он обновляется автоматически. Если всё равно выбросило — возможно ты вышел через /auth/logout.
Я открываю курс с телефона и ноутбука — получу две сессии? Нет. Логин с нового устройства присоединяется к существующей сессии и продлевает её (rolling window).
Почему «Нужна подсказка?» не работает? Либо ты уже исчерпал лимит 5/день, либо сетевая ошибка — попробуй через минуту. Если регулярно — напиши teacher'у / school_admin'у.
Код в code_runner не компилируется? Судя по всему — ошибка у тебя. Judge0 показывает stderr — прочти внимательно.
Ссылки
- Что делает teacher твоего курса: 03-teacher.md
- Что видит school_admin: 02-school-admin.md