Runbook ini fokus ke apa yang harus dicek terlebih dahulu saat ada incident, bukan ke semua detail implementasi. Tujuannya adalah mempercepat diagnosis dan membagi masalah operasional dari masalah pengembangan fitur.
Ritual operasional minimum
Sebelum bicara soal incident yang rumit, biasakan tiga pemeriksaan ini:- Jalankan
npm run env:checkdi environment yang relevan. - Cek
GET /api/health. - Cocokkan gejala user dengan fitur yang memang aktif di produkmu.
Incident playbook
Health check menunjukkan status degraded
Health check menunjukkan status degraded
User tidak bisa login atau masuk dashboard
User tidak bisa login atau masuk dashboard
Cek dulu:
- Supabase public env,
- redirect URL auth,
- apakah auth memang sengaja dimatikan,
- apakah masalah hanya terjadi setelah verify email, OAuth, atau reset password.
- halaman
/auth/error, - route
/auth/confirm, - dashboard Supabase Auth.
Payment sukses di gateway tetapi subscription belum aktif
Payment sukses di gateway tetapi subscription belum aktif
Cek dulu:
- webhook URL provider,
- signature verification,
- tabel
payments, - tabel
subscriptions, - tabel
webhook_events, - admin audit trail.
Webhook duplicate atau retry terus
Webhook duplicate atau retry terus
Cek dulu:
- apakah event yang sama sudah tercatat di
webhook_events, - apakah status terakhir
processing,processed, ataufailed, - apakah provider sedang mengirim ulang event karena respons server bukan
200.
- repo ini sudah memakai event claim idempotent,
- duplicate delivery tidak otomatis berarti duplicate payment.
Contact form tidak mengirim email
Contact form tidak mengirim email
Cek dulu:
RESEND_API_KEY,EMAIL_FROM,- verifikasi domain sender di Resend,
- apakah
CONTACT_EMAILmengarah ke inbox yang benar, - apakah error yang muncul
429,503, atau500.
503berarti fitur belum siap,429berarti rate limit,500berarti gagal di provider email.
Admin panel tidak muncul atau role user salah
Admin panel tidak muncul atau role user salah
Cek dulu:
NEXT_PUBLIC_ENABLE_ADMIN,SUPABASE_SERVICE_ROLE_KEY,- tabel
user_roles, - apakah email bootstrap di
ADMIN_EMAILSsudah pernah login setidaknya sekali.
- source of truth admin adalah
user_roles, ADMIN_EMAILShanya bootstrap awal, bukan kontrol role permanen.
AI route mengembalikan 429 atau 503
AI route mengembalikan 429 atau 503
Cek dulu:
- provider key sesuai
AI_DEFAULT_PROVIDER, - apakah user sedang login,
- plan user saat ini,
- monthly token usage di
ai_usage, - rate limit request per 5 menit.
503biasanya provider belum siap,429bisa berarti request terlalu sering atau quota bulanan habis.
Avatar gagal di-upload atau tidak berubah
Avatar gagal di-upload atau tidak berubah
Cek dulu:
- auth user aktif,
- ukuran file maksimal 2 MB,
- tipe file termasuk format yang diizinkan,
- bucket
avatarsdan policy storage sudah ada, POST /api/profile/avatarberhasil mengembalikan signed upload URL.
Kapan incident masih level operasional, bukan bug baru
Sering kali masalah belum tentu bug baru kalau:- env baru saja berubah,
- provider dashboard baru saja dipindah ke domain production,
- fitur baru saja dimatikan atau diaktifkan,
- copy atau navigasi masih menunjuk ke flow yang sebenarnya tidak aktif.
Kapan langsung eskalasi ke developer
Libatkan developer lebih cepat kalau:- build production gagal,
- database check gagal tanpa perubahan env,
- webhook gagal konsisten untuk event valid,
- admin atau profile write rusak meski service role sudah benar,
- user mengeluhkan data yang tidak sinkron antar tabel.