VAARĀ — A Palace Resort, Travelled by Scroll
You are not scrolling through a website. You are travelling through the hotel.
A luxury palace resort told as one continuous 48-second camera journey — drone descent, the entrance courtyard, through the glass into the lobby, the dining room, the pool and garden path, a suite, and the doors opening onto the grand hall — and none of it ever plays. A GSAP ScrollTrigger pins the film for roughly seven thousand pixels and the scroll position is the playhead: a ticker eases the current time toward the scroll's target and issues one seek at a time, waiting for the decoder to report back before sending the next, so it glides forwards and backwards and stops dead when you stop. The film is encoded for seeking rather than playback (a keyframe every twelve frames, no B-frames) and fetched whole as a blob before the journey starts. A 5 Hz light track measured off the footage switches the nav between light and dark without reading a single pixel at runtime, a 01–06 journey index follows the chapters, and seven editorial overlays arrive and leave on the film's own timings. The last frame holds while an ivory veil rises into the editorial pages — architecture, dining, gardens, suites and the grand hall — set in Instrument Serif and Manrope, with a custom cursor and Lenis smooth scrolling. Built for desktop.
How to run this
Works the same on Windows, macOS and Linux. No prior setup beyond Node.js, and nothing to configure — the pack runs as-is.
- Built with
- Vite 7
- Requires
- Node.js 20 or newer
- Opens at
- http://localhost:5188
Note — The film ships ready to scrub in public/film — nothing to download or encode. It never plays: scroll moves the camera, so give the page a moment to fetch the video before scrubbing fast. Built and tuned for desktop (1440px and up); smaller screens get a basic fallback. The npm run film:encode and film:analyse scripts are only for swapping in your own footage: they need a scripts/film.env with MASTER=/path/to/your-master.mov (and an optional PRE_FILTER=), which is not included.
✦ Or let an AI agent set it up for you
Already using Claude Code, Antigravity, Cursor or Windsurf? Unzip the pack, open the folder as a project, and just ask:
Install the dependencies and run this project, then give me the URL
It reads the README included in the pack, runs the right commands for this project, and sorts out anything that trips along the way. You still need Node.js installed (step 1 below) — everything after that it can handle.
Or run it yourself
- 1
Install Node.js, if you don't have it
Download the LTS build from nodejs.org and run the installer — on Windows and Mac it handles everything. Mac users with Homebrew can run
brew install nodeinstead.To check it worked, run
node --version. It should print a number like v22.11.0. - 2
Unzip the pack, then open a terminal inside the folder
Windows: open the unzipped folder in File Explorer, click the address bar, type
powershelland press Enter.Mac: press Cmd+Space, type terminal, press Enter. Then type
cd(with a trailing space) and drag the unzipped folder onto the terminal window — it fills in the path for you. Press Enter. - 3
Install the dependencies
Run
npm installOne-time, and takes roughly 30–60 seconds. It creates a node_modules folder — that's expected, and it's why the zip doesn't ship one.
- 4
Start it
Run
npm run devThen open http://localhost:5188 in your browser. Leave the terminal open while you use it — closing it stops the site. Press Ctrl+C in the terminal to stop.
- 5
Optional — build for production
When you're ready to deploy,
npm run buildproduces the optimised output. The pack deploys to Vercel, Netlify or any Node host with no changes.
+ − If something goes wrong
- “npm is not recognised” / “command not found: npm”
- Node.js isn’t installed, or the terminal was open before you installed it. Close the terminal, open a new one, and try again.
- “Port 5188 is already in use”
- Something else is running there — often a previous copy of this site. Close the other terminal, or stop it with Ctrl+C.
- The page loads but images or video are missing
- Make sure you ran the command from inside the unzipped VAARĀ — A Palace Resort, Travelled by Scroll folder itself, not the folder containing it.
- npm install shows warnings
- Warnings (as opposed to errors) are normal and safe to ignore. Only a message starting with ERR! needs attention.
Still stuck? Email us and we'll get it running with you.
More like this
Browse the store →
PremiumMAHAL — The Palace, In One Continuous Take
Scrolling doesn't trigger the film. Scrolling is the film.
PremiumBR Coffee — Pistachio Tiramisu Iced Latte
Scroll builds the drink, frame by frame
PremiumBR-Skins — The Anatomy of Glow
Nine pinned chapters, five clips, one scroll
