Case Study · Custom Web App
Newberry House
One platform runs the whole school. From a family’s first visit to the website, through tours, applications and e-signatures, to an enrolled family booking parent-teacher conferences from their phone.
A school run on spreadsheets became one system with one login.
Newberry House grew from 45 children to 200+ across two campuses, still running on Google Sheets, WhatsApp groups, paper forms and a tour spreadsheet that double-booked. Term reports were Word documents emailed between guides and the Head.
We replaced the patchwork with a Next.js platform on Supabase: 124 Postgres tables, row-level security on every one, Google sign-in for staff, and a family code + PIN for parents. Live and in daily use since May 2026. Every demo below is a working slice; all names in them are fictional.
The design language
Rooted in nature, set in green.
The school’s identity brief was explicit: clean greens, warm whites, generous photography, editorial clarity. No serifs, no italics, anywhere. These are the actual tokens the platform ships with.
The colour budget, straight from the brand spec: whitespace does the talking, green does the pointing, gold appears only when something is precious. Display headings split their colour mid-sentence, dark green setting up the bright green payoff, exactly like the headings on this page.
01 · Admissions
From first click to enrolled, without retyping a form
The public website is the top of the admissions funnel. Every enquiry, tour and application flows into the dashboard, and the office is emailed at each step. Two-parent applications pause for the second signature automatically; proof of payment is verified on the same screen. 141 real admissions have run through this pipeline.
Click the steps to walk the journey.
Books a tour on the website
The slot comes off the live calendar, so double bookings are impossible.
Attends, then gets a nudge
The follow-up carries the application link, already tied to their record.
Applies online, signs digitally
POPIA consent and a digital signature on the form; documents upload straight onto the record.
Parent 2 countersigns by link
Two-parent applications wait for the second signature; staff can re-send the secure link in one click.
Family portal unlocked
Children joined to classes, parents to their family code, and the portal switches on.
02 · The Family Portal
Parents sign in with a code, not a password
A family code and 6-digit PIN sign the whole household in, scoped to their own children. Report cards, planned absences, messages to the guide and conference bookings all live behind it. Staff can preview any family’s exact view with View As, without touching the account.
The tabs work. Click around.
family.newberry · Thea Marais · code LOW999Everything is scoped to your family. Nothing else is visible.
Guides write once in the dashboard; parents read here.
Term 3 · Willow class · Thursday 14 August · 15-minute slots
✓ Booked: with Elsa Kruger.
03 · Communications
Newsletters that know exactly who they are talking to
Dear Thea,
We cannot wait to welcome Anna and Ben back. Aftercare for family LOW999 stays unchanged this term.
Unsubscribe with one click. POPIA honoured automatically.
Per-recipient sends on a verified domain. A name-by-name preview and live counts before anything goes out, because the office asked to see exactly who receives what.
04 · The Campus Map
41 hand-drawn hotspots on a real aerial photo
Every building, garden and field is a clickable SVG polygon at its true position, colour-coded and editable from the dashboard, with drag-and-zoom photo framing per zone. The hard part was keeping 41 polygons smooth on mobile while the aerial photo stays crisp.
Tap the zones.
Why it is built this way
Family code + PIN instead of email logins
Parents share children and forget which email they used. One code groups the household; a 6-digit PIN opens it. No verification loops, no reset emails.
Google sign-in for staff, domain-locked
Staff already live in the school’s Google Workspace. One click in, restricted to school addresses, and password support drops to zero.
Row-level security on all 124 tables
19 role types and 437 permission entries enforced by the database itself, with a View As mode so admins can verify any colleague’s exact view. Data lives in the EU for POPIA.
Nightly syncs instead of manual capture
248 children from Transparent Classroom and 38 Google Classroom courses with 466 enrolments arrive automatically, one rate-limited call per child.
Built with: Next.js 16 · TypeScript · Supabase (124 tables, RLS, Storage, Edge Functions) · Tailwind v4 · Resend · Vercel
The screens
Live captures, more on the way


