# Deploy ke Render (paket gratis) — untuk acara sementara

Arsitektur: Netlify (frontend statis) → Render Web Service (backend) → Render Postgres.
Render gratis tidak punya Shell, jadi schema & admin pertama dibuat otomatis saat server start.

## Batasan paket gratis (baca dulu)
1. **Tidur setelah 15 menit tanpa akses**; bangun ±1 menit. Atasi dengan pinger (langkah 6).
2. **Database gratis kedaluwarsa 30 hari setelah dibuat** (+14 hari masa tenggang, lalu data dihapus).
   Buat database MENJELANG acara, bukan jauh-jauh hari. Tidak ada backup otomatis.
3. Jatah 750 jam/bulan per workspace: cukup untuk 1 layanan yang menyala terus.
4. Render bisa me-restart layanan/database kapan saja.

## Langkah
1. Push folder `backend/` ke repo GitHub (jangan commit `.env`).
2. Render → **New → Blueprint** → pilih repo. `render.yaml` membuat web service + database (region Singapore).
3. Isi env var yang diminta:
   - `MIDTRANS_SERVER_KEY`, `MIDTRANS_CLIENT_KEY` (Sandbox dulu)
   - `FRONTEND_ORIGIN` = URL Netlify Anda (tanpa garis miring di akhir)
   - `SEED_ADMIN_EMAIL`, `SEED_ADMIN_PASSWORD` (password kuat, jangan pakai yang umum)
4. Setelah deploy "Live", cek `https://NAMA.onrender.com/api/health` → harus `{"ok":true,...}`.
5. Frontend: di `js/config.js` ganti `API_BASE_URL` menjadi `https://NAMA.onrender.com/api` dan `MIDTRANS_CLIENT_KEY`. Deploy ke Netlify.
6. **Pinger anti-tidur** (penting untuk webhook pembayaran): daftar UptimeRobot (gratis), buat monitor HTTP(s)
   ke `https://NAMA.onrender.com/api/health` setiap 5 menit.
7. Midtrans Dashboard → Settings → Configuration → Payment Notification URL:
   `https://NAMA.onrender.com/api/midtrans/webhook`
8. Login admin → **Pengaturan → ganti password**. Setelah itu hapus `SEED_ADMIN_PASSWORD` dari env var Render.
9. Uji alur bayar sandbox sampai suara bertambah.

## Setelah acara selesai
- Unduh **Ekspor Rekap Suara + Jejak Audit** dan **Ekspor Transaksi** dari admin sebelum database kedaluwarsa.
- Lalu *Suspend* atau hapus web service & database di Render.
