1
0
Fork 0
mirror of https://github.com/EDeev/tablo.git synced 2026-10-07 20:49:31 +03:00
tablo/README.md
Egor Deev 9effed12e3 README на русском и английском, документация, скриншоты
- README.md и README.en.md: что это, статус учебного проекта, скриншоты, быстрый старт в
  Docker, установка без Docker, переменные, схема, развёртывание, тесты; лишний Bootstrap
  из стека убран (стили свои);
- docs/architecture.md (структура, формат расписания, трекеры, права) и docs/deploy.md;
- пояснительная записка перенесена в docs/.
2026-10-02 13:37:11 +00:00

6.3 KiB
Raw Permalink Blame History

Tablo

Русский · English

CI Docker Release

Веб-приложение для студентов: по фото расписания ИИ собирает редактируемое расписание, к каждому предмету можно добавить трекеры успеваемости и поделиться всем по ссылке.

Статус: учебный проект (курсовая работа, 2026), завершён · работает на tablo.deev.su

Расписание на неделю и трекеры

Стек: Python 3.12 · Flask · SQLAlchemy + Alembic · PostgreSQL · OpenAI-совместимый Vision API · Playwright · Jinja2 + vanilla JS

Возможности

  • Распознавание расписания по фото или скану
  • Редактирование расписаний, предметов и занятий, периоды с переходом через Новый год
  • 11 видов трекеров (посещаемость, оценки, дедлайны, серии дней и др.) на сетке с перетаскиванием
  • Генерация трекера по описанию: «8 лабораторных и экзамен»
  • Доступ по ссылке: просмотр, редактирование или копия как шаблон
  • Объединение нескольких расписаний в одно: занятия одного предмета сводятся вместе
  • Экспорт в JSON, CSV, PNG и версию для печати

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

git clone https://github.com/EDeev/tablo.git && cd tablo
cp .env.example .env      # задайте SECRET_KEY и ключ ИИ-провайдера
docker compose up -d

Откройте http://localhost:8000. Compose поднимает приложение и PostgreSQL, миграции применяются при старте. Готовый образ: docker pull ghcr.io/edeev/tablo или docker pull dcr.deev.su/edeev/tablo.

Установка без Docker

Нужны Python 3.11+ и PostgreSQL.

python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
playwright install --with-deps chromium   # для экспорта в PNG
cp .env.example .env
flask --app run db upgrade
python run.py

Конфигурация

Переменная Назначение
SECRET_KEY подпись сессий Flask; без неё приложение не запустится
DATABASE_URL или DB_HOST, DB_PORT, DB_NAME, DB_USER, DB_PASSWORD подключение к PostgreSQL
OPENAI_API_KEY ключ ИИ-провайдера
OPENAI_BASE_URL адрес OpenAI-совместимого API, если это не OpenAI
OPENAI_MODEL модель для распознавания и трекеров, по умолчанию gpt-4o

Important

Без OPENAI_API_KEY не работают распознавание расписаний и генерация трекеров. Всё остальное работает: расписание можно завести и править вручную.

Как выглядит

Мои расписания Предмет и трекеры Телефон
Мои расписания Предмет и трекеры Телефон

Как устроено

flowchart LR
    B[Браузер] --> F[Flask: auth · schedules · subjects · shares · export]
    F --> S[Сервисы: ai_scan · ai_metrics · merge · export]
    F --> P[(PostgreSQL)]
    S --> A[OpenAI-совместимый API]
    S --> C[Chromium через Playwright]

Подробности:

  • docs/architecture.md — структура, формат расписания, трекеры, права доступа
  • docs/deploy.md — Docker и устройство боевого сервера
  • docs/explanatory_note.pdf — пояснительная записка к курсовой

Развёртывание

tablo.deev.su работает на VPS: gunicorn под systemd за nginx с сертификатом Let's Encrypt, PostgreSQL — на отдельном сервере, ИИ — Timeweb Cloud AI. Docker-образ собирает GitHub Actions на каждый тег v* и публикует в GitHub Packages и в реестр dcr.deev.su.

Разработка

pip install -r requirements-dev.txt
export TEST_DATABASE_URL=postgresql://tablo:tablo@localhost:5432/tablo_test
ruff check . && pytest

Тесты идут на настоящем PostgreSQL: права доступа и экспорт, ссылки, вход и защита от открытого редиректа, разбор периодов и времени, слияние расписаний. CI поднимает базу в сервис-контейнере и выполняет то же самое на каждый push.

Лицензия

Учебный проект (курсовая работа, Московский Политех, 2025/26). Код открыт для изучения, отдельной лицензии нет.

Автор

Деев Егор Викторович — GitHub · Telegram · egor@deev.space


⭐ Если проект оказался полезным, поставьте звёздочку на GitHub!

Сделано с ❤️ — deev.space