Skip to main content
vibld

Template

Glossbound

A magazine-style wedding site with a dark, moody full-screen bouquet hero, a names-and-venue marquee, an alternating photo story timeline with year tabs, a countdown to the big day, detail cards for ceremony, cocktails and reception, and a 'Kindly Respond' RSVP. It suits planners and couples running a multi-event wedding day with an editorial feel.

Magazine-style wedding site · Website · Events and bookings · static site

Who it is for

  • Wedding planners serving couples
  • Couples with multi-part wedding days
  • Photographers justifying premium packages
  • Guests needing clear schedule details

Layout

  1. Transparent header: serif initials monogram left, OUR STORY / DETAILS / RSVP tracked caps right; becomes light on scroll
  2. Full-screen dark photo hero: tracked 'Together with their families', huge white serif names with ampersand, thin rule, spelled-out date and italic year, venue and region in tracked caps
  3. Marquee band repeating names, date and location
  4. Our Story: alternating photo/text rows with a year tab pinned to each photo, headings like First Glance, First Date, Adventures, Proposal, Forever Begins
  5. 'The Big Day' countdown
  6. Event Details: interactive cards for ceremony, cocktail hour, reception & dinner
  7. 'Kindly Respond' RSVP form; footer

Palette

Moody, romantic, luxurious, editorial, warm. It feels like the opening spread of a bridal magazine.

  • background (ivory)#f8f6f1
  • text/primary (espresso)#2a2622
  • accent (blush)#e4d1cd
  • ring/rose#b58178
  • secondary#f0ebe6
  • border#e7e1da
  • hero overlay#141210

Every checked pair, measured again

SampleWhereRatioNeeds
Aaespresso body text on ivory13.90:14.5:1
Aaivory label on espresso button13.90:14.5:1
Aaespresso text on blush accent10.22:14.5:1
Aaespresso text on secondary surface12.68:14.5:1
Aawhite hero text on vignette (worst case)4.87:14.5:1
rose focus ring on ivory3.05:13:1
input border on ivory3.04:13:1

As vibld’s tokens

The palette on the fifteen colour tokens vibld styles a project with, each text colour on the fill it is read on. Marked tokens are solved from the palette, because no swatch held that role at 4.5:1.

  • background
  • card
  • muted
  • primary *
  • secondary
  • accent
  • destructive *

Type

Display
Playfair Display 400, 128px white hero names with -2.5% tracking; 60px section titles with +1.5px tracking
Body
Inter 16px; tracked uppercase labels; italic serif for the spelled-out year

Magazine cover logic: dramatic serif scale on a dark photo, tidy sans for details.

Spacing and imagery

Editorial rhythm, ~1030px content, 50/50 alternating story rows with 64px gutters, year tabs overlapping photo edges, 4px radius.

Dark, warm, shallow-depth-of-field wedding photography (bouquets, hands, cakes) in large rectangles with light frame insets and year tabs.

Components

  • Transparent-to-light header
  • Full-screen dark photo hero
  • Spelled-out date lockup
  • Names/date marquee
  • Alternating story row with year tab
  • Countdown timer
  • Event detail cards
  • RSVP form
  • Mobile navigation menu
  • Footer

Interactions

  • Header background change on scroll
  • Framer Motion scroll reveals
  • Live countdown
  • Event cards expand on hover/click
  • RSVP validation and confirmation
  • Smooth mobile menu

Data

  • StoryChapter{year, title, text, image, align}
  • EventCard{title, time, location, description, dressCode}
  • Countdown{targetISO}
  • RSVP{name, email, attending, guests, mealChoice, dietary, message}

Build prompt

The baseline every prompt in the catalog assumes, then this design’s own ten sections, from goal to guardrails.

The baseline
### How to use these prompts
Paste a template's build prompt into your coding agent as the first message. Each prompt names its own stack, tokens and acceptance criteria; the rules below apply to all of them and can be prepended once per project.

### Engineering baseline
- TypeScript strict mode, no `any`, small typed components, feature folders, and one source of truth for design tokens (CSS variables consumed by Tailwind).
- Validate every input with a shared zod schema on the client and again on the server or edge function. Never trust client-side checks alone.
- Show loading, empty and error states for every async view. Surface errors in plain language with a retry, and log details to the console in development only.
- Keep secrets out of the bundle. Only publishable keys (for example a Supabase anon key) belong in client code; service-role keys, API keys and webhooks live in server or edge-function environment variables.

### Data and auth baseline (full-stack templates)
- Enable Row Level Security on every table before inserting data. Default-deny, then add owner-scoped policies (`auth.uid() = user_id`) and explicit role checks for admin views.
- Store roles in a separate table checked by a security-definer function, never in a user-editable profile field.
- Upload files to private storage buckets with size and MIME limits, and serve them through signed URLs.
- Rate-limit public endpoints (forms, auth, AI calls) and add a honeypot field or captcha to anonymous forms.
- Take payments through a hosted checkout and verify webhooks by signature. Never handle raw card data.

### Accessibility and UX baseline
- Target WCAG 2.2 AA: 4.5:1 contrast for normal text and 3:1 for large text, input borders, focus rings and meaningful icons or chart lines. Every palette in this catalog lists its verified pairs; re-check with a contrast tool after any colour change.
- Keep body text at 16px or larger with 1.5 line height, nothing below 12px, no light weights under 24px, and uppercase only for short labels.
- Give every interactive element a visible focus ring, full keyboard support, semantic landmarks, labelled form fields, and alt text on meaningful images.
- Respect `prefers-reduced-motion` for every animation. Give drag-and-drop and carousels keyboard and button alternatives.
- Build mobile-first and test at 375px, 768px and 1280px.

