# π± Aplikasi Absensi Akademik UBHARA Jaya
### Mobile (Kotlin) & Backend (Python Flask)






[π Lihat Changelog](./CHANGELOG.md)
---
## π Deskripsi Proyek
Proyek ini merupakan **Tugas Project Akhir Mata Kuliah Pemrograman Mobile** yang mengimplementasikan sistem absensi akademik berbasis **Client-Server**.
Sistem ini dirancang untuk validitas tinggi dengan mengintegrasikan:
* β
**Geofencing (GPS)** untuk validasi lokasi kampus.
* β
**Face Detection (CameraX)** untuk validasi biometrik kehadiran.
* β
**Anti-Fraud** untuk mendeteksi penggunaan *Fake GPS*.
* β
**Otomatisasi** pelaporan real-time ke **N8N Webhook**.
---
## πΈ Tampilan Aplikasi (Mockup)
---
## π― Tujuan & Capaian
Proyek ini bertujuan untuk melatih kemampuan **Fullstack Mobile Development** dengan fokus pada:
1. **REST API Architecture**: Komunikasi aman antara Android dan Python Flask.
2. **Biometric Validation**: Implementasi ML Kit untuk deteksi wajah.
3. **Security Awareness**: Pencegahan kecurangan lokasi (*Mock Location*).
4. **Database Logic**: Penanganan status otomatis (*Auto-Alfa*) di sisi server.
---
## π Fitur Utama
| Fitur | Deskripsi |
| :--- | :--- |
| **π± Sisi Mobile** | β’ **Smart Attendance:** Validasi radius & wajah real-time.
β’ **Anti-Fraud:** Deteksi & blokir Fake GPS.
β’ **Mode Izin/Sakit:** Upload bukti dokumen tanpa validasi radius.
β’ **Riwayat:** Log kehadiran lengkap dengan foto bukti. |
| **π» Sisi Backend** | β’ **JWT Auth:** Keamanan token pada setiap request.
β’ **Auto-Alfa:** Menandai "TIDAK HADIR" otomatis jika telat.
β’ **N8N Integration:** Kirim data valid ke webhook untuk notifikasi.
β’ **Image Compression:** Optimasi penyimpanan foto (Base64). |
---
## πΊοΈ Mekanisme Alur Absensi
### π’ 1. Status "HADIR"
1. Mahasiswa memilih Jadwal Kelas aktif.
2. **Validasi Sistem:**
* π Lokasi dalam radius **500m**?
* π« Tidak ada aplikasi **Fake GPS** aktif?
3. **Validasi Wajah:** Kamera terbuka, shutter hanya aktif jika wajah terdeteksi.
4. Data (Lokasi + Foto Wajah) dikirim ke server.
### π‘ 2. Status "SAKIT / IZIN"
1. Mahasiswa memilih status Sakit/Izin.
2. **Bypass Lokasi:** Validasi radius dilewati.
3. **Dokumentasi:** Kamera dokumen terbuka (Tanpa deteksi wajah).
4. Foto surat/bukti dikirim ke server.
### π΄ 3. Logika Auto-Alfa (Server Side)
> *Background Process*
* Server memantau jadwal kuliah.
* Jika `jam_selesai < jam_sekarang` dan tidak ada data masuk β Input otomatis **"TIDAK HADIR"**.
---
## π οΈ Tech Stack
| Komponen | Teknologi |
| :--- | :--- |
| **Mobile Platform** | Android (Kotlin) |
| **UI Framework** | Jetpack Compose (Material3) |
| **Camera & AI** | CameraX + ML Kit (Face Analysis) |
| **Backend** | Python Flask |
| **Database** | MySQL |
| **Integrasi** | N8N Webhook |
| **AI Assistant** | Gemini & Claude (Development Tools) |
---
## βοΈ Konfigurasi & Instalasi
### Prasyarat
* Python 3.x
* Android Studio (Ladybug/Latest)
* Koneksi jaringan yang sama (Laptop & HP)
### 1. Setup Backend
Pastikan server berjalan pada jaringan lokal:
```bash
# Install dependencies
pip install -r requirements.txt
# Jalankan server
python app.py