Appearance
User Flow
1. Registration & Login
Registration (Semua User)
Landing Page → Klik "Daftar"
→ Pilih metode: Google / Email+Password / Magic Link
→ Google: Redirect ke Google → Callback → Auto-login
→ Email+Password: Isi form → Verifikasi email → Login
→ Magic Link: Isi email → Klik link di email → Auto-login
→ Redirect ke Onboarding Page (wajib diisi)
→ Step 1: Full Name
→ Step 2: Phone Number (+country code)
→ Step 3: Pilih Role — Murid atau Guru
→ Step 4: KTP NIK + Upload Foto KTP (wajib untuk Guru)
→ Step 5: Upload Foto Profil (wajib untuk Guru)
→ Step 6: Detail KTP Address (optional)
→ Step 7: Bio — Guru wajib min 200 karakter
→ Step 8: Review & Submit
→ DonePost-Onboarding
Murid (Student):
Submit onboarding (pilih Murid)
→ Role langsung jadi "student"
→ Redirect ke /ordersGuru (Teacher):
Submit onboarding (pilih Guru)
→ Insert ke teacher_applications (status: "pending")
→ Redirect ke /profile
→ Menunggu admin approve
→ Admin approve → role jadi "teacher" → redirect ke /teacher
→ Admin reject → lihat reason di profile → bisa apply ulangAdmin/Owner (Auto-promote):
Register dengan email di XPRIVATE_ADMIN_EMAILS atau XPRIVATE_OWNER_EMAILS
→ Auto-promote ke admin/owner tanpa onboarding
→ Redirect ke /admin2. Order & Pembayaran
Murid Flow
Profile Page → Klik "Buat Order"
→ Pilih mata pelajaran
→ Pilih durasi (jam)
→ Isi catatan (opsional)
→ Submit Order → Status: "Pending"
→ Upload bukti transfer (foto/screenshot)
→ File di-upload ke R2
→ Status: "Paid"
→ Tunggu admin verifikasi
→ Jika verified: Status → "Verified"
→ Jika cancelled: Status → "Cancelled"Admin Flow (Pembayaran)
Backoffice → Orders Page
→ Filter: Status "Paid"
→ Klik order → Preview bukti transfer
→ Action: "Verify" atau "Cancel"
→ Verify: Status → "Verified" → Bisa dijadwalkan les
→ Cancel: Status → "Cancelled"
→ Jika murid WA bukti (tidak upload sendiri):
→ Admin upload bukti atas nama murid
→ Lanjut verify seperti biasa3. Lesson Session
Admin Schedule
Backoffice → Lessons Page → Klik "Buat Jadwal"
→ Pilih order yang verified
→ Assign guru
→ Set tanggal & waktu
→ Set durasi
→ Set lokasi (opsional)
→ Submit → Session Status: "Scheduled"Triple Confirmation Flow
[Les Dimulai]
Guru:
→ Buka link/session → Klik "Confirm Les Dimulai"
→ lesson_confirmations: teacher_start
Student:
→ Buka link/session → Klik "Confirm Les Dimulai"
→ lesson_confirmations: student_start
Backoffice:
→ Dashboard update: both confirmed → Session Status: "Ongoing"
→ Jika hanya satu yang confirm:
→ Flag: "Mismatch - Start"
→ Admin investigasi dan resolve
[Les Selesai]
Guru:
→ Klik "Confirm Les Selesai"
→ lesson_confirmations: teacher_end
Student:
→ Klik "Confirm Les Selesai"
→ lesson_confirmations: student_end
Backoffice:
→ Dashboard update: both confirmed → Session Status: "Completed"
→ Jika hanya satu yang confirm:
→ Flag: "Mismatch - End"
→ Admin investigasi dan resolvePresence Submission (Wajib)
Guru → Buka session yang "Completed"
→ Klik "Submit Laporan"
→ Isi form:
- Materi yang dibahas
- Progress murid
- PR/tugas (opsional)
- Rekomendasi next session (opsional)
- Durasi aktual (menit)
→ Submit → Session Status: "Closed"
→ Jika tidak submit: Admin reminder, session tetap "Completed"Evidence Upload
Guru → Buka session
→ Klik "Upload Foto"
→ Pilih foto (max 5MB, image only)
→ Tambah deskripsi (opsional)
→ Upload ke R2 → Tersimpan di session_evidence
→ Admin bisa lihat di backoffice4. Backoffice Dashboard
Daily Workflow Admin
Login sebagai Admin
→ Dashboard:
- Lihat metrics: orders pending, sessions scheduled, confirmations mismatch
→ Orders Page:
- Verifikasi pembayaran yang baru masuk
→ Lessons Page:
- Buat jadwal les untuk order verified
→ Confirmations Page:
- Monitor konfirmasi real-time
- Resolve dispute jika ada mismatch
→ Presence Page:
- Review laporan guru
- Follow up untuk yang belum submitOwner Workflow
Login sebagai Owner
→ Semua akses admin
→ Users Page → Invite Admin:
- Input email admin baru
- Kirim invite
- Admin baru login dan aktif5. Profile Management
Any User → Profile Page
→ Edit nama, telepon, bio
→ Upload foto profil (ke R2)
→ Save
→ Data tersimpan di user table (better-auth extended fields)