Fadhil Official Logo
Fadhil NuruzzamanSoftware Engineer
Fadhil Official Logo
Admission SystemRA Mutiara Islam Kendari2026

Mutiara Islam App: PPDB Registration & Admin System

Mutiara Islam App is a PPDB (new student admission) system built for Raudhatul Athfal Mutiara Islam Kendari, built from feeling that a generic Google Form fell short and carried none of the school's own branding. It replaces that manual process, Google Forms plus a spreadsheet for tracking, with a centralized registration form for parents and a full admin dashboard for the school, both running from a single Next.js codebase split across two subdomains

Preview

Walk Through the Site

A scrollable look at the finished site, exactly as a visitor would browse it

Mutiara Islam App: PPDB Registration & Admin System desktop preview

Desktop

Mutiara Islam App: PPDB Registration & Admin System mobile preview

Mobile

Tech Stack

Technologies Powering the Build

The tools and technologies that came together to bring this project to life

HTML logo
CSS logo
TypeScript logo
NextJs logo
Tailwind CSS logo
Shadcn/UI logo
Google Sheets API logo
Resend logo
Vercel logo
Yarn logo

Roles

A Skill-by-Skill Breakdown

Each project draws on a mix of disciplines, here’s how they came together on this one

Web Development

  • Built the full Next.js application, covering the public registration form, the admin dashboard, and all API routes
  • Built subdomain-based routing (a public form subdomain and an admin subdomain) from a single codebase using a routing layer that reads the request's host header
  • Integrated Google Sheets as the app's database via a service account, with no traditional database to manage
  • Built Google OAuth login for the admin dashboard, restricted to a whitelist of admin emails
  • Built custom inline form validation with auto-formatting for names and WhatsApp numbers, and zero layout shift on error
  • Set up email notifications whenever a new registrant submits the form, wrapped in a background task so the server response doesn't wait on it
  • Built the admin dashboard's search, filter, and pagination for the registrant table
  • Built inline status updates, an edit modal with optimistic updates and rollback, and a delete flow with confirmation
  • Built rate limiting on the public submission endpoint to guard against spam and abuse
  • Built the registration open and close toggle, with the form automatically showing a closed state to visitors when disabled
  • Optimized image, JS, and CSS delivery to achieve a green Google PageSpeed score across all four categories

Web Design

  • Designed the public registration form and admin dashboard around a mobile-first, large-button layout, built for admin staff who aren't especially technical
  • Designed a consistent color system (navy, light blue, sky blue, and yellow accents) shared across the public form and the admin dashboard
  • Designed the public form's light-mode layout, a contrasting card surface set against the page background
  • Designed inline error messaging that sits beside each field label instead of pushing the layout around
  • Designed the admin dashboard's status workflow and filterable, paginated table layout
  • Designed the mobile header layout for the registration page around the school's logo

Graphic Design

  • Designed and prepared all supporting image assets used across the form and dashboard, beyond just the logo
  • Laid out the existing school logo for the app's header and small UI chips
  • Created the site's favicon
  • Compressed every image to WebP and under 200KB before upload, without a visible drop in quality

Digital Marketing

  • Built the app to be the direct destination for PPDB ad traffic and marketing links, turning ad clicks into trackable registrations
  • Turned the registrant status workflow (New, Contacted, Consultation, Accepted, Not Continuing) into a lead-tracking funnel the school can manage directly, instead of losing track of prospects after initial contact
  • Built a referral-source field into the registration form, giving the school direct visibility into which channels actually drive registrations
  • Integrated Meta's Conversions API (optional) to track ad-driven registrations for future ad campaign optimization
  • Kept the registration page fast (a green Google PageSpeed score across all four categories), directly supporting SEO ranking and ad quality scores rather than losing prospects to slow load times

Highlights

Behind the Scenes

A closer look at what the finished product offers, the obstacles along the way, and what came out of it

