Skip to content

Repository files navigation

Lemma — платформа для учителя математики

Version Stack Tests License: AGPL v3

Lemma — веб-платформа для учителя математики: рабочее пространство (календарь, журнал, КТП, заметки), база задач с семантическим поиском, генераторы вариантов ЕГЭ/ОГЭ и тренажёров, онлайн-тесты для учеников, аналитика результатов, модули геометрии, теории и ТДФ.

Production: l.oipav.ru — учительский интерфейс · student.oipav.ru — ученический · lemma.oipav.ru — лендинг · task-ege.oipav.ru — backend


Что внутри

Три интерфейса в одном репозитории

Интерфейс URL (production) Что делает
Учительский l.oipav.ru (закрытый, вход по логину) Пространство учителя, задачи, генераторы, выдача тестов, аналитика
Ученический student.oipav.ru Тесты по коду/QR, личный кабинет, курсы, достижения
Лендинг lemma.oipav.ru Промо-страница

Ключевые возможности

Моё пространство — учительское фло вокруг реального расписания:

  • «Сегодня» — дашборд одного окна: идущий урок, KPI, расписание дня, дедлайны, заметки
  • Календарь уроков, дедлайнов и дел; расписание пар и интенсивы, посещаемость
  • Классы и группы, журнал сдачи (ученик × выдача), КТП с экспортом в Word/PDF
  • Заметки (блочный редактор с LaTeX), дела, библиотека материалов и файлов
  • Каникулярные задания — индивидуальные программы на лето с отслеживанием прогресса

База задач:

  • Каталог с фильтрами (темы / подтемы / теги / сложность / источник / год / изображения)
  • LaTeX (KaTeX) + Markdown, GeoGebra-чертежи, числовые прямые
  • Импорт из MD/YAML и парсер «Решу ЕГЭ» (ЕГЭ база/профиль, ОГЭ, ВПР — с критериями и чертежами)
  • Семантический поиск на эмбеддингах: похожие задачи, поиск дублей, параллельные варианты, подбор «по образцу» / «разные сюжеты» / «анти-дубль», работа над ошибками класса

Генераторы работ:

  • Универсальный генератор листов и карточек (A4/A5/A6, варианты, дистракторы)
  • Полные варианты ЕГЭ (база — 21 задание, профиль — 19 в двух частях) и ОГЭ (25 заданий со связным блоком 1–5) в стиле КИМ
  • Контрольные работы, тесты A/B/C/D с перемешиванием, калькулятор баллов ЕГЭ
  • Автопроверка бумажных бланков ответов №1 по фотографии (vision-LLM)

Тригонометрия (11 генераторов): единичная окружность, значения функций, выражения, обратные функции, уравнения (в т.ч. f(kx+b)=a), формулы приведения и сложения, двойной аргумент, шифровки, смешанная работа.

Устный счёт (7 генераторов): арифметика, степени и логарифмы, степени и корни, логарифмы, действия с десятичными и обыкновенными дробями, смешанная работа.

Геймификация: QR-листы, пиксель-арт (одиночный и командный), шифровки, маршрутные листы, марафон защиты задач с live-доской, кроссворды.

Геометрия: собственная база + банк МЦНМО (17,6 тыс. задач с фасетными тегами), GeoGebra-чертежи (живой апплет + PNG/SVG-экспорт), компоновка листов S/M/L/XL, печать с физическими mm/pt.

Листки: 41 лист Гордина (планиметрия и стереометрия, 1641 задача) + редактор собственных листков.

Теория: статьи на Markdown + KaTeX в редакторе CodeMirror, каллауты, палитра формул, GeoGebra-иллюстрации, печать конспектов.

ТДФ (Теоремы, Определения, Формулы): структурированные конспекты по классам, опросники и флешкарты, листы формул, КИМ-стиль печати с двухфазной пагинацией.

Ученики: прогресс, тепловая карта ошибок, достижения (random + conditional), личный кабинет с историей попыток, онлайн-курсы с публикацией уроков и домашних заданий.

