Our wedding, run from one database: guests RSVP and sign the guestbook on a free static site, we track budget and vendors in planning tables, and the ceremony script lives on a web page.
Wedding planning spreads across a spreadsheet for the budget, WhatsApp threads with vendors, a paper guest list, a gift registry on another site, and a Word file for the ceremony. RSVPs come in through five channels and someone has to type them up. Nobody has one view of what is paid, what is booked and who is coming.
Three pieces sharing one Supabase database:
wedding schema in Postgres with tables for budget, vendors, the timeline, guests, RSVPs, the guestbook and gift orders. Row-level security keeps it private; guests can only read approved guestbook entries.One form endpoint that guests can hit safely. The RSVP and guestbook forms post to a single Supabase Edge Function. It validates every field, checks the origin, and rate-limits by a hash of the sender’s IP. A nightly pg_cron job clears old rate-limit rows. Guests never see a database key.
Reuse the backend I already run. The wedding schema lives in the same Supabase project as my second brain (Open Brain). No new account, no new bill, and the same security rules.
The guest site is static. Astro builds plain HTML, and GitHub Pages hosts it for free. Only the two forms need a server, and that is the Edge Function.
The ceremony is a page. A web page scrolls on any screen, has large type and cannot be lost in an inbox. Each section is numbered, so moving a moment (the candle, an entrance) is one edit plus a renumber.
Audit every submission. A submit_audit table logs the status of every form post, so a lost RSVP can be traced.
Stack: Astro (ten components: hero, our story, the day, locations, gallery, gifts, RSVP form, guestbook, footer and a decorative sprig), Supabase Postgres with row-level security, a Deno Edge Function with validation, CORS and rate-limit modules, pg_cron, GitHub Actions deploying to GitHub Pages.
rsvps table.approved flag to false, and refresh the site to show it gone.“We ran our wedding from one database: guests RSVP on a free static site, and every answer lands next to our budget and vendor list. It’s the same pattern I’d use for any small event or client portal. Keep the public site static and free, and put a single, locked-down endpoint in front of the data.”