8a7091ddec
Копия пользовательской автопамяти (29 фактов + индекс MEMORY.md) в .claude/memory/, чтобы переносить между машинами через git. README.md — как восстановить в пользовательскую папку на другой машине. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
10 KiB
10 KiB
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