Somerset West, Western Cape, South Africa
DezignzaDesign & build · Hospitality platform

01 · Piketberg Mountains, Western Cape · South Africa

NoupoortMountain Estate

A self-service booking platform for a 24-cabin mountain estate that hosts weddings and functions. A public booking site, a role-based staff dashboard and an invited-guest portal, tied together with automatic invoicing, payments and gate access.

  • Next.js
  • TypeScript
  • Tailwind
  • Supabase
  • Vercel
  • Resend
  • @react-pdf

Design · Front end · Database · Integrations

What’s inside

  1. 01The public booking site
  2. 02The staff dashboard
  3. 03The guest portal

02 · The problem

A mountain estate running weddings, cabins and payments on spreadsheets.

Noupoort Mountain Estate hosts weddings and functions across 24 self-catering cabins in the Western Cape, an hour from Cape Town. Guests were booked by hand, invoices typed one at a time, and a double-booking was always one slip away.

The brief was simple to say and hard to do: let invited guests book their own cabins for an event, give the owner one place to run functions, payments and gate access, and make a double-booking impossible, not merely unlikely.

POPIA-compliant, VAT-correct to the cent, and calm enough to run from a phone between supplier visits.

03 · What it does

  • Self-service bookingGuests book their own cabins for an event
  • Per-event invite linksOne private link per wedding or function
  • Split-stay datesPer-cabin arrival and departure dates
  • Live VAT pricingTotals, extras and 15% VAT as guests choose
  • Automatic invoicingVAT invoices generated and emailed
  • Double-booking guardOverlapping stays blocked at the database
  • Gate PIN broadcastOne code sent to everyone on a function
  • Payments & claimsGuests claim, staff approve and track

04 · Before & after

From spreadsheets to self-service.

Before

  • Cabins booked by phone and WhatsApp
  • Invoices typed by hand, one per guest
  • Double-bookings caught only by memory
  • Gate PINs shared in group chats
  • Payments reconciled on paper
  • Totals that drifted from the invoice

After

  • Guests book their own cabins online
  • VAT invoices generated and emailed
  • A database trigger blocks every overlap
  • One gate PIN broadcast to the function
  • Payments claimed, approved and logged
  • One figure, used everywhere

05 · How it works

From invite to gate PIN

  1. 1Invite

    Owner creates a function and shares one booking link

  2. 2Book

    Guests choose cabins, add their party and see live VAT totals

  3. 3Confirm

    Owner reviews the request and confirms the booking

  4. 4Invoice

    A VAT invoice is generated and emailed automatically

  5. 5Gate PIN

    The gate code is broadcast to everyone on the booking

06 · Design system

A warm, grounded identity

  • Brand gold#A8753B
  • Navy#16213E
  • Slate#2D3E50
  • Gold#C7A15A
  • Sand#EAE4DA
  • Green#16A34A
  • Off-white#F9FAFB
  • Line#E5E7EB

Typefaces

Aa
Cormorant GaramondLight · Medium · SemiBold · BoldDisplay and headings
Aa
OutfitRegular · Medium · SemiBoldInterface and body

Components

SelectLogin
PENDINGMain contactChildAdultVegetarianCONFIRMED
Cabin 10#10

Standard · Sleeps 5

from R1 600,00Select

07 · The public booking site

Guests book themselves in.

Every function gets its own private booking link. Invited guests choose their cabins, add their party, and see exactly what they owe, VAT and deposit included, before they ever pick up the phone.

  1. 01
    Invite-only event links

    One private link per wedding or function

  2. 02
    Choose your cabins

    One or more cabins for the whole stay

  3. 03
    Split stays

    Per-cabin dates for guests who arrive or leave early

  4. 04
    Guest details

    Names, dietary needs and allergies, captured upfront

  5. 05
    Live cost breakdown

    Accommodation, extras, 15% VAT and deposit

  6. 06
    Invoice preview

    See the full invoice before the request is sent

booking.noupoortestate.comBooking review step: stay dates, Cabin 12 with its guests, the cost breakdown with VAT and the submit button
noupoortestate.comInvite booking page: the wedding name, dates and a grid of cabins with photos and nightly rates

08 · The staff dashboard

One place to run the estate.

Functions, bookings, cabins, invoices, payments and gate access, behind one role-based login. The owner runs a wedding weekend from a phone between supplier visits.

noupoortestate.com/adminStaff dashboard: pending bookings and payment claims, upcoming functions and guests on the property
  • Functions & weddings

    Packages, venue fee, gate PIN and a one-click client copy email

  • Cabins & pricing

    24 cabins on a map, per-cabin rates and per-night overrides

  • Invoices & payments

    VAT invoices, deposit invoices, payment claims and aging

  • Reports & search

    Occupancy, revenue, arrivals and a global command-K search

09 · The guest portal

Every guest, in the loop.

The same link that takes the booking becomes each guest’s home for the stay. They see their cabin, their party, the gate code when it is time, and exactly what they owe.

  1. 01
    One link for the party

    Every guest in the booking sees the same event

  2. 02
    Your cabin and dates

    What was booked, who is staying, and when

  3. 03
    Gate PIN on time

    The code appears a few days before arrival

  4. 04
    Invoice and balance

    Your costs and what is still due, kept current

noupoortestate.com/portalGuest portal: welcome banner with the gate code, check-in and check-out times, the booked cabin and the invoice balance

10 · Under the hood

Built to be trusted with a wedding.

Nothing about a booking is left to chance. The safety that matters lives in the database, not the interface.

Data

One figure, read everywhere

A single Postgres schema models cabins, functions, bookings, invoices and payments. Per-cabin totals are stored, not recomputed, so every screen shows the same number.

  • One source of truth
  • Generated & stored columns
  • Per-cabin invoice grain

Safety

Double-booking made impossible

A trigger with an advisory lock rejects any overlapping stay before it is written. The guard sits at the data layer, so no screen, script or import can slip past it.

  • Advisory-lock trigger
  • Half-open interval check
  • Fresh, no-store reads

Integrations

Wired into the real world

Resend sends confirmations, receipts and gate-PIN broadcasts. react-pdf renders VAT invoices. An MCP server opens it to AI-assisted ops, and billing is FNB-ready.

  • Resend transactional email
  • react-pdf VAT invoices
  • MCP server for AI ops
  • FNB payment-ready

11 · Automations

What runs itself.

The platform does the repetitive admin, so a wedding weekend looks after itself between supplier visits.

  • Booking confirmations

    Emailed to the guest the moment a booking lands

  • Payment receipts

    Sent on every payment, full or partial

  • VAT invoices

    Rendered as a PDF and emailed automatically

  • Deposit invoices

    One-click advance invoice before the package is set

  • Gate PIN broadcast

    One code reaches everyone on the function

  • Double-booking block

    Overlaps rejected before they are ever saved

  • Auto-publish

    Function pages go live the moment they are confirmed

  • Payment claims

    Guest “I have paid” claims queued for approval

What the client says

★★★★★

They designed and developed a brand-new booking and back-of-house management system tailored specifically to our needs, and the results have been absolutely amazing! The system has made managing our accommodation bookings and day-to-day operations so much easier and more efficient.

We are incredibly impressed with the final result and grateful for all their hard work.

Jo LeeNoupoort Mountain EstateGoogle review

Let’s build

Want one of these for your business?

Dezignza designs and builds custom platforms, from the database to the last pixel. If your operation is still running on spreadsheets, let’s talk.

Start a project

info@dezignza.co.zaSomerset West, South Africa

More from Dezignza