---
name: LearnSpace — полная карта реализованных функций
description: Что уже сделано в проекте: все страницы, API, таблицы БД, инструменты доски, стек, деплой
type: project
originSessionId: 1959f491-c6c4-4d6b-9081-0b09298d1699
---
# LearnSpace — реализованный функционал (апрель 2026)

**Why:** Чтобы не переоткрывать то, что уже есть, при планировании новых фич.
**How to apply:** Перед реализацией любой фичи — сверяться, чтобы не дублировать.

---

## Frontend pages (43 HTML-файла в frontend/)

| Файл | Назначение |
|------|-----------|
| login.html | Split-layout авторизация, canvas neural-network анимация |
| dashboard.html | Главная ученика — задания, прогресс, gamification |
| admin.html | Панель администратора |
| profile.html | Профиль пользователя |
| classes.html | Google Classroom-стиль карточки классов |
| board.html | Лента класса (анонсы, задания, активность) |
| classroom.html | Онлайн-урок (доска + чат + видео/аудио) |
| live-quiz.html | Live-викторина в реальном времени |
| test-run.html | Прохождение теста |
| test-result.html | Результат теста |
| question-bank.html | Банк вопросов |
| homework.html | Задания студента |
| course.html | Прохождение курса |
| lesson.html | Просмотр урока |
| lesson-editor.html | Редактор уроков с блоками |
| theory.html | Теоретические материалы |
| library.html | Библиотека файлов |
| analytics.html | Аналитика/отчёты |
| flashcards.html | Карточки с интервальным повторением |
| knowledge-map.html | Граф знаний |
| crossword.html | Кроссворд |
| hangman.html | Виселица |
| biochem*.html (5) | Интерактивная биохимия: молекулы, реакции, пути |
| red-book*.html (4) | Красная книга: виды, биомы, экосистемы, игры |
| collection*.html (2) | Коллекции предметов |
| gradebook.html | Журнал оценок |
| parent.html | Кабинет родителя |
| pet.html | Виртуальный питомец |
| lab.html | Интерактивные лабораторные работы (30+ симуляций) |
| 403/404/500.html | Страницы ошибок |

---

## Backend API (28 групп маршрутов)

```
/api/auth          — JWT авторизация, регистрация, профиль
/api/subjects      — Предметы
/api/sessions      — Тестовые сессии
/api/admin         — Управление платформой, feature flags
/api/questions     — Банк вопросов
/api/classes       — Классы
/api/assignments   — Задания, дедлайны
/api/files         — Загрузка файлов, папки
/api/tests         — Тесты/квизы
/api/notifications — Уведомления
/api/permissions   — RBAC
/api/submissions   — Сдача работ, оценки
/api/courses       — Курсы (теория)
/api/lessons       — Уроки с блоками
/api/gamification  — XP, уровни, ачивки, стрики
/api/shop          — Виртуальный магазин, монеты
/api/templates     — Шаблоны заданий
/api/bookmarks     — Закладки
/api/search        — Поиск контента
/api/flashcards    — Флэшкарты со spaced repetition
/api/settings      — Настройки
/api/analytics     — Аналитика и отчёты
/api/live          — Live-квизы (real-time)
/api/classroom     — Онлайн-урок (SSE, доска, чат, WebRTC)
/api/games         — Игры (виселица, кроссворд)
/api/knowledge-map — Граф знаний
/api/pet           — Виртуальный питомец
/api/collection    — Коллекционирование
/api/red-book      — Красная книга
/api/biochem       — Биохимия
```

---

## Classroom API (детально)

- POST/GET/DELETE сессий
- JOIN/LEAVE участников, attendance log
- Чат: отправка, получение, реакции, закрепление, загрузка файлов
- Strokes: batch save, load (с пагинацией + since_seq), update, delete, preview (SSE)
- Страницы: add, change_current, set_template, clear
- Поднятая рука: raise/lower/list
- Разрешения рисования: grant/revoke per user
- WebRTC: signaling relay, cursor broadcast, mute, screen share
- Notes: get/save per user per session
- Templates: save/load session как шаблон

---

## БД — 76 таблиц SQLite (better-sqlite3, sync)

