Skip to main content
vibld

Template

Afterglow

A dark, cinema-mood film review blog whose homepage is a dense 'bookshelf' wall of posters with title, genre and year. Each poster opens a cinematic review page with a metadata sidebar, image gallery and related reviews; an about page and contact form round it out.

Moody cinema criticism journal · Website · Small business site · static site

A mock-up of the homepage, drawn from this design’s layout, palette and typefaces. A build follows the full prompt below.

Add app screens

Pick up to 6 screens, such as a dashboard, settings or an empty state. Each is built in this design’s own palette and typefaces, with its states and guardrails.

Account setup
Add edit
Analytics
Appearance
Calendar
Chat
Checklist
Checkout
Confirmation
Dashboard
Delete account
Details
Discovery questions
Empty state
Flowchart
Import export
Inbox
Integrations
Invite team
Loading
Login
Onboarding
Plans
Playground
Product tour
Referral
Search
Settings
Share
Sign up
Success
Table
Team members
Text editor
Upgrade
Usage
Verification
Welcome

Start from this templateRead the build prompt

Typefaces

Epilogue is a neutral grotesk with a slightly cinematic, wide-set rhythm that stays quiet so the posters provide the drama.

  • EpilogueHeadings: wordmark ~30px in gold, review titles 56px
  • EpilogueBody: body 16px light gray, 12px meta

Who it is for

  • Independent film critics
  • Movie bloggers and podcasters
  • Film students building portfolios
  • Festival reviewers

Layout

  1. Sticky blurred black header: gold wordmark left, Reviews/About (active gold underline) and social icons right
  2. Poster wall: 6-column grid of portrait posters, each with title and 'Genre · Year' caption; last row centered
  3. Footer: centered links, social icons, copyright and tagline
  4. Review page: backdrop hero, title, rating, metadata sidebar (director, runtime, cast), body, two-column still gallery, related reviews
  5. About page and contact form
  6. Full-screen mobile menu

Palette

Moody, cinematic, immersive, sleek, focused. Like browsing a dark theater lobby lined with one-sheets.

  • background#000000
  • text#d9d9d9
  • accent gold#fbcf4b
  • card#0f0f0f
  • secondary surface#1a1a1a
  • border#262626
  • muted text#8a8a8a
  • input border#6b6b6b

Every checked pair, measured again

SampleWhereRatioNeeds
Aabody text on black14.88:14.5:1
Aabody text on card13.58:14.5:1
Aamuted caption text on black6.08:14.5:1
Aamuted caption text on secondary surface5.04:14.5:1
Aagold wordmark/link text on black14.13:14.5:1
Aablack text on gold button/badge14.13:14.5:1
gold focus ring on card12.90:13:1
input border on card3.60:13:1
Aalight text on review backdrop scrim (rgb(0 0 0 / .7) over white still)8.45:14.5:1

As vibld’s tokens

The palette on the 15+ color tokens vibld styles a project with, each text color 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 scale

Display
Switzer 400 ~30px for wordmark in gold; review titles large (56px; light weights only at ≥ 32px) (Switzer is not on Google Fonts; a vibld project loads Epilogue)
Body
Switzer 400 16px light gray (line-height 1.6), 12px minimum meta captions (Switzer is not on Google Fonts; a vibld project loads Epilogue)

One neutral grotesk throughout; color and poster art provide drama

Spacing and imagery

Full-width 1200px grid, 6 columns with ~20px gaps, 2:3 poster ratio, tight caption spacing; minimal radius; hairline dark borders

Full-color generated film posters as the main visual, unframed on pure black; review pages use wide stills.

Components

  • Sticky blurred header
  • Gold wordmark
  • Active nav underline
  • Social icon links
  • Poster card with caption
  • Responsive poster grid
  • Review hero
  • Film metadata sidebar
  • Star/score rating
  • Two-column image gallery
  • Related reviews row
  • Contact form
  • Full-screen mobile menu

Interactions

  • Poster hover lift and slight brighten
  • Caption color shifts to gold on hover
  • Sticky header with backdrop blur on scroll
  • Full-screen mobile menu fade
  • Gallery lightbox
  • Contact form validation with toast

