Кроссплатформенный клиент и экосистема синхронизации академического расписания для студентов и преподавателей.
Schedule — мультиплатформенная экосистема для получения, парсинга и отображения расписания учебных заведений. Проект объединяет гетерогенные источники данных (от закрытых веб-API и XLSX-файлов до облачных таблиц) в единую нормализованную модель данных с поддержкой оперативного отслеживания замен, звонков и академических новостей.
Архитектура построена на базе Kotlin Multiplatform и Compose Multiplatform, обеспечивая консистентный пользовательский опыт и единый стек бизнес-логики на Android, десктопных операционных системах (Windows, macOS, Linux) и в браузере через WebAssembly.
-
Мультипровайдерная синхронизация
Автономные клиенты парсинга для каждого учебного заведения с извлечением групп, преподавателей, аудиторий и расписания звонков. -
Автоматическое наложение замен
Интеллектуальное сопоставление базового расписания с оперативными изменениями, вычисление добавленных, отмененных и перенесенных занятий. -
Личные кабинеты студентов
Авторизация, зачетные книжки, корпоративная почта, заказ справок, переаттестации и платежные QR-коды для поддерживаемых учебных заведений (ДГТУ, РКСИ). -
Виджеты рабочего стола и уведомления о заменах
Android Glance-виджеты расписания с динамической адаптацией тем оформления и периодический фоновый WorkManager-мониторинг оперативных замен для избранных групп. -
Академические новости и галереи
Интегрированная лента новостей учебных заведений с адаптивной версткой, предпросмотром медиафайлов, форматированием цитат и полноэкранным просмотром деталей. -
Автономность и фоновый кэш
Многоуровневое кэширование расписания и метаданных для бесперебойной работы клиентов в условиях нестабильной сети или недоступности серверов учреждений. -
Периодический мониторинг и синхронизация
Автоматизированный CI-конвейер проверки стабильности парсеров и синхронизации актуальных расписаний (schedule-sync) для веб-клиента и облачного fallback-источника.
| Организация | Модуль | Источник данных | Статус |
|---|---|---|---|
| РКСИ — Ростовский-на-Дону колледж связи и информатики | :libs:schedule:rksi |
XLSX, Google Таблицы, Веб | Поддерживается |
| ДГТУ — Донской государственный технический университет | :libs:schedule:dgtu |
Внутренний REST API | Поддерживается |
| РГЭУ (РИНХ) — Ростовский государственный экономический университет | :libs:schedule:rinh |
Официальный веб-сервис | Поддерживается |
| ИУБиП — Институт управления, бизнеса и права | :libs:schedule:iubip |
Информационный портал | Поддерживается |
| ЮФУ (Мехмат) — Институт математики, механики и КН им. И.И. Воровича | :libs:schedule:sfedu |
Официальный REST API / Веб | Поддерживается |
| РГУПС — Ростовский государственный университет путей сообщения | :libs:schedule:rgups |
Веб-портал расписания | Поддерживается |
| РГУПС (Туапсе) — Филиал РГУПС в г. Туапсе | :libs:schedule:rgups_tuapse |
Информационный сервис | Поддерживается |
| ТвГУ — Тверской государственный университет | :libs:schedule:tvgu |
Официальный REST API / Веб | Поддерживается |
graph TD
subgraph Targets["Точки сборки приложений"]
APP["app (Android APK / AAB)"]
DESKTOP["desktopApp (Desktop JVM)"]
WASM["wasmApp (Web Wasm)"]
end
subgraph Presentation["Презентационный слой"]
COMP_APP["composeApp (Root UI & Navigation)"]
FEATURES["features (schedule, news, settings, account, dev)"]
end
subgraph CoreLayer["Ядро и навигация"]
CORE_NAV["core:navigation"]
CORE_FOUND["core:foundation"]
end
subgraph BusinessLayer["Бизнес-логика и данные"]
DOMAIN["domain (Модели, Use Cases)"]
DATA["data (Room DB, Репозитории, Кэш)"]
end
subgraph ParsersLayer["Парсеры заведений (libs:schedule)"]
CORE_PARSER["core (Базовые DTO и клиенты)"]
P_RKSI["rksi (Колледж связи)"]
P_DGTU["dgtu (Донской тех. ун-т)"]
P_IUBIP["iubip (Институт упр-я и права)"]
P_RINH["rinh (РГЭУ РИНХ)"]
P_SFEDU["sfedu (ЮФУ Мехмат)"]
P_RGUPS["rgups (РГУПС)"]
P_TUAPSE["rgups_tuapse (РГУПС Туапсе)"]
P_TVGU["tvgu (ТвГУ Тверь)"]
end
subgraph ToolsLayer["Инструменты"]
SYNC["tools:schedule-sync (CLI & CI Health Check)"]
end
APP --> COMP_APP
DESKTOP --> COMP_APP
WASM --> COMP_APP
COMP_APP --> FEATURES
FEATURES --> CORE_NAV
FEATURES --> CORE_FOUND
FEATURES --> DOMAIN
DATA --> DOMAIN
DATA --> CORE_PARSER
DATA --> P_RKSI
DATA --> P_DGTU
DATA --> P_IUBIP
DATA --> P_RINH
DATA --> P_SFEDU
DATA --> P_RGUPS
DATA --> P_TUAPSE
DATA --> P_TVGU
P_RKSI --> CORE_PARSER
P_DGTU --> CORE_PARSER
P_IUBIP --> CORE_PARSER
P_RINH --> CORE_PARSER
P_SFEDU --> CORE_PARSER
P_RGUPS --> CORE_PARSER
P_TUAPSE --> CORE_PARSER
P_TVGU --> CORE_PARSER
SYNC --> CORE_PARSER
SYNC --> P_RKSI
SYNC --> P_DGTU
SYNC --> P_IUBIP
SYNC --> P_RINH
SYNC --> P_SFEDU
SYNC --> P_RGUPS
SYNC --> P_TUAPSE
SYNC --> P_TVGU
// settings.gradle.kts
dependencyResolutionManagement {
repositories {
maven {
url = uri("https://maven.pkg.github.com/whatrushki/schedule")
credentials {
username = System.getenv("GITHUB_ACTOR")
password = System.getenv("GITHUB_TOKEN")
}
}
}
}
// build.gradle.kts
dependencies {
implementation("app.what.schedule:core:1.3.15")
implementation("app.what.schedule:rksi:1.3.15")
implementation("app.what.schedule:dgtu:1.3.15")
implementation("app.what.schedule:iubip:1.3.15")
implementation("app.what.schedule:rinh:1.3.15")
implementation("app.what.schedule:sfedu:1.3.15")
implementation("app.what.schedule:rgups:1.3.15")
implementation("app.what.schedule:rgups_tuapse:1.3.15")
implementation("app.what.schedule:tvgu:1.3.15")
}# Клонирование репозитория
git clone https://github.com/whatrushki/schedule.git
cd schedule
# Сборка Android APK
./gradlew assembleDebug
# Запуск Desktop-приложения
./gradlew :desktopApp:run
# Запуск Web (Wasm) в dev-режиме
./gradlew :wasmApp:wasmJsBrowserDevelopmentRun- Ошибки и запросы функционала оформляются через GitHub Issues.
- Официальные каналы коммуникации и вопросы разработки: Telegram.


