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.
Events · Marketplace
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.
The brief
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
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.
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.
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.
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.
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.
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
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






Architecture
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 accountsThe harder parts
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.
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.
"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.
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
Services
If you need something similar, this is the work it falls under.