Template
Kindling Trust
A somber, editorial website for a charitable foundation working on education, healthcare and community programs. Oversized serif typography over dark photography sets a serious tone, and the site leads visitors from the mission to programs, beneficiary stories and a simple donation form.
Editorial charitable foundation site · 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.
Start from this templateRead the build prompt
Typefaces
DM Serif Display keeps the magazine-cover gravitas, and Gothic A1 is a quiet grotesk that stays out of its way.
- DM Serif DisplayHeadings: hero words 144px at -3.6px, section statements 72px
- Gothic A1Body: body 16px at 1.65, 14px uppercase buttons
Who it is for
- Nonprofits and foundations
- International development charities
- Donors who value transparency
- Community program managers
Layout
- Transparent header: flame icon + serif name left, two text links and a social icon right; turns solid dark on scroll
- Split-photo full-screen hero: two darkened images side by side with a giant serif word on each half, intro line bottom-left and outlined 'Donate' pill right
- Infinite uppercase marquee band
- 'Our Story' section with decorative concentric circles and watermark letter
- Programs preview grid linking to program detail pages (region, beneficiaries, year)
- Stories page with alternating zigzag image/text
- Taupe donation band: heart icon, large serif pledge statement, outlined Donate pill
- Donate page with preset amount selector and custom input
- Dark footer: name, flame icon, social icons
Palette
solemn, editorial, humane, earthy, credible. The feel is that of a documentary magazine for a cause.
- background
#f1f0ee - text/dark surface
#221e1c - primary espresso
#2e2724 - taupe band
#cec1b6 - sand secondary
#c6b29f - hero text cream
#eee7dd - rust accent
#b8672e - rust on dark (focus)
#d08a57
Every checked pair, measured again
| Sample | Where | Ratio | Needs |
|---|---|---|---|
| Aa | body text on page | 14.51:1 | 4.5:1 |
| Aa | cream text on espresso | 11.42:1 | 4.5:1 |
| Aa | dark text on taupe band | 9.39:1 | 4.5:1 |
| Aa | dark text on sand | 8.08:1 | 4.5:1 |
| Aa | cream hero text on 65% black overlay (worst case) | 5.71:1 | 4.5:1 |
| Aa | cream text in dark footer | 13.47:1 | 4.5:1 |
| rust focus ring on light page | 3.67:1 | 3:1 | |
| rust-on-dark focus ring on espresso | 5.21: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
- DM Serif Display 400, 144px hero words with -3.6px tracking; 72px section statements
- Body
- Gothic A1 16px, weight 400, line-height 1.65, 68ch measure; button labels 14px uppercase at 0.15em (two words max)
A dramatic Didone-flavored serif against a quiet grotesk to create magazine-cover gravitas.
Spacing and imagery
Full-bleed sections, centered narrow statement blocks (~720px), large 120px+ vertical padding, 8px radius cards, pill outline buttons.
Documentary-style volunteer and community photos, darkened and warmed with gradient overlays and mix-blend-multiply; decorative SVG circles and big watermark letters.
Components
- Scroll-responsive transparent header
- Split two-image hero with giant words
- Outlined pill Donate button
- Infinite marquee band
- Story section with SVG circle decoration
- Program cards with hover zoom
- Program detail stats (region, beneficiaries, established)
- Zigzag story rows
- Donation amount selector ($10/$20/$30/$40 + custom)
- Pledge statement band
- Full-screen mobile menu
- Dark footer with socials
Interactions
- Header goes from transparent to solid on scroll
- Marquee scrolls continuously
- Image zoom on card hover
- Donation preset selection with custom amount input
- Full-screen overlay menu at tablet widths
- Lazy image loading with fade
Data
Program{slug, title, region, beneficiaries, established, summary, body, image}Story{slug, person, location, program, quote, body, image}Donation{amount, frequency, name, email}
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 "Kindling Trust", a seven-page site for a charitable foundation funding education, clinics and community programs. The design should feel like a serious documentary magazine: huge serif words over darkened photography, calm earthy neutrals and plenty of space. Visitors should understand the mission, explore programs and beneficiary stories, and give through a simple donation flow.
### Stack
React 18 + TypeScript + Vite, Tailwind CSS, shadcn/ui (RadioGroup, Input, Sheet, Toast via Sonner), lucide-react. Framer Motion for the header transition and reveals, and a CSS keyframe marquee. React Router for Home, About, Programs, Program detail, Stories, Story detail and Donate. Donations go through one serverless function that creates a hosted Stripe Checkout session. Everything else is static.
### Pages & layout
1. **Header**: flame mark and serif name left; two text links and a social icon right. Transparent over the hero, solid espresso after scrolling.
2. **Hero**: full-screen, split into two darkened photos. A giant serif word sits on each half (for example "Every" / "Hand"), with a short mission line bottom-left and an outlined "Donate" pill bottom-right.
3. **Marquee**: an uppercase slogan repeating across a thin band.
4. **Our story**: centered text with decorative concentric SVG circles and a faint watermark initial.
5. **Programs**: a 3-card grid (image, title, region). Detail pages show region, people reached and year founded as a stat row.
6. **Stories**: alternating zigzag rows of image and text, each with a detail page.
7. **Pledge band**: taupe background, heart icon, a large serif statement about how funds are used, and an outlined Donate button.
8. **Donate**: preset amounts ($10/$20/$30/$40) plus a custom field, a one-time or monthly choice, name and email, then Checkout.
9. **Footer**: dark, with name, icon and socials.
### Design system
Tokens: `--background: #f1f0ee`, `--foreground: #221e1c`, `--primary: #2e2724`, `--primary-foreground: #eae2d7`, `--taupe: #cec1b6`, `--sand: #c6b29f`, `--rust: #b8672e` (focus ring on light sections and small highlights, never small text), `--rust-on-dark: #d08a57`, `--border: #cec7c0`, `--radius: 0.5rem`. Fonts: DM Serif Display for display and Gothic A1 for text; button labels are 14px uppercase at 0.15em tracking. Scale: 144/72/48/28/16px with -0.025em tracking on display. Spacing: 8px base, 128px sections, 720px statement width. Motion: marquee 40s linear, header 300ms, reveals 600ms ease-out.
### Components & interactions
- Outline pill button: hover fills it (cream on dark, espresso on light); focus shows a rust ring (`--rust-on-dark` on dark sections); disabled and loading states.
- Program card: image zooms to 1.04 on hover; the whole card is one link.
- Amount selector: RadioGroup styled as tiles; choosing "Other" reveals an input with min and max validation.
- Mobile: full-screen overlay menu with large links.
- Checkout errors show a toast with a retry option.
### Data & state
`programs.ts`: `Program{slug, title, region, beneficiaries, established, summary, body, image}`. `stories.ts`: `Story{slug, name, location, programSlug, pullQuote, body, image}`, with names invented and photos generic. Donation form state is local. Seed 4 programs and 5 stories.
### Accessibility
Darkened photos use at least a 65% black overlay behind text; the giant words are decorative duplicates of a real H1. The marquee is `aria-hidden` and pauses under reduced motion. The espresso/cream pair is AAA. Taupe with dark text passes. Donation tiles have labels and a legend. Use landmarks, a skip link, and descriptive alt text on documentary photos. Verified contrast: body #221e1c on #f1f0ee = 14.51:1; cream on espresso #eae2d7 on #2e2724 = 11.42:1; taupe band #221e1c on #cec1b6 = 9.39:1; hero on overlay #eee7dd on #595959 = 5.71:1.
### Security
Validate donation input with zod on the client and in the function, and cap amounts. Use Stripe hosted Checkout only, with no card fields on the site; keep the secret key in function env and verify webhooks if you record gifts. Add a honeypot and rate limit on the donate endpoint. Treat the "100% of donations" claim as placeholder copy to be verified by the owner.
### Performance & SEO
Keep hero images under 250 KB each and lazy-load everything else. Add NGO JSON-LD, per-program meta and OG images, and one H1 per page. Target Lighthouse 90+.
### Guardrails
- Use original copy and placeholder imagery only, with no real charities, logos or identifiable beneficiaries.
- Do not present invented beneficiary stories as real.
- Collect only the name and email needed for receipts.
- Keep components small and typed, with no `any`, and show errors visibly.
- Done when: the header transitions on scroll; program and story detail routes render; donations redirect to hosted checkout; the marquee respects reduced motion; the text contrast checks pass.