Kinetics
Deploys at the speed of thought.
Field notes
A dark SaaS hero where giant type slides with scroll inertia, glass stat cards tick like a live dashboard, and a frosted dock magnifies under the pointer. Pure DOM and Framer Motion — no canvas, no images.
- Scroll-driven
- Pointer interaction
- SaaS
- Dark theme
Kinetics is a landing hero for a product that sells speed. Three lines of oversized type ride a tall sticky track: scroll, and each line slides its own way, trailing the page on a spring so the words feel heavy and physical. As the headline moves, three glass stat cards rise in with live numbers and scrolling sparklines.
At the bottom, a frosted dock magnifies its icons as the pointer passes, the way a desktop dock does. A lime-and-iris aurora drifts behind everything over a perspective grid that rushes toward the viewer. It is all HTML, CSS, and Framer Motion — no canvas, no images, no network beyond Google Fonts — and it settles into a still layout for anyone who prefers reduced motion.
How it's built
- The floor loops by whole cells: the grid floor is just a CSS background, and each loop it moves by exactly three 64 px cells. The loop ends on the same pixels it started on, so the frames join with no seam.
- Sticky needs clip, not hidden: the full-screen stage sits on a 320vh track and uses overflow-x: clip to crop the sliding headline. overflow: hidden would make it a scroll container and break position: sticky.
- Dock math that can’t feed back on itself: the magnifying dock sizes each icon from a constant resting layout, not the live DOM, and measures the pointer from the dock’s center, which stays put while icons grow on both sides.
- Live numbers that still loop: stat values sample a quantized clock, Math.floor(t * 4) / 4, so they tick four times a second like a real dashboard. The sparkline’s two sines run 2 and 5 whole cycles and slide exactly one unit per loop, so the last frame matches the first.
Inside the prompt
Every file below is written out in full, so your agent creates the project exactly — no guessing, no missing pieces.
kinetics-saas/
├─ .gitignore
├─ index.html
├─ package.json
├─ tsconfig.json
├─ vite.config.ts
└─ src/
├─ App.tsx
├─ index.css
├─ main.tsx
├─ vite-env.d.ts
├─ components/
│ ├─ GlassDock.tsx
│ ├─ KineticHero.tsx
│ └─ LiveStats.tsx
└─ lib/
└─ loop.tsRecut it
- Rename the product and rewrite the pitch
src/components/KineticHero.tsx → KineticHero - Swap the brand colors
src/index.css → --color-volt - Change how far each headline line slides
src/components/KineticHero.tsx → <Row from to> - Make the scroll feel heavier or snappier
src/App.tsx → useSpring() - Edit the live numbers
src/components/LiveStats.tsx → STATS - Add or remove dock icons
src/components/GlassDock.tsx → ICONS
More in Hero Section
All hero section templates →
Monolith
Hero SectionA floating hexagonal basalt monolith split by glowing cyan fissures, with drifting debris, a light shaft, and pointer parallax. Procedural GLSL stone — no textures, no models, no network.

Refract
Hero SectionAn aurora of violet, cyan, and pink light flows behind frosted glass cards whose rims bend it like a lens. One raw WebGL2 shader, no three.js, and the glass follows whatever the DOM lays out.

Flux
Hero SectionSixty thousand ember particles flow from a sphere into a spiral galaxy, then spell your brand, and scatter from the pointer. One custom shader on a single Points cloud: no models, no textures, no simulation pass.