Juice brand · Featured

Zest

Zest is a premium juice brand website template built with Next.js, TypeScript, Tailwind and All-intra video scrub + GSAP. A loud juice brand in vivid duotones — colour-flood pages, a slide-then-scrub flavour line, films scrubbed by scroll. The Claude Code prompt that builds it is free; the exact tested source code is unlocked by Studio Access — $149 for every template on the shelf, with a commercial license for unlimited projects.

Next.jsTypeScriptTailwind CSSGSAPLenisScroll-scrubbed video
Source code locked
Live demo ↗

Unlocked by Studio Access — all 19 templates, every future drop, unlimited projects. $149 once.

Source code

Specifications

Framework
Next.js · TypeScript · Tailwind
Motion
All-intra video scrub + GSAP
Category
Commerce
Use case
Juice brand
Responsive
Desktop → mobile
License
Commercial · unlimited projects
Delivery
Instant ZIP download

What the paid download adds

  • The exact deployed code — tested, not AI-guessed
  • Config-driven copy, palette & assets
  • Compressed media included
  • Deploy README — Vercel or your own VPS
  • Commercial license — one end product
  • Free updates to this template

The free Claude Code prompt

Run this with Claude Code to build your own Zest variant — free. Want the exact, tested code shown in the demo? It’s in Studio Access, with every other template.

# ZEST — Free Claude Code Prompt

*From SmartDuke Studio (studio.smartduke.com). Run it with Claude Code
and build your own variant. Want the exact tested code — the encoded
films, the finished layout, the scrub engine with the iOS fixes —
that's the paid download at https://studio.smartduke.com*

## Before you start

- Node.js ≥ 20.9 and ffmpeg on PATH.
- You need 6–7 short splash films (about 8s each): a hero product shot,
  one splash film per flavour, a pour, an ice-cold can. Generate them
  with an AI video tool (Kling/Veo work well) — ONE continuous take per
  clip, slow constant motion, no cuts, every clip must read scrubbed
  backwards as well as forwards. Encode each all-intra:
  `ffmpeg -i in.mp4 -an -vf "scale=1600:-2" -c:v libx264 -preset slow
  -crf 29 -g 1 -pix_fmt yuv420p -movflags +faststart out.mp4`
  (-g 1 makes every frame a keyframe — that's what makes scrubbing
  instant instead of janky). Encode the full-bleed hero at 1920/crf 21.
  Keep the total under ~30MB.

## The prompt

> Build me a loud, colourful juice-brand site — Awwwards-level, for a
> fictional citrus brand with three flavours. The page is a sequence of
> vivid duotone chapters: every section floods the ENTIRE page
> background to its own saturated colour (tween document.body's
> backgroundColor on enter/enterBack — never scrubbed), each paired
> with its own accent colour (gold on tangerine, lime on teal, ice on
> electric blue…). Films are scrubbed by scroll.
>
> **Stack:** Next.js App Router + TypeScript + Tailwind v4 + GSAP
> ScrollTrigger + Lenis. Fraunces (opsz/SOFT/WONK axes) for display
> type, light weights with italic accents.
>
> **The scrub engine (one reusable component):** a tall section
> (~220vh) with a sticky viewport frame holding a <video muted
> playsInline>. ScrollTrigger (top top → bottom bottom) maps progress
> to a target time; a gsap.ticker lerps video.currentTime toward it
> (factor ~0.14, only seek when the delta exceeds 0.004s, bail while
> readyState < 2). First-frame poster jpg on every film.
>
> **The signature act — slide-then-scrub flavour line:** one pinned
> 500vh section with a 300vw horizontal track, one panel per flavour.
> Each flavour owns a third of the pin; the first quarter of its
> segment SLIDES the track sideways (eased), the rest SCRUBS that
> flavour's splash film while it holds centre. The page floods to each
> flavour's colour as it arrives. One shared ticker; only the centred
> panel's video seeks.
>
> **The Awwwards dressing:** an intro loader (wordmark + 000→100
> counter on a gradient hairline, curtain lifts); per-character masked
> headline reveal timed to the curtain; a cinematic hero exit where the
> full-bleed film shrinks into a rounded card as you scroll out; a
> custom cursor (dot + trailing ring that swells over interactive
> targets, mix-blend-difference); a giant two-row serif marquee
> drifting in opposite directions that skews with scroll velocity;
> numbers that count up when their section enters; a right-edge scroll
> progress rail with chapter counter; giant outlined index numerals
> bleeding out from behind the film frames; clip-path card reveals and
> slow image parallax in the shop; a magnetic CTA button.
>
> **The mobile trap (do not skip):** iOS never paints a seeked frame
> on a video that has not played. On mount, call play() then
> immediately pause(); if the browser refuses, retry on the first
> touchstart/pointerdown. Re-arm this after any load() call.
>
> **Many videos, one page:** gate each chapter's ticker with an
> IntersectionObserver; ship later chapters preload="metadata" and
> upgrade to "auto" one viewport early.
>
> **Mobile menu:** full-screen overlay where every link is a giant
> flavour-coloured bar — tapping one floods the screen with its colour
> as it navigates. Body scroll locked, Esc closes, aria-expanded wired.
>
> **A11y + housekeeping:** prefers-reduced-motion gets still posters
> and no cursor/marquee tricks; pointer:fine gates the custom cursor;
> overflow-x uses clip (never hidden — hidden turns body into a scroll
> container and silently kills position:sticky).

## Gotchas we hit (the paid version has these fixed)

- Scrubbed background-colour tweens capture wrong start values during
  pinned refresh — flood with plain onEnter/onEnterBack tweens to an
  explicit hex, never scrub them.
- A hard dark nav bar collides with headings on colourful pages — use
  a soft top-down gradient scrim that fades out by ~150px instead.
- 1600px/crf29 is fine for framed films but visibly soft full-bleed —
  encode the hero at 1920/crf21 (still all-intra).
- The iOS play()/pause() unlock must be re-armed after load() — the
  preload upgrade resets the decoder and the hero works while every
  later chapter silently freezes.
- Tie text exits to the sticky RELEASE, not chapter progress — or your
  copy fades while the film is still pinned.

Zest — questions

What is the Zest template built with?

Zest is a Juice brand website built with Next.js, TypeScript, Tailwind CSS, GSAP, Lenis, Scroll-scrubbed video. The motion is driven by All-intra video scrub + GSAP, with Lenis smooth scrolling and GSAP ScrollTrigger for the scroll choreography.

How much does Zest cost?

The free Claude Code prompt that builds a Zest variant is $0. The exact, tested source code — the same site shown in the demo — comes with Studio Access: $149 once for every template plus every future drop, delivered as instant ZIP downloads with a commercial license for unlimited projects.

Can I use Zest for a client project?

Yes. Studio Access includes a commercial license to use Zest — and every other template — in unlimited end products, including paid client work. Everything is config-driven, so copy, palette and assets re-skin from a single file.

What's the difference between the free prompt and the paid download?

The free prompt gets Claude Code to build you a Zest variant — genuinely good, but it costs tokens and debugging time and results vary. The paid download is the exact site in the demo: tested, compressed, documented, licensed, with free updates.

Related templates

Part of

Unlock Zest — and everything else.

The free prompt gets you a variant. One Studio Access licence unlocks this exact tested site, the other 18 on the shelf, and every future drop — $149 once, unlimited projects.