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.
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.
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 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
- 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 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 "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.