2026-01-14 02:53:17 +07:00
2026-01-14 22:20:21 +07:00
2026-01-14 22:37:24 +07:00
2026-01-14 18:23:41 +07:00
2026-01-12 11:58:15 +07:00
2026-01-12 11:58:15 +07:00
2026-01-14 22:20:21 +07:00
2026-01-12 11:58:15 +07:00
2026-01-12 11:58:15 +07:00
2026-01-12 11:58:15 +07:00
2026-01-12 15:32:34 +07:00
2026-01-13 14:37:01 +07:00
2026-01-14 22:20:21 +07:00
2026-01-12 11:58:15 +07:00

📱 Aplikasi Absensi Akademik UBHARA Jaya (Mobile & Backend)

📋 Changelog

📌 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.

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.


🎯 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).

🚀 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.

🗺️ Mekanisme 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.

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.

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".

🛠️ 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)

🔐 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.

📂 Mockup

mockup

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.
    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:

Webhook N8N:

Description
No description provided
Readme 1.6 MiB
Languages
Kotlin 89.8%
Python 10.2%