PMII Kab. Bogor — Organization Website & Custom CMS

Built the website for PMII Kabupaten Bogor, the regency branch of an Indonesian Islamic student organization, solo from first commit to launch. Admins manage articles, events, the gallery, the board roster, and the member database through a custom admin panel backed by Supabase. Built with Astro and Tailwind CSS, deployed on Cloudflare Workers.
PMII Kabupaten Bogor is the regency branch of PMII, an Indonesian Islamic student organization. I built its public website and admin panel between April and August 2026, and the site is live at pmiikabbogor.com.
The problem
The branch needed a public home for its news, events, gallery, board, and member records, kept up to date by its own admins rather than by a developer.
What I built
- An admin panel with sign-in through Supabase Auth, covering articles, events, the gallery, the board roster, the member database, homepage settings, and a dashboard with record counts.
- A rich-text article editor that sanitizes HTML on save and on paste.
- Image compression in the browser before upload: photos are converted to WebP at up to 1920px wide, and replaced or deleted files are removed from Supabase Storage.
- Public pages for articles, events, the gallery, the board, and members, with search, filters, and pagination, plus a shared SEO component for Open Graph tags and structured data.
- Two Supabase clients: a session-aware one for the admin panel in the browser, and a stateless, read-only one used during the build.
A decision worth explaining
The public site is static. Astro reads every article, event, and photo from Supabase at build time, using an anonymous client with session storage turned off, because there is no browser storage during a Node build and the reads need no login. Visitors get plain HTML from Cloudflare Workers with no database call per page view. The cost is that an admin’s change only appears after a rebuild, so content changes trigger one automatically.
Result
The site is live, and the branch’s own admins handle content updates. I wrote 61 of the repository’s 66 commits; the other five are photo and member-data updates made by the client’s admin.
- Stack
- Astro · Tailwind CSS · Supabase · TypeScript · Cloudflare Workers
- Skills
- Full-stack development · CMS development · Deployment