Konteks
GBKP Runggun Gading Serpong adalah jemaat Gereja Batak Karo Protestan di Tangerang. Mereka butuh tempat untuk jadwal ibadah, warta jemaat, renungan, dan formulir permohonan layanan — yang bisa diperbarui pengurus sendiri tanpa memanggil developer.
Yang saya bangun
Website Next.js dengan Payload CMS dan database SQLite, plus halaman perayaan Natal 2026 dengan tema musiman sendiri. Ornamen Karo di situs (pengeret-ret dan motif uis) digambar ulang sebagai SVG, bukan ditempel sebagai gambar.
Masalah yang menarik: hosting murah
Anggarannya hanya cukup untuk shared hosting cPanel: tanpa SSH, RAM 1 GB, dan batas 100 proses per akun. Saat pertama naik, situs langsung 503 — penggunaan proses 99/100.
Penyebabnya: tiga library native masing-masing membuat thread pool seukuran jumlah core server fisik, bukan ukuran akun saya. Solusinya adalah membatasi setiap pool secara eksplisit saat aplikasi start:
UV_THREADPOOL_SIZE=2 VIPS_CONCURRENCY=1 TOKIO_WORKER_THREADS=2
Hasilnya, di bawah 10 request bersamaan pemakaian turun ke 9–13 dari 100 proses. Karena tidak ada SSH, saya juga membuat skrip build yang mengemas aplikasi lengkap dengan binary Linux yang benar, siap diunggah lewat File Manager.
Data jemaat
Formulir permohonan tidak membuka API publik. Semuanya lewat satu server action dengan validasi yang sama di klien dan server, perlindungan dari bot, dan pembatasan kiriman tanpa menyimpan alamat IP pengunjung — sejalan dengan UU PDP.