Skip to content
VibeFather
Sign up free

2 cases built from this template

Same prompt, different [VARIABLES]. Click one to preview it above.

About this template

Lumen Drift is a single-page launch site for a piece of hardware. Its hero object is a desk lamp built entirely in three.js from primitives, with no model files, textures or HDRIs. A full-screen WebGL stage sits behind the page. As the visitor scrolls through four feature chapters, the lamp turns on its base, bends at both hinges and tilts its head, and its light shifts between cool white, amber and violet. A soft beam cone, a halo, drifting dust motes and a pool of light on the floor make the scene feel lit rather than rendered.

The template suits small hardware teams, crowdfunding campaigns and product designers who want a preorder page that shows the object moving instead of a carousel of photos. The look is near-black, with large Space Grotesk headlines, Inter body text and a spec sheet set in JetBrains Mono with hairline rules and oversized key figures. Every UI accent picks up the lamp's current color: the scroll progress line, the chapter dots, button glows and the live readout in the corner that shows head angle, output and tone hex. A small SVG day curve in the fourth chapter draws itself as you scroll.

The scroll choreography is set by a keyframe table. Each section has a pose, a camera position and a light color, and GSAP ScrollTrigger interpolates between them. Lenis provides the inertial scrolling. With reduced motion turned on, the page skips the animation and jumps to each pose.

To adapt the page, change the brand, product name, product type, price, ship window and audience in one content file, then rewrite the chapter copy. The lamp's geometry and color stops are short, commented constants, so you can reshape it into a grow light, a studio key light or a reading lamp without changing the layout.

The template prompt

The live demo was built from exactly this text — nothing added. The other cases only change the values of the [VARIABLES].

# 3D Product Launch Page

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

## Brief
A single-page, dark, cinematic product launch site for [PRODUCT_NAME], a [PRODUCT_TYPE] by [BRAND]. A fixed full-viewport three.js canvas renders a lamp built procedurally from primitives. HTML sections scroll over it: hero, four feature chapters (Focus, Warm, Night, Rhythm) with copy alternating left and right, a hairline spec sheet and a preorder call to action. Scroll progress drives the lamp's base turn, arm pose, head tilt, camera dolly and light color through a fixed keyframe table. The lamp has a volumetric beam cone, a bloom halo, floating dust motes and a lit pool on the floor. Every UI accent follows the lamp's current light color.

- Audience: Visitors deciding whether to preorder [PRODUCT_NAME], mainly [AUDIENCE]. The template itself is for hardware startups, crowdfunding campaigns and product designers who want a launch page that shows the product moving.
- Goal: Show what the product does by moving it on screen: each chapter puts the lamp in a new pose and color. Then back it up with a precise spec sheet and end on a calm, low-pressure preorder reservation (static UI only).
- Tone: Quiet, confident and precise. Short declarative headlines, concrete numbers, no exclamation marks and no hype words. It should feel like a film title sequence crossed with an engineering datasheet.

## Stack
- Framework: Vite 5 + TypeScript + three.js
- Styling: Vanilla CSS
- Libraries: three (incl. three/examples/jsm: EffectComposer, RenderPass, UnrealBloomPass, OutputPass, RoomEnvironment) (MIT), gsap (core + ScrollTrigger) (GSAP Standard License (free, commercial use allowed)), lenis (MIT), @fontsource/space-grotesk (OFL-1.1), @fontsource-variable/inter (OFL-1.1), @fontsource/jetbrains-mono (OFL-1.1), typescript (dev) (Apache-2.0), vite (dev) (MIT)
- 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, then `npm i three gsap lenis @fontsource/space-grotesk @fontsource-variable/inter @fontsource/jetbrains-mono` and `npm i -D @types/three`.
  - vite.config.ts: `base: './'`, `build.sourcemap: false`, `build.outDir: 'dist'`, `build.assetsInlineLimit: 0`. Do not copy src/ into dist/.
  - package.json scripts: `dev: vite`, `build: tsc && vite build`, `preview: vite preview`.
  - File layout: index.html, src/main.ts (boot, Lenis, ScrollTrigger wiring), src/content.ts (ALL copy and variable values in one exported object), src/styles.css (all CSS, tokens as custom properties, all @keyframes), src/scene/stage.ts (renderer, camera, composer, lights, floor, render loop), src/scene/lamp.ts (procedural lamp), src/scene/beam.ts (beam cone shader, halo sprite, dust points, floor pool), src/scene/keyframes.ts (the keyframe table and state object), src/ui/hud.ts (live readout and --light CSS variable).
  - Render all HTML copy from src/content.ts at boot (template strings into section containers) so swapping variables only touches that file. If the variable values differ from the defaults, rewrite every headline, body line, stat and spec row in content.ts to fit the new product while keeping the same lengths and structure.
  - Import fonts once in main.ts: `@fontsource/space-grotesk/500.css`, `/600.css`, `@fontsource-variable/inter`, `@fontsource/jetbrains-mono/400.css`, `/500.css`.
  - Register GSAP plugins: `gsap.registerPlugin(ScrollTrigger)`. Drive Lenis from gsap.ticker (`gsap.ticker.add(t => lenis.raf(t*1000))`, `gsap.ticker.lagSmoothing(0)`, `lenis.on('scroll', ScrollTrigger.update)`). Lenis options: `duration: 1.15`, easing `t => Math.min(1, 1.001 - Math.pow(2, -10*t))`.
  - Add public/favicon.svg: a 32×32 rounded square #07080B with a centered #FFB547 ring (r=8, stroke 3) and a 3px dot. `<title>` is `[PRODUCT_NAME] — [BRAND]`.
  - Write ASSETS.md at the project root stating that the site uses no third-party image, icon, model or texture files. Everything is generated in code, and fonts come from Fontsource (OFL-1.1).

## Variables
- [BRAND] — Brand name (default: "Kelvane"). Invented company name shown in the header wordmark and footer
- [PRODUCT_NAME] — Product name (default: "Sola One"). The product being launched
- [PRODUCT_TYPE] — Product type (default: "smart desk lamp"). Lowercase noun phrase used in running copy
- [PRICE] — Preorder price (default: "$249")
- [SHIP_WINDOW] — Ship window (default: "March 2027"). Month and year shown in the hero eyebrow and preorder block
- [AUDIENCE] — Audience (default: "people who work, read and wind down at the same desk"). Lowercase phrase that completes 'built for …'
- [CREDIT] — keep a small "Template by VibeFather" link to https://vibefather.ai/t/3d-product-launch-page 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.

DESIGN.md

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

---
name: "3D Product Launch Page"
colors:
  void: "#07080B"
  graphite: "#0E1016"
  hairline: "#1C1F27"
  bone: "#ECEAE4"
  ash: "#8A8F9C"
  amber: "#FFB547"
  frost: "#E6F0FF"
  violet: "#9C7CFF"
  rim: "#5C6680"
  light_dynamic: "var(--light), updated from the 3D light color"
typography:
  display_h1_h2_big_spec_numerals: { family: "Space Grotesk", weights: [500, 600] }
  text_body_nav_buttons: { family: "Inter Variable", weights: [400, 500] }
  mono_eyebrows_hud_spec_table_values_chart_labels: { family: "JetBrains Mono", weights: [400, 500] }
spacing: "8px base unit. Content grid: 12 columns, max-width 1280px, 24px gutters, side padding clamp(20px, 5vw, 72px). Type scale: H1 clamp(56px, 9vw, 148px) / line-height 0.92 / letter-spacing -0.04em, weight 500. H2 clamp(36px, 5vw, 72px) / 1.0 / -0.03em, weight 500. Body 17px / 1.6 in Ash, max-width 440px. Eyebrow mono 12px uppercase, letter-spacing 0.14em, color var(--light). Big spec numerals: Space Grotesk 600, clamp(64px, 8vw, 128px), tabular. Hero is 100vh. Each feature chapter is 160vh tall with its copy block starting 30vh from the section top. The spec sheet and preorder sections use natural height with 160px vertical padding (96px on mobile)."
radius: "Buttons and pills 999px. Mobile copy cards, the email input group and HUD panel 14px. Spec table and rules 0 (square, hairline only)."
---

# 3D Product Launch Page — 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
- **Void** `#07080B` — Page background, scene background, fog color
- **Graphite** `#0E1016` — Mobile copy cards, input background, header background at 72% opacity
- **Hairline** `#1C1F27` — 1px rules, table lines, borders, inactive chapter dots
- **Bone** `#ECEAE4` — Primary text, primary button fill
- **Ash** `#8A8F9C` — Body copy, secondary labels, mono captions
- **Amber** `#FFB547` — Light stop 'Warm' (2700K); default --light value; hero and preorder light
- **Frost** `#E6F0FF` — Light stop 'Focus' (5000K)
- **Violet** `#9C7CFF` — Light stop 'Night' (ambient)
- **Rim** `#5C6680` — Constant cool rim light behind the lamp in the 3D scene
- **--light (dynamic)** `var(--light), updated from the 3D light color` — Every UI accent: eyebrows, progress line, active chapter dot, button glow, HUD tone swatch, focus rings

## Typography
- **Display (H1, H2, big spec numerals)** — Space Grotesk (OFL), weights 500/600. Self-host the font files.
- **Text (body, nav, buttons)** — Inter Variable (OFL), weights 400/500. Self-host the font files.
- **Mono (eyebrows, HUD, spec table values, chart labels)** — JetBrains Mono (OFL), weights 400/500. Self-host the font files.

## Spacing & shape
- Spacing: 8px base unit. Content grid: 12 columns, max-width 1280px, 24px gutters, side padding clamp(20px, 5vw, 72px). Type scale: H1 clamp(56px, 9vw, 148px) / line-height 0.92 / letter-spacing -0.04em, weight 500. H2 clamp(36px, 5vw, 72px) / 1.0 / -0.03em, weight 500. Body 17px / 1.6 in Ash, max-width 440px. Eyebrow mono 12px uppercase, letter-spacing 0.14em, color var(--light). Big spec numerals: Space Grotesk 600, clamp(64px, 8vw, 128px), tabular. Hero is 100vh. Each feature chapter is 160vh tall with its copy block starting 30vh from the section top. The spec sheet and preorder sections use natural height with 160px vertical padding (96px on mobile).
- Radius: Buttons and pills 999px. Mobile copy cards, the email input group and HUD panel 14px. Spec table and rules 0 (square, hairline only).

## Motion
- Lenis inertial scrolling (duration 1.15, expo-out easing) synced with GSAP ScrollTrigger.
- Scroll-scrubbed 3D choreography: per-section ScrollTriggers (scrub 1.2) tween one shared state object between keyframes. The render loop reads that state every frame.
- Text reveal on enter: every element marked data-reveal goes from opacity 0 / translateY(24px) to 0 / 0 over 0.9s, ease power3.out, stagger 0.08s, triggered at 'top 75%' once.
- Hero intro on load: the canvas fades from black over 1.2s while the lamp's intensity ramps 0 → 1 (power2.inOut). Then H1 lines rise with clip-path inset(100% 0 0 0) → inset(0) over 1.0s, stagger 0.12s, starting at 0.4s.
- Idle life (not scroll-bound): the head breathes ±1.2° with sin(t·0.6), and the camera eases toward the pointer by up to ±0.15 units (lerp 0.05; desktop only).
- --light CSS variable written from the current 3D light color whenever it changes by more than 1/255 per channel. UI accents recolor in sync with the lamp.
- Header progress line: scaleX bound to overall scroll progress, color var(--light).
- Rhythm chapter SVG day curve: stroke-dashoffset scrubbed from full length to 0 across the chapter, with a marker dot following the path.
- Buttons: 200ms transition on box-shadow and transform. Hover adds a var(--light) glow and translateY(-1px).
- prefers-reduced-motion: no Lenis, no scrub, no idle motion, no dust drift, no reveals (content visible immediately). An IntersectionObserver (threshold 0.5) snaps the state to each section's keyframe instantly, and the scene renders only when state changes.

## Imagery
No bitmaps at all. The only visual is the real-time three.js scene: a graphite metal lamp with matte arms on a near-black floor in exponential fog, lit by its own spotlight. A volumetric cone, a bloom halo on the diffuser, faint dust motes and a soft light pool on the floor. A cool rim light outlines the silhouette from behind. UI graphics (wordmark mark, arrows, chapter dots, day-curve chart, favicon) are inline SVG drawn in code.

## Tone
Quiet, confident and precise. Short declarative headlines, concrete numbers, no exclamation marks and no hype words. It should feel like a film title sequence crossed with an engineering datasheet.

---
— Prompt by VibeFather · https://vibefather.ai/t/3d-product-launch-page · CC BY-NC 4.0 (non-commercial; commercial use needs a VibeFather Pro license) · Request removal: https://vibefather.ai/takedown

Make it yours

  • A crowdfunding hardware team: set BRAND and PRODUCT_NAME to your device, put your reservation link behind the preorder block and rewrite the four chapters around your campaign milestones.
  • A studio lighting maker: keep the lamp geometry but widen the head and shift the color stops toward daylight and tungsten, then rewrite the spec sheet with your output and color temperature figures.
  • A plant-care brand selling a grow light: set PRODUCT_TYPE to indoor grow light, retitle the chapters around spectrum and schedule, and point AUDIENCE at home growers.
  • An industrial designer's portfolio: set BRAND to your studio, replace PRICE and SHIP_WINDOW with project details and use the four chapters to walk through your design decisions.

3D Product Launch Page: questions and answers

How do I change the lamp into a different product, like a grow light or a reading lamp?

The 3D Product Launch Page builds its lamp from short, commented constants in the scene code, so you reshape the geometry rather than swap a model file. Change the base, arm and head proportions and the color stops the light moves between, then rewrite the chapter copy in the content file to match. The layout, scroll keyframes and UI accents stay as they are.

Can I use the 3D Product Launch Page for a crowdfunding preorder campaign?

The 3D Product Launch Page is built for exactly that: a single-page launch site with four feature chapters, a hairline spec sheet and a preorder call to action. Set BRAND, PRODUCT_NAME, PRODUCT_TYPE, PRICE, SHIP_WINDOW and AUDIENCE in the content file, then rewrite the Focus, Warm, Night and Rhythm chapters around your campaign. The preorder block is static UI only, so connect it to your own reservation or mailing list.

What do I need to change first after downloading the 3D Product Launch Page?

Start in the content file: set BRAND, PRODUCT_NAME, PRODUCT_TYPE, PRICE, SHIP_WINDOW and AUDIENCE, then rewrite every headline, chapter paragraph and spec row to fit your product, keeping the same lengths and tone. After that, adjust the lamp's geometry and color stops if your object differs from a desk lamp. The near-black palette, Space Grotesk headlines and scroll choreography can stay untouched.

Does the 3D lamp animation still work for visitors who turn on reduced motion?

Yes. The 3D Product Launch Page detects reduced motion and skips the scroll animation, jumping straight to each lamp pose instead of interpolating between keyframes. Visitors still see the lamp in its chapter poses and read the same copy, spec sheet and preorder block. The GSAP ScrollTrigger choreography and Lenis inertial scrolling are what get bypassed, not the content.

Can I use the 3D Product Launch Page for a client project?

Commercial and client use of the 3D Product Launch Page requires Pro. The template is a Pro template, so its brief, stack and variables are public while the full prompt and the demo source code come with Pro membership. Free templates' prompts and every DESIGN.md are licensed for personal, non-commercial use only.

How do I build a 3D product launch page with AI?

Copy the full prompt (Pro) from this page or run npx vibefather add 3d-product-launch-page, replace [BRAND], [PRICE], [AUDIENCE] and [SHIP_WINDOW] with your own content, and paste it into Claude Code, Codex, Cursor or another AI coding agent. The live demos were built from exactly that text.

Which AI model built the 3D Product Launch Page demo?

The Smart desk lamp case was built by Claude Opus 5.5 in Claude Code; the Indoor grow light case was built by Gemini 4 Carbon in Cursor. Each build used the published prompt with nothing added, so you can compare the models side by side.

What tech stack and pages does the 3D Product Launch Page template use?

3D Product Launch Page is a single-page site built with GSAP, Plain HTML and Three.js, with text animation, scroll animation and 3d / webgl. The prompt fixes the stack so every AI tool builds the same kind of project, and the result runs as a static site you can host anywhere.

Is the 3D Product Launch Page template free to use?

3D Product Launch Page is a Pro template: the brief, stack and variables are public, and the full prompt, the source code of the live demo and a commercial license come with VibeFather Pro. Its DESIGN.md is free for personal projects.

Does the 3D Product Launch Page template work on mobile?

Yes. Every 3D Product Launch Page build was tested on a phone-sized screen as well as desktop before it went live, checking layout, text size and touch targets. Open the live demo on your phone, or switch the preview on this page to mobile view, to check it yourself.