All Work
FOOD TRUCK / NO

Santorini Gyros.

A Norwegian gyros brand under Crazy Food Trucks Norge, built as a single-page scrollytelling site: the truck itself unfolds in cross-fading stages as the page scrolls, tied to a real NOK menu.

Web DesignScrollytellingGSAP
Role
Design + Build
Timeline
Roughly 2026-09-09 to 09-11, three days, derived from file mtimes and a single squashed commit
Live URL
crazy-food-trucks-deploy.vercel.app ↗
Santorini Gyros homepage

01 / THE REQUEST

Sell the truck,not just the menu.

Crazy Food Trucks Norge needed a site for its Santorini Gyros brand that sold the physical truck experience, not just a static menu. Real NOK pricing (169-219 kr per dish) and a route across Norwegian pickup points had to sit inside something more atmospheric than a flat list.

02 / THE PROBLEM

Scroll and seekhave to agree.

A scroll-driven reveal sequence that only responds to organic scrolling breaks the moment a user taps a stage label or a keyboard shortcut to jump ahead: the timeline moves but the scrollbar doesn't, or vice versa, and the two fall out of sync for the rest of the session.

03 / THE CHALLENGE

One timeline,two ways in.

A single scrubbed GSAP timeline cross-fades and scales seven full-bleed truck photo stages, bound to real scroll position through one ScrollTrigger over a dedicated scroll container (index.html:2134-2147). Each stage fires an updateHUD() callback at a specific timeline offset to swap the copy and specs shown alongside it (index.html:2098-2131). There is no canvas or WebGL involved, the effect is entirely cross-fading and scaling static photography.

The part that has to work is seekToStage() (index.html:2041-2062): instead of just jumping the timeline when a user clicks a stage control, it reads the live ScrollTrigger instance to compute the exact scroll pixel offset that corresponds to that timeline progress, then animates window.scrollTo to it. Organic scrolling and programmatic navigation stay on the same clock. If ScrollTrigger fails to initialize, the code falls back to seeking the timeline directly and calling updateHUD by hand, a real fallback path rather than a silent dead end.

04 / THE SOLUTION

What gotbuilt.

Scrubbed reveal sequence

One GSAP timeline cross-fades seven truck photo stages, bound to scroll via a single ScrollTrigger instance.

Scroll/seek parity

Stage navigation computes the real scroll offset from timeline progress, so scrolling and jumping never drift apart.

Fallback seek path

If ScrollTrigger fails to init, navigation still works by seeking the timeline and updating the HUD directly.

Real menu, NOK pricing

A full Norwegian menu with per-dish pricing, presented alongside the scrollytelling truck reveal.

05 / THE RESULT

Live,funnel next.

BUILT WITH

Vanilla HTML/CSS/JSGSAP 3.12.5ScrollTrigger

Building something more atmospheric?

Next project

Chocoloco