Data

  • Review{slug, title, year, genre, poster, backdrop, rating, director, runtime, cast[], body_md, stills[], published_at}
  • Genre{name}
  • ContactMessage{name, email, 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 color 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, labeled 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 **Afterglow**, a dark, cinematic film criticism blog for one critic or a small team. The home page is a wall of posters; each opens a long-form review with film facts and stills. The job: make browsing reviews feel like walking past a lobby of one-sheets, and make each review page feel authoritative.

### Stack
React 18 + TypeScript + Vite, Tailwind CSS, shadcn/ui (Radix), lucide-react. Reviews from local markdown/JSON; Embla for gallery lightbox navigation; cmdk for a quick search palette (⌘K) over titles; Sonner for toasts; react-hook-form + zod for the contact form. Backend only for contact: an Edge Function (Supabase) or a form service.

### Pages & layout
1. **Home** – sticky black header with blur, gold wordmark, links (Reviews, About) with gold active underline, social icons. A 6-column poster grid (2:3) with title and "Genre · Year" beneath each; responsive to 4/3/2 columns; final partial row centered. Footer centered with links, icons, copyright, small tagline.
2. **Review** – wide backdrop with a gradient to black (at least `rgb(0 0 0 / .7)` behind all text), title, year, score; two-column body: long-form review left, sticky metadata sidebar right (director, writers, runtime, cast, genre, where to watch placeholder); two-column stills gallery; related reviews row.
3. **About** – critic bio, approach, contact form.
4. **Search palette** (⌘K).

### Design system
Pure black cinema theme. `--background: #000000`, `--foreground: #d9d9d9`, `--primary: #fbcf4b` (marquee gold), `--card: #0f0f0f`, `--secondary: #1a1a1a`, `--border: #262626`, `--muted-foreground: #8a8a8a`, `--input-border: #6b6b6b` (form fields; `--border` is decorative only). Font: Switzer or Epilogue (400/500/600); wordmark 30px gold; review title 56px; captions 12px. Spacing 4-pt, grid gap 20px. Radius 4–8px (posters square-ish). Shadows none; use brightness shifts. Motion 200ms ease-out; poster hover translateY(-4px).

### Components & interactions
Header (transparent → blurred on scroll), NavLink (active gold underline), PosterCard (hover lift, focus ring gold, loading skeleton), PosterGrid, ReviewHero, MetaSidebar, ScoreBadge, StillsGallery + Lightbox (keyboard arrows, Esc), RelatedRow, CommandSearch (empty "No matches"), ContactForm (validating/sending/sent/error), MobileMenu (full-screen).

### Data & state
`Review` records as typed files; derived genre list for filtering. No global state beyond UI. Seed ~24 reviews of **fictional** films with invented titles and generated poster art -- do not use real studio posters or actor names.

### Accessibility
Grey #d9d9d9 on black passes easily; muted caption gray must be ≥ #8a8a8a (≈ 6:1). Gold on black is fine for text; black text on gold buttons and score badges measures 14.1:1. Poster cards are links with the film title as accessible name; poster images have alt ("Poster for …"). Lightbox is a dialog with focus trap. Reduced motion disables hover lifts and fades. Skip link to main content. Verified contrast: body text #d9d9d9 on #000000 = 14.8:1; muted caption text #8a8a8a on #000000 = 6.0:1; gold wordmark/link text #fbcf4b on #000000 = 14.1:1; black text #000000 on #fbcf4b = 14.1:1; light text #ffffff on #4d4d4d = 8.4:1.

### Security
Proportionate: contact form validated with zod on client and server, honeypot + rate limit, no secrets in client. Sanitize rendered markdown. External links (social, trailers) `rel="noopener noreferrer"`. Only embed video from allowlisted hosts via nocookie variants.

### Performance & SEO
Posters as responsive WebP/AVIF with explicit aspect ratio to avoid layout shift, lazy-load below the fold. Pre-render review routes. Structured data (`Review` schema with rating), per-review meta/OG using the poster. Lighthouse 90+ on the poster wall.

### Guardrails
- Fictional films and generated/placeholder posters only; no studio logos or real actor names.
- No fake pull-quotes attributed to publications.
- Contact messages stored only as long as needed.
- Typed small components, no `any`, visible errors.
- Done when: the grid reflows at 4 breakpoints without CLS, every poster is keyboard reachable, review pages show sidebar metadata and gallery lightbox, ⌘K finds a title, and the contact form rejects spam and confirms success.

Open the builderAll templatesThis palette on its own