# Catatan Konfigurasi KabarNikah

Dokumen ini mencatat kebutuhan eksternal yang **belum diisi** dalam paket, beserta lokasi pengisiannya. Tidak ada rahasia di dalam paket maupun dokumen ini.

## 1. Wajib diisi pemilik usaha

| Kebutuhan | Di mana | Catatan |
|---|---|---|
| Domain + HTTPS | Hosting; `base_url` diisi saat instalasi (`kabarnikah/config/config.php`) | Cookie `Secure` & HSTS aktif otomatis saat HTTPS |
| Akun admin pertama | Installer `/install` | Tidak ada akun bawaan |
| Rekening transfer usaha (+ QRIS opsional) | Admin → Pengaturan → Transfer manual | Tanpa ini, pembelian manual tidak tersedia |
| Konfirmasi hak penggunaan desain & aset (per produk) | Admin → Produk & Harga | Wajib sebelum produk dapat dibeli (lihat AUDIT_4_TEMPLATE.md §2) |
| Tinjauan harga | Admin → Produk & Harga | Harga awal: T01 & T02 Rp149.000, T03 Rp199.000, T04 Rp249.000; perpanjangan Rp75.000–99.000 — hanya titik mulai |
| Kontak bantuan (WA/email/jam), nama & alamat usaha | Admin → Konten Landing → Identitas | Kosong = tidak ditampilkan |
| Kebijakan Privasi, Syarat, Refund | Admin → Konten Landing → Halaman kebijakan | Teks bawaan adalah DRAF |
| SMTP | Admin → Pengaturan → Email | Untuk verifikasi email, reset sandi, notifikasi |

## 2. Opsional

| Kebutuhan | Di mana | Catatan |
|---|---|---|
| Midtrans (server key, client key, mode) | Admin → Pengaturan → Midtrans | Daftarkan URL notifikasi `https://DOMAIN/webhook/midtrans` |
| OpenWA (URL, API key OPERATOR) | Admin → Pengaturan → OpenWA | Butuh VPS/Docker; lihat PANDUAN_OPENWA.md |
| Worker WhatsApp | `KabarNikah_OpenWA_Worker.zip` atau cron `bin/wa-dispatch.php` | Rahasia: `php kabarnikah/bin/maintenance.php worker-secret` |
| Musik bawaan template | Admin → Pengaturan → Umum | Nonaktif; lisensi tidak diketahui |
| Video landing/produk sendiri | Admin → Konten Landing / Produk | Bawaan: rekaman aplikasi ini |

## 3. Kunci pengaturan (tabel `settings`)

| Kunci | Default | Keterangan |
|---|---|---|
| `bank_accounts` | `[]` | JSON rekening |
| `payment_qris_media` | — | ID media QRIS |
| `order_expiry_hours` | 48 | Tenggat bayar |
| `midtrans_enabled` / `midtrans_mode` | 0 / sandbox | |
| `midtrans_server_key` | — | Rahasia (terenkripsi) |
| `midtrans_client_key` | — | |
| `smtp_host`, `smtp_port`, `smtp_security`, `smtp_user`, `smtp_from`, `smtp_from_name`, `notify_email` | — / 587 / tls | |
| `smtp_pass` | — | Rahasia |
| `openwa_url`, `openwa_session_prefix`, `openwa_webhook_base`, `openwa_engine` | — / kn | |
| `openwa_api_key` | — | Rahasia |
| `worker_secret` | dibuat otomatis | Rahasia HMAC worker |
| `wa_max_connections_per_member` | 1 | |
| `wa_batch_max` | 500 | Penerima per kampanye |
| `wa_daily_per_sender` | 300 | Pesan per nomor per 24 jam |
| `wa_delay_min_sec` / `wa_delay_max_sec` | 20 / 45 | Jeda acak antarpesan per nomor |
| `wa_max_attempts` | 3 | |
| `wa_fail_pause_threshold` | 5 | Jeda otomatis kampanye |
| `import_max_mb` / `import_max_rows` / `import_retention_days` | 5 / 5000 / 7 | |
| `message_presets` | 3 preset | Formal Umum, Salam Islami, Singkat |
| `maintenance_mode` | 0 | |
| `allow_bundled_music` | 0 | |
| `retention_expired_days` | 180 | |
| `prices_reviewed` | 0 | Peringatan harga awal |

Batas per produk (foto 40, galeri 20, kuota media 100 MB, unggah 8 MB/berkas, kuota WA 300 pesan, masa aktif 365 hari) diatur di Admin → Produk & Harga dan disalin ke setiap hak saat pembelian.

## 4. Berkas konfigurasi

`kabarnikah/config/config.php` (dibuat installer, izin 640): `app_key` (kunci enkripsi & tanda tangan — **jangan diubah setelah ada data**; ikut tersimpan di arsip cadangan), `base_url`, `base_path`, `storage_path`, `env`, `debug` (biarkan `false` di produksi).

Variabel lingkungan opsional: `KABARNIKAH_PRIVATE` (jalur folder privat), `KABARNIKAH_PUBLIC` (untuk skrip CLI bila folder publik bukan `../public_html`).

## 5. Cron yang disarankan

```
*/10 * * * *  php /JALUR/kabarnikah/bin/maintenance.php cleanup
15 2 * * *    php /JALUR/kabarnikah/bin/maintenance.php backup
# Hanya bila tidak memakai worker Node:
* * * * *     php /JALUR/kabarnikah/bin/wa-dispatch.php
```

## 6. Header & kebijakan keamanan yang dipasang aplikasi

`Content-Security-Policy` (script `self` + nonce, frame terbatas YouTube/Vimeo/Google Maps/Midtrans), `X-Content-Type-Options: nosniff`, `Referrer-Policy: strict-origin-when-cross-origin`, `X-Frame-Options: SAMEORIGIN`, `Permissions-Policy`, `Strict-Transport-Security` (saat HTTPS), `Cache-Control: private, no-store` untuk halaman akun/admin/API.

## 7. Data pribadi yang disimpan

Akun (nama, email, telepon opsional), data undangan, foto unggahan, bukti transfer (privat), tamu & kontak (nama, nomor), RSVP, ucapan, log audit (IP di-hash). Embed Google Maps pada undangan memuat peta dari Google. Sesi WhatsApp tersimpan di server OpenWA, bukan di KabarNikah. Sesuaikan Kebijakan Privasi dengan praktik ini.
