vanilla + GSAP · wedding site with a live RSVP system

Rein & Mhae

A wedding site that feels authored and runs the whole RSVP, from guest lookup to confirmation email.

status liverole designed + built end to end
Rein & Mhae: The live site today: a full-screen Kyoto prenup, the couple's initials set as gi
The live site today: a full-screen Kyoto prenup, the couple's initials set as giant IvyPresto letterforms that frame the photo rather than crop it, wordmark and date anchored to the corners.
Rein & Mhae: The same hero on a phone, captured from the live site. The crop is art-directed
The same hero on a phone, captured from the live site. The crop is art-directed per viewport: desktop gets the wide temple frame, mobile switches to the vertical ring-reveal so the couple still reads at a portrait ratio.
recorded walkthroughlive →
A scroll through the live site and the RSVP flow.
1 listguests find their own name, they never face a blank form.
3 systemssave to a Sheet, send the confirmation, self-serve edits, all on a static host.
0 frameworksvanilla JS and GSAP only, no backend server.
couple-runa built-in CMS they edit themselves, no developer in the loop.
What it solves

A wedding site is two things at once: an emotional artifact the couple is proud to send, and an operational tool that has to collect accurate answers from a hundred-plus guests. Most builds nail the first and bolt a Google Form onto the second. The design brief here was to make the RSVP feel like part of the story, so guests find their own name, choose their meal, and get a reply, without ever seeing a form that looks like data entry.

The constraint

Agency rule: vanilla HTML, CSS, and JS, no framework and no backend server. Yet the site had to match guests against a real invite list, persist every answer, send confirmations, and hand the couple an editing surface they could run with zero technical help. Every system had to be assembled from a static host and a Sheet.

Who it serves

The couple, and the hundred-plus guests who need to reply without friction.

Who it is for

Product design that carries its own backend: information architecture, a guest flow, and an editing surface a non-coder can run.

How it works
  1. A guest looks themselves upNames are matched against the real invite list, not a blank form.
  2. Response saved, and editableEvery RSVP is written to a Sheet the couple can see, and a guest can come back and change their reply instead of being locked to one submission.
  3. Confirmation sentThe guest gets an email confirming their response automatically.
  4. The couple edits it themselvesA built-in CMS lets them change content without a developer.
The decision that was not obvious

Guest lookup instead of an open form. The obvious build is a form with a name field. Instead the first interaction is finding yourself on the list, which does three things a form cannot: it sets an intimate tone (the site already knows you are invited), it removes the anxiety of wondering whether you filled it in right, and it keeps the data clean because responses attach to real invite records rather than free text. One UX choice carries the mood and the data quality at the same time.

What I would change if I rebuilt it today

The RSVP state lives in a Sheet, which is legible to the couple but has no validation layer. I would keep the Sheet as the human-readable record and add a thin validation pass in front of it, so a mistyped guest count or a double submit is caught before it lands, without taking the spreadsheet away from the people who actually use it.

Built with
vanilla JS GSAP Google Sheets email confirmations self-serve CMS