Tra Cα»©u Hα»c TαΊp & ThΓ΄ng Tin Sinh ViΓͺn TrΖ°α»ng ΔαΊ‘i Hα»c Cα»u Long
Empowering thousands of students at Mekong University with instantaneous academic lookups, offline schedule persistence, background grade change alerts, and edge telemetry.
About β’ Benchmark β’ Features β’ Architecture β’ Crash Telemetry β’ Auto-Updates β’ Quickstart β’ Developer
Located along National Highway 1A in Phu Quoi, Long Ho District, Vinh Long Province, in the heart of the Mekong Delta, Vietnam, Mekong University (TrΖ°α»ng ΔαΊ‘i Hα»c Cα»u Long - MKU) is home to over 10,000 dynamic students across information technology, engineering, health sciences, economics, and law.
While the university's desktop educational portal provides comprehensive academic administration, students frequently face mobile browser hurdles: session timeouts, clunky navigation on small screens, and the hassle of repeatedly logging in just to check schedules or grades.
MKUPortal (Cα»ng thΓ΄ng tin sinh viΓͺn ΔαΊ‘i Hα»c Cα»u Long) is an independent, community-driven open-source mobile client crafted to solve these everyday challenges. From instantaneous grade lookups (tra cα»©u kαΊΏt quαΊ£ hα»c tαΊp) and weekly timetables (lα»ch hα»c) to examination timetables (lα»ch thi) and tuition management (tra cα»©u hα»c phΓ), MKUPortal ensures that essential student tools are always within reachβfast, elegant, and fully accessible even when offline.
Traditional university web portals often struggle on mobile browsers: repetitive session logins, high data latency, zero offline capabilities, and lack of push alerts when new exam grades arrive. MKUPortal was engineered from the ground up to solve these pain points with modern mobile engineering:
| Feature Dimension | Standard University Mobile Web | π MKUPortal Native App |
|---|---|---|
| Initial Load & Display | 3.5s β 5.8s (re-fetching complete HTML) | 0ms (Zero-Copy RAM Cache) |
| Offline Operation | β Complete network failure / blank screen | β Instant Offline Mode (Persistent Fallback) |
| Grade Change Alert | β Students must manually refresh web pages | β Automated Background Diff Notification |
| Session & Form Safety | β Form inputs lost on navigation or tab switch | β Real-Time Draft State Preservation |
| Multi-Account Support | β Data cache overlaps between student logins | β Strict Student-ID Isolated Partitioning |
| Network Overhead | Full desktop HTML + unminified assets (~2.4 MB) | Ultra-light JSON payloads (~12 KB) |
| APK Binary Footprint | N/A | 3.8 MB (Optimized with R8/ProGuard) |
- Grade Explorer: Detailed visual breakdowns of Semester GPA, Cumulative GPA, 10-scale, 4-scale, and letter-grade equivalents.
- Weekly & Period Timetable: Interactive class schedule viewer with period blocks, classroom locations, lecturer details, and seamless week-to-week navigation.
- Exam Schedule & Regulations: Real-time examination timetable including room allocations, seating numbers, formats, and mandatory university guidelines.
- Tuition & E-Invoice Management: Transparent review of tuition receivables, bank transaction receipts, and personal e-invoice tax declaration draft preservation.
- Curriculum Roadmap: Official academic program catalog, course prerequisites, and department structures.
- Direct Student Inquiries: In-app feedback channel to reach academic departments with auto-restoring draft safety.
- Multi-Tier Stale-While-Revalidate Engine:
- Level 1 (Memory): High-speed
LruCacheserving active views in 0ms with zero reflection overhead. - Level 2 (Persistent Disk): Gson-serialized offline snapshots with strict TTL expiration rules (2h for student records, 24h for static catalogs).
- Level 3 (Stale Fallback): Automatically serves previous snapshots when network drops with prominent status banners.
- Level 1 (Memory): High-speed
- Multi-Account Isolation: Partitions all local storage, form drafts, and grade snapshots by
studentIdto safeguard privacy on shared devices. - Smart Background Grade Checker: Native Android
JobSchedulerdaemon that detects grade updates and fires high-priority notifications linking straight to student transcripts. - In-App GitHub Release Update Checker: Checks the GitHub Releases API for new versions and presents an optional, non-intrusive Material 3 update dialog with interactive changelogs.
- Edge Crash Reporting Gateway: Edge microservice on Cloudflare Workers capturing uncaught exceptions and forwarding HTML diagnostic cards to Telegram in real-time.
flowchart TD
subgraph Client["π± MKUPortal Android App (Client Architecture)"]
UI[Material 3 Activities & ViewModels]
Repo[StudentRepository & AuthRepository]
Cache[(AppCacheManager: RAM LruCache + Disk)]
Draft[(DraftManager: Form Draft Storage)]
Job[GradeCheckJobService Daemon]
CrashEng[CrashReporter: Offline Queue + 3s Sync Thread]
UpdateMgr[AppUpdateManager: GitHub Release Checker]
UI --> Repo
Repo --> Cache
UI --> Draft
Job --> Repo
end
subgraph SchoolServer["π« University Core Infrastructure"]
APIGW[Mekong University Gateway & Edusoft ERP]
end
subgraph EdgeCloud["βοΈ Cloudflare Edge & Community Telemetry"]
CFWorker[Cloudflare Worker Gateway: mku-crash-reporter]
TGBot[Telegram Bot API]
AdminChat[Admin / Engineering Telegram Alert]
GHRelease[GitHub Releases API: dev2k6/MKUPortal]
end
Repo <-->|HTTPS REST| APIGW
CrashEng -->|POST /api/crash| CFWorker
CFWorker -->|sendMessage HTML| TGBot
TGBot --> AdminChat
UpdateMgr <-->|GET /releases/latest| GHRelease
MKUPortal comes equipped with an enterprise-grade, serverless diagnostic gateway deployed on Cloudflare Workers located in cloudflare-worker/:
- Live Edge URL:
https://mku-crash-reporter.dev2k6.workers.dev - Health Check:
GET https://mku-crash-reporter.dev2k6.workers.dev/health - Zero Overhead: Eliminates any logging burden on Mekong University's university web servers.
- Encrypted Secrets: Admin Telegram credentials (
TELEGRAM_BOT_TOKEN,TELEGRAM_CHAT_ID) remain encrypted on the Cloudflare edge and are never exposed inside client binaries. - Intelligent Stack Truncation: Trims stacktraces to fit within Telegram's 4,096-character limit while escaping HTML entities for faultless message delivery.
π¨ [MKUPortal] APPLICATION CRASH REPORT π¨
ββββββββββββββββββββββββββ
βοΈ Severity: π΄ CRITICAL (FATAL CRASH)
π€ Student ID: 2100123
π Screen: vn.edu.mku.portal.ui.student.MarksActivity
π± Device: Samsung SM-S918B (Android 14 - API 34)
πΆ Network: WiFi | π§ Free RAM: 3.2 GB / 7.8 GB
π·οΈ Version: v1.0.0 (Build 1) - release
β° Time: 10/09/2026, 06:30:00 (ICT)
ββββββββββββββββββββββββββ
β Exception: java.lang.NullPointerException
π¬ Message: Attempt to invoke virtual method ...
MKUPortal features an automated, non-intrusive update delivery mechanism powered by GitHub Releases.
- Centralized Configuration: Configured in
AppUpdateConfig.java:public static final String GITHUB_OWNER = "dev2k6"; public static final String GITHUB_REPO = "MKUPortal";
- Rate-Limit Throttling: Auto-check executes at most once every 4 hours to avoid GitHub API rate limits.
- Semantic Versioning Comparison: Compares
major.minor.patcharrays (1.0.1 > 1.0) while handling-betaor+buildtags. - 100% Localized Dialog: Displays version badges (
v1.0 β v1.0.1), publication date, APK file size, and scrollable release notes in both Vietnamese and English. - Flexible Options: Students can choose Update Now (direct APK download), Later, or Skip This Version.
βββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Layer β Technology / Library β
βββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β OS & Target β Android 7.0 (Nougat) to Android 15/16 (API 24 to 37) β
β Language β Java 11 (Source & Target Compatibility) β
β Build Tool β Gradle 8.9+, Kotlin DSL (build.gradle.kts) β
β UI & Design β Material Components 3, Dynamic DayNight, Vector Drawablesβ
β Networking β Square Retrofit 2, OkHttp 4, HttpLoggingInterceptor β
β Serialization β Google Gson 2.10+ with custom type adapters β
β Image & Assets β Android Vector Assets, Adaptive Icons, WebP Compress β
β Quality & Opt β R8 Code Shrinking, Resource Stripping (APK: 3.8 MB) β
β Edge Gateway β Cloudflare Workers (Modern ES Module runtime) β
β Telemetry β Telegram Bot API (HTML formatting) β
βββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
- Android Studio: Ladybug (2024.2.1+) or newer.
- JDK: OpenJDK 17 or Android Studio Embedded JBR.
- Android SDK: Build Tools 35+, Platforms API 24β37.
# 1. Clone the repository
git clone https://github.com/dev2k6/MKUPortal.git
cd MKUPortal
# 2. Configure SDK location (if not set in environment)
echo "sdk.dir=$ANDROID_HOME" > local.properties
# 3. Run full unit test suite
./gradlew testDebugUnitTest
# 4. Build Debug APK (with full network logging enabled)
./gradlew assembleDebug
# 5. Build Production Release APK (R8 Minified & Resource Shrunk ~3.8 MB)
./gradlew assembleReleaseGenerated APKs:
- Debug APK:
app/build/outputs/apk/debug/app-debug.apk - Optimized Release APK:
app/build/outputs/apk/release/app-release-unsigned.apk
MKUPortal/
βββ app/
β βββ src/
β β βββ main/
β β β βββ java/vn/edu/mku/portal/
β β β β βββ data/
β β β β β βββ crash/ # UncaughtExceptionHandler, Payload, Queue
β β β β β βββ local/ # AppCacheManager, DraftManager, Session
β β β β β βββ network/ # Retrofit ApiService, ApiClient, Models
β β β β β βββ update/ # AppUpdateConfig, AppUpdateManager, ReleaseModel
β β β β βββ service/ # GradeCheckJobService (Background Daemon)
β β β β βββ ui/
β β β β βββ common/ # NetworkMonitor, SkeletonHelper, DiffManager
β β β β βββ login/ # LoginActivity, ViewModel, State
β β β β βββ forgotpassword/# Password recovery flow
β β β β βββ student/ # Marks, Schedules, Fees, Exams, Profile
β β β βββ res/ # Material 3 layouts, drawables, strings (VI/EN)
β β βββ test/ # Unit tests (Diff, Isolation, Updates)
β βββ build.gradle.kts # Android configuration & R8 rules
β βββ proguard-rules.pro # Optimized keep rules
βββ cloudflare-worker/
β βββ worker.js # Edge gateway ES Module
β βββ wrangler.toml # Cloudflare deployment manifest
β βββ package.json # Wrangler tooling scripts
β βββ README.md # Comprehensive Worker documentation
βββ README.md # Main project documentation
Contributions make the open-source community an inspiring place to learn, inspire, and create. Any contributions you make to MKUPortal are greatly appreciated!
- Fork the Project (
https://github.com/dev2k6/MKUPortal/fork). - Create your Feature Branch (
git checkout -b feat/AmazingFeature). - Commit your Changes (
git commit -m 'feat: add AmazingFeature'). - Push to the Branch (
git push origin feat/AmazingFeature). - Open a Pull Request.
Please ensure all tests pass (./gradlew testDebugUnitTest) before submitting PRs!
Lead Software Engineer & Open-Source Maintainer
π Hotline / Zalo: 03333 499 48 β’ 07777 63 858
π Location: Vinh Long & Mekong Delta, Vietnam
If MKUPortal made your university experience faster, saved you time, or inspired your Android projects, please consider giving this repository a Star βοΈ!
This project is licensed under the MIT License β see the LICENSE file for details.
Disclaimer: MKUPortal is an independent, community-driven open-source initiative created to optimize the mobile academic experience for students of Mekong University (TrΖ°α»ng ΔαΊ‘i hα»c Cα»u Long). All university trademarks, seals, and university API trademarks are the property of Mekong University.