Template
Heathmere
A calm, optimistic landing site for an AI analytics tool that pulls ad, email, CRM and web data into one view, explains performance in plain language and flags changes worth attention. It targets marketing leads drowning in conflicting reports, using fresh sky imagery, mint greens and clean metric cards to promise clarity.
AI marketing-analytics landing site · Website · SaaS landing page · 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
National Park grew out of park signage, so its clear, outdoorsy letterforms suit the sky-and-meadow pages while staying calm and intelligent for marketing data.
- National ParkHeadings: hero 68px 500 at -0.045em, H2 44px at -0.04em, metrics 40px 500
- National ParkBody: body 16px/1.6 400, eyebrows 12px uppercase 600 +0.08em, metric labels 12px uppercase
Patterns
- sky-and-meadow photo hero inside a rounded frame
- small uppercase green eyebrow above centred headline
- dark pill primary + white pill secondary CTAs
- dashboard card rising out of the hero frame
- channel logo marquee
- 2x2 metric feature cards with mint gradient visual wells
- problem section: white statement card beside conflicting-report dashboard on a sky panel
- three-step setup
- persona section
- testimonial cards with oversized quote marks
- pricing with monthly/yearly segmented toggle
- closing CTA
States it is designed for
- Demo request: validation, submitting, confirmed with next steps, error
- Pricing monthly vs yearly (savings badge)
- Dashboard card loading skeleton before counts
- Reduced motion: static clouds, no count-ups
- Menu sheet open
- Chart with a 'signal detected' annotation vs no signal
Who it is for
- Heads of marketing at small and mid-size brands
- Performance marketers
- Agency account leads who report to clients
- E-commerce founders running paid media
Layout
- Floating white capsule header with logo mark + wordmark and hamburger/menu links; on desktop links and 'Get a demo' pill
- Hero: rounded frame with a sky-and-meadow photo; centred green uppercase eyebrow, 68px two-line headline, paragraph, dark 'Get a demo' pill + white 'See how it works' pill, small reassurance line; a large white 'marketing overview' dashboard card rises from the bottom of the frame
- Tool line and greyscale channel marquee (generic channel icons and labels)
- Mint-to-white gradient section: eyebrow, centred 44px heading, paragraph; 2x2 cards each with a mint visual well (bar chart, line sparkline with signal chip, weekly brief card, connection graph), a big metric, mono-ish label, title and text
- Sky panel section: white statement card (eyebrow, heading, paragraph, footnote) left; dashboard stack right (two conflicting report tiles, channel performance card with green and orange bars, source chips, warning note)
- Three-step setup (connect, set context, review), persona cards, testimonials with large green quote marks, pricing with segmented Monthly/Yearly toggle, closing CTA, footer
- Breakpoints: hero frame keeps 8px margin; dashboard card simplifies to KPIs; feature cards one column; sky panel stacks statement over dashboard
Palette
clear, optimistic, calm, intelligent. Blue-sky thinking made literal: a fresh breath of air for overwhelmed marketers.
- page background
#ffffff - ink / primary pill
#101c19 - muted text
#596960 - brand green (eyebrows, links, quote marks)
#087443 - chart green
#18a165 - chart orange (comparison series)
#eb7219 - mint visual well
#dce9e0 - mint accent fill
#a7dfc1 - sky panel
#cfe3f5 - section tint
#f1f7f3 - input border
#8a9690
Every checked pair, measured again
| Sample | Where | Ratio | Needs |
|---|---|---|---|
| Aa | ink on white | 17.47:1 | 4.5:1 |
| Aa | muted text on white | 5.81:1 | 4.5:1 |
| Aa | white label on dark pill | 17.47:1 | 4.5:1 |
| Aa | green eyebrow on section tint | 5.39:1 | 4.5:1 |
| Aa | ink on mint well | 13.95:1 | 4.5:1 |
| Aa | ink headline on sky panel / lightest sky scrim | 13.28:1 | 4.5:1 |
| chart green bars on white | 3.32:1 | 3:1 | |
| chart orange bars on white | 3.02:1 | 3:1 | |
| input border on white | 3.07:1 | 3:1 | |
| green focus ring on white | 5.85: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
- National Park 500, hero 68px/1.05 with -0.045em tracking, h2 44px with -0.04em, metrics 40px
- Body
- National Park 400, 16px/1.6 (observed 13px raised); eyebrows 12px uppercase 600 with 0.08em tracking
Single-family system: tight, medium-weight headlines and roomy body. Metric labels 12px uppercase with 0.06em tracking.
Spacing and imagery
Hero frame 24px radius with 8px page margin; 760px centred card grid; cards 20px radius, 16px inner wells; 120px sections; soft shadow 0 12px 32px rgba(16,28,25,.08) on dashboard cards; pills 99px radius.
Bright sky and meadow photography as hero backdrop and panel texture; clean product cards with green bar charts and orange comparison series; tiny channel icons; no people except testimonial avatars.
Components
- Capsule header
- Photo hero frame
- Eyebrow
- Pill buttons (dark, white)
- Marketing overview dashboard card
- Channel marquee
- Metric feature card with visual well
- Statement card
- Conflicting report tiles
- Channel performance bar chart
- Source chips
- Setup steps
- Testimonial card
- Pricing toggle and cards
Interactions
- Dashboard card rises and its KPIs count up on load
- Clouds drift very slowly in the hero (CSS transform), static under reduced motion
- Feature card wells animate their mini chart on first view
- Marquee pauses on hover/focus
- Pricing toggle slides a dark thumb between Monthly and Yearly and updates prices
- Pills: arrow slides right on hover
Data
MetricCard{visual (bars|line|brief|graph), value, label, title, body}Channel{name, kind (ads|email|crm|web|shop), icon}Step{order, title, body}Persona{role, pain, outcome}Testimonial{quote, name, role, company, avatar}Plan{name, price_monthly, price_yearly, seats, features[]}DemoRequest{name, work_email, company, monthly_ad_spend_band, created_at}
Guardrails
Experience
- Every metric has a label that says what it measures (e.g. paid-media return, cost per lead)
- Channel marquee uses generic channel names and icons, not real platform brands
- Dark pill is the only primary action; white pill is secondary
- The conflicting-reports visual must make the problem obvious in three seconds
- Pricing toggle shows yearly savings in text
Accessibility
- Hero text sits on a white-to-transparent radial scrim over the sky photo; checked against the lightest sky tone
- Chart series green and orange are deepened to 3:1 on white and also differ by label
- Body text raised from 13px to 16px
- Pricing toggle is a Radix ToggleGroup with aria-pressed
- Reduced motion stops clouds, counters and marquee
- 2px green focus ring with offset
Security
- Demo form validated with zod both sides; spend band is an enum
- RLS on demo_requests: anon insert-only, sales role reads
- Rate limit and honeypot
- No connection to real ad accounts from the marketing site; sample data only
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 an entry'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 entries) - 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. ### SaaS screen baseline - Design every screen for its full set of states: first-run empty, loading skeleton, partial data, error with retry, permission-denied, and success feedback. Each entry lists the states its screen needs. - Keep destructive actions (delete, revoke, downgrade, remove member) behind a confirmation that names the object, and prefer undo over a second dialog where the action is reversible. - Enforce authorisation on the server for every action a screen exposes. Hiding a button is not access control; check the role again in the API or RLS policy. - Never show secrets (API keys, tokens) in full after creation. Show them once, then mask them, and offer rotate and revoke. - Keep the app shell (navigation, workspace switcher, account menu) consistent across screens, and preserve filters, sort and scroll position when the user navigates back.
### Goal Build the landing site for **Heathmere**, an AI analytics tool that unifies ad, email, CRM and web data, explains performance in plain language and flags changes worth a look. The page should feel like fresh air: a sky-and-meadow hero inside a rounded frame, mint greens, clean metric cards and a clear before/after story about conflicting reports. Primary action: get a demo. ### Stack Next.js with React and TypeScript, Tailwind CSS, shadcn/ui on Radix (ToggleGroup, Accordion, Sheet), lucide-react, Recharts for bars and lines, Motion for the rising dashboard, counters and cloud drift, react-hook-form + zod for the demo form, Supabase for demo requests. ### Pages & layout 1. **Home**: floating capsule header. Hero frame (24px radius) with a sky photo: green uppercase eyebrow, 68px two-line headline (fresh copy about knowing what to do next), paragraph, dark "Get a demo" pill + white "See how it works" pill, a small reassurance line; a white "marketing overview" dashboard card (date range, KPIs, spend vs revenue chart) rises out of the frame bottom. Channel marquee with generic labels (Search ads, Social ads, Email, CRM, Storefront, Web analytics). Mint gradient section: eyebrow, heading, paragraph, 2x2 metric cards (bars + multiple, line + percentage with a "signal detected" chip, weekly brief + counts, connection graph + connected/needs attention). Sky panel: statement card about too many tools, and a dashboard stack showing two different revenue totals, a channel bar chart in green and orange, source chips and a warning note. Three setup steps, persona cards, testimonials, pricing (Monthly/Yearly toggle), closing CTA, footer. 2. **Pricing**, **Integrations** (generic categories), **Customers**, **Get a demo**. Mobile: hero frame with 8px margin, dashboard simplified, cards and panel stacked. ### Design system ``` --bg: #ffffff; --ink: #101c19; --muted: #596960; --green: #087443; --chart-green: #18a165; --chart-orange: #eb7219; --mint-well: #dce9e0; --mint: #a7dfc1; --sky: #cfe3f5; --tint: #f1f7f3; --input-border: #8a9690; ``` Font: National Park. Hero 68px/1.05 500 (-0.045em), h2 44px 500 (-0.04em), metrics 40px 500, body 16px/1.6 400, eyebrows 12px uppercase 600 +0.08em. Spacing 8px base, 120px sections, 760px card grid, 1100px wide panels. Radius: frame 24px, cards 20px, wells 16px, pills 99px. Shadow 0 12px 32px rgba(16,28,25,.08) on dashboard cards. Motion: 700ms rise, 1s count-up, 60s cloud drift. ### Components & interactions CapsuleHeader (Sheet), HeroFrame (photo + radial white scrim), Eyebrow, Pill (dark | white), OverviewCard (skeleton then counts), ChannelMarquee, MetricCard with Well variants, StatementCard, ReportConflict (tiles + ChannelBars + SourceChips + Note), SetupSteps, PersonaCard, TestimonialCard, PricingToggle (ToggleGroup) + PlanCard, DemoForm. ### Data & state Static JSON for `metrics`, `channels`, `steps`, `personas`, `testimonials`, `plans` and chart series (invented figures). Demo form writes `demo_requests(id, name, work_email, company, monthly_ad_spend_band, created_at)`. Client state: billing period, menu, form status. ### Accessibility Scrim ensures headline contrast on the lightest sky; chart series deepened and labelled; each chart has an sr-only table. Body 16px minimum. Toggle announces pressed state. Reduced motion freezes clouds, counters and marquee. Green focus ring. Verified contrast: ink on white: #101c19 on #ffffff = 17.47:1; muted text on white: #596960 on #ffffff = 5.81:1; white label on dark pill: #ffffff on #101c19 = 17.47:1; green eyebrow on section tint: #087443 on #f1f7f3 = 5.39:1; ink on mint well: #101c19 on #dce9e0 = 13.95:1; ink headline on sky panel / lightest sky scrim: #101c19 on #cfe3f5 = 13.28:1; chart green bars on white: #18a165 on #ffffff = 3.32:1; chart orange bars on white: #eb7219 on #ffffff = 3.02:1; input border on white: #8a9690 on #ffffff = 3.07:1; green focus ring on white: #087443 on #ffffff = 5.85:1. ### Security Zod validation both sides; enum for spend band. RLS on `demo_requests`: enable, anon insert-only, select for a `sales` role. Rate limit, honeypot, notification via a transactional email service. No real account connections from the marketing site. ### Performance & SEO Static generation; hero photo AVIF with priority and blur placeholder; charts lazy below the fold. Self-host National Park. Metadata, OG image, SoftwareApplication and FAQPage JSON-LD. Lighthouse 90+ mobile. ### Guardrails - Never display real ad-platform, CRM or storefront brand names or logos; use generic channel labels. - All figures and quotes invented and marked as sample. - Typed components, no `any`, data outside JSX. - Acceptance criteria: (1) hero headline passes contrast over the photo at every width; (2) pricing toggle updates prices and announces state; (3) demo form handles all states; (4) charts readable without colour; (5) every recorded contrast pair passes.