Halaman ini menjelaskan bagaimana satu aksi user bergerak melewati halaman, route API, service pihak ketiga, dan tabel database. Cocok untuk developer, operator, dan pembaca non-tech yang ingin paham gambaran prosesnya.
Peta flow utama
| Flow | Dimulai dari | Menyentuh apa saja |
|---|---|---|
| Auth dan onboarding dasar | halaman auth | Supabase Auth, auth.users, profiles, subscriptions, user_roles |
| Checkout dan aktivasi subscription | dashboard billing | POST /api/payments, provider payment, webhook, payments, subscriptions, webhook_events, audit_logs |
| Edit profil dan avatar | dashboard settings | POST /api/profile/avatar, Supabase Storage, POST /api/profile, profiles, audit_logs |
| Waitlist dan contact | halaman publik | POST /api/waitlist atau POST /api/contact, Supabase atau Resend, rate limit |
| AI request | UI AI produk | POST /api/ai/chat atau POST /api/ai/generate, provider AI, ai_usage, rate limit |
Flow auth dan onboarding dasar
Supabase membuat atau memverifikasi session
Session disimpan dalam alur auth Supabase. Callback seperti OTP dan OAuth masuk ke
/auth/confirm.Trigger database membuat data dasar user
Saat user baru dibuat di
auth.users, migration juga menyiapkan record default di profiles, subscriptions, dan user_roles.- Supabase public env,
- redirect URL,
- callback
/auth/confirm, - kebijakan access control admin di
user_roles.
Flow checkout sampai subscription aktif
Client memanggil POST /api/payments
Route memvalidasi body request, memastikan user login, lalu membuat record
payments dengan status PENDING.Server membuat sesi checkout provider
Midtrans mengembalikan Snap token. Doku mengembalikan checkout URL.
User menyelesaikan pembayaran di provider
Setelah itu user biasanya kembali ke
/order/[id] atau fallback /payment/callback.Provider memanggil webhook
Webhook Midtrans atau Doku memverifikasi signature, mencatat event ke
webhook_events, lalu memperbarui status payment.paymentssubscriptionswebhook_eventsaudit_logs
Flow edit profil dan avatar
Client meminta signed upload URL
POST /api/profile/avatar menerima fileSize dan fileType, lalu mengembalikan token upload kalau valid.Client menyimpan referensi avatar ke profile
POST /api/profile memperbarui full_name, avatar_path, dan avatar_url.- auth belum aktif,
SUPABASE_SERVICE_ROLE_KEYbelum siap untuk write tertentu,- file terlalu besar,
- MIME type tidak didukung.
Flow waitlist dan contact
Waitlist
Waitlist
Alurnya:
- user submit email di
/waitlist, POST /api/waitlistmelewati rate limit berbasis IP,- payload divalidasi,
- data masuk ke tabel
waitlist, - duplikat email mengembalikan error yang bisa ditangani UI.
Contact form
Contact form
Alurnya:
- user submit nama, email, dan pesan di
/contact, POST /api/contactmelewati rate limit berbasis IP,- payload divalidasi,
- server mengirim email lewat Resend,
- inbox tujuan diambil dari
CONTACT_EMAILatau fallbackEMAIL_FROM.
Flow AI request
Server melakukan authorization
Route memeriksa provider, auth user, subscription plan, dan monthly usage limit.
401berarti user belum terautentikasi,429bisa berarti rate limit request atau monthly usage limit,503biasanya berarti provider belum dikonfigurasi.