The idea
A printed invitation, brought to the screen. In Indonesia a wedding is announced with a card in an envelope addressed to each guest, and answered with a reply. Sampul keeps that order: the envelope with the guest’s name and the couple’s seal under a curved janur, the card with names, parents, events, date and place, then the reply card. The envelope opens the page; it never stands between the guest and the facts.
Visual language
The materials of a printed invitation, not gold foil: a terracotta envelope, a janur-yellow arch and seal, ivory card stock with a double rule, and sogan-brown ink. Names, date and place are read before any ornament; the janur arch and the venue plan are original drawings that never carry text.
Typography
Bellefair 400, a high-contrast transitional display serif with sharp serifs and a graceful ampersand, sets the couple’s names, titles, the date, event names, countdown figures, the seal and the wordmark: the voice of an engraved card, not a script that hides a long name. DM Sans carries labels, times, the address, the form and the message. Prata 400 stays an unused recorded fallback.
Layout & composition
Three pages and a design book. The invitation sets the 640px envelope over the card: names and parents left, the date, events and countdown right, then the venue and its plan, then the call to reply. The reply page puts the form left and the 460px reply card right. Below 900px everything is one column; below 600px the envelope stands upright at 4:5.
Motion & interaction
With JavaScript and motion allowed, the envelope is sealed before the first paint. Open the invitation turns the flap back (0.42s), slides the card out (0.36s) and moves focus to the card’s title. The card is always in the page and can be scrolled to. With reduced motion — also when it changes while the page is open — or without JavaScript the envelope is already open. The countdown changes once a minute, without rolling digits.
Under the surface
A static bilingual Next.js demo. The envelope is HTML and SVG moved with CSS transforms; a small inline script seals it before paint. The guest name is read from ?untuk= in the browser, limited to 60 letters, digits, spaces and .,'-(), and never stored. The reply draft is kept as { version: 1, reply } under collection-sampul-rsvp-v1, at most 2 KiB, validated with zod/mini on every read and write. The .ics file is generated in the page.
Designed for everyone
The card is an article with ordered headings, a description list for the events and a figure with a title for the plan. The reply form uses fieldsets and legends; errors sit beside their group and focus moves to the first one. The countdown is not announced every minute. Copy and download report what actually happened; nothing claims to be sent.
Inside the experience
- A sealed envelope that opens on the card
- Guest name from the link, shown only
- Countdown, schematic plan and calendar file
- Reply card as a WhatsApp message
- Own component and state book
- Local brand personalization
A good fit for
- Couples and families who want a static web invitation with a reply card, without a subscription service.