Skip to content
Alba

Wedding invitation studio

A builder for personal invitations: a couple's wishes become project data, the builder joins them to a theme from the library and publishes the finished page.

Challenge

A wedding invitation is a page that has to work on the wedding day. Rebuilding one from scratch per couple is too risky: editing a paragraph breaks the blocks around it, and hand-checking everything before every order does not scale.

Solution

An invitation is assembled from a proven theme and a data file. The data schema is the single source of truth for both the admin panel and the builder, so composition comes from the data, not the theme: 16 blocks are available and their order is arranged per couple — no how-we-met story, no block; a wedding a month away swaps the countdown for the day's programme. A theme only enters the library after checks: it is run against another couple's data, with a full set of sections and a trimmed one, and the built page is smoke-tested in a real DOM through jsdom. Meta tags are injected at build time, because Telegram and WhatsApp build link previews without executing JS.

Outcome

A library of themes that differ in format rather than palette: a boarding pass with a tear-off stub, a pinned map instead of sections, a one-off newspaper issue, a filmstrip, a vinyl record, a constellation, a forest. Guests reply through personal links, the list exports to a spreadsheet, and the date travels to calendars as ICS.

Stack

Next.js 15React 19TypeScriptzodjsdomICS

Gallery

Boarding pass theme: the invitation as a ticket with a stub
Boarding pass theme: the invitation as a ticket with a stub
The day's schedule as a departures board
The day's schedule as a departures board
Pinned map theme: sections become pins on a map
Pinned map theme: sections become pins on a map
Constellation theme: the couple's names as a constellation
Constellation theme: the couple's names as a constellation
Vinyl theme: the invitation as a record
Vinyl theme: the invitation as a record
Their story as side B, with a tracklist
Their story as side B, with a tracklist
Filmstrip theme: the story told frame by frame
Filmstrip theme: the story told frame by frame
Newspaper theme: the invitation as a one-off special issue
Newspaper theme: the invitation as a one-off special issue
Their story runs as the issue's feature
Their story runs as the issue's feature
Forest theme: a calm vertical read
Forest theme: a calm vertical read
A guest replies through their personal link
A guest replies through their personal link