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

Rocket Launch Countdown Page is a single-page event site for a fictional flight. The first screen is a night pad drawn in WebGL: a two-stage rocket and an open tower on a concrete square, lit by warm sodium lamps against a near-black sky. Condensed numerals count down to a date you set. Dragging the canvas orbits the vehicle, and a slow idle spin stops at the first touch.

One flight clock drives everything else. Play runs a compressed ascent on that same model: engine start, liftoff, climb, stage separation, the shell opening, and orbit insertion, with the camera following. A scrubber and a mission timeline jump to the same beats and can return the vehicle to the pad. Altitude, velocity, downrange, and a one-line status read that clock, so the panel and the model stay in step. After the deadline, the numerals show time since the window and the page leads with replay.

Below that, the page carries a small launch company's paperwork: height, mass, a berth price, a range address and office hours, four named people, and a watch-party form. The form checks the email, confirms on the page, and can store it in the browser. Nothing is sent. There is no webcast and no account.

It suits a studio, a club, or a product team planning a premiere. Change the company, vehicle, mission, range, payload, and deadline, and the sentences are rewritten around them. The pad, the copper band, the cyan readouts, and the code-built rocket stay. The vehicle is original geometry: three plain fins and one engine bell on each stage. On a phone the canvas stacks above the countdown and the telemetry becomes one strip. Reduced motion uses four labeled stills, and the idle spin stays off.

The template prompt

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

# Rocket Launch Countdown Page

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

## Brief
A single-page night launch for [BRAND]. The first screen is a code-built rocket and tower on a lit pad, with a live countdown to [LAUNCH_AT] and drag-to-orbit. One shared flight clock replays liftoff, ascent, stage separation, shell opening, and orbit insertion on that same model, and drives the telemetry strip and the mission timeline. A watch-party form confirms on the page and can store the email in localStorage.

- Audience: People following [MISSION], [BRAND]'s flight of [VEHICLE] from [RANGE], and teams who will reuse the page for another premiere by changing the variables.
- Goal: Let the visitor watch the countdown, orbit the vehicle, replay the ascent, and save a watch-party email on this page. Nothing is sent to a server.
- Tone: Calm and concrete, like a small range console. Short sentences, named people, real figures. No slogans, no hype, no webcast catchphrases.