Key Features

  • Fully responsive design across desktop and mobile devices
  • Optimized images for fast loading
  • Public PPDB registration form with 6 fields (student name, gender, program, parent name, WhatsApp number, referral source)
  • Custom inline field validation with zero layout shift
  • Automatic name title-casing and WhatsApp number formatting as you type
  • Submissions save directly to Google Sheets, with no separate database to manage
  • Confirmation page after registration
  • Email notification to the admin team on every new registration
  • Registration form automatically closes and shows a fallback message when admins disable it
  • Admin dashboard with Google OAuth login restricted to a whitelist of admin emails
  • Searchable, filterable, and paginated registrant table
  • Inline status updates across 5 registration stages
  • One-click WhatsApp follow-up with an auto-filled greeting template
  • Registrant detail modal with status updates and per-row loading states
  • Edit registrant data with full validation and optimistic updates
  • Delete registrant with a confirmation step
  • Admin controls to toggle registration open or closed and update the academic year

Challenges Faced

Routing Two Subdomains From One Codebase

The public registration form and the admin dashboard needed to live on two different subdomains while sharing a single Next.js deployment, solved with a routing layer that rewrites requests based on the incoming host header

A Dropdown That Rendered Dark Inside a Light Page

Select dropdowns render through a portal outside the page's own styling context, so they defaulted to a dark theme even inside an otherwise light-mode page, fixed by explicitly overriding their color classes per context

Browser Autofill Overriding Field Colors

Selecting a saved value from the browser's autofill suggestions bypassed the form's usual field styling, requiring dedicated CSS rules covering both the WebKit-specific and standard autofill states, plus the active state

Emails Not Sending Before the Function Froze

The hosting platform could freeze the server function before the email notification finished sending, fixed by wrapping it in a background task that keeps running after the response is already sent

Adapting to a Framework Rename Mid-Build

A major framework version upgrade mid-project renamed a core routing convention and changed a cache invalidation API, requiring the routing and caching logic to be adjusted to the new conventions

Lessons Learned

  • Building a dual-subdomain app from one Next.js codebase was a good lesson in host-based routing, something rarely needed in a typical single-domain project
  • Free-tier infrastructure can genuinely support a small institution's real production needs without any ongoing cost
  • A framework major-version upgrade mid-project meant adapting to renamed conventions and changed APIs on the fly, a good reminder to check a framework's migration notes closely

Impacts

Problems Solved After Launch

How this project changed things for the business and its users after launch

Centralized registration system

Images under 200KB

PageSpeed green across all 4 categories

One-click WhatsApp follow-up

One-click registration toggle

Zero infrastructure cost

Critical Fix

A Manual, Error-Prone Admission Process

Before

Registration ran through a generic Google Form and a spreadsheet, with no branding of its own and manual work needed to track status, follow up with parents, and keep records organized

After

A centralized system now handles registration, status tracking, and admin workflows in one place, removing manual spreadsheet upkeep

Performance

Slow-Loading Pages From Unoptimized Images

Before

High-resolution images across the site, not just one section, risked slowing down every page

After

Every image across the site is compressed to WebP and kept under 200KB, keeping pages fast without a visible drop in quality

Performance

Below-Target Google PageSpeed Scores

Before

Early performance was inconsistent across the four Google PageSpeed categories

After

Continuous optimization of images, JS, and CSS delivery brought all four categories into the green

Improvement

Slow Manual Follow-Up With Parents

Before

Following up with each parent meant manually finding their WhatsApp number in a spreadsheet

After

A one-click WhatsApp button with a pre-filled greeting template speeds up admin follow-up directly from the dashboard

Improvement

No Clean Way to Pause Registration Between Cycles

Before

The manual process had no clean way to signal that registration was closed between admission cycles

After

Admins can toggle registration open or closed directly from the dashboard, automatically showing visitors a closed message

Improvement

Ongoing Hosting Costs for a Small School System

Before

A dedicated admission system risked adding an ongoing hosting or software cost for the school

After

Built entirely on free tiers, hosting and Google Sheets as the database, keeping infrastructure cost at zero