Bolt prompt for a SaaS landing page
Paste this into Bolt and it scaffolds a Vite + React landing page with every string extracted into one content file, so copy edits never touch markup. The eight-section stack trades the logo wall for a single strong quote and pins the CTA above the fold. Style, palette, typography, and motion all come from the customizer dropdowns.
Last updated
Spin up a fresh Vite + React + Tailwind project and build the marketing page for {{product}} in it, aimed squarely at {{audience}}. Structure the repo so I can maintain it after export: src/sections/ holds one file per section, src/components/ holds shared pieces (Button, Container, SectionHeading), and src/content.ts holds every string on the page so copy edits never touch markup.
Render the sections in this order inside App:
1. Header — translucent bar that gains a solid background after 40px of scroll; logo, four links, CTA button.
2. Hero — H1 built from {{product}}'s core verb, object, and outcome; one-sentence subhead; the CTA; and a stat line of three inline numbers with labels directly beneath.
3. Proof — one customer quote under 30 words with name and role, instead of a logo wall.
4. Features — 2x2 grid of cards; each card is an icon, a bolded claim, and one supporting sentence. No "learn more" links.
5. Showcase — large product screenshot in a perspective-tilted container that straightens as you scroll.
6. Pricing preview — one featured plan card next to a short list of what every plan includes, plus a link to full pricing.
7. FAQ — six items using native details/summary elements, two columns on desktop, one on mobile.
8. CTA banner, then footer.
Visual direction:
{{style}}
Palette: {{palette}}
Typography: {{type}}
Motion: {{motion}}
Spacing and breakpoints:
- One spacing scale only (16/24/40/64/96px); section padding 96px on desktop, 56px under 768px.
- The feature grid collapses to a single column below 640px; the stat line wraps to two rows rather than truncating.
The primary call to action is "{{cta}}", and it must be visible without scrolling on a 1366x768 viewport.
Verify in the live preview before finishing: the header transition fires at the scroll threshold; every visible string is imported from content.ts; the details elements open and close without layout shift; the hero CTA sits above the fold at 1366x768 and again at 390px width.Customize it
Runs in your browser. Nothing you type here is sent anywhere.
Spin up a fresh Vite + React + Tailwind project and build the marketing page for a project management SaaS in it, aimed squarely at engineering managers at startups. Structure the repo so I can maintain it after export: src/sections/ holds one file per section, src/components/ holds shared pieces (Button, Container, SectionHeading), and src/content.ts holds every string on the page so copy edits never touch markup. Render the sections in this order inside App: 1. Header — translucent bar that gains a solid background after 40px of scroll; logo, four links, CTA button. 2. Hero — H1 built from a project management SaaS's core verb, object, and outcome; one-sentence subhead; the CTA; and a stat line of three inline numbers with labels directly beneath. 3. Proof — one customer quote under 30 words with name and role, instead of a logo wall. 4. Features — 2x2 grid of cards; each card is an icon, a bolded claim, and one supporting sentence. No "learn more" links. 5. Showcase — large product screenshot in a perspective-tilted container that straightens as you scroll. 6. Pricing preview — one featured plan card next to a short list of what every plan includes, plus a link to full pricing. 7. FAQ — six items using native details/summary elements, two columns on desktop, one on mobile. 8. CTA banner, then footer. Visual direction: Minimal dark style. Near-black canvas (#0A0A0B) with one elevated surface tone (#141416) for cards — never more than two surface steps. Hairline borders (1px, white at 8% opacity) instead of shadows; if a shadow is unavoidable use 0 1px 2px rgba(0,0,0,0.4) and nothing softer. Text in exactly three steps: white at 92% for headings, 60% for body, 40% for captions. Generous negative space — section padding at least 120px on desktop, 64px on mobile. The accent color appears only on interactive elements and one hero highlight, nowhere else. Palette: a strict neutral ramp (white, #F5F5F5, #E5E5E5, #737373, #171717) carries the entire interface; pick one accent and use it only for primary CTAs, active states, and a single hero highlight. If the accent appears more than five times per viewport it stops being an accent. Keep semantic colors (success, error) desaturated so the accent stays in charge. Typography: one geometric sans (a Futura/Poppins-class face) at three weights maximum (400/500/700). Scale: 64-88px hero, 32px section heads, 18px lede, 16px body, 13px caps labels with 0.08em tracking. Tight headline leading (1.05-1.1), relaxed body (1.6). Let the geometry carry the personality — no italics; weight and size do all hierarchy. Motion: none. Zero scroll animations, zero entrance effects — the page is fully composed the instant it paints. Spend the motion budget on input feedback instead: 120-150ms ease-out color and transform transitions on hover and press states only. Hold this constraint absolutely; it is a statement, not an omission. Spacing and breakpoints: - One spacing scale only (16/24/40/64/96px); section padding 96px on desktop, 56px under 768px. - The feature grid collapses to a single column below 640px; the stat line wraps to two rows rather than truncating. The primary call to action is "start a free trial", and it must be visible without scrolling on a 1366x768 viewport. Verify in the live preview before finishing: the header transition fires at the scroll threshold; every visible string is imported from content.ts; the details elements open and close without layout shift; the hero CTA sits above the fold at 1366x768 and again at 390px width.
Same task in other tools
Questions about this prompt
Why does the prompt extract all copy into content.ts?
Two reasons: you can rewrite headlines without touching JSX, and Bolt's follow-up edits get safer — asking it to punch up the hero copy only touches one file. It also makes the acceptance check enforceable: if a string is hardcoded in a section file, the structure drifted.
A verification item fails in the preview — what's the fastest fix?
Quote the failing check back to Bolt verbatim and name the file: "the details elements in src/sections/Faq shift layout when opening — fix that file only." Scoping the instruction to one section file keeps Bolt from regenerating the whole app.
Can I keep working on this outside Bolt?
Yes — export or push to GitHub and it's a standard Vite project: npm install, npm run dev. The sections/, components/, and content.ts split is exactly the shape you'd hand-build, so nothing needs untangling before your own editor takes over.
Part of the Bolt landing-page cluster — start from the main Bolt landing page prompt.