Peta flow utama
Flow auth dan onboarding dasar
User daftar atau login
/auth/login atau /auth/sign-up.Supabase membuat atau memverifikasi session
/auth/confirm.Trigger database membuat data dasar user
auth.users, migration juga menyiapkan record default di profiles, subscriptions, dan user_roles.Area login-aware membaca klaim session
- Supabase public env,
- redirect URL,
- callback
/auth/confirm, - kebijakan access control admin di
user_roles.
Flow checkout sampai subscription aktif
User memilih plan di dashboard billing
config/subscriptions.ts.Client memanggil POST /api/payments
payments dengan status PENDING.Server membuat sesi checkout provider
User menyelesaikan pembayaran di provider
/order/[id] atau fallback /payment/callback.Provider memanggil webhook
webhook_events, lalu memperbarui status payment.Subscription diaktifkan
PAID, route webhook mengaktifkan atau memperbarui subscriptions. Audit log juga ikut dicatat.paymentssubscriptionswebhook_eventsaudit_logs
Flow edit profil dan avatar
User membuka dashboard settings
Client meminta signed upload URL
POST /api/profile/avatar menerima fileSize dan fileType, lalu mengembalikan token upload kalau valid.Browser upload file ke bucket avatars
${userId}/avatar di Supabase Storage.Client menyimpan referensi avatar ke profile
POST /api/profile memperbarui full_name, avatar_path, dan avatar_url.Avatar lama dibersihkan
- auth belum aktif,
SUPABASE_SERVICE_ROLE_KEYbelum siap untuk write tertentu,- file terlalu besar,
- MIME type tidak didukung.
Flow waitlist dan contact
Waitlist
Waitlist
- 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
- 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
Client memanggil route AI
POST /api/ai/chat atau POST /api/ai/generate.Server melakukan authorization
Rate limit dihitung
Request diteruskan ke model
Usage dicatat
ai_usage.401berarti user belum terautentikasi,429bisa berarti rate limit request atau monthly usage limit,503biasanya berarti provider belum dikonfigurasi.