Skip to content
GODJI TECH
All products

Events · Marketplace

The Wedding Library

Plan it. Find it. Fund it. Remember it. One platform for the whole wedding — the couple's planning, the guests' invitations and photos, the people at the door, and the vendors who make the day happen.

Type
Our own product
Web
Next.js · React
App
Expo · React Native
Backend
Supabase · Postgres

The brief

A wedding planned across a dozen tools that don't talk to each other.

A spreadsheet for the guest list, WhatsApp for invitations, a separate site for the registry, a shared album nobody finds, and vendors juggled over email. The couple ends up as the integration layer.

And the weddings this was built for aren't one event. A Southern African wedding is often a traditional ceremony and a white wedding, with lobola or roora negotiations, family outfits ordered in bulk, households invited as one, and guests who arrive with a phone rather than a printed card. The goal was one place for all of it — that guests can use without creating an account.

What we built

Everything from the guest list to the door.

  • Guests & RSVPs

    Households as one entry, bulk import with duplicate detection, per-guest invitation links, and name matching that finds an invitation from either partner's name.

  • Designed invitations

    Five templates, the couple's own wording, a drawn signature from each partner, and a live preview of the exact email that gets sent — in light and dark mode.

  • Shared album

    Guests join with a wedding code, shoot or upload photos and short videos, grouped by the run of the day. Photos are resized on the phone before they touch venue Wi-Fi.

  • Live on the day

    The programme shows what's on now and next in the venue's time zone, with a day board for the top table and reminders that work without signal.

  • Door & check-in

    Invite-only weddings get a door team with personal codes, QR entry passes for every guest, scan-or-search check-in and a live count for the couple.

  • Traditions, budget & vendors

    Lobola and outfit planning in each tradition's own vocabulary, a budget, a registry with pledges, and a vendor marketplace with quotes, bookings and payment schedules.

Design decision

Guests never need an account

A guest's invitation link and a door member's code are bearer tokens checked inside security-definer database functions. A wedding with three hundred guests doesn't need three hundred sign-ups — and a leaked link can only ever reach its own wedding.

Screens

What it looks like.

  • Every couple gets a wedding website
    Every couple gets a wedding website
  • The couple's overview — countdown, what's next, who has replied
    The couple's overview — countdown, what's next, who has replied
  • Pick a template and see the exact email each guest gets
    Pick a template and see the exact email each guest gets
  • Guests find their invitation by typing their own name
    Guests find their invitation by typing their own name
  • A registry with progress bars and a honeymoon fund
    A registry with progress bars and a honeymoon fund
  • A QR entry pass for the door
    A QR entry pass for the door

Architecture

Two platforms, one set of rules.

Website and app share every rule through the database rather than duplicating it in two codebases.

wedding-library ▸ stack

   Next.js · App Router      weddings.godjitech.com
    ├── server actions        every write, with plain-English errors
    ├── couple workspace      guests, seating, door, budget, traditions
    ├── guest pages           invitation + RSVP, wedding website
    └── vendor console        profile, packages, enquiries, quotes, bookings

   Expo · React Native       one codebase → iOS (live) + Android
    ├── camera / video        album capture, QR entry scanning
    ├── notifications         on-the-day reminders, push
    └── EAS Build + Update    store builds and over-the-air fixes

   Supabase                  Postgres · auth · row-level security · storage
    ├── 50+ migrations        roles, permissions, security-definer RPCs
    └── guest & door access   bearer tokens, never full accounts

The harder parts

Where the real work went.

Permissions people can see

Couples invite planners and family with different powers. The database enforced all of it from the start; the work was making the screens agree, so a helper sees a disabled button with a reason instead of clicking and watching nothing happen.

Email is not a browser

The invitation had to look like a printed card in Apple Mail, Gmail on the web and Gmail's dark mode on a phone — which ignores media queries and recolours text. The answer was tables, blocks that stack without CSS, and rendering the one line of text over a photo as an image on the server.

Time is the venue's time

"What's on now" is computed in the wedding's time zone, not the phone's, so the guest who flew in and the cousin down the road see the same programme.

Shipping two platforms from one back end

The app ships JavaScript-only fixes over the air, and a release script checks native configuration and refuses an over-the-air update that would need a new binary.

Stack

What it runs on.

  • Next.js
  • React
  • TypeScript
  • Tailwind CSS
  • Expo
  • React Native
  • Supabase
  • PostgreSQL
  • Row-level security
  • EAS Build & Update
  • Netlify
  • Playwright