Login per karyawan — bukan pilih nama dari daftar. Bukti kehadiran cukup login + selfie saat masuk dan pulang. Flextime 08.00–09.00, wajib 8 jam, Senin–Jumat.
Hanya untuk email yang sudah didaftarkan admin di allowlist.
1. Jalankan skema. Di Supabase Dashboard > SQL Editor, jalankan file supabase-schema.sql (tabel allowlist, profiles, app_config, attendance, correction_requests, notifications + RLS).
2. Seed admin pertama.
insert into public.allowlist (email, full_name, role) values ('mzakiizzuddin@gmail.com', 'M. Zaki Izzuddin', 'admin') on conflict (email) do update set full_name = excluded.full_name, role = excluded.role;3. Buat bucket Storage. Storage > New bucket: nama selfie, Private (tidak public), lalu jalankan kebijakan storage.objects yang ada di bagian bawah file skema.
4. Daftarkan URL app ini di Supabase. Authentication > URL Configuration: isi Site URL dengan URL app Presensi v2 ini (URL yang kamu buka saat membaca halaman ini), dan tambahkan URL yang sama ke Redirect URLs. Tanpa ini, Login Google tidak bisa redirect kembali ke app.
Selfie wajib untuk masuk dan pulang. Foto dikompres (±100–200 KB) lalu diunggah ke bucket private selfie di Supabase.
Memuat status hari ini…
Untuk hari yang lupa absen pulang. Pengajuan yang masih pending tidak memblokir absen hari berikutnya.
Hanya data kamu sendiri yang tampil di sini.
Notifikasi lupa absen pulang muncul di dalam app, keesokan harinya, di akun kamu sendiri.
Isi tanggal yang lupa, jam pulang sebenarnya, dan alasan singkat. Tanpa selfie retroaktif.
Setujui untuk memperbarui record hari itu dan menandainya “dikoreksi via pengajuan”, lengkap dengan siapa menyetujui dan kapan.
Daftarkan email dulu di sini. Karyawan lalu login / daftar sendiri — admin tidak memegang password mereka. Role berupa teks dan bisa bertambah nanti.
Tambahkan URL app Presensi v2 ini (URL yang sedang kamu buka) ke Supabase Dashboard > Authentication > URL Configuration > Site URL dan Redirect URLs, supaya Login Google bisa kembali ke app setelah login.
Hadapkan wajah ke kamera. Foto akan dikompres sebelum diunggah.