Template
Makers Forum 26
A single-day product/tech conference website with a ticker, big typographic hero, video band, ticket tiers, sessions and workshops tables with speaker avatars, a recap of last year, and tiered sponsors. It lets organizers launch a credible conference site with registration and legal pages quickly; it uses a warm cream-and-brown theme.
Indie tech conference site · Website · Events and bookings · full-stack app (auth + DB)
A mock-up of the homepage, drawn from this design’s layout, palette and typefaces. A build follows the full prompt below.
Start from this templateRead the build prompt
Typefaces
Libre Franklin and DM Mono already make the sturdy, crafted builder tone, and neither is overused, so the set stays.
- Libre FranklinHeadings: hero 96px 500 at -4%, section heads 48px
- Libre FranklinBody: body 16px
- DM MonoFigures and code: ticker, buttons, table headers and meta, uppercase +0.2em
vibld has built this product: see its example, generated from one sentence. A tech conference site with a schedule and speakers.
Who it is for
- Conference and summit organizers
- Agencies building event sites
- Product community leaders
- Marketing teams showcasing sponsors
Layout
- Mustard ticker bar with monospace event name, date and city repeating
- Header: wordmark with lighter year numerals left, outlined 'GET YOUR TICKET' button right
- Two-cell sub-nav: SESSIONS | SPEAKERS split 50/50 with rules
- Hero: very large brown sans headline over three lines, monospace date/location, outlined ticket and speaker buttons; right-aligned tagline
- Full-bleed video/texture band (deep blue)
- Register now: two ticket cards (conference / conference + party)
- Sessions table: title column and speakers column with square avatars, name and company; View all
- Workshops table, recap paragraph with gallery, five-tier sponsor logos, footer with legal links
Palette
Warm, crafted, confident, understated, editorial. It feels like a thoughtful indie conference rather than a flashy expo.
- background (cream)
#f3f2ec - text/primary (espresso)
#422914 - accent (mustard)
#7d5c17 - muted
#e4e1d8 - border
#cfcabe - video band blue
#1c2f8f
Every checked pair, measured again
| Sample | Where | Ratio | Needs |
|---|---|---|---|
| Aa | body text on cream | 12.01:1 | 4.5:1 |
| Aa | cream label on espresso primary button | 12.01:1 | 4.5:1 |
| Aa | cream ticker text on mustard bar | 5.48:1 | 4.5:1 |
| Aa | mustard accent text on cream | 5.48:1 | 4.5:1 |
| Aa | espresso text on muted surface | 10.30:1 | 4.5:1 |
| Aa | cream text on blue video band | 10.11:1 | 4.5:1 |
| outlined button border on cream | 12.01:1 | 3:1 | |
| input border on cream | 3.01:1 | 3: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 scale
- Display
- Libre Franklin 500, 96px hero with -4% tracking, 48px section heads
- Body
- Libre Franklin 16px; DM Mono uppercase for ticker, buttons, table headers and meta with wide tracking
A sturdy grotesk for voice plus a monospace for data-like labels gives a crafted, builder-oriented tone.
Spacing and imagery
Grid-ruled layout, 0 radius, 1px beige rules, full-width tables, ~1216px container, big hero whitespace.
Small square speaker headshots in tables, a textured video band, recap photo gallery, sponsor logos in tiers.
Components
- Marquee ticker
- Wordmark header with ticket CTA
- Split sub-nav
- Typographic hero
- Outlined mono buttons
- Video hero band
- Ticket tier cards
- Sessions table with speaker avatars
- Workshops list
- Recap gallery
- Tiered sponsor grid
- Registration form
- Legal pages and 404
Interactions
- Continuous ticker scroll
- Scroll-triggered reveals
- Arrow nudge on button hover
- Video autoplay muted with controls
- Registration form validation and toast
- Mobile drawer navigation
- Lazy-loaded speaker images
Data
Session{id, title, track, startsAt, room, speakerIds[]}Workshop{id, title, capacity, level, speakerIds[]}Speaker{id, name, company, role, photo, bio}Ticket{name, price, perks[], available}Sponsor{name, tier, logo, url}Registration{name, email, company, ticketType}
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 **Makers Forum 26**, a one-day conference site for product builders in a fictional city. Visitors are product managers, designers and engineers deciding whether to buy a ticket; sponsors want visibility. The site must communicate date, place and quality at a glance, list sessions and workshops with speakers, sell two ticket types, and show last year's recap and sponsors.
### Stack
React 18 + TypeScript + Vite, Tailwind CSS, shadcn/ui (Card, Table, Dialog, Form, Sheet, Toast), lucide-react, Embla Carousel for the recap gallery, Vaul for the mobile drawer, Sonner for toasts, react-hook-form + zod. **Supabase** for `registrations` (and optional speaker CMS tables) with an Edge Function that validates registrations and creates hosted checkout sessions for paid tickets. Everything else can be static content.
### Pages & layout
1. **Home** – mustard ticker repeating "event · date · city" in monospace; header with wordmark (year in a lighter weight) and an outlined "Get your ticket →"; a two-cell sub-nav (Sessions | Speakers). Hero: huge three-line headline, monospace date · city, two outlined buttons, and a short right-aligned tagline. Full-width muted video band with a play/pause control. "Register now": two ticket cards with perks and price. Sessions table (title | speakers with small square avatars, name, company) with "View all". Workshops. Recap: a paragraph with numbers and a photo carousel. Sponsors in five tiers (logo sizes shrink by tier). Footer with code of conduct, privacy and terms.
2. **Sessions**, **Speakers** (grid + detail), **Workshops**, **Register**, **Showcase** (past talks), legal pages, 404.
### Design system
- Tokens: `--background: #f3f2ec`, `--foreground: #422914`, `--primary: #422914`, `--primary-foreground: #f3f2ec`, `--accent: #7d5c17`, `--muted: #e4e1d8`, `--border: #cfcabe` (decorative rules), `--input-border: #968b70`, `--radius: 0`.
- Fonts: Libre Franklin (400/500) and DM Mono (uppercase labels, +0.2em). Scale: 12 / 14 / 16 / 20 / 28 / 48 / clamp(56px, 8vw, 96px) with -0.04em on display.
- Spacing: 8px base; sections 128px; tables with 24px row padding and 1px rules.
- Motion: ticker 35s linear; reveals 500ms fade/rise; arrow translate 4px on hover.
### Components & interactions
Ticker (pausable), outlined button (hover fills espresso with cream text, focus ring, disabled), sub-nav cells (active underline), ticket card (sold out, few left badge, selected), sessions table (responsive: collapses to stacked cards on mobile), speaker avatar group (+N overflow), speaker dialog (bio, sessions), video band (poster, play/pause, reduced-motion shows poster only), registration form (fields: name, email, company, role, ticket; errors; submitting; redirect to checkout; success page), sponsor tier grid.
### Data & state
`Session{id,title,track,startsAt,room,speakerIds[]}`, `Workshop{id,title,level,capacity,speakerIds[]}`, `Speaker{id,name,company,role,photo,bio}`, `Ticket{id,name,price,perks[],remaining}`, `Sponsor{name,tier,logo,url}`, `registrations(id,name,email,company,role,ticket_id,status,created_at)`. Seed nine fictional speakers from invented companies, 12 sessions, four workshops and placeholder sponsor marks.
### Accessibility
Espresso on cream is ~12:1. The mustard accent is deepened to `#7d5c17` so cream ticker text on it reaches 5.5:1 and mustard text on cream passes too. The registration form uses `--input-border: #968b70` (3:1+); `#cfcabe` rules are decorative. The ticker is `aria-hidden` with the same info in visible static text, and stops under reduced motion. Tables use `<th scope>`; on mobile, stacked cards keep labels. Avatars have name alt text or are decorative when the name is adjacent. Video has captions and no autoplay with sound. Visible focus outlines.
Verified contrast: body text on cream #422914 on #f3f2ec = 12.01:1; cream label on espresso primary button #f3f2ec on #422914 = 12.01:1; cream ticker text on mustard bar #f3f2ec on #7d5c17 = 5.48:1; mustard accent text on cream #7d5c17 on #f3f2ec = 5.48:1; espresso text on muted surface #422914 on #e4e1d8 = 10.3:1.
### Security
Registration via Edge Function: zod validation, honeypot, per-IP rate limit, unique email per ticket type. RLS: `registrations` insert only through the function (service key in function env), no public select; organizers read through an authenticated role check. Payment only via hosted checkout; confirm via signed webhook. No secrets in the client. Sponsor links `rel="noopener noreferrer sponsored"`.
### Performance & SEO
Event JSON-LD (dates, location, offers), OG image with the headline, prerendered pages. Lazy-load speaker photos and gallery; video uses `preload="none"` with a poster. Lighthouse 90+.
### Guardrails
- Fictional event, speakers, companies and sponsor marks; no real brands or logos.
- Recap numbers labeled as sample until real.
- Store minimal attendee data.
- Small typed components, no `any`, visible errors.
- Done when: ticker, hero and tables render from data; registration validates and hands off to checkout; tables are readable on mobile; ticker contrast and motion issues are solved; legal pages and 404 exist.