## Stack
- Framework: Vite 5 + React 18 + TypeScript
- Styling: Tailwind CSS 3.4
- Libraries: [email protected] + [email protected] (MIT), [email protected] (MIT), @react-three/[email protected] (v8 line, React 18) (MIT), @react-three/[email protected] (OrbitControls only) (MIT), lucide-react (ISC), [email protected] + postcss + autoprefixer (MIT), vite@5 + @vitejs/plugin-react (MIT), typescript (Apache-2.0), @fontsource/big-shoulders-display (OFL-1.1), @fontsource/outfit (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 react-ts template. One page only: index.html at the project root, entry src/main.tsx. The document title is '[MISSION] — [BRAND]' (default: Wick Line 4 — Quillharbor Launch). Link the favicon with a relative href ./favicon.svg. Include charset and viewport meta only: no description, Open Graph, Twitter, or JSON-LD tags.
  - Install exactly [email protected], [email protected], [email protected], @react-three/[email protected], and @react-three/[email protected]. Keep Vite 5, TypeScript, and Tailwind CSS 3.4 from the scaffold. Do not upgrade React to 19, Tailwind to 4, fiber to 9, or drei to 10. Do not install GSAP, Motion, Lenis, zustand, postprocessing, or any UI kit.
  - vite.config.ts: base './', plugins [react()], build { outDir 'dist', sourcemap false, chunkSizeWarningLimit 1600 }. Do not copy src/ into dist/. package.json scripts: dev is vite, build is tsc -b && vite build, preview is vite preview. If the scaffold's tsconfig has no solution references, use tsc --noEmit && vite build instead, but the command the user runs stays npm run build.
  - Tailwind 3.4 via PostCSS, content ['./index.html', './src/**/*.{ts,tsx}']. In tailwind.config.ts extend colors with sky #07080C, ink #E7E4DC, muted #9A9488, panel #12141A, line #2A2E36, sodium #E7A04A, cyan #7EE0E6, copper #C4895A. fontFamily display ['Big Shoulders Display', 'Arial Narrow', 'sans-serif'], sans ['Outfit', 'system-ui', 'sans-serif'], mono ['IBM Plex Mono', 'ui-monospace', 'monospace'].
  - src/index.css: Tailwind layers, color-scheme dark, body margin 0, background #07080C, color #E7E4DC, font-family Outfit, -webkit-font-smoothing antialiased. html scroll-behavior smooth. A prefers-reduced-motion block sets scroll-behavior auto and disables the status-dot pulse and the drag-chip fade. Inputs use a 1000px inset box-shadow of #12141A on autofill so the field does not flash white. Focus-visible outline is 2px solid #7EE0E6 with 2px offset. Selection background #7EE0E6, color #07080C.
  - src/fonts.ts imports @fontsource/big-shoulders-display/500.css, 700.css, and 800.css; @fontsource/outfit/400.css, 500.css, and 600.css; @fontsource/ibm-plex-mono/400.css and 500.css. Import fonts.ts first in src/main.tsx. Do not add a fonts.googleapis.com or fonts.gstatic.com link.
  - File layout: src/content.ts (every string, phase, stat, person, and question), src/flight.ts (pure pose, camera, and telemetry functions of t), src/hooks/useReducedMotion.ts, src/hooks/useCountdown.ts, src/scene/LaunchCanvas.tsx, src/scene/Vehicle.tsx, src/scene/Pad.tsx, src/scene/Stars.tsx, src/components/Header.tsx, Countdown.tsx, Telemetry.tsx, FlightControls.tsx, Timeline.tsx, Facts.tsx, Team.tsx, WatchParty.tsx, Questions.tsx, Footer.tsx, and src/App.tsx. The flight clock t and playing live in React state in App.tsx and are passed down. Do not keep a second clock inside the canvas.
  - public/favicon.svg is a 32 viewBox: a rounded rect rx 6 filled #07080C and a circle cx 16 cy 16 r 4 filled #7EE0E6. No letters, no rocket silhouette, no badge.
  - Write ASSETS.md at the project root listing the three Fontsource packages (OFL-1.1, authors as published on the package) and lucide-react (ISC). State that the rocket, pad, tower, plume, stars, and favicon are original code and that the site ships no third-party images or 3D files.

## Variables
- [BRAND] — Launch company (default: "Quillharbor Launch"). Invented company. Header wordmark, footer, watch-party storage key, and the page title. Never a real launch provider.
- [VEHICLE] — Vehicle name (default: "Lodestone"). Invented rocket name. Used in the deck, facts, and status lines. The mesh does not change with this name.
- [MISSION] — Mission name (default: "Wick Line 4"). Invented flight name. It is the H1 and the document title. Keep it short, two or three words plus a number.
- [RANGE] — Range name (default: "Gannet Spit"). Invented coastal range. Eyebrow, address, and deck. Not a real launch-site name.
- [PAYLOAD] — Payload name (default: "Harbor Glass"). Invented instrument name, a proper noun. Deck, facts, and two status lines. Rewrite those sentences if the grammar needs it.
- [LAUNCH_AT] — Window opening (default: "2027-08-21T04:12:00Z"). ISO-8601 UTC instant. Leave the string as written. If a visitor arrives after it, the page leads with replay instead of changing the date.
- [CREDIT] — keep a small "Template by VibeFather" link to https://vibefather.ai/t/rocket-launch-countdown-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: "Rocket Launch Countdown Page"
colors:
  sky: "#07080C"
  ink: "#E7E4DC"
  muted: "#9A9488"
  panel: "#12141A"
  line: "#2A2E36"
  sodium: "#E7A04A"
  cyan: "#7EE0E6"
  copper: "#C4895A"
  rocket: "#243044"
  shell: "#C9CDD4"
  pad: "#3C3832"
  ground: "#100E0C"
typography:
  display_countdown_numerals_h1_h2_stat_values_wordmark: { family: "Big Shoulders Display", weights: [500, 700, 800] }
  text_body_buttons_deck_faq_form: { family: "Outfit", weights: [400, 500, 600] }
  mono_eyebrows_telemetry_timeline_times_unit_labels_status: { family: "IBM Plex Mono", weights: [400, 500] }
spacing: "8px base. Header 56px. Flight section min-height calc(100vh - 56px). Aside padding 28px 32px on desktop and 20px 20px 8px under 1024px. Lower sections use a 1120px container, 40px side padding on desktop, 20px on mobile, and 96px vertical padding on desktop (64px on mobile). Gap between aside blocks is 14px."
radius: "2px on buttons, inputs, timeline rows, the drag chip, and cards. Countdown cells and the header are square. No pills."
---

# Rocket Launch Countdown 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
- **Sky** `#07080C` — Page background, canvas clear color, fog, primary-button text, footer
- **Ink** `#E7E4DC` — Headings, countdown numerals, body text, scrubber thumb
- **Muted** `#9A9488` — Secondary text, unit labels, inactive timeline rows, placeholders
- **Panel** `#12141A` — Inputs, active timeline row, drag chip, watch card, fact cells
- **Line** `#2A2E36` — 1px borders, countdown rules, telemetry dividers, header border
- **Sodium** `#E7A04A` — Tower lamps, plume outer color, form error text. The warm practical light
- **Cyan** `#7EE0E6` — The single cold accent: links, focus, primary button, active phase, replay kicker, payload lamp
- **Copper** `#C4895A` — The one band on the first stage, the fin edge, and the umbilical
- **Rocket** `#243044` — First-stage body and the three fins
- **Shell** `#C9CDD4` — Second stage and the ogive shell
- **Pad** `#3C3832` — Concrete square under the vehicle
- **Ground** `#100E0C` — The ground disc around the pad

## Typography
- **Display: countdown numerals, H1, H2, stat values, wordmark** — Big Shoulders Display (OFL), weights 500/700/800. Self-host the font files.
- **Text: body, buttons, deck, FAQ, form** — Outfit (OFL), weights 400/500/600. Self-host the font files.
- **Mono: eyebrows, telemetry, timeline times, unit labels, status** — IBM Plex Mono (OFL), weights 400/500. Self-host the font files.

## Spacing & shape
- Spacing: 8px base. Header 56px. Flight section min-height calc(100vh - 56px). Aside padding 28px 32px on desktop and 20px 20px 8px under 1024px. Lower sections use a 1120px container, 40px side padding on desktop, 20px on mobile, and 96px vertical padding on desktop (64px on mobile). Gap between aside blocks is 14px.
- Radius: 2px on buttons, inputs, timeline rows, the drag chip, and cards. Countdown cells and the header are square. No pills.

## Motion
- One flight clock t in seconds, from 0 to 64, lives in React state. While playing, a requestAnimationFrame loop adds min(0.05, dt) and stops at 64 by setting playing false. Telemetry, the timeline, the scrubber, and the 3D pose are all pure functions of that same t. Do not simulate gravity.
- Idle spin: while t is 0, playing is false, the pointer has not interacted, and reduced motion is off, the vehicle group's yaw increases at 0.12 rad/s. The pad and tower do not spin. The first pointerdown on the canvas sets interacted and the spin stays off until Replay, which zeros yaw and clears interacted.
- Drag: drei OrbitControls, enabled only when t is 0 and playing is false. enablePan false, enableDamping true, dampingFactor 0.08, rotateSpeed 0.7, zoomSpeed 0.6, minDistance 14, maxDistance 34, minPolarAngle 0.5, maxPolarAngle 1.2, target [0, 6.4, 0]. Do not call listenToKeyEvents. The canvas wrapper uses touch-action: none. On OrbitControls start, set interacted.
- Scripted camera, linear interpolation between knots (t, position xyz, lookAt xyz). Clamp outside the ends. Snap; do not ease from the orbit pose. Knots: 0 → pos [8.8, 4.8, 22] look [0, 6.4, 0]; 12 → [9.2, 5.6, 22] / [0, 7.4, 0]; 18 → [11, 8, 21] / [0.2, 10, -1.5]; 36 → [13, 9.5, 18] / [1.2, 12.4, -3]; 44 → [12, 9, 18] / [0.2, 13.2, -4]; 52 → [13, 8.5, 20] / [0, 14.6, -4.5]; 60 and 64 → [15, 9, 22] / [0, 15.4, -5]. While scripted, OrbitControls enabled is false and controls.update is not called.
- Vehicle pose is a diorama. Telemetry kilometers are not the model's height. Climb from t 12 to 36: u = clamp((t-12)/24, 0, 1), s = u*u*(3-2*u), y = s*6, z = s*-3, pitch = s*0.16. Before t 12 the stack is at the origin. After t 36 the upper stage continues: u2 = clamp((t-36)/24, 0, 1), s2 = u2*u2*(3-2*u2), y = 6+s2*3, z = -3+s2*-2, pitch = 0.16+(0.05-0.16)*s2. The booster from t 36 to 50: p = clamp((t-36)/14, 0, 1), y = 6-p*4, x = p*2.8, z = -3, pitch 0.16, roll z = p*0.4, opacity 1-p, hidden at t >= 50.
- Plume, arm, shell, puff, all functions of t: stage-1 plume visible for 8 <= t < 36; stage-2 plume for 37.5 <= t < 54. While playing and not reduced, plume scale.y = 1 + sin(t*40)*0.06 + sin(t*17)*0.03; otherwise scale.y is 1. Umbilical rotation.z goes from 0 to -0.8 linearly across t 8 to 11. Shell halves swing from 0 to 1.15 rad across t 44 to 48 and hold. A sodium puff sphere sits at world [0, 13.75, -3], visible only for 36 <= t < 38, scale lerps 0.6 to 2.4 and opacity 0.45 to 0.
- UI motion is short. The drag chip fades over 300ms after the first interaction. The FAQ answer uses grid-template-rows 0fr to 1fr over 200ms. The primary button scales to 0.98 on active. The status dot pulses opacity 1 to 0.4 over 1.6s only while playing. No scroll-jacking, no page transitions, no marquee, no custom cursor.
- prefers-reduced-motion: no idle spin, no plume flicker, no dot pulse, no chip fade, FAQ snaps open, button does not scale. Playback does not interpolate. Hide the scrubber. The play control becomes Next still and cycles t through 0, 12, 36, 52, then back to 0, snapping the pose. Timeline clicks snap to that phase start. If reduced motion turns on mid-play, pause and snap to the greatest of those four times that is still <= t. Do not autoplay the flight when reduced motion is on. Camera and model pose still follow pose(t); they just do not animate between values.

## Imagery
No photographs, no HDRIs, no downloaded models, and no texture URLs. The first screen is the code-built rocket: it fills the canvas, which is the full height under the header on desktop and 62vh on mobile. Night sky is the clear color #07080C plus THREE.Fog #07080C near 34 far 72 and 360 stars. Lighting is code only: hemisphere sky #1A3344 ground #3A2A18 intensity 0.35, ambient #8EA0B0 intensity 0.18, a cool directional #C9D7E0 intensity 0.35 at [-16, 22, 10] with a 1024 shadow map (orthographic bounds -20 to 20, near 0.5 far 80, bias -0.0004), and sodium point lights on the tower and pad (color #E7A04A, intensity about 10, distance about 12, decay 2, no shadow). The rocket body is slate #243044 with one copper band #C4895A, a fog-gray upper stage #C9CDD4, three plain triangular fins, and one bell per stage. The plume is two additive cones, core #FFF6E4 and outer #E7A04A. The only cyan in the 3D scene is a small emissive panel on the payload, #7EE0E6, revealed when the shell opens. No letters, flags, patches, or logos on any mesh. Tone mapping ACESFilmic, exposure 1.05, output SRGB. Canvas dpr [1, 1.5], antialias true, alpha false, fov 34, near 0.1, far 160.

## Tone
Calm and concrete, like a small range console. Short sentences, named people, real figures. No slogans, no hype, no webcast catchphrases.

---
— Prompt by VibeFather · https://vibefather.ai/t/rocket-launch-countdown-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 game studio planning a reveal: set BRAND to the studio, MISSION to the title, LAUNCH_AT to the trailer drop, and rewrite the facts panel as platform and release details.
  • A satellite imaging startup: use RANGE for your coastal site, PAYLOAD for the instrument, and change the watch-party form into a demo request that confirms on the page.
  • A university rocketry club: set BRAND to the team, VEHICLE to your airframe name, and replace the berth price and office hours with competition dates and meeting details.
  • A conference or festival: set MISSION to the event, LAUNCH_AT to the doors-open time, and rewrite the timeline beats as programme milestones while keeping the replay ascent.

Rocket Launch Countdown Page: questions and answers

How do I change the launch date and mission name on the Rocket Launch Countdown Page?

The Rocket Launch Countdown Page reads its window from the LAUNCH_AT variable, an ISO-8601 UTC instant, and its title from MISSION. Both live in the content file alongside BRAND, RANGE, PAYLOAD and VEHICLE. Rewrite the headlines and status sentences around your new values so the copy still reads correctly. If a visitor arrives after the window, the page shows time since the window and leads with replay rather than changing the date.

What happens on the Rocket Launch Countdown Page after the countdown reaches zero?

After the LAUNCH_AT window passes, the Rocket Launch Countdown Page switches the condensed numerals to time since the window and leads with the replay control. Play runs the compressed ascent on the same rocket model: engine start, liftoff, climb, stage separation, shell opening and orbit insertion, with the camera following. A scrubber and mission timeline jump to those beats or return the vehicle to the pad.

Can I use the Rocket Launch Countdown Page for a product premiere instead of a rocket launch?

The Rocket Launch Countdown Page suits a studio, club or product team planning a premiere. Set BRAND to your company, MISSION to the product or event name, LAUNCH_AT to your reveal time, and rewrite the facts, team and watch-party copy around your announcement. The night pad, copper band, cyan readouts and code-built rocket stay as they are, so the page keeps its range-console feel.

Does the watch-party form on the Rocket Launch Countdown Page send emails anywhere?

No. The watch-party form on the Rocket Launch Countdown Page checks the email format, confirms on the page and can store the address in the browser. Nothing is sent to a server and there is no account or webcast. To collect addresses for real, connect the form to your own mailing list or form service, and update the confirmation sentence so it matches what happens next.

How do I edit the flight facts, team and range address on the Rocket Launch Countdown Page?

Every string on the Rocket Launch Countdown Page sits in one content file keyed by section, including the height, mass, berth price, range address, office hours and the four named people. Change those values and the sentences around them, then adjust RANGE and PAYLOAD so the address and status lines stay consistent. The rocket geometry does not change with VEHICLE, so keep the name short and readable in the status lines.

How do I build a rocket launch countdown page with AI?

Copy the full prompt (Pro) from this page or run npx vibefather add rocket-launch-countdown-page, replace [BRAND], [RANGE], [MISSION] and [PAYLOAD] 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 Rocket Launch Countdown Page demo?

The Coastal satellite launch case was built by Grok 4.7 in Grok Build; the Crop imaging launch case was built by Grok 4.7 in Grok Build. Each build used the published prompt with nothing added.

What tech stack and pages does the Rocket Launch Countdown Page template use?

Rocket Launch Countdown Page is a single-page site built with Tailwind CSS, Three.js and React, with drag & physics 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 Rocket Launch Countdown Page template free to use?

Rocket Launch Countdown 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 Rocket Launch Countdown Page template work on mobile?

Yes. Every Rocket Launch Countdown 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.