EsaGo adalah asisten akademik all-in-one resmi untuk mahasiswa Universitas Esa Unggul, dirancang untuk menyederhanakan kehidupan kampus Anda dari A sampai Z. Dari jadwal kuliah hingga administrasi UKT, semuanya ada di sini—ditambah kecerdasan buatan (AI) yang siap mendampingi studi Anda!
-
Persistent Navigation Shell: Arsitektur "Single Activity" untuk perpindahan tab yang instan dan mulus tanpa reload.
-
Unified Logout System: Mekanisme logout terpusat yang membersihkan semua sesi (SSO, Siakad, Cache, Widget) hanya dengan satu ketukan, menjamin keamanan data pengguna.
-
Improved UI/UX:
- Marquee: Teks berjalan untuk judul mata kuliah panjang.
- Theming: Tema terang (Light Mode) yang konsisten di seluruh aplikasi.
-
Login Single Sign-On (SSO): Masuk dengan cepat dan aman menggunakan akun SSO universitas Anda.
-
Jadwal Kuliah: Lihat jadwal kelas Anda yang akan datang dalam antarmuka yang mudah digunakan.
-
Profil Mahasiswa: Akses informasi profil akademik Anda kapan saja.
-
Daftar Peserta Kelas: Lihat siapa saja yang ada di kelas Anda.
-
Widget Layar Utama: Pantau jadwal kuliah Anda langsung dari layar utama perangkat Android Anda.
-
Lupa Kata Sandi: Kemudahan memulihkan kata sandi akun Anda.
-
Integrasi E-Learning: Akses penuh ke materi kuliah dan kuis.
- Native Kuis: Pengerjaan kuis Moodle dengan tampilan native aplikasi yang responsif.
- Auto-Save & Submit: Jawaban tersimpan otomatis dan fitur submit yang aman.
- Timer Sinkron: Waktu pengerjaan yang tersinkronisasi server.
-
🤖 AI Quiz Helper (Powered by ChatGPT Streaming):
- Event-Driven Streaming (NDJSON): Respons AI kini dipecah menjadi event granular (
answer,explain_success,explain_fail) untuk feedback yang lebih kaya. - High Cohesion: Logika parsing streaming dipisahkan ke
QuizAiParseryang teruji secara unit. - Auto-Selection: Opsi jawaban terpilih otomatis begitu AI mengirimkan event
answer. - Smart Feedback: Menyimpan penjelasan detail (kenapa benar/salah) untuk ditampilkan di UI.
- Robust Error Handling:
- Anti-Error Sequence: Token refresh otomatis untuk mencegah error "Data outside normal sequence".
- Flexible Parsing: Mampu menangani JSON bersih maupun yang terbungkus Markdown.
- Result Fallback: Nilai akhir tetap muncul meskipun dosen menyembunyikan review detail.
- Event-Driven Streaming (NDJSON): Respons AI kini dipecah menjadi event granular (
-
Improved UI Dashboard:
- Auto-Sliding Announcement Carousel:
- Pengumuman ditampilkan dalam carousel interaktif yang bergeser otomatis setiap 5 detik.
- Mendukung swipe manual dan indikator posisi (dots).
- Idle Mode: Otomatis mengganti judul pengumuman panjang menjadi teks statis saat tidak ada interaksi selama 30 detik untuk menghemat daya.
- Running Text (Marquee): Greeting menyapa dengan efek scrolling yang estetik (dengan Random Start).
- Semester Calculation: Logika perhitungan minggu "pintar" yang akurat memprediksi pertemuan berikutnya.
- Auto-Sliding Announcement Carousel:
-
Refactoring & Code Quality:
- Renaming:
ProfilePagekini bernamaDashboardPageuntuk memperjelas fungsinya sebagai beranda utama.SsoPagekini bernamaLoginPageuntuk intuitivitas kode (screaming architecture) dan kemudahan pencarian.
- Widget Testing:
widget_test.darttelah diperbarui untuk menguji renderDashboardPagesecara spesifik dengan mock data. - High Cohesion & Low Coupling:
- Strong Typing: Implementasi Model
MoodleTaskmenggantikan penggunaanMapmentah, memusatkan logika bisnis (seperti urgensi dan deadline) di dalam Model dan menjaga UI tetap bersih. - Type Safety: Mengurangi risiko runtime errors akibat perubahan struktur API.
- Strong Typing: Implementasi Model
- Renaming:
Aplikasi ini menjunjung tinggi standar Clean Code:
- Modular Parsing: Logika parsing HTML dipisahkan sepenuhnya ke
SiakadParser(High Cohesion). - Unit Testing:
schedule_logic_test.dart: Memastikan perhitungan minggu selalu akurat di berbagai tanggal simulasi.announcement_parser_test.dart: Menjamin parsing pengumuman tidak rusak meski struktur HTML berubah sedikit.attendance_parser_test.dart: Memverifikasi akurasi parsing tabel absensi dan perhitungan persentase.student_profile_test.dart: (New) Memastikan halaman profil dan fitur Unified Logout berfungsi dengan benar (termasuk dialog konfirmasi).widget_test.dart: Smoke test yang memastikan aplikasi berjalan mulus dari awal.
- Backend Verification:
- Backend Verification:
rust/src/bin/test_chatgpt.rs: Binary khusus untuk memverifikasi konektivitas dan TLS Fingerprinting secara real-world.
-
Absensi Mahasiswa (Dart Implementation):
- High Performance Parsing: Implementasi parser HTML full-Dart (
SiakadParser) yang cepat dan mudah di-maintain. - Statistik Lengkap: Visualisasi persentase kehadiran per mata kuliah dan total rata-rata semester.
- Indikator Visual: Peringatan otomatis jika kehadiran kurang dari 75% atau terlalu banyak absen.
- Semester History: Kemampuan melihat rekap absensi semester lalu.
- High Performance Parsing: Implementasi parser HTML full-Dart (
-
Student Profile Revamp: Tampilan profil modern dengan avatar besar dan navigasi persisten.
-
Refined Experience:
- Smart Download UI: Widget download melayang (floating) yang non-intrusif, tanpa notifikasi sistem yang mengganggu, dengan dukungan Light Mode yang elegan.
- Pengumuman estetik dengan Infinite Marquee.
- Navigasi "Absen" langsung dari Bottom Bar.
- High Performance Display: Dukungan native 120Hz (High Refresh Rate) untuk scrolling yang sangat mulus di perangkat modern (seperti Xiaomi HyperOS).
- Robust Download System:
- Dual Notification: Notifikasi in-app (pills) yang estetik DAN notifikasi sistem Android yang persisten.
- Smart Storage: Otomatis menangani izin ketat Android 14+ (Scoped Storage) dengan mekanisme Download-then-Copy yang aman.
-
Manajemen Tugas & Deadline (New):
- Layout Konsisten: Kartu tugas didesain ulang agar tingginya selaras dengan informasi kehadiran, menciptakan layout dashboard yang rapi.
- Detail Tugas Interaktif: Halaman khusus untuk melihat detail tugas, status pengumpulan, dan hitungan mundur waktu sisa secara real-time.
- Direct Moodle Access: Integrasi tombol untuk langsung menuju halaman pengumpulan tugas di web Moodle.
-
🚀 Performance & Stability (New):
- Turbo Startup: Inisialisasi paralel (Rust, Downloader, Intl) memangkas waktu startup aplikasi hingga 50%.
- Non-Blocking Validation: Pengecekan status layanan berjalan di background, membuat UI dashboard muncul instan.
- Smart Dashboard Retry: Sistem cerdas yang otomatis me-reload halaman dashboard begitu koneksi terdeteksi pulih, tanpa perlu menunggu countdown timer manual jika tidak diperlukan.
Aplikasi telah direfactoring menggunakan pendekatan Clean Architecture dan Provider Pattern untuk performa yang lebih baik dan kode yang lebih rapi:
- UI Layer (
QuizAttemptPage): Hanya bertanggung jawab menampilkan widget (Stateless/Stateful Widget ringan). - Business Logic Layer (
QuizAttemptProvider): Menangani semua logika bisnis:- Manajemen Timer Kuis.
- Komunikasi API Moodle (Start, Save, Submit).
- Streaming & Parsing respons AI.
- caching hasil jawaban.
- Service Layer:
MoodleServicedanChatGPTServiceyang terinjeksi via Dependency Injection. - File & Permission Layer (New):
FileServiceyang memisahkan logika Izin Android dan Path File dari UI, menciptakan arsitektur High Cohesion & Low Coupling.
- Library:
wreqv6 (Pure Rust) withSafari16emulation to bypass Cloudflare/Bot detection. - Protocol: HTTP/1.1 with TLS Fingerprinting customization.
- State: Currently Stateless/Generator Mode.
- Suitable for "One-shot" requests (e.g., "Answer all these questions").
- Does NOT support "Continue Conversation" (Context breakdown per turn) yet.
- Does NOT support Image Upload yet.
- The current Flutter implementation (
QuizAttemptProvider) uses a Generator Pattern:- Combines all questions into one massive prompt.
- Requests a single stream of answers in NDJSON format.
- Parses the stream line-by-line.
- Compatibility: The current Rust port is fully compatible with this flow. "Continue Conversation" logic is NOT required for the current bulk-answer feature.
- Event-Driven Streaming: Plans to break down huge responses into granular events (Correct Answer, Explanation Correct, Explanation Wrong) for better UI feedback/partial loading.
- Image Support: Porting
upload_imagefor multimodal questions.
Project ini dilengkapi konfigurasi Model Context Protocol (MCP) untuk meningkatkan produktivitas pengembangan:
- Puppeteer: Automasi testing dan scraping web via browser headless.
- Git: Integrasi manajemen versi.
- SQLite: Inspeksi langsung database lokal aplikasi.
- Android Platform Tools: Akses ADB (Android Debug Bridge) untuk debugging perangkat fisik.
lib/: Kode Hash Source Dart (Flutter UI & Logic).rust/: Production Client. Kode backend Pure Rust untuk interaksi aman dengan ChatGPT API.ChatGPT/: Reference Implementation (Python). Submodule dari repo asli untuk referensi/debugging jika terjadi API breakdown.
EsaGo dibangun menggunakan Flutter, toolkit UI modern dari Google untuk membuat aplikasi yang indah dan dikompilasi secara native untuk seluler, web, dan desktop dari satu basis kode.
- Provider: Untuk manajemen state.
- HTTP & Cookie Jar: Untuk menangani sesi jaringan dengan server Siakad.
- HTML: Untuk mem-parsing konten HTML yang diambil dari situs web.
- Home Widget: Untuk menyediakan widget di layar utama Android.
- Shared Preferences: Untuk menyimpan data sederhana di perangkat.
- Intl: Untuk keperluan internasionalisasi dan pemformatan.
Untuk menjalankan proyek ini secara lokal, ikuti langkah-langkah berikut:
- Prasyarat: Pastikan Anda telah menginstal Flutter SDK.
- Klon Repositori:
git clone https://github.com/username/esago.git cd esago - Instal Ketergantungan:
flutter pub get
4 . Jalankan Aplikasi: flutter run ```
Aplikasi ini dirancang untuk menjadi sangat ringan bagi server Universitas Esa Unggul.
- Request Minim: Saat startup, aplikasi hanya mengirimkan 4-5 request HTTP (JSON/HTML ringan) untuk mengambil seluruh data profil, jadwal, dan pengumuman.
- Beban Rendah: Dibandingkan dengan portal web konvensional yang memuat puluhan aset (gambar, CSS, JS) setiap kali halaman dibuka (bisa mencapai 20-50 request), EsaGo memangkas beban server hingga 90%.
- Caching Cerdas: Data jadwal dan profil disimpan secara lokal (cache), sehingga request ke server hanya dilakukan saat diperlukan atau saat user melakukan refresh manual.