MyHerzen

MyHerzen — независимое приложение с открытым исходным кодом для студентов РГПУ им. А. И. Герцена. Оно объединяет расписание, учебные группы, домашние задания, уведомления и необязательных AI-помощников на iOS, Android и в веб-интерфейсе.

Репозиторий подготовлен так, чтобы проект могли сопровождать студенты Герцена. Новую установку можно запустить с пустой базой данных — перенос существующих аккаунтов пользователей не требуется.

Проект открыт для использования и продолжения

MyHerzen открыт для использования, самостоятельного размещения, изучения, изменения и дальнейшей разработки по лицензии Apache License 2.0. Студенты и студенческие команды могут клонировать или форкать репозиторий, разворачивать собственную установку и продолжать работу официального студенческого сервиса после ухода первоначального сопровождающего.

Проект документирован так, чтобы новая команда могла начать с пустой базы данных, собственного сервера, доменов, приложений OAuth, модели Ollama и почтового провайдера. Для продолжения разработки не требуются исходная база пользовательских аккаунтов или доступ к инфраструктуре прежнего владельца.

Состав проекта

  • API/ — backend на FastAPI, SQLAlchemy и PostgreSQL;
  • Android/ — приложение на Kotlin и Jetpack Compose;
  • iOS/ — приложение на SwiftUI, виджеты и Live Activities;
  • Web/ — статический сайт и страницы аккаунта;
  • tests/ — тесты backend.

Локальный запуск backend

Требования:

  • Docker Desktop, Docker Engine или другая среда с поддержкой Docker Compose;
  • Git;
  • свободный порт 8000 и доступная внутренняя сеть контейнеров PostgreSQL.
git clone https://github.com/MoonbayStudio/MyHerzen.git
cd MyHerzen
make setup

Откройте .env и последовательно заполните его разделы. В нём перечислены все внешние зависимости: PostgreSQL, публичные адреса, API Герцена, Apple/Google OAuth, Ollama, SMTP, функциональные переключатели и проверки целостности мобильных приложений. Как минимум замените DATABASE_PASSWORD, JWT_SECRET, FRONTEND_BASE_URL, OWNER_EMAILS и ADMIN_EMAILS. Необязательные интеграции можно оставить пустыми или выключенными. После этого запустите сервисы:

make up
curl http://127.0.0.1:8000/health

Ожидаемый ответ:

{"status":"healthy"}

Документация API будет доступна по адресу http://127.0.0.1:8000/docs. В базовой локальной конфигурации AI, SMTP и вход через сторонние сервисы можно не настраивать.

На сервере, доступном из интернета, открывайте только TCP-порты 80 и 443 через reverse proxy с TLS. Не открывайте в интернет порт API 8000, PostgreSQL и Ollama. Полная инструкция по серверу и firewall находится в SETUP.md.

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

make status
make logs
make down
make backup
make restore FILE=backups/myherzen-YYYYMMDD-HHMMSS.sql

Документация

Разработка

Если вы хотите улучшить общий проект, сделайте fork, создайте отдельную ветку и откройте Pull Request. Если вы создаёте на основе MyHerzen самостоятельный проект, сохраните файлы LICENSE и NOTICE и укажите ссылку на исходный репозиторий. Подробный порядок работы и готовый текст для указания авторства приведены в CONTRIBUTING.md.

Тесты backend используют изолированную базу SQLite и не требуют запуска контейнеров:

python3.12 -m venv .venv
source .venv/bin/activate
pip install -r requirements-dev.txt
pytest

Для Android требуются JDK 17 и Android SDK 34:

cd Android
./gradlew assembleDebug

Проект iOS открывается из iOS/MyHerzen.xcodeproj. Для сборки распространяемого приложения потребуются команда Apple Developer и собственные bundle identifiers.

Примечание о production-развёртывании

По умолчанию Compose привязывает API к 127.0.0.1. На production-сервере сохраните эту привязку и установите перед API reverse proxy с TLS, например Caddy или nginx. Не добавляйте в Git файл .env, дампы базы данных, данные OAuth или ключи подписи.

Лицензия

Проект распространяется по лицензии Apache License 2.0. Информация об исходном проекте и его авторстве находится в файле NOTICE.