Skip to main content
vibld

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

  1. Transparent header: flame icon + serif name left, two text links and a social icon right; turns solid dark on scroll
  2. 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
  3. Infinite uppercase marquee band
  4. 'Our Story' section with decorative concentric circles and watermark letter
  5. Programs preview grid linking to program detail pages (region, beneficiaries, year)
  6. Stories page with alternating zigzag image/text
  7. Taupe donation band: heart icon, large serif pledge statement, outlined Donate pill
  8. Donate page with preset amount selector and custom input
  9. 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

SampleWhereRatioNeeds
Aabody text on page14.51:14.5:1
Aacream text on espresso11.42:14.5:1
Aadark text on taupe band9.39:14.5:1
Aadark text on sand8.08:14.5:1
Aacream hero text on 65% black overlay (worst case)5.71:14.5:1
Aacream text in dark footer13.47:14.5:1
rust focus ring on light page3.67:13:1
rust-on-dark focus ring on espresso5.21: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 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.

Open the builderAll templatesThis palette on its own