個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Unofficial clients for KIMEP University's student portal
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗Unofficial clients for KIMEP University's student portal. The Android app is here today; an updated iOS client is planned in the same repository.
The apps talk to the university's old mobile user-facing APIs — the same ones the deprecated store app used — and reproduce the useful parts (schedule, grades, academic calendar) with a native interface, offline caching and class reminders.
➡️ Download the latest APK — a plain download page on GitHub Pages, or grab it straight from Releases.
Captured on a real phone with a fictional student taking six catalog courses (18 credits). These screenshots show the v1.0.1 interface (they predate the calendar export). The demo build is private and is not offered as a download.
See all updated screenshots and the demo setup.
Kotlin · Jetpack Compose · Material 3 · Ktor (OkHttp engine) · kotlinx.serialization ·
DataStore · AlarmManager · Coil. AGP 9 with built‑in Kotlin, minSdk 26, targetSdk 37.
See docs/ARCHITECTURE.md for how the app is put together.
app-website/ download page (GitHub Pages: qarasky.github.io/kimep-mobile-clients)
kimep-android/ Android app (Gradle project)
app/src/main/java/dev/qarasky/unofficialkimep/
data/ models, API client, repositories, caches, notifications, calendar export
di/ hand-rolled dependency container
ui/ Compose screens + theme
vm/ view models
app/src/main/assets/calendar.json parsed academic calendar
keystore.properties release signing (git-ignored)
docs/
KIMEP_Mobile_API.md reverse-engineered API reference
CAPTURE_SETUP.md how the API was captured from a stock iPhone
ARCHITECTURE.md Android app architecture
RELEASING.md how to cut a release (CI signs automatically)
DEVICE_SUPPORT.md supported OS/ABIs/form factors and known limitations
PRIVACY.md data handling, local storage, and older-build privacy notes
tools/
parse_calendar.py KIMEP calendar PDF -> calendar.json
capture.py mitmproxy addon used during reverse engineering
dnsmasq.conf DNS redirect used for the reverse-proxy phase
The download page is deployed by .github/workflows/pages.yml, which snapshots the latest
releases into releases.json at deploy time and publishes app-website/ to GitHub Pages.
An ios/ client is planned; the repository name reflects that.
cd kimep-android
./gradlew :app:assembleDebug # debug APK
./gradlew :app:assembleRelease # release APK
Requires JDK 17+ and an Android SDK with API 37 (local.properties → sdk.dir, or the
ANDROID_SDK_ROOT environment variable).
Release builds are signed from kimep-android/keystore.properties (git‑ignored):
storeFile=keystore/kimep-release.jks
storePassword=…
keyAlias=…
keyPassword=…
If that file is missing, the release build falls back to the debug signing config so a fresh clone still compiles.
.github/workflows/android.yml runs on pushes to main, pull requests,
workflow_dispatch, and v* tags:
platforms;android-37.0, build-tools;36.0.0).keystore.properties.v* tag, publishes a GitHub release with the signed APK. Tags containing
beta / alpha / rc are marked as pre-releases.Required repository secrets:
| Secret | Purpose |
|---|---|
KEYSTORE_BASE64 | base64 of kimep-release.jks |
KEYSTORE_PASSWORD | keystore password |
KEY_ALIAS | key alias |
KEY_PASSWORD | key password |
If the secrets are absent (for example on a fork), signing is skipped and the release build falls back to debug signing instead of failing.
To cut a release, bump versionCode/versionName in
kimep-android/app/build.gradle.kts, then push a tag. Full steps:
docs/RELEASING.md.
The iOS app was captured on a stock (non‑jailbroken) iPhone: mitmproxy for the proxy phase, then a DNS redirect + reverse proxy once the Flutter client turned out to ignore the iOS system proxy. The full, reproducible procedure — including pitfalls and teardown — is in docs/CAPTURE_SETUP.md.
The resulting endpoint reference is in docs/KIMEP_Mobile_API.md.
KIMEP publishes the calendar as PDFs (KAZ/RUS/ENG). tools/parse_calendar.py downloads the
English ones and reconstructs the four‑column table from word coordinates
(pdftotext -bbox), emitting calendar.json that ships as an app asset. Re‑run it each
academic year:
python3 tools/parse_calendar.py # needs poppler (pdftotext)
The app does not depend on this: from June it downloads the new year's English PDF itself and
parses it on the phone (same algorithm, data/calendar/CalendarPdfParser.kt). Years KIMEP
publishes only as a scanned image are typed in under tools/calendar_manual/ and flagged in the
app for double-checking.
v1.0.1 and later contain no usage analytics, tracking client or first-run privacy prompt. Settings → Privacy → Privacy notice explains connections to KIMEP and GitHub, on-device storage, calendar export, and how to clear your data. Account requests use KIMEP's HTTPS API; passwords are not saved by the app. Calendar permission is requested only if you use the optional calendar export, and is used only to list your calendars and manage the events the app added.
Released v1.0.0 and earlier builds may still send anonymous usage statistics. Those builds retain their Settings → Privacy opt-out. Removing tracking from the source does not change an already installed APK. Full details: docs/PRIVACY.md.
Unofficial and not affiliated with KIMEP University. Personal educational project that uses the university's old mobile user-facing APIs. No credentials or captured personal data are committed to this repository.
In the interest of transparency: the current MVP was created with the help of AI — DeepSeek V4.1 Flash, running in the OpenCode harness under an OpenCode GO subscription — alongside manual review and testing on a real device.