Авторизация: роли superadmin / editor / viewer, доступ по секциям, журнал действий, мультиучительство (данные скоупятся по владельцу). См. AUTH.md.


Tech Stack

Frontend (ege-tasks/):

  • React 18.2 + Vite 5.0, React Router v7 (все страницы через React.lazy())
  • Ant Design 5.12
  • KaTeX + react-markdown (GFM)
  • CodeMirror 6 (редакторы LaTeX и теории), BlockNote (заметки), Excalidraw
  • PocketBase SDK 0.21
  • GeoGebra applet API + JSXGraph (SVG export)
  • Печать/PDF — только на клиенте: window.print() + @media print, html2pdf.js
  • Vitest — 436 тестов в 36 файлах

Backend (pocketbase/):

  • PocketBase 0.36.4 (SQLite, REST API, Auth, File storage) — systemd pocketbase-ege, порт 8095
  • Backend helper на Node.js 20 — systemd pdf-service-ege, порт 3001: парсер «Решу ЕГЭ», LLM-нормализация LaTeX, распознавание бланков, векторный поиск (sqlite-vec). PDF не генерирует — серверный Puppeteer выпилен в июне 2026
  • Второй PocketBase pb-files на Raspberry Pi — библиотека материалов и файлов учителя

Infrastructure:

  • VPS: PocketBase + backend helper + nginx + cron-бэкапы (локально 4 последних + S3: 30 суточных и 12 месячных)
  • Raspberry Pi: статика учительского фронта через nginx в Docker
  • GitHub Actions: деплой лендинга по кнопке (workflow_dispatch, автодеплой отключён осознанно)

Быстрый старт

# 1. Установка зависимостей
git clone https://github.com/evilfaust/lemma.git
cd lemma
cd ege-tasks && npm install && cd ..

# 2. Backend
# Локальной БД нет — фронтенд всегда ходит на task-ege.oipav.ru.
# Чтобы поднять свой бэкенд, измените PB_BASE_URL
# в ege-tasks/src/shared/services/pocketbaseUrl.js

# 3. Dev-сервер фронтенда
./start.sh          # или: cd ege-tasks && npm run dev
# → http://localhost:5173

Полезные команды

# Сборка production (3 приложения: index.html + student.html + landing.html)
cd ege-tasks && npm run build

# Тесты (Vitest, ~6 сек)
cd ege-tasks && npm test
cd ege-tasks && npm run test:watch

# Пересчёт векторного индекса задач (вручную, требует Ollama на локальной машине)
cd vector-benchmark && npm run index

Структура проекта

lemma/
├── ege-tasks/                      # Frontend (React + Vite)
│   ├── src/
│   │   ├── components/             # ~260 компонентов
│   │   │   ├── workspace/          # Моё пространство: календарь, журнал, КТП, заметки, дела
│   │   │   ├── auth/               # LoginPage, UserManager, AuditLog, ProtectedRoute
│   │   │   ├── catalog/            # Справочники (темы, теги, источники, дубли)
│   │   │   ├── geometry/           # Модуль геометрии (редактор, чертежи)
│   │   │   ├── listki/             # Листки Гордина + редактор своих
│   │   │   ├── tdf/                # Теоремы, определения, формулы
│   │   │   ├── theory/             # Теория (Markdown + CodeMirror + GeoGebra)
│   │   │   ├── student/            # Ученический интерфейс
│   │   │   ├── trig/               # Тригонометрические подкомпоненты
│   │   │   ├── worksheet/          # Переиспользуемые элементы листов
│   │   │   ├── marathon/ crossword/ mc-test/ pixel-art/ qr-worksheet/ route-sheet/
│   │   │   └── shared/             # MathRenderer, LatexField, CropModal
│   │   ├── contexts/               # ReferenceDataContext, AuthContext
│   │   ├── hooks/                  # ~47 custom хуков
│   │   ├── shared/services/pb/     # API по доменам (26 модулей) + barrel pocketbase.js
│   │   ├── utils/                  # Helpers (LaTeX, shuffle, QR, normalize, …)
│   │   ├── landing/                # Автономный лендинг (без Ant Design)
│   │   ├── App.jsx                 # Teacher routes
│   │   └── StudentApp.jsx          # Student routes
│   ├── public/                     # Static assets (ачивки, логотипы)
│   └── src/__tests__/              # 436 тестов (Vitest)
│
├── pocketbase/                     # Backend (deployed to VPS)
│   ├── pb_migrations/              # Миграции (96 шт.)
│   ├── pb_hooks/                   # JS-хуки PocketBase (stats.pb.js)
│   ├── pdf-service.js              # Backend helper: sdamgia, LLM, векторный поиск, бланки
│   └── vec-search.js               # Векторный поиск (sqlite-vec)
│
├── vector-benchmark/               # Индексатор эмбеддингов (запуск вручную)
├── scripts/                        # Импортёры каталогов (ЕГЭ база, ОГЭ, МЦНМО, листки)
├── .github/workflows/              # CI: деплой лендинга (по кнопке)
│
├── README.md                       # ← вы здесь
├── CHANGELOG.md                    # История релизов
├── LICENSE / NOTICE                # AGPL-3.0 и перечень исключений
└── AUTH.md                         # Архитектура системы авторизации