### Content guardrails
- Use original copy, fictional sample data and placeholder or licensed imagery. Do not reuse another product's name, logo, screenshots or marketing text.
- Label demo testimonials and metrics as samples. Collect the minimum personal data the feature needs.
### Goal
Build **Glossbound**, a magazine-style wedding site for fictional couple Clara & Julian, marrying at a vineyard estate. The day has three parts (ceremony, cocktail hour, reception) and guests need a clear schedule. The site should open like a glossy bridal-magazine cover, tell the couple's story in photo spreads, count down to the day and collect detailed RSVPs.

### Stack
React 18 + TypeScript + Vite, Tailwind CSS, shadcn/ui (Card, Collapsible, Form, RadioGroup, Select, Sheet), lucide-react, Framer Motion for reveals and card expansion, date-fns for the countdown, react-hook-form + zod. RSVP posts to a serverless function or a Supabase insert-only table. Theme tokens as CSS variables so planners can adjust colors and fonts per client.

### Pages & layout
Single page with anchors:
1. **Header** – serif monogram left, three tracked caps links right; transparent over the hero, ivory with espresso text after scroll.
2. **Hero** – full-screen dark, warm photo with a heavy vignette; tracked "Together with their families"; first name, ampersand, second name in a very large white serif; a thin rule; month and day spelled out in caps; the year in italic serif; venue • region in small tracked caps.
3. **Marquee** – thin ivory band repeating names • date • place.
4. **Our story** – five alternating rows: photo (with a thin inner frame) and text; a small ivory year tab overlaps the bottom edge of each photo.
5. **The big day** – countdown (days, hours, minutes, seconds) on a blush background.
6. **Event details** – three cards (ceremony, cocktail hour, reception & dinner) with time, place and an expandable section for dress code, parking and notes.
7. **Kindly respond** – RSVP form; footer with monogram.

### Design system
- Tokens: `--background: #f8f6f1`, `--foreground: #2a2622`, `--primary: #2a2622`, `--primary-foreground: #f8f6f1`, `--secondary: #f0ebe6`, `--accent: #e4d1cd`, `--ring: #b58178`, `--border: #e7e1da` (decorative), `--input-border: #a28a6f`, `--radius: 0.25rem`; hero overlay `radial-gradient(ellipse at center, rgb(20 18 16 / .6), rgb(20 18 16 / .85))`.
- Fonts: Playfair Display (400, italic) and Inter (400/500). Scale: 12 (caps, +0.25em) / 14 / 16 / 20 / 28 / 40 / 60 / clamp(72px, 11vw, 128px).
- Spacing: 8px base; sections 144px; story rows 50/50 with 64px gutter.
- Motion: reveal 700ms ease-out; year tab slides up 300ms after its photo; card expansion 250ms; header transition 300ms.

### Components & interactions
Header (transparent/solid/mobile sheet with focus trap), hero lockup, marquee (pausable), story row (left/right image variants), year tab, countdown (pre-event, day-of, past states), event card (collapsed/expanded with `aria-expanded`), RSVP form (name, email, attending, guest count, meal per guest, dietary, message; validation; submitting; confirmation panel; error with retry).

### Data & state
`StoryChapter{year,title,text,image{src,alt},align}`, `EventPart{id,title,time,location,dressCode,notes}`, `Wedding{names,dateISO,venue,region}`, `Rsvp{name,email,attending,guests:[{name,meal}],dietary,message}`. One typed config; placeholder photography only (bouquets, table settings, landscapes, models).

### Accessibility
The hero vignette is at least `rgb(20 18 16 / .6)` at its center, so even over a white pixel the backdrop is `#727170` and white names and small-caps lines reach 4.9:1; hero text stays pure white rather than a tinted off-white. The focus ring is deepened to `#b58178` (3:1 on ivory); inputs use `--input-border: #a28a6f`. Blush `#e4d1cd` is a background only; text on it stays espresso (~11:1). Year tabs are real text, associated with their row heading. Countdown exposes a single static sentence for screen readers. Event cards are buttons with `aria-expanded`. Marquee `aria-hidden` and stopped under reduced motion. Meal selections use labeled selects per guest.
Verified contrast: espresso body text on ivory #2a2622 on #f8f6f1 = 13.9:1; ivory label on espresso button #f8f6f1 on #2a2622 = 13.9:1; espresso text on blush accent #2a2622 on #e4d1cd = 10.22:1; espresso text on secondary surface #2a2622 on #f0ebe6 = 12.68:1; white hero text on vignette #ffffff on #727170 = 4.87:1.

### Security
Proportionate: shared zod schema client/server, honeypot, rate limit, optional invite code, no secrets in the client, insert-only RLS if Supabase, no public guest list, external map links with `rel="noopener noreferrer"`.

### Performance & SEO
Hero photo preloaded at 1600w AVIF with a dark placeholder color; story photos lazy with fixed aspect ratios. `noindex` default, OG image from the hero. Lighthouse 95+.

### Guardrails
- Fictional couple, estate and placeholder imagery; no real venues or vendor logos.
- No fabricated guest quotes.
- Minimal RSVP data, removable on request.
- Small typed components, no `any`, visible errors.
- Done when: header states switch; story rows alternate on desktop and stack on mobile; countdown handles all states; event cards expand by keyboard; RSVP collects per-guest meals with validation on both sides.

Open the builderAll templatesThis palette on its own