2 cases built from this template
Same prompt, different [VARIABLES]. Click one to preview it above.About this template
This is a single-page launch site for a physical product that plays like a short film. The default story follows Arc 7, an electric commuter bike from an invented maker called Corvel, through six full-bleed scenes: a cold open on a ridge road at dusk, a wet city street, a range scene where a route draws itself across a contour map, a climb with a dot riding up an elevation profile, a night scene of streaking lights, and a final reveal that turns the bike through four angles before you reach the preorder panel. It suits hardware founders, direct-to-consumer brands and designers who need a launch or preorder page that makes people feel the product before they read the numbers. The pattern carries over to anything you can photograph from several angles, from scooters and audio gear to kitchen machines. The look is dark and cinematic: near-black scenes with warm dusk light, condensed uppercase headlines, film-style letterbox bars with a running timecode, and subtitles that type in one line at a time. One electric lime accent is reserved for the spec numbers, progress bars, price and reserve button, so the eye always lands on what matters. Each scene pins for about two screens of scrolling and crossfades into the next, with two or three parallax depth layers moving at different speeds. Range, torque, weight and charge time count up as their scene arrives. The preorder panel stays in view while you choose one of four colors, which recolor the bike image, pick a frame size and reserve with a refundable deposit; the choice is remembered in the browser and nothing is sent. To adapt it, change the brand, product name, product type, price and deposit; the prompt rewrites every caption, spec and FAQ answer to match.
The template prompt
The live demo was built from exactly this text — nothing added. The other cases only change the values of the [VARIABLES].
# Cinematic Scroll Product Story
Build this website exactly as described below. Replace the [VARIABLES] with your own values; keep everything else.
## Brief
A single-page product launch site for [PRODUCT], an [PRODUCT_TYPE] from the invented maker [BRAND], told like a short film: six full-bleed scenes pin and crossfade as you scroll, with parallax depth layers, letterboxed captions that type in, specs that count up, a final multi-angle reveal of the bike and a sticky preorder panel with color and size choice.
- Audience: Urban commuters aged 28–50 who are ready to replace a second car or a long transit ride, care about design and want hard numbers (range, weight, charge time) before putting down a deposit.
- Goal: Make the visitor feel the ride first, then convince with numbers, then convert: reserve [PRODUCT] with a refundable [DEPOSIT] deposit in the color and size they picked.
- Tone: Cinematic, quiet and confident. Short declarative captions like film subtitles, concrete times and distances, no exclamation marks, no buzzwords.
## Stack
- Framework: Vite 5 + vanilla TypeScript
- Styling: Tailwind CSS 3.4
- Libraries: gsap 3 (core, ScrollTrigger, MotionPathPlugin) (GSAP Standard 'no charge' license (free, commercial use allowed)), lenis (MIT), lucide (ISC), tailwindcss (MIT), postcss (MIT), autoprefixer (MIT), vite (MIT), typescript (Apache-2.0), @fontsource/barlow-condensed (OFL-1.1), @fontsource-variable/manrope (OFL-1.1), @fontsource/ibm-plex-mono (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 vanilla-ts template. One page: index.html at the project root with <div id='app'>, entry src/main.ts.
- vite.config.ts: base './', build { outDir 'dist', sourcemap false, assetsInlineLimit 0 }. Do not copy src/ into dist/.
- Tailwind 3.4 through PostCSS, content ['./index.html', './src/**/*.ts']. In tailwind.config.ts add every color under Design to theme.extend.colors with kebab-case keys (night, charcoal, ash, bone, haze, dusk, ember, volt) and fontFamily display ['"Barlow Condensed"', 'Arial Narrow', 'sans-serif'], sans ['"Manrope Variable"', 'system-ui', 'sans-serif'], mono ['"IBM Plex Mono"', 'ui-monospace', 'monospace'].
- src/fonts.ts imports '@fontsource/barlow-condensed/600.css', '@fontsource/barlow-condensed/800.css', '@fontsource-variable/manrope', '@fontsource/ibm-plex-mono/400.css', '@fontsource/ibm-plex-mono/500.css'; main.ts imports src/fonts.ts and src/style.css (Tailwind layers, the caption cursor keyframes, the scroll-cue keyframes and a @media (prefers-reduced-motion: reduce) block).
- File layout: src/content.ts (all copy, scenes, captions, stats, angles, swatches, sizes, FAQ, image paths, seeded art data), src/lib/brand.ts (brandSlug, email, storage keys), src/lib/storage.ts (safe localStorage get/set in try/catch), src/render.ts (builds all markup from content), src/scenes/art.ts (inline SVG generators for haze, ridge, rain, contours, route, elevation profile, light streaks, grain), src/film.ts (master timeline), src/typing.ts, src/countup.ts, src/header.ts, src/preorder.ts, src/faq.ts, src/reduced.ts.
- gsap.registerPlugin(ScrollTrigger, MotionPathPlugin) once in src/film.ts. Create Lenis only when reduced motion is off; call ScrollTrigger.refresh() after all images in #film have loaded (Promise over img.decode()).
- Before the first build, download every image listed under Assets into public/images/ with curl -L -o using the exact file names. The build itself never fetches anything.
- index.html: lang en, <meta name='theme-color' content='#0A0B0D'>, <link rel='icon' href='./favicon.svg' type='image/svg+xml'>, <title>[PRODUCT] by [BRAND] — Preorder</title>. Body background #0A0B0D so nothing flashes white.
- 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 six images. Keep it under 8 MB.
## Variables
- [BRAND] — Brand (default: "Corvel"). Invented maker name. Used in the wordmark, eyebrow, timecode bar, footer, email (hello@ + brandSlug + .com) and localStorage keys. Never a real bike or vehicle brand.
- [PRODUCT] — Product name (default: "Arc 7"). Invented model name shown huge in Scene 01, in the reveal, the preorder panel and the title. Short (one or two words) so it fits the H1.
- [PRODUCT_TYPE] — Product type (default: "electric commuter bike"). Lowercase phrase for what it is. Drives the lead, the panel line and all spec and caption rewrites. Keep it a bicycle so the included bike images still fit; for another product, replace the six images with your own.
- [PRICE] — Price (default: "$2,890"). Full price with currency symbol. The monthly line is computed from it (÷ 24, rounded up).
- [DEPOSIT] — Deposit (default: "$100"). Refundable reservation amount shown on the CTA, in the confirmation and in the FAQ.
- [CREDIT] — keep a small "Template by VibeFather" link to https://vibefather.ai/t/cinematic-scroll-product-story 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: "Cinematic Scroll Product Story"
colors:
night: "#0A0B0D"
charcoal: "#16181C"
ash: "#24272D"
bone: "#ECE6DC"
haze: "#9A958C"
dusk: "#E8894A"
ember: "#B8532A"
volt: "#C8FF2E"
letterbox: "#000000"
typography:
display_h1_h2_the_wordmark_spec_numbers_price_buttons_always_uppercase_condensed_tight_line_height: { family: "Barlow Condensed", weights: [600, 800] }
text_lead_captions_body_faq_panel_copy: { family: "Manrope", weights: [400, 500, 600] }
mono_eyebrows_scene_labels_timecode_stat_labels_rail_labels_uppercase_letter_spacing_0_18_0_24em: { family: "IBM Plex Mono", weights: [400, 500] }
spacing: "8px base unit. Container max-width 1320px, side padding 48px desktop, 32px tablet, 20px under 640px, 12-column grid with 32px gaps. Inside the film everything sits between the letterbox bars (clamp(44px, 9vh, 96px) each) and above the 120px caption band. Normal sections use 120px vertical padding (80px under 640px). Spec number + suffix + label are a tight unit: 4px between number and label."
radius: "Film scenes and images are square-edged (0). Callout cards and the preorder stage and panel 24px (callout 16px). Buttons and swatches are pills or circles (999px). Focus ring: 2px Volt outline with 3px offset."
---
# Cinematic Scroll Product Story — 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
- **Night** `#0A0B0D` — Page and stage background, text on Volt buttons.
- **Charcoal** `#16181C` — Preorder stage and panel, callout cards, accordion surfaces.
- **Ash** `#24272D` — Giant footer wordmark, inactive tracks, subtle fills.
- **Bone** `#ECE6DC` — Headlines, body text, captions, icons, selected size fill; at 6–18% for hairlines, contours and tracks.
- **Haze** `#9A958C` — Secondary text, mono labels, timecode, FAQ answers.
- **Dusk** `#E8894A` — Warm highlight: scene labels, haze glow, light streaks. Never on numbers or CTAs.
- **Ember** `#B8532A` — Deep warm glow at the bottom of scenes and behind the product.
- **Volt** `#C8FF2E` — The single electric accent, used only for spec numbers, progress fills (header, route, rail, climbing dot), the price and the CTA.
- **Letterbox** `#000000` — Top and bottom film bars.
## Typography
- **Display: H1, H2, the wordmark, spec numbers, price, buttons — always uppercase, condensed, tight line-height** — Barlow Condensed (OFL), weights 600/800. Self-host the font files.
- **Text: lead, captions, body, FAQ, panel copy** — Manrope (OFL), weights 400/500/600. Self-host the font files.
- **Mono: eyebrows, scene labels, timecode, stat labels, rail labels (uppercase, letter-spacing 0.18–0.24em)** — IBM Plex Mono (OFL), weights 400/500. Self-host the font files.
## Spacing & shape
- Spacing: 8px base unit. Container max-width 1320px, side padding 48px desktop, 32px tablet, 20px under 640px, 12-column grid with 32px gaps. Inside the film everything sits between the letterbox bars (clamp(44px, 9vh, 96px) each) and above the 120px caption band. Normal sections use 120px vertical padding (80px under 640px). Spec number + suffix + label are a tight unit: 4px between number and label.
- Radius: Film scenes and images are square-edged (0). Callout cards and the preorder stage and panel 24px (callout 16px). Buttons and swatches are pills or circles (999px). Focus ring: 2px Volt outline with 3px offset.
## Motion
- One master GSAP timeline scrubbed by ScrollTrigger (scrub 0.8) over 1380 units pins the stage and drives every crossfade, parallax layer, route draw, climbing dot and angle swap.
- Crossfades between scenes overlap 40 units: incoming autoAlpha 0 → 1 and scale 1.04 → 1, outgoing to 0 and 0.98.
- Parallax depth: back layer moves least (yPercent -6, scale 1.15 → 1.05), mid -14, front -28 or faster, so every scene feels three-deep.
- Captions type at 32ms per character with a blinking block cursor, hold 1.6s, replay when you scroll back into a scene.
- Spec numbers count from 0 in 1.4s (power2.out) when their scene becomes active and reset when it leaves.
- Lenis smooth scrolling (lerp 0.1) wired to ScrollTrigger and the GSAP ticker.
- prefers-reduced-motion: no Lenis, no pinning, no typing or counting — scenes stack statically with final values.
## Imagery
Cinematic and dark: two dusk film stills (ridge road, wet city) and four studio renders of the same ember-orange bike on near-black with amber rim light, all from one generated set. Everything else is drawn in code (haze, ridges, rain, contour map, route, elevation profile, light streaks, grain). Riders are distant faceless silhouettes; no text or logos in any image.
## Tone
Cinematic, quiet and confident. Short declarative captions like film subtitles, concrete times and distances, no exclamation marks, no buzzwords.
---
— Prompt by VibeFather · https://vibefather.ai/t/cinematic-scroll-product-story · CC BY-NC 4.0 (non-commercial; commercial use needs a VibeFather Pro license) · Request removal: https://vibefather.ai/takedown