Деплой

Backend (VPS, разово):

  1. PocketBase на порту 8095 как systemd-сервис (pocketbase-ege)
  2. Backend helper на порту 3001 (pdf-service-ege)
  3. nginx проксирует task-ege.oipav.ru → PocketBase (/api/, /_/) и helper (/pdf/)
  4. cron каждые 6 ч создаёт бэкапы БД: 4 последних локально + S3 (30 суточных, 12 месячных)
  5. Миграции из pocketbase/pb_migrations/ применяются автоматически при рестарте

Frontend (вручную, автодеплоя по push нет):

./deploy-raspberry.sh --build          # Учительский → l.oipav.ru (Raspberry Pi)
./raspberry/deploy-student-to-vps.sh   # Ученический → student.oipav.ru (VPS)
./deploy-landing.sh                    # Лендинг → lemma.oipav.ru (или GitHub Actions)

Авторизация

Учительский интерфейс требует логина. Подробно — в AUTH.md.

Роль Что может
superadmin Всё + управление пользователями + журнал действий
editor CRUD задач/работ/тестов в разрешённых секциях
viewer Просмотр, генерация, печать, экспорт PDF — без изменений

Регистрация отключена — пользователей создаёт суперадмин через /app/admin/users.


История изменений

См. CHANGELOG.md. Последняя версия — 3.9.130 (2026-08-23).


Лицензия

Copyright © 2026 Oleg Pavlyuchenko

Код проекта распространяется на условиях GNU AGPL-3.0 (или любой более поздней версии).

Что это значит на практике:

  • ✅ Можно изучать код, форкать, использовать и дорабатывать — в том числе в школе и на уроках;
  • ✅ Можно развернуть свою копию платформы;
  • ⚠️ Если вы запускаете Lemma (или производную работу) как сетевой сервис, доступный другим людям, вы обязаны предоставить им исходный код своей версии, включая внесённые изменения — это ключевое отличие AGPL от GPL;
  • ⚠️ Производные работы распространяются только под той же лицензией AGPL-3.0;
  • ⚠️ Указание авторства и сохранение уведомлений об авторских правах обязательны;
  • ❌ Нельзя закрыть код и продавать его как проприетарный продукт.

Важно: лицензия покрывает только исходный код. Учебный контент (задачи из «Решу ЕГЭ», банка МЦНМО, листков Гордина, ФИПИ), изображения достижений, а также название и логотип «Lemma» под AGPL не подпадают — подробности и перечень исключений в файле NOTICE.

Автор — единственный правообладатель кода и сохраняет право лицензировать его на иных условиях. По вопросам коммерческого лицензирования: oleg.faust@gmail.com

About

Инструменты учителя математики: база задач, генератор работ, геометрия с GeoGebra, онлайн-тесты, ТДФ-конспекты

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages