Projects

Non-profit project · Sep 2026

Daarul Ummahaat Website

A website a foundation's administrator can run without a developer.

Role
Solo developer: build and deployment
Period
Sep 2026
Stack
Next.js · Payload CMS · PostgreSQL · Docker
Status
Live at daarulummahaat.com

Why I built it

The people who run the foundation are not developers. The site has to show their programs, events and donation details, and stay easy for them to update.

What I built

Public site

Home, about, programs, events, a gallery with filters, donation details (bank accounts, QRIS and e-wallets) and a contact form. The interface is in Indonesian.

Admin

Payload CMS inside the same Next.js app, so the administrator edits programs, events and photos in a generated admin panel. There is an admin guide in Indonesian, and a draft preview before anything goes public.

Deployment

Docker Compose on a VPS behind Caddy and Cloudflare. Pushing to the main branch runs the checks and deploys. Encrypted nightly backups to Cloudflare R2 are scripted, with a restore script.

Choices I made

  • Payload inside Next.js. The site and the admin are one TypeScript codebase and one deploy, and the admin screens are generated from the content model.
  • PostgreSQL. It takes a little more to run, but it suits the donor data the foundation may want later.
  • Self-hosted behind Cloudflare. Caddy handles TLS on the server, and Cloudflare handles DNS, caching and DDoS protection.
  • Made for the administrator. Sections with no content are hidden instead of showing empty headings. The admin guide is written for a non-technical reader, and the sitemap only lists published content.