Loading reel
Home/Work/Faris & Elysa
Wedding

Digital wedding invitation with RSVP and guestbook

A wedding invitation that lives at a link instead of on card stock — countdown, event details, RSVP and a guestbook guests can write in.

Demonstration build. Designed and built by me to show capability — not commissioned by a client. Everything you see is functional.

Type
Demonstration build
Stack
JS · Serverless API · Blobs
Sections
Story, events, RSVP, guestbook
Backend
4 endpoints
portfolio-3ud.pages.dev/wedding
Faris & Elysa — desktop view of the landing screen

Recorded from the live build, desktop and phone · try it yourself ↗

Why I built it

Printed invitations cost money per guest and cannot be changed once printed. A link costs nothing to send, updates instantly when a detail moves, and arrives in the place people actually read — WhatsApp. This build shows the whole pattern.

A countdown that does the emotional work

The hero runs a live countdown to the ceremony — days, hours, minutes, seconds, ticking once a second against the date set in the markup. It is the first thing a guest sees and it makes the date feel real in a way a printed line does not.

Change the date attribute and everything downstream follows. Nothing is hardcoded twice.

The story, then the logistics

A timeline runs through how the couple met, the first date and the proposal, then hands over to the practical part: solemnisation and reception, each with time, venue and a map link.

The order matters. Guests want the story, but they came for the address and the time, so those are never more than one scroll away.

RSVP and guestbook

Guests confirm attendance through a form, and can leave a wish that appears immediately in the guestbook below alongside existing messages.

Worth being precise about this one: in this demonstration both the RSVP and the wishes are stored in the visitor’s own browser with localStorage. They persist for that guest on that device, but they do not reach a central list. Wiring the RSVPs to an inbox or a sheet is a small change and would be the first thing added for a real wedding.

How it looks on a phone

Most of the people who will open a site like this are on a phone, on mobile data, standing up. Every layout here is checked down to 360px.

Faris & Elysa — full page scroll
Full page
Faris & Elysa — mobile view
390px
Under the hood

The backend

RSVPs and wishes are stored on a real backend, so every guest sees the same guestbook and the couple gets a live headcount.

BrowserNetlify FunctionNetlify Blobs

What the server does

  • One RSVP per email: the email is hashed (SHA-256) into the storage key, so re-submitting updates the answer instead of double-counting.
  • Running totals are corrected when someone changes their answer — attending, declining, guests, dietary notes.
  • The public guestbook never shows an email. Messages are capped at 280 characters, links are refused, and a word filter keeps it friendly.
  • Writes are rate-limited per visitor (4 RSVPs, 3 wishes per 10 minutes).
checking backend…Run a request against the live API
  • live headcount
  • public guestbook
  • create or update an RSVP · try it on the demo
  • leave a wish · try it on the demo
// pick an endpoint marked GET/POST above to see the real response
Build notes

The decisions behind it

01

Live countdown

A single interval updating four padded fields, driven by one date attribute in the HTML.

02

Persistent guestbook

Wishes survive a page refresh via localStorage, merged with a set of seeded messages so the page never looks empty.

03

Built for the WhatsApp share

Opens fast on mobile data, reads correctly in a link preview, and needs no app.

Need one of these for real?

Tell me what the business does and who it is for. I will tell you what it costs and how long it takes — no charge for the conversation.

WhatsApp