Dari Kode ke Production
"Kode yang bekerja di komputer Anda tetapi tidak di production adalah kode yang tidak bekerja."
Frontend dengan React dan Next.js
Database dan backend dengan Supabase
Authentication, authorization, dan security
Aplikasi bekerja sempurna di localhost:3000
Masalah: Hanya Anda yang bisa menggunakannya
Next.js dev server di localhost:3000 → Hanya Anda yang bisa akses
Custom domain → DNS → Vercel Edge Network (CDN global) → HTTPS/SSL → Next.js optimized → Supabase Production DB
Akses: Siapa saja, kapan saja. Uptime: 99.9%+
Development vs staging vs production punya konfigurasi berbeda
Production code di-minify, di-compress, di-optimize
Secrets management, HTTPS, security headers
CDN, caching, image optimization, code splitting
Error tracking, performance metrics, logs
Rollback, debugging production issues, uptime maintenance
Pindah dari "masak di rumah" ke "buka restoran" bukan sekadar memindahkan kompor.
| Aspek | Development | Production |
|---|---|---|
| Kode | Unminified, source maps | Minified, tree-shaken, compressed |
| Environment Vars | File .env.local |
Platform secrets (terenkripsi) |
| Error Handling | Pesan error detail | Pesan generik (detail di-log) |
| Performa | Hot reload, dev server | Build optimal, CDN, caching |
| Database | Test/seed data | Data user nyata (backup wajib) |
| Akses | Hanya localhost | Internet publik (domain + HTTPS) |
package.json dan install dependenciesOutput direktori .next/ berisi:
static/ — asset static dengan nama hashserver/ — kode server-sidecache/ — cache build untuk rebuild lebih cepat~5 MB → ~500 KB
Pengurangan ~90%!
File .env.local (tidak di-commit). Database menggunakan Supabase dev project.
Platform secrets. Testing sebelum production. Database terpisah.
Platform secrets terenkripsi. User nyata, data nyata. Database production.
⚠️ Prefix NEXT_PUBLIC_* → Terekspos ke browser (public keys only)
❌ JANGAN PERNAH commit .env.local ke Git
CDN (Content Delivery Network) adalah jaringan server global yang meng-cache asset statis Anda di lokasi tersebar di seluruh dunia.
User di Tokyo → US server → ~150ms latency
User di Sydney → US server → ~200ms latency
User di Tokyo → Tokyo edge → ~10ms latency
User di Sydney → Sydney edge → ~12ms latency
Deteksi Next.js otomatis dan konfigurasi build
SSL certificate instan tanpa konfigurasi manual
CDN di 300+ lokasi global
API routes scale otomatis sesuai traffic
Setiap Git branch dapat URL unik untuk testing
Kembali ke deployment sebelumnya dengan 1 klik
.env.example (template tanpa nilai sensitif).gitignore — pastikan .env*.local, .next/, node_modules/ tidak di-commitnpm run build dan npm run start# Test production build
npm run build
npm run start
task-managernpm run build.nextDi Vercel Dashboard → Project Settings → Environment Variables:
Name: NEXT_PUBLIC_SUPABASE_URL
Value: https://your-project.supabase.co
Environments: Production, Preview, Development
Name: NEXT_PUBLIC_SUPABASE_ANON_KEY
Value: eyJhbGc...your-anon-key
Environments: Production, Preview, Development
Name: SUPABASE_SERVICE_ROLE_KEY
Value: eyJhbGc...your-service-role-key
Environments: Production only
Production sebaiknya menggunakan Supabase project terpisah
https://task-manager-abc123.vercel.app# Install Vercel CLI
npm install -g vercel
# Login
vercel login
# Deploy dari direktori root project
vercel
# Deploy ke production
vercel --prod
Kapan menggunakan CLI? Deploy cepat tanpa browser, atau integrasi ke script custom.
main → Production deployment# Buat feature branch
git checkout -b feature/improve-ui
# Commit dan push
git add .
git commit -m "Improve task card UI"
git push origin feature/improve-ui
# Vercel otomatis membuat preview deployment
# URL: https://task-manager-git-feature-improve-ui-username.vercel.app
Penyebab: Package di devDependencies bukan dependencies
Solusi: npm install package --save
Penyebab: Variable belum ditambahkan di Vercel atau typo nama
Solusi: Cek Environment Variables di dashboard, pastikan nama exact match (case-sensitive)
Di mana cek: Vercel Dashboard → Deployments → Function Logs
Penyebab umum: Koneksi database salah, RLS policies terlalu ketat
Penyebab: Domain eksternal tidak di-whitelist di next.config.js
Solusi: Tambahkan ke images.remotePatterns
taskmanager.com lebih baik untuk portfolio dan bisnis
Lebih mudah diingat dan dibagikan
Merepresentasikan identitas Anda
Custom domain memberikan sinyal trust yang lebih baik ke search engine
Biaya: $10–15/tahun untuk domain .com
DNS menerjemahkan nama domain yang human-readable menjadi IP address yang machine-readable.
Mengarahkan domain (misalnya taskmanager.com) langsung ke IP address
Mengarahkan subdomain (misalnya www.taskmanager.com) ke domain lain
Propagasi DNS: 5 menit – 48 jam (biasanya < 1 jam)
Serahkan pengelolaan DNS sepenuhnya kepada Vercel. Kapan pakai? Jika domain hanya untuk web app.
taskmanager.com)ns1.vercel-dns.com
ns2.vercel-dns.com
Kapan pakai? Jika Anda ingin mempertahankan nameserver yang ada (untuk email atau layanan lain).
Di domain registrar, tambahkan DNS records:
Type: A
Name: @ (root domain)
Value: 76.76.21.21
Type: CNAME
Name: www
Value: cname.vercel-dns.com
Di Vercel Dashboard: Tambahkan taskmanager.com dan www.taskmanager.com
Vercel menangani HTTPS secara otomatis:
Tanpa HTTPS: (a) data bisa disadap, (b) browser tandai "Not Secure", (c) Google turunkan ranking.
Aturan: Jika ada ❌ di Security atau Reliabilitas, aplikasi TIDAK BOLEH di-deploy
NEXT_PUBLIC_* terekspos ke browserAplikasi Anda sekarang live di production
"Production engineering adalah tentang kode yang bekerja secara andal untuk ribuan pengguna di seluruh dunia, 24/7."