Skip to content

About this template

A single-page website for an independent financial advisor: the advisor's plain promise beside a professional portrait (an AI-generated fictional person users swap for their own photo); a retirement savings calculator with age, monthly contribution and expected-return inputs that draws an illustrative growth chart — every figure labeled sample math, never advice; a fee-transparency table in plain English; three services (retirement planning, tax-aware investing, small-business owners); a credentials strip with invented designations; and an intro-call booking form with day chips that confirms client-side. The default content follows an invented fee-only advisor, but the structure suits any independent practice: change the name, city and fee lines and every number still reads true. The look is quiet wealth: soft charcoal and warm white, a deep green accent, one brass tick, humanist serif headlines over a crisp sans, generous margins and tabular numerals. A visible 'illustrative, not financial advice' note sits with every figure. To adapt it, swap the variables and rewrite the copy in one content file.

The template prompt

The live demo was built from exactly this text — nothing added.

# Financial Advisor Website

Build this website exactly as described below. Replace the [VARIABLES] with your own values; keep everything else.

## Brief
A single-page site for [ADVISOR], an independent fee-only financial advisor in [CITY] focused on [FOCUS], planning sessions at $[HOURLY]/hour. It must earn trust without promising returns: a portrait-anchored hero, a sample-math retirement calculator (age, contribution, return → illustrative chart), a plain-words fee table, three services, invented credentials, and an intro-call booking confirming client-side. One page: index.html with sections (#calculator, #fees, #services, #book). Every figure carries an 'illustrative, not financial advice' note. Everything runs in the browser; nothing is submitted anywhere.

- Audience: Pre-retirees 45–65 with accounts scattered across three former employers, and small-business owners who keep meaning to sort it out. They fear salesmen in advisor clothing; the page must read as the opposite.
- Goal: Book the intro call. Within ten seconds a visitor sees a face, a fee promise and 'fee-only'; within two minutes they've played with the calculator and picked a day.
- Tone: Plain, patient, numerate. Explains jargon in the same breath it uses it. Dry humor about compound interest exactly once.

## Stack
- Framework: Vite 5 + React 18 + TypeScript
- Styling: Tailwind CSS 3.4
- Libraries: react (MIT), react-dom (MIT), motion (motion.dev, import from 'motion/react') (MIT), lucide-react (MIT), tailwindcss (MIT), postcss (MIT), autoprefixer (MIT), vite (MIT), @vitejs/plugin-react (MIT), typescript (Apache-2.0), @fontsource/pt-serif (OFL-1.1), @fontsource-variable/public-sans (OFL-1.1)
- Build: `npm run build` → static files in `dist/`. No backend, no server code, no external APIs.
- Setup:
  - Scaffold with npm create vite@latest using the react-ts template. One HTML page at the project root: index.html (entry src/main.tsx).
  - vite.config.ts: base './', plugins [react()], build { outDir 'dist', sourcemap false, assetsInlineLimit 0 }. Do not copy src/ into dist/.
  - Tailwind 3.4 through PostCSS, content ['./index.html', './src/**/*.{ts,tsx}']. In tailwind.config.ts add every color under Design to theme.extend.colors with kebab-case keys (warmwhite, mist, charcoal-soft, ink, slate, green-deep, green-mist, brass, rule) and fontFamily display ['PT Serif', 'Georgia', 'serif'], sans ['Public Sans Variable', 'system-ui', 'sans-serif']. Set borderRadius DEFAULT to 10px and add maxWidth { container: '1080px' }.
  - In src/fonts.ts import '@fontsource/pt-serif/400.css', '@fontsource/pt-serif/700.css' and '@fontsource-variable/public-sans'; import src/fonts.ts and src/index.css from the entry file.
  - File layout: src/content.ts (every string, rate, assumption, service, credential, FAQ and image path, typed), src/lib/brand.ts (advisorSlug = [ADVISOR] lowercased with every run of non-alphanumeric characters replaced by '-', emailDomain = advisorSlug without hyphens + '.com'), src/lib/storage.ts (safe localStorage get/set wrapped in try/catch, keys prefixed with advisorSlug + ':'), src/lib/projection.ts (pure: project({age, monthly, returnPct}) → year-by-year balance to age 85 using monthly compounding; assumptions exported for display).
  - State: src/store/call.ts is a tiny external store (useSyncExternalStore) holding { day, name, email, sent } persisted to localStorage key advisorSlug + ':call'.
  - Components in src/components/: Header.tsx, Reveal.tsx (Motion whileInView wrapper), Eyebrow.tsx, Footer.tsx, Disclaimer.tsx (the shared 'illustrative, not financial advice' line); Hero.tsx, Calculator.tsx (AgeSlider.tsx, MonthlySlider.tsx, ReturnSlider.tsx, ProjectionChart.tsx hand-rolled SVG), Fees.tsx (FeeRow.tsx), Services.tsx (ServiceCard.tsx), Credentials.tsx (CredBadge.tsx drawn), BookCall.tsx (DayChips.tsx, Confirmed.tsx). src/pages/Home.tsx composes them.
  - Before the first build, download every image listed under Assets into public/images/ with curl -L -o using the exact file names given. The build itself never fetches anything.
  - public/favicon.svg as described under Assets. index.html: lang en, <meta name='theme-color' content='#FBFAF6'>, <link rel='icon' href='./favicon.svg' type='image/svg+xml'>, <title>[ADVISOR] — Fee-only financial advice in [CITY]</title>.
  - Write ASSETS.md at the project root as described under Assets.
  - dist/ holds index.html, hashed JS/CSS, the woff2 fonts, favicon.svg and the four images. Keep it under 8 MB.

## Variables
- [ADVISOR] — Advisor name (default: "Marcus Bell"). The invented advisor's name. Used in the title, hero, email (hello@ + advisorSlug without hyphens + .com) and localStorage keys. Never a real person or firm.
- [CITY] — City (default: "Portland, Oregon"). Where the practice is. Used in the title, hero line and footer. Real cities fine.
- [FOCUS] — Focus (default: "retirement planning"). The practice's specialty, lowercase. Drives the hero line, the first service card and one FAQ. Keep it a real specialty.
- [HOURLY] — Hourly rate (default: "250"). The planning-session hourly rate as digits. Drives the fee table's first row and the transparency copy. Keep it 150–400.
- [CREDIT] — keep a small "Template by VibeFather" link to https://vibefather.ai/t/financial-advisor-website in the footer (default: yes; delete this line to remove it)

The copy under Pages & Sections is written for the default values. If your values differ, rewrite every headline, paragraph, label and image for them — same length, tone and structure. Layout, colors, type and motion stay as described.
Keep all copy, image paths and links in one content file (for example `src/content.ts`), keyed by section, so the content can be swapped later without touching components.

Pro template. The design, sections, motion and assets parts of this prompt are for Pro members. The live demo and DESIGN.md stay free.

Join Pro early access →

DESIGN.md

The design system on its own — colors, type, spacing and motion. Apply this look to a project you already have.

---
name: "Financial Advisor Website"
colors:
  warm_white: "#FBFAF6"
  mist: "#F0EEE6"
  charcoal_soft: "#33352F"
  ink: "#23251F"
  slate: "#63665C"
  green_deep: "#2F5D50"
  green_mist: "#E4EDE8"
  brass: "#A8823F"
  rule: "#E0DDD1"
typography:
  display_h1_h2_h3_fee_tiers_the_balance_figure_the_wordmark_pt_serif_humanist_and_calm: { family: "PT Serif", weights: [400, 700] }
  text_and_ui_body_eyebrows_buttons_sliders_forms_captions_tabular_numerals_for_all_money: { family: "Public Sans", weights: [400, 600, 700] }
spacing: "8px base unit. Container max-width 1080px, centered, side padding 48px desktop, 32px tablet, 20px under 640px. 12-column grid, column gap 24px. Section vertical padding 104px desktop, 78px under 1024px, 60px under 640px. Type scale: H1 clamp(40px, 5.8vw, 72px) PT Serif 700, line-height 1.08; H2 clamp(28px, 3.8vw, 46px) PT Serif 700; H3 21px PT Serif 700; the balance figure PT Serif 700 44px Brass tabular; lead Public Sans 400 17.5px / 1.65 Ink at 90%; body 15.5px / 1.7 (max-width 62ch); eyebrow Public Sans 700 12px uppercase letter-spacing 0.16em Slate; caption 13px Slate. Buttons: height 50px, Public Sans 700 14px. Primary: Green Deep fill, Warm White text. Secondary: 1px Ink border, Ink text. Inputs: height 50px, 1px Rule border, warmwhite fill, focus Green Deep border. Focus ring everywhere: 2px Green Deep outline with 3px offset."
radius: "10px on cards, buttons, inputs, chips and photos. 999px only for pills, slider thumbs and cred badges."
---

# Financial Advisor Website — Design System

Apply this design system to an existing project. It describes the look and feel only; for the full site, use prompt.md.

## Colors
- **Warm White** `#FBFAF6` — Page background throughout.
- **Mist** `#F0EEE6` — Alternate section background (Calculator, Credentials), chips, hover fill.
- **Charcoal Soft** `#33352F` — Footer background, photo overlay ink.
- **Ink** `#23251F` — Headlines and body text, icon color.
- **Slate** `#63665C` — Secondary text, captions, eyebrows, assumption lines.
- **Green Deep** `#2F5D50` — Primary: headlines' accents, primary buttons, chart line, selected chips, focus ring.
- **Green Mist** `#E4EDE8` — Selected chip fills, slider tracks, card washes.
- **Brass** `#A8823F` — The one warm tick: the balance figure, cred badges, slider thumbs, footnote markers.
- **Rule** `#E0DDD1` — 1px hairlines, card borders, input borders, table rules.

## Typography
- **Display: H1, H2, H3, fee tiers, the balance figure, the wordmark — PT Serif, humanist and calm** — PT Serif (OFL), weights 400/700. Self-host the font files.
- **Text and UI: body, eyebrows, buttons, sliders, forms, captions; tabular numerals for all money** — Public Sans (OFL), weights 400/600/700. Self-host the font files.

## Spacing & shape
- Spacing: 8px base unit. Container max-width 1080px, centered, side padding 48px desktop, 32px tablet, 20px under 640px. 12-column grid, column gap 24px. Section vertical padding 104px desktop, 78px under 1024px, 60px under 640px. Type scale: H1 clamp(40px, 5.8vw, 72px) PT Serif 700, line-height 1.08; H2 clamp(28px, 3.8vw, 46px) PT Serif 700; H3 21px PT Serif 700; the balance figure PT Serif 700 44px Brass tabular; lead Public Sans 400 17.5px / 1.65 Ink at 90%; body 15.5px / 1.7 (max-width 62ch); eyebrow Public Sans 700 12px uppercase letter-spacing 0.16em Slate; caption 13px Slate. Buttons: height 50px, Public Sans 700 14px. Primary: Green Deep fill, Warm White text. Secondary: 1px Ink border, Ink text. Inputs: height 50px, 1px Rule border, warmwhite fill, focus Green Deep border. Focus ring everywhere: 2px Green Deep outline with 3px offset.
- Radius: 10px on cards, buttons, inputs, chips and photos. 999px only for pills, slider thumbs and cred badges.

## Motion
- Easing: --ease-out cubic-bezier(0.22, 0.61, 0.36, 1) for reveals and chart draws; --ease-io cubic-bezier(0.65, 0, 0.35, 1) for calculator updates and the form swap. Calm — money pages move slowly.
- Reveal: blocks wrapped in <Reveal> start at opacity 0, translateY(12px) and settle over 700ms --ease-out when 15% visible (Motion whileInView, viewport once). Siblings stagger 75ms.
- Hero: the portrait fades in 96%→100% over 1200ms; the H1 rises 16px; a brass underline draws under 'fee-only' once.
- Calculator: slider moves update the chart line and balance with a 250ms --ease-io tween; the chart's area fill fades to the new shape; the balance figure counts to its new value over 500ms; the assumptions line crossfades.
- Fee rows: hover slides a 2px Green Deep rule from the left; the price ticks up 1px.
- Credentials: badges stagger in 60ms; the brass ring draws once per badge.
- Booking: day chips fill Green Mist→Green Deep on select (150ms); invalid submit shakes 4px with inline labels; sending swaps to Confirmed (300ms --ease-io) — a drawn brass 'TALK SOON' ring scaling in gently, 'I look forward to it, [NAME].' and the day echoed.
- Links: .link-draw grows a 1px currentColor underline over 280ms on hover and focus-visible.
- prefers-reduced-motion: reduce — no draws, counts (instant values) or staggers; everything at rest; color/border hovers stay. Use CSS @media in index.css plus Motion's useReducedMotion in components.

## Imagery
Calm real photography, all four made for this template in one consistent style: soft window light, warm neutrals, a quiet office. The advisor portrait is an AI-generated fictional person (mid-fifties, warm and credible — a placeholder users swap for their own photo); other photos show the desk, the reading corner and a notebook — no other people, no readable text, no brand marks. Every photo uses object-fit cover with the object-position given under Assets, 10px corners, no shadow; photos on Warm White get a 1px Rule outline. Captions in Public Sans 13px Slate. Drawn in code: the favicon, cred badges, sliders, the projection chart and chips. Icons: lucide-react only, stroke width 1.75.

## Tone
Plain, patient, numerate. Explains jargon in the same breath it uses it. Dry humor about compound interest exactly once.

---
— Prompt by VibeFather · https://vibefather.ai/t/financial-advisor-website · CC BY-NC 4.0 (non-commercial; commercial use needs a VibeFather Pro license) · Request removal: https://vibefather.ai/takedown