The wedding app, part 1: built in 23 days, for one day
We’re getting married this summer, and I did the thing I do: I built software for it. Not the RSVP site — that already existed — but the day-of companion for our guests. Find your seat on a visual floor plan. Sign the guestbook. Upload photos that appear on a live slideshow at the venue. Play photo quests and a bingo icebreaker designed to make two families who’ve never met talk to each other.
The build ran June 6 to 28: 130 commits, from design spec to a printed QR code
that opens the app. The stack is deliberately boring — plain HTML and vanilla
JS with no build step, Supabase for storage and auth policies, Netlify for
hosting and a handful of serverless functions for the admin actions. One
posts table and one storage bucket carry the guestbook, the album, and the
wall. There is no application server to babysit on the wedding day, which is
the point. If something breaks that morning, the failure surface is a static
site and a database with row-level security, not a process somewhere.
Some favorite details:
The seating chart has its own drag-and-drop editor, because table arrangements change weekly in the run-up and I wasn’t going to hand-edit coordinates. When guests check in on the front page, their seat gets a tick on the floor plan, and the couple’s admin view shows who has arrived.
The live wall does slow Ken Burns pans over uploaded photos, and the upload path produces two resolutions so the TV gets crisp images while phones get fast ones.
Remote family who can’t travel get a passphrase-gated “celebrating from afar” page with its own guestbook, so the messages from three time zones away land in the same album.
A daily scheduled function pings Supabase to keep the free-tier database from pausing itself before the big day. Total hosting cost: zero.
There’s also a rule I set early and I’m glad I did: guest names and photos are data, not content. They live in the database, never in the repo, and when this project later grew a public life (part 2), the first commit of that new life scrubbed every trace of real guest data out.
Part 2 is about what happened when I realized the thing we built for one Saturday was a product.