From 59b67b428affffffdd12f7eab946e2373e43ce54 Mon Sep 17 00:00:00 2001 From: 202310715297 RAIHAN ARIQ MUZAKKI <202310715297@mhs.ubharajaya.ac.id> Date: Thu, 15 Jan 2026 22:52:27 +0700 Subject: [PATCH] Update README --- README.md | 156 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 80 insertions(+), 76 deletions(-) diff --git a/README.md b/README.md index 4186017..2481d42 100644 --- a/README.md +++ b/README.md @@ -1,102 +1,106 @@ -# πŸ“± Aplikasi Absensi Akademik UBHARA Jaya (Mobile & Backend) +
-[πŸ“‹ Changelog](./CHANGELOG.md) +# πŸ“± Aplikasi Absensi Akademik UBHARA Jaya +### Mobile (Kotlin) & Backend (Python Flask) -## πŸ“Œ Deskripsi Proyek -Proyek ini merupakan **Tugas Project Akhir Mata Kuliah Pemrograman Mobile** yang mengimplementasikan sistem absensi akademik berbasis **Client-Server**. Aplikasi mobile dibangun menggunakan **Kotlin (Jetpack Compose)**, sedangkan sisi server menggunakan **Python Flask** dengan database **MySQL**. +![Kotlin](https://img.shields.io/badge/Kotlin-20232A?style=for-the-badge&logo=kotlin&logoColor=7F52FF) +![Jetpack Compose](https://img.shields.io/badge/Jetpack%20Compose-4285F4?style=for-the-badge&logo=android&logoColor=white) +![Python](https://img.shields.io/badge/Python-3776AB?style=for-the-badge&logo=python&logoColor=white) +![Flask](https://img.shields.io/badge/Flask-000000?style=for-the-badge&logo=flask&logoColor=white) +![MySQL](https://img.shields.io/badge/MySQL-00000F?style=for-the-badge&logo=mysql&logoColor=white) +![n8n](https://img.shields.io/badge/n8n-EA4B71?style=for-the-badge&logo=n8n&logoColor=white) -Sistem ini dirancang dengan validasi ketat menggunakan **Geofencing (GPS)** dan **Deteksi Wajah (Face Detection)** untuk status kehadiran "Hadir", serta mendukung pengiriman bukti dokumen untuk status "Sakit/Izin". Seluruh data terintegrasi secara real-time ke **N8N Webhook** untuk pelaporan otomatis. +[πŸ“‹ Lihat Changelog](./CHANGELOG.md) | [πŸ› Laporkan Isu](../../issues) + +
--- -## 🎯 Tujuan Proyek -- Mengimplementasikan arsitektur **REST API** antara Android dan Python Flask. -- Menerapkan **Face Detection** menggunakan CameraX untuk memvalidasi kehadiran fisik mahasiswa. -- Mencegah kecurangan absensi dengan fitur deteksi **Fake GPS**. -- Mengelola status kehadiran otomatis (**Auto-Alfa**) pada server jika mahasiswa lupa absen. -- Melatih kemampuan Fullstack Mobile Development (Backend, Database, & Mobile UI). +## πŸ“Œ 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) +
+ Mockup Aplikasi Absensi +
+ +--- + +## 🎯 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 -### πŸ“± Sisi Mobile (Android - Jetpack Compose) -- **Modern UI**: Antarmuka modern menggunakan **Material3** & **Jetpack Compose**. -- **Smart Attendance**: - - **Hadir**: Wajib berada di radius kampus & Wajib deteksi wajah (Real-time). - - **Sakit/Izin**: Wajib upload foto surat dokter/bukti (Tanpa validasi radius). -- **Anti-Fraud**: Sistem mendeteksi dan menolak jika pengguna mengaktifkan **Fake GPS/Mock Location**. -- **Riwayat & Bukti**: Mahasiswa dapat melihat riwayat kehadiran beserta foto bukti yang tersimpan di server. -- **Profil Mahasiswa**: Menampilkan data akademik dan fitur logout. - -### πŸ’» Sisi Backend (Python Flask) -- **JWT Authentication**: Keamanan berbasis token untuk setiap request. -- **Auto-Alfa Trigger**: Sistem otomatis menandai "TIDAK HADIR" jika jam kuliah berakhir dan mahasiswa belum absen. -- **N8N Integration**: Data absensi yang valid dikirim otomatis ke webhook N8N untuk notifikasi/reporting. -- **Image Handling**: Kompresi foto (Base64) otomatis untuk efisiensi penyimpanan database. +| 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 Absensi +## πŸ—ΊοΈ Mekanisme Alur Absensi -### 1. Absensi Status "HADIR" -1. Mahasiswa memilih Jadwal Kelas yang aktif. -2. Sistem mengecek **GPS**: - - Apakah di dalam radius **500m** dari kampus? - - Apakah terdeteksi aplikasi **Fake GPS**? -3. Sistem membuka **Kamera Deteksi Wajah**: - - Tombol shutter hanya aktif jika wajah terdeteksi. -4. Data (Lokasi + Foto Wajah) dikirim ke server. +### 🟒 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. Absensi Status "SAKIT / IZIN" -1. Mahasiswa memilih status Sakit atau Izin. -2. Validasi lokasi dilewati (bisa absen dari rumah/RS). -3. Sistem membuka **Kamera Dokumen** (Tanpa deteksi wajah). -4. Mahasiswa memfoto surat keterangan. -5. Data 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) -- Setiap kali jadwal dimuat, server mengecek jadwal yang `jam_selesai < jam_sekarang`. -- Jika mahasiswa belum ada record absensi pada jam tersebut, server otomatis menginput status **"TIDAK HADIR"**. +### πŸ”΄ 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"**. --- -## πŸ› οΈ Teknologi yang Digunakan -- **Mobile Platform**: Android (Kotlin) -- **UI Framework**: Jetpack Compose -- **Camera Engine**: CameraX + ML Kit (Face Analysis) -- **Backend Framework**: Python Flask -- **Database**: MySQL -- **Integrasi**: N8N Webhook -- **Protocol**: HTTP/REST (JSON) -- **AI**: Gemini & Claude (Sebagai Tools dalam Membantu Pengembangan) +## πŸ› οΈ 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) | --- -## πŸ” Izin Aplikasi (Permissions) -Aplikasi memerlukan izin berikut: -- `INTERNET`: Koneksi ke Server API. -- `ACCESS_FINE_LOCATION`: Validasi koordinat presisi tinggi. -- `ACCESS_COARSE_LOCATION`: Validasi koordinat jaringan. -- `CAMERA`: Pengambilan foto bukti kehadiran & deteksi wajah. +## βš™οΈ Konfigurasi & Instalasi ---- +### Prasyarat +* Python 3.x +* Android Studio (Ladybug/Latest) +* Koneksi jaringan yang sama (Laptop & HP) -## πŸ“‚ Mockup -![mockup](Mockup.png) +### 1. Setup Backend +Pastikan server berjalan pada jaringan lokal: +```bash +# Install dependencies +pip install -r requirements.txt -## Catatan Konfigurasi: -- **Server**: Pastikan `app.py` berjalan (`python app.py`) pada jaringan yang sama dengan HP. -- **Endpoint**: Sesuaikan `BASE_URL` pada file `MainActivity.kt` (Object `AppConstants`) dengan IP Laptop Anda. - ```kotlin - const val BASE_URL = "[http://192.168.](http://192.168.)x.x:5000" - ``` -- **Fake GPS**: Pastikan mematikan aplikasi Mock Location saat pengujian fitur Hadir. - -## Pengecekan & Monitoring: -- **Monitoring**: https://ntfy.ubharajaya.ac.id/EAS -- **Data Spreadsheet**: https://docs.google.com/spreadsheets/d/1jH15MfnNgpPGuGeid0hYfY7fFUHCEFbCmg8afTyyLZs/edit?gid=0#gid=0 - -## Webhook N8N: -- **Test**: https://n8n.lab.ubharajaya.ac.id/webhook-test/23c6993d-1792-48fb-ad1c-ffc78a3e6254 -- **Production**: https://n8n.lab.ubharajaya.ac.id/webhook/23c6993d-1792-48fb-ad1c-ffc78a3e6254 \ No newline at end of file +# Jalankan server +python app.py \ No newline at end of file