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.
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 indexlemma/
├── 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, разово):
- PocketBase на порту 8095 как systemd-сервис (
pocketbase-ege) - Backend helper на порту 3001 (
pdf-service-ege) - nginx проксирует
task-ege.oipav.ru→ PocketBase (/api/,/_/) и helper (/pdf/) - cron каждые 6 ч создаёт бэкапы БД: 4 последних локально + S3 (30 суточных, 12 месячных)
- Миграции из
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