Edit the copy and chapters
Everything the page says lives in lib/content.ts:
CHAPTERS holds each chapter's label, kicker, title (use \n for the line break), tagline and the giant word shown behind the can.
INGREDIENTS is the numbered list in the Fuel chapter.
FLAVORS defines the three flavours. The flavour chapters are generated from this array, starting at FLAVOR_CHAPTER.
The overlay layout (header, chapter rail, stats, flavour pills and call to action) is in components/ui/Overlay.tsx. Wire the order button in the final chapter to your shop or checkout there (the header Grab a can button scrolls to that chapter).
Change colours and flavours
Each flavour has its own colour world:
primary: the can and accent colour
secondary: highlights and the second rim light
deep: the background
ink: the type printed on the label
Change these and the label, wipe, studio reflections, lights, particles and kinetic type all follow. Add or remove an entry in FLAVORS to change the number of flavours. If you do, update the camera stops in components/scene/CameraRig.tsx: there is one stop per chapter, plus a matching entry in PORTRAIT_DIST and PORTRAIT_DROP for phones.
Change the label and logo
The can's label is drawn by canvas painters in components/scene/art.ts: the brand name, lightning mark, flavour line, small print, emissive circuit mask, condensation maps, fruit slices and the type sheet. Edit the painter to change the brand name or artwork. To use a designed label instead, load your own image as the label texture, keeping the same width-to-height ratio so it wraps the can without stretching.
Change the product shape
The can is a LatheGeometry built from a 2D profile in components/scene/Can.tsx. Edit the profile points to make a slimmer can, a bottle or a jar. The flavour-wipe shader works on any UV-mapped label, so it carries over. To use a modelled product, load a GLB with the GLTFLoader from three.js and apply the label material to its label mesh.
Change fonts
Fonts are loaded with next/font/google in app/layout.tsx: Anton for headlines, Space Grotesk for body text and JetBrains Mono for labels. Swap the imports and keep the CSS variable names (--font-display, --font-body, --font-mono). The kinetic type behind the can is drawn into a canvas texture sheet, so it waits for fonts to load before painting.
Tune motion and effects
- Postprocessing: bloom, chromatic aberration, tone mapping, grain and vignette are set in
components/scene/Experience.tsx.
- Scroll feel: the Lenis settings, the snap delay and keyboard stepping are in
components/Journey.tsx.
- Lightning: the number of arcs and their roughness are constants at the top of
components/scene/Energy.tsx.
- Reduced motion: visitors with
prefers-reduced-motion get no smooth scroll, parallax, idle spin, chromatic aberration or marquee motion. Keep that behaviour when you add effects by checking journey.reduced.
SEO and metadata
Set the page title, description and social preview in app/layout.tsx. The chapter copy is rendered as real HTML text in the overlay, so search engines and screen readers can read it.