Ключевые группы:
- **users** + role_permissions + user_permissions
- **test_sessions** + session_questions + user_answers
- **subjects** + topics + questions + options + tests + test_questions
- **classes** + class_members
- **classroom_sessions** + classroom_pages + classroom_strokes + classroom_chat + classroom_chat_reactions + classroom_attendance + classroom_invites + classroom_draw_permissions + classroom_notes
- **courses** + course_sections + lessons + lesson_blocks + lesson_progress + lesson_notes + class_courses
- **assignments** + assignment_sessions + assignment_templates + submissions + submission_log
- **files** + file_access + folders + folder_access
- **xp_log** + achievements + user_achievements + daily_goals + challenges
- **announcements** + notifications + bookmarks
- **live_sessions** + live_answers
- **shop_items** + user_purchases
- **flashcard_decks** + flashcard_cards + flashcard_reviews
- **bio_elements/molecules/reactions/...** (5 биохим-таблицы)
- **rb_species/habitats/groups/...** (9 красная книга)
- **app_settings** + error_log + admin_audit_log

---

## Whiteboard (frontend/js/whiteboard.js ~3200 строк)

### Инструменты рисования
- Pencil (Catmull-Rom сглаживание)
- Highlighter (полупрозрачный маркер)
- Laser (без сохранения)
- Eraser
- Connector (линии со стрелками)
- Sticky notes
- Text (inline editing)
- Image (вставка + upload)
- Formula / LaTeX (KaTeX, modal editor с категориями)
- Table (интерактивная)
- Coordinate system (с графиками функций, парсер выражений)
- Number line (для неравенств, точки + интервалы)
- Compass: трёхфазная state machine (idle → setting-radius → waiting-arc → drawing-arc), сохраняется как `{cx, cy, radius, arcStart, arcSweep, color, lineWidth, showLegs}`, live preview в `_renderDynamic` с ногами компаса и меткой угла

### Shapes (11)
rect, ellipse, line, arrow, triangle, diamond, hexagon, star, roundedrect, callout, connector

### Инструмент выделения
- Move + resize всех объектов (bbox handles)
- Rotation handle (purple) для объектов
- Lasso multi-select (резиновая рамка)
- Shift+click добавить к выделению
- Copy/Paste с offset
- Snap guides при перемещении
- Delete / Bring to front / Send to back

### Zoom / Pan
- Wheel zoom (к курсору)
- Space+drag = pan
- Ctrl+0/+/- hotkeys
- clampPan() — ограничение выхода за пределы
- Minimap: 192×108 overlay bottom-right (показывается при zoom>1)
- Viewport indicator на minimap; клик/drag = прыжок

### Оверлеи (не сохраняются)
- Ruler: вращение (drag ↺), resize (drag ↔), свойства-панель (угол + длина)
- Protractor: вращение, resize (radius), свойства-панель

### Прочее
- Двухслойный canvas: static (strokes) + dynamic (selection/guides/live)
- Шаблоны страниц: blank, grid, lined, dots, coordinate
- Multi-page с thumbnail sidebar (renderThumbnail)
- Export PNG (с сохранением zoom/pan)
- Auto-measurements (длины/углы/площадь для shape)
- Real-time sync: SSE + HTTP polling (since_seq)
- Live strokes preview через /stroke-preview
- Cursor broadcast (teacher position visible to students)

### Темы доски (4)
- **Chalkboard** (по умолчанию): зелёный (#213d26), меловая текстура, горизонтальные смазки
- **Blackboard** (классная): тёмно-синий (#1a1a2e), диагональная текстура, chalk-grain
- **Corkboard** (пробка): коричневый (#7a5c1e), диагональные волокна, случайные узлы-пятна
- **Whiteboard** (маркерная): светло-серый градиент, minimal grain, тёмные линии шаблонов
- Переключатель: `setBoardTheme(name)` + `wbSetBoardTheme()` + `<select id="wb-theme-select">`
- Текстуры кешируются в `_bgNoiseCache` (Map по имени темы)

---

## Tech stack

- **Backend**: Node.js 22, Express 4.18, better-sqlite3 (sync), JWT, bcryptjs, multer, sharp, compression
- **Frontend**: Vanilla JS ES6+, HTML/CSS без бандлера, Canvas API, SSE, WebRTC
- **Иконки**: inline SVG `.ic` класс (НЕ эмоджи), Lucide CDN на некоторых страницах
- **Шрифты**: Google Fonts (Unbounded, Manrope)
- **Деплой**: Docker multi-stage Alpine, docker-compose, tini init, 3 named volumes
- **Репо**: https://git.dolgolyov-family.by/maxim.dolgolyov/Learn_System (ветка master)

---

## Env vars (backend/.env.example)

```
PORT=3000
JWT_SECRET=...
JWT_EXPIRES_IN=7d
CLIENT_ORIGIN=http://localhost:3000
DB_PATH=/app/backend/data/learnspace.db
UPLOADS_DIR=/app/backend/uploads
```
