Bolt prompt for an ecommerce landing page
A Bolt prompt that scaffolds a product landing page where all copy lives in one data file — change the price once and both buy points update. The purchase panel, benefit grid, and IntersectionObserver sticky bar render live in the preview as they're built. Customize style, palette, type, and motion with the dropdowns above the prompt.
Last updated
In Bolt, scaffold a runnable single-product landing page for {{product}}, sold to {{audience}}. Vite + React, no backend; all product data lives in src/data/product.js (name, price, images, specs, reviews) so copy edits never touch markup. Components in src/components/: Gallery, PurchasePanel, Benefits, SpecTable, Reviews, AssuranceBar, StickyBar. I'll follow along in the live preview.
Page anatomy:
1. Gallery and PurchasePanel side by side. The gallery is a main image with a thumbnail rail; the panel holds the name, a one-sentence promise, a rating summary, the price, a quantity stepper, the buy button, then three assurance lines with icons — dispatch time, returns window, warranty.
2. Benefits — 4 compact cards in a 2x2 grid, each pairing an outcome headline (6 words maximum) with two supporting sentences; no icon-only cards.
3. SpecTable — a two-column table rendered from the specs in product.js; include dimensions and compatibility rows relevant to {{product}}.
4. Reviews — a score header plus 5 reviews rendered from data, each with name, date, stars, and text; a summary line states the share of 5-star ratings.
5. AssuranceBar — guarantee, secure payment, and support hours in one banded row before the footer.
6. StickyBar — slides up once the PurchasePanel leaves the viewport (IntersectionObserver), holding the price and the buy button.
Visual direction:
{{style}}
Palette: {{palette}}
Typography: {{type}}
Motion: {{motion}}
Rhythm and breakpoints:
- Global spacing tokens in CSS: --gap-section at 6rem desktop, 3.5rem under 768px; every component reads the variable.
- Under 768px: thumbnails move below the main image as a swipe row, the 2x2 benefit grid becomes one column, and the StickyBar is the permanent mobile purchase point.
Label every purchase button "{{cta}}". Write review and benefit copy that reflects what {{product}} actually does for its buyer — no lorem ipsum anywhere.
Once the preview runs, confirm: editing the price in product.js updates both buy locations; the StickyBar appears and disappears at the right scroll positions; the spec table renders every row from data; the console shows no errors; mobile presents a single-column flow.Customize it
Runs in your browser. Nothing you type here is sent anywhere.
In Bolt, scaffold a runnable single-product landing page for a project management SaaS, sold to engineering managers at startups. Vite + React, no backend; all product data lives in src/data/product.js (name, price, images, specs, reviews) so copy edits never touch markup. Components in src/components/: Gallery, PurchasePanel, Benefits, SpecTable, Reviews, AssuranceBar, StickyBar. I'll follow along in the live preview. Page anatomy: 1. Gallery and PurchasePanel side by side. The gallery is a main image with a thumbnail rail; the panel holds the name, a one-sentence promise, a rating summary, the price, a quantity stepper, the buy button, then three assurance lines with icons — dispatch time, returns window, warranty. 2. Benefits — 4 compact cards in a 2x2 grid, each pairing an outcome headline (6 words maximum) with two supporting sentences; no icon-only cards. 3. SpecTable — a two-column table rendered from the specs in product.js; include dimensions and compatibility rows relevant to a project management SaaS. 4. Reviews — a score header plus 5 reviews rendered from data, each with name, date, stars, and text; a summary line states the share of 5-star ratings. 5. AssuranceBar — guarantee, secure payment, and support hours in one banded row before the footer. 6. StickyBar — slides up once the PurchasePanel leaves the viewport (IntersectionObserver), holding the price and the buy button. 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. Rhythm and breakpoints: - Global spacing tokens in CSS: --gap-section at 6rem desktop, 3.5rem under 768px; every component reads the variable. - Under 768px: thumbnails move below the main image as a swipe row, the 2x2 benefit grid becomes one column, and the StickyBar is the permanent mobile purchase point. Label every purchase button "start a free trial". Write review and benefit copy that reflects what a project management SaaS actually does for its buyer — no lorem ipsum anywhere. Once the preview runs, confirm: editing the price in product.js updates both buy locations; the StickyBar appears and disappears at the right scroll positions; the spec table renders every row from data; the console shows no errors; mobile presents a single-column flow.
Same task in other tools
Questions about this prompt
Why does all product copy live in src/data/product.js?
One file is the single edit point: change the price there and the purchase panel and sticky bar both update, which the acceptance check verifies. It also means swapping the file for a real API response later is a data change, not a rewrite.
The sticky bar flickers near its trigger point — how do I fix it in Bolt?
That's the IntersectionObserver firing right at the boundary. Tell Bolt to add a rootMargin buffer (around -80px) so the bar commits to a state instead of toggling, and describe the exact scroll position where you want it to appear.
Can this scaffold grow into a multi-product store?
It's deliberately a one-product page — no routing, no cart. Duplicating the project with a different product.js gives you a second landing page cheaply, but a catalog with navigation is a different build and a different prompt.
Part of the Bolt landing-page cluster — start from the main Bolt landing page prompt.