个人 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.