Langsung ke konten utama
Variabel dengan prefix NEXT_PUBLIC_ akan tersedia di browser. Jangan menaruh secret server-only dengan prefix itu.

Core app dan Supabase

VariableDipakai saatWajib?Keterangan
NEXT_PUBLIC_SUPABASE_URLAuth atau data app aktifYa, untuk auth/dataURL project Supabase
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEYAuth atau data app aktifYa, untuk auth/dataPublishable atau anon key Supabase
SUPABASE_SERVICE_ROLE_KEYBilling, admin, avatar, webhook, audit, persistent rate limitYa, untuk fitur server-onlyJangan pernah expose ke client
NEXT_PUBLIC_APP_URLSelalu sebaiknya diisiSangat disarankanBase URL app untuk callback, order page, dan metadata

Toggle fitur

Jika env toggle tidak diisi, repo menganggap fitur tersebut aktif. Isi false, 0, no, atau off untuk mematikannya.
VariableFungsi
NEXT_PUBLIC_ENABLE_AUTHMengontrol login, signup, dashboard, settings, dan auth-aware shell
NEXT_PUBLIC_ENABLE_WAITLISTMengontrol halaman dan API waitlist
NEXT_PUBLIC_ENABLE_CONTACTMengontrol form kontak
NEXT_PUBLIC_ENABLE_PAYMENTSMengontrol billing, checkout, dan payment-related UI
NEXT_PUBLIC_ENABLE_ADMINMengontrol admin dashboard
NEXT_PUBLIC_ENABLE_AIMengontrol AI routes dan UI terkait

Payments

VariableWajib saatKeterangan
PAYMENT_PROVIDERPayments aktifNilai valid: midtrans atau doku
MIDTRANS_SERVER_KEYPAYMENT_PROVIDER=midtransSecret server-only untuk Midtrans
NEXT_PUBLIC_MIDTRANS_CLIENT_KEYPAYMENT_PROVIDER=midtransClient key untuk membuka Snap popup
DOKU_CLIENT_IDPAYMENT_PROVIDER=dokuClient ID merchant Doku
DOKU_SECRET_KEYPAYMENT_PROVIDER=dokuSecret key merchant Doku

Email dan contact

VariableWajib saatKeterangan
RESEND_API_KEYContact form atau email aktifAPI key Resend
EMAIL_FROMDisarankan saat email aktifSender email. Kalau kosong, repo memakai default KilatKoding
CONTACT_EMAILOpsionalEmail tujuan form kontak. Kalau kosong, fallback ke EMAIL_FROM

Admin dan access control

VariableWajib saatKeterangan
ADMIN_EMAILSOpsionalDaftar email bootstrap admin, dipisahkan koma
ADMIN_EMAILS bukan source of truth akhir. Setelah user masuk, repo akan mengelola role nyata lewat tabel user_roles.

AI

VariableWajib saatKeterangan
AI_DEFAULT_PROVIDERAI aktifNilai valid: openai atau anthropic
OPENAI_API_KEYAI_DEFAULT_PROVIDER=openaiSecret untuk route AI OpenAI
ANTHROPIC_API_KEYAI_DEFAULT_PROVIDER=anthropicSecret untuk route AI Anthropic

Env opsional untuk operasional

VariableDipakai olehKeterangan
VERCEL_URLMetadata base URL saat deployBiasanya diisi otomatis oleh Vercel
PLAYWRIGHT_BASE_URLPlaywrightMemungkinkan test E2E memakai server yang sudah hidup
CIGitHub Actions atau CI lainMengatur retry dan reporter tertentu di Playwright

Profil toggle yang umum

Bagian ini berguna kalau kamu ingin memulai dari kombinasi fitur yang realistis, bukan dari semua fitur aktif sekaligus.
Cocok kalau kamu masih validasi ide.
NEXT_PUBLIC_ENABLE_AUTH=false
NEXT_PUBLIC_ENABLE_WAITLIST=true
NEXT_PUBLIC_ENABLE_CONTACT=true
NEXT_PUBLIC_ENABLE_PAYMENTS=false
NEXT_PUBLIC_ENABLE_ADMIN=false
NEXT_PUBLIC_ENABLE_AI=false
Tetap siapkan NEXT_PUBLIC_SUPABASE_URL dan NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY karena waitlist memakai Supabase. Kalau contact form aktif, siapkan juga RESEND_API_KEY.
Cocok untuk mayoritas produk SaaS klasik.
NEXT_PUBLIC_ENABLE_AUTH=true
NEXT_PUBLIC_ENABLE_WAITLIST=false
NEXT_PUBLIC_ENABLE_CONTACT=true
NEXT_PUBLIC_ENABLE_PAYMENTS=true
NEXT_PUBLIC_ENABLE_ADMIN=true
NEXT_PUBLIC_ENABLE_AI=false

PAYMENT_PROVIDER=doku
Pastikan Supabase public env, SUPABASE_SERVICE_ROLE_KEY, dan credential payment provider sudah diisi.
Cocok kalau fitur utamanya memang AI.
NEXT_PUBLIC_ENABLE_AUTH=true
NEXT_PUBLIC_ENABLE_WAITLIST=false
NEXT_PUBLIC_ENABLE_CONTACT=false
NEXT_PUBLIC_ENABLE_PAYMENTS=true
NEXT_PUBLIC_ENABLE_ADMIN=true
NEXT_PUBLIC_ENABLE_AI=true

PAYMENT_PROVIDER=midtrans
AI_DEFAULT_PROVIDER=openai
Selain env payment, kamu juga perlu OPENAI_API_KEY atau ANTHROPIC_API_KEY sesuai provider default yang dipilih.
Cocok untuk area login tertutup, dashboard internal, atau workspace client.
NEXT_PUBLIC_ENABLE_AUTH=true
NEXT_PUBLIC_ENABLE_WAITLIST=false
NEXT_PUBLIC_ENABLE_CONTACT=false
NEXT_PUBLIC_ENABLE_PAYMENTS=false
NEXT_PUBLIC_ENABLE_ADMIN=false
NEXT_PUBLIC_ENABLE_AI=false
Setup minimalnya cukup Supabase. Admin bisa dinyalakan belakangan kalau kamu butuh panel operasional internal.

Contoh minimal .env.local

Gunakan contoh ini kalau kamu hanya ingin auth, dashboard, dan satu payment provider:
NEXT_PUBLIC_SUPABASE_URL=
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY=
SUPABASE_SERVICE_ROLE_KEY=
NEXT_PUBLIC_APP_URL=http://localhost:3000

NEXT_PUBLIC_ENABLE_AUTH=true
NEXT_PUBLIC_ENABLE_WAITLIST=false
NEXT_PUBLIC_ENABLE_CONTACT=false
NEXT_PUBLIC_ENABLE_PAYMENTS=true
NEXT_PUBLIC_ENABLE_ADMIN=true
NEXT_PUBLIC_ENABLE_AI=false

PAYMENT_PROVIDER=doku
DOKU_CLIENT_ID=
DOKU_SECRET_KEY=

ADMIN_EMAILS=you@example.com

Cara mengecek env dengan cepat

  1. Jalankan npm run env:check.
  2. Baca status ready, fallback mode, atau disabled by ....
  3. Setelah app hidup, buka GET /api/health untuk melihat readiness yang lebih detail.
Kalau sebuah fitur memang belum kamu pakai, lebih baik matikan lewat toggle daripada membiarkannya aktif tanpa konfigurasi.