Локальное веб-приложение для учителя: импорт результатов из "Решу ЕГЭ", журнал по группам, карточки учеников, аналитика по долгам и отдельный Telegram-бот для быстрых сводок.
- React + TypeScript + Vite фронтенд
- PocketBase как локальная БД и API
- импорт Excel из "Решу ЕГЭ" с предпросмотром и защитой от дублей
- журнал по группам с переходами в карточки ученика и работы
- дашборд с общей сводкой, должниками и слабыми заданиями
- страница статистики с отчётом по долгам для чата
- печатная версия карточки ученика и детальный PDF-отчёт
- Telegram-бот, который читает данные из PocketBase и отвечает на команды по группам и ученикам
src/- фронтендbot/index.mjs- Telegram-бот наgrammyscripts/run-pocketbase.sh- запуск PocketBasescripts/backup_pb.sh- архивный backuppb_datasetup.js- создание коллекций через API PocketBasepb_migrations/- миграции PocketBasepb_public/- результатnpm run build
- Node.js 18+
- npm
- бинарник PocketBase в корне проекта:
./pb
npm installmacOS Apple Silicon:
curl -L https://github.com/pocketbase/pocketbase/releases/latest/download/pocketbase_darwin_arm64.zip \
-o pb.zip && unzip pb.zip pocketbase && mv pocketbase pb && rm pb.zip && chmod +x pbmacOS Intel:
curl -L https://github.com/pocketbase/pocketbase/releases/latest/download/pocketbase_darwin_amd64.zip \
-o pb.zip && unzip pb.zip pocketbase && mv pocketbase pb && rm pb.zip && chmod +x pbLinux/Windows:
Скачать PocketBase вручную с pocketbase.io и положить бинарник рядом с проектом под именем pb.
Если бот нужен сразу, скопируйте .env.example в .env.bot и заполните:
cp .env.example .env.botTELEGRAM_BOT_TOKENTELEGRAM_ALLOWED_USER_IDSTELEGRAM_DEFAULT_CHAT_ID- опционально
Полный сценарий:
./start.shstart.sh делает следующее:
- поднимает PocketBase на
http://127.0.0.1:8090 - запускает
setup.js - запускает Telegram-бота из
bot/index.mjs - запускает Vite dev server на
http://localhost:5151
setup.js не создаёт superuser автоматически, а пытается войти с учётными данными, захардкоженными в самом файле:
- email:
admin@example.com - password:
password123456
Если superuser ещё не создан, сначала:
- запустите
./pb serve --http=127.0.0.1:8090 - откройте
http://127.0.0.1:8090/_/ - создайте администратора с этими данными или измените константы в
setup.js - после этого снова запустите
./start.sh
npm run devТолько фронтенд на http://localhost:5151.
npm run pbЗапускает только Vite и PocketBase. В отличие от ./start.sh, эта команда сейчас не запускает setup.js и не поднимает Telegram-бота.
npm run buildСобирает фронтенд в pb_public/.
npm run previewЛокальный preview production-сборки.
npm run backup:pbСоздаёт архив pb_data в backups/.
/- обзор по группам, последним работам, должникам и слабым заданиям/landing- стартовая страница с описанием проекта и руководством/journal- журнал по группам/student/:studentId- карточка ученика/student/:studentId/print- детальный печатный отчёт/exam/:examId- страница работы/stats- статистика и отчёт по долгам/upload- импорт Excel
Импорт работает в два этапа:
- файл парсится в браузере
- перед записью показывается preview того, что будет создано, обновлено или пропущено
В preview отображаются:
- новые группы
- новые ученики
- новые тесты
- тесты на обновление
- новые результаты
- результаты на обновление
- дубли и неизменившиеся записи, которые будут пропущены
Поддерживаются файлы .xlsx и .xls.
Рекомендуемый шаблон:
ГРУППА-ДД.ММ.ГГ.xlsx
Примеры:
10А-01.02.26.xlsx11Б-15.03.26.xlsx
Имя файла используется как дополнительный источник для названия группы и даты.
Поддерживаются записи вида:
13(4)/417/5- пустая ячейка как "не писал"
Бот теперь живёт отдельно в bot/index.mjs, а не в pb_hooks.
Источник данных:
groupsstudentsexamsstudent_results
Бот читает PocketBase по HTTP API (PB_URL, по умолчанию http://127.0.0.1:8090).
/help/ping/groups/week <группа>/month <группа>/all <группа>/scores <группа>/scores week|month|all <группа>/student <имя>
Примеры:
/week База 11 25 26
/scores month Проф 11
/student Иванов
В карточке ученика доступны два сценария:
- печать текущей карточки
- отдельный детальный отчёт
/student/:studentId/print
В печатных версиях проект показывает:
- динамику и результаты по тестам
- расклад по заданиям
- проблемные задания
- ссылки на задания и работы
- группировку по периодам и блок "за всё время"
- React 18
- TypeScript
- Vite 6
- React Router 6
- PocketBase
- Recharts
- SheetJS (
xlsx) - Tailwind CSS
grammy
По последним коммитам и текущему рабочему дереву в проект уже вошли или сейчас дорабатываются такие направления:
- предпросмотр импорта и дедупликация результатов
- глобальный поиск и виджеты внимания на дашборде
- ссылки на задания на странице работы
- backup-скрипт для PocketBase
- печатные отчёты ученика и восстановленный PDF-экспорт
- чатовый отчёт по долгам на странице статистики
- перенос Telegram-логики из
pb_hooksв отдельныйbot/index.mjs
Проверить, что:
- в корне есть
./pb - PocketBase слушает
127.0.0.1:8090 - superuser для
setup.jsсуществует .env.botзаполнен, если нужен Telegram-бот
Для полной перезагрузки локальной базы:
rm -rf pb_data
./start.shАдминка PocketBase:
