youtube.nixfred.com nixfred.com

I Made Claude Fable 5 Build a Cinematic Scroll Website (No Code)

CreativeDesignTools host Vannarot Roeung directs Claude Fable 5 with one plain English brief to build a cinematic scroll website for a bath brand called Wallow, writing no code by hand. The background is a 36 second film, but it ships as a numbered sequence of still frames drawn to a canvas and mapped to scroll position, so it holds about 60 frames a second, scrubs forward and backward, and never stalls the way a scrubbed video does. The video walks the whole pipeline in order: script the experience like an ad director, generate and chain six clips frame perfect in Google Flow, join and upscale, cut to numbered frames with ffmpeg, wire a roughly 30 line scroll engine, add transform and opacity effects, and verify with a headless Puppeteer check. It doubles as a reproducible method: a coding agent can follow the ordered commands, prompts, and code here to rebuild the same kind of single file cinematic site.

Published Jul 12, 2026 37:07 video 34 min read Added Jul 13, 2026 Open on YouTube →

At a glance

CreativeDesignTools hands Claude Fable 5 one plain English brief and, writing no code by hand, builds a cinematic landing page for a made up bath and body brand called Wallow, live at wallow-bath-body-63.aura.build. The background is one continuous 36 second film that reacts to your scroll: scroll down and it plays forward, scroll up and it runs in reverse, and it never jumps between sections. The trick is that it is not a video at all. It is a numbered sequence of still frames drawn onto a canvas and mapped to scroll position, so it holds around 60 frames a second, never stalls, and does the exact same thing forward and backward. The whole thing ships as one self contained lightweight HTML file, and the host directs Claude through every step: writing the script, generating the clips in Google Flow, stitching them seamlessly, cutting them to frames, building the scroll engine, adding the effects, and verifying the result. This page rebuilds the entire video in order and then turns it into a reproduction spec you can point Claude Code at to build the same kind of site.

The big idea: frames, not video

The instinct, when you want a moving background that responds to scroll, is to drop in a video file and scrub it back and forth. The host shows exactly why that fails and why a numbered frame sequence wins.

A video is a compressed stream. To show any single moment, the browser has to seek to that spot inside the file and decode it. Seeking mid file only works reliably when the server it came from is configured to allow byte range jumps. Off a plain file or a simple host, it is not, so the video locks onto one frame and refuses to move. The host puts the two side by side on screen: the video version freezes on a single frame and will not budge, while the frame sequence glides.

A frame sequence has nothing to seek and nothing to unpack. Every picture is already loaded into memory as its own image, so moving to any moment is just drawing a different one. That buys four things a video background cannot give you: it works with no internet at all, it works on phones, it moves identically forward and backward, and the moment you stop scrolling it stops doing any work whatsoever. A playing video can never go fully idle. There is also the money angle: a real video background is a big file that eats bandwidth every visit, which on a hosted site becomes a surprise bill.

What mattersVideo background, scrubbed by scrollScroll scrubbed frame sequence
Seeking to a momentmust jump inside the file, needs byte range support on the servernothing to seek, the frame is already an image in memory
Scrubbing backwardoften freezes on one frame off a plain hostidentical to forward, never stalls
Bandwidth and hosting costone big file streamed every visit, a surprise billa set of small images, easy to cache
Works offline and on phonesflakyyes, once the frames are loaded
Cost while idlea playing video keeps workingstops drawing the instant you stop scrolling
Smoothnesstied to decode and seekaround 60fps, a redraw only when the frame changes
Figure 1. Why the whole method refuses to ship a video. A scrubbed video fights the browser's decoder and the server's seeking rules. A numbered frame sequence sidesteps all of it: preload the stills, draw the one that matches the scroll, and go quiet when idle.

The three layers

Everything on the page stacks into three layers, and the wow factor comes from planning all three together rather than as separate parts.

The first layer is the film: six real clips, each 6 seconds long, for 36 seconds total. These are the pieces you generate first. The second layer is the scroll engine: it takes the finished film, extracts its frames, and draws them onto a canvas that is driven by how far down the page you have scrolled. The third layer is the web elements: the sections, the copy, the marquee, the product cards, the effects and sticky animations, everything a visitor reads and clicks. Combine the moving background with the web elements and you get the experience.

The host stresses that the layers are designed as a whole. On the finished page the subject sits on the right with the title on top and text on the left, then the next section flips it, text on the right and subject on the other side. At the closing call to action the button sits dead center and the background is centered to match, so everything feels in sync. You think about the background, the images, the clips, and the elements together, not separately. When a background runs through the entire page like this one does, you plan the film and the elements as one. When you only want a moving background in some sections, you can work it section by section instead.

LAYER 1 The film six 6 second clips, 36 seconds total, generated in Google Flow LAYER 2 The scroll engine extract numbered frames, map scroll 0 to 1 onto a frame index, draw that frame onto a full viewport canvas, ease and idle ~30 lines of vanilla JS LAYER 3 The web elements sections, headlines, double marquee, tilting product cards, all moved with transform and opacity only, never layout The wow factor background and elements, in sync
Figure 2. The three layers. The film is the raw material, the scroll engine turns it into something you scrub, and the web elements ride on top. Sync all three and the page feels premium.

Building it, in the video's order

It is not a video, it is a website built with Fable 5

The host opens on the finished Wallow site and scrolls it: the background is one continuous film, forward on the way down, reverse on the way up, smooth transitions and no jumping between sections. It is a 36 second film, but not a video file, and it is tied to the scroll. The promise for the video is the full workflow, so you can build your own template, customize it, and bring it to your own project, plus the way to think about and direct the experience. He points out the finishing move up front: at the end there is a big blast of color and the call to action button sits about in the middle, an example of planning the film and the elements to work together.

Composing the wow factor

The wow factor is not one effect, it is the background and the elements moving as one. Subject right, title on top, text left, then the next section mirrors it. At the call to action the button is centered and the background is centered with it, so the whole thing reads as in sync. The lesson: treat your background, images, clips, and elements as a whole. Because Wallow uses a background that spans the entire landing page, the host plans the film and the web elements together. If your product only needs a moving background in some sections, you plan it section by section instead.

What Fable 5 is, and when to use it

The site was built with Fable 5, which the host frames as recently returned after being pulled back over security concerns, and now genuinely impressive. The catch is price: it runs at roughly two times the cost of Opus, and Sonnet 5 just launched at far lower cost. So he uses Fable 5 deliberately, as a planner. Let Fable 5 think, research, and plan the whole thing out, the way the old plan mode and act mode split used to work, then hand the plan to Sonnet or Opus to implement, because those are still excellent models and Opus is great at execution. A useful aside: if a request trips one of the classifiers, Opus automatically downgrades to Opus 4.8 anyway.

The important part: the technique is not bound to any one model version. It is not Fable 5 only. Any capable model works. Planning with Fable 5 first just makes the rest easier. And if you already know the technique cold, you can run the whole thing on Opus, because you already know the outcome you want.

Start with a script, not code

Every cinematic page starts the same way, and it is not about the code. You start with a script. Ask the model to act like an advertisement agency. You are building an experience, so you think through all the interactions before writing any HTML. Think of the model as a director writing a script and drawing a storyboard for an ad. An ad agency does not cut the commercial first, it writes the script, sketches the storyboard, and plans the transitions. You do the same: nail the experience first, polish everything, then transition into building.

The script assigns one color per section. Wallow runs orange, then pink, then lime, then purple, and finally a call to action that carries all the colors at once and blends everything together. That color plan lines up exactly with the sections on the finished page. This scripting stage is the planning phase, and it matters most because video generation is expensive, so you want the plan locked before you spend a credit.

Google Flow and what video really costs

The host generates the film in Google Flow. The cost math is the whole reason to plan first.

A single 6 second video on the cheapest model, called Omni Flash, costs 10 credits. Ask for two iterations per step and it doubles to 20. The high quality model is drastically pricier: about 100 credits for one output, 200 for two. On the plans, the Pro tier gives around 1,000 credits a month, roughly 10 best model videos, and the cheapest plan gives 200 credits, only about two videos a month. For real production you want a Google AI Ultra plan, which runs into the tens of thousands of credits a month (the host cites tiers around 10,000 and about 20,000), lands near 140 Canadian on a 3 month promotion, and settles around 27 Canadian, roughly 20 US dollars, after the promo. Ultra is what unlocks up to 4K resolution and watermark removal, which is why it matters for production.

The Wallow build used six clips, which is already about 600 credits before you count the reality that AI output is not perfect. Most first shots are not good, so you iterate, and every image or clip you regenerate costs more. That is why it is cheaper to iterate on text, the script and the prompts, than to keep testing live in the generator. One relief: images are free. On Flow the best image model (Nano Banana Pro) costs zero credits, up to some monthly cap you rarely hit, which is central to the next step. You can swap in ChatGPT images, Midjourney for images and video, or Grok for images and video, but Flow's free images plus cheap Omni Flash clips make it ideal for iterating on templates.

The director prompt: real product, one color per section

To get what you want out of Flow you have to prompt it, and the first prompt writes the director script for the experience. Ask the model to act as an art director, and tell it explicitly: before you write any HTML, write a director script, and generate no code until it is approved. You read the output, approve it, and tweak the experience until it fits.

Two rules make the script production ready. First, use a real product and real copy, not placeholders, so that from the script onward you have a genuine visual reference and the template feels real. Second, for every section give the model a row of five things: one color, one job, the film and camera angle behind it, the real final onscreen copy, and one layer effect. The background combined with your HTML is what creates the unique feel of each section. This scripting stage is where you iterate the most, because once you move to video generation it gets expensive fast. The host notes all the prompts are in the video description so you can copy them, and repeats that production quality needs the Google AI Ultra plan for 4K and no watermark.

Reference images for consistency

The other rule that makes it look real is consistency. Wallow has one hero product, a bath bomb, and it cannot morph into a different object from clip to clip or that would look broken. Same product, same logo, same features in every clip. The way to guarantee that: create the product image first, then use it as the reference for the next image and the next video, so the product, brand, and logo are always in the generator's context. Once you have the hero image, ask for more images of it from different angles, so you have a set of consistent references ready when you start generating video. All of this still serves the script: a coherent product plus a planned experience is what a visitor remembers, and memory is what converts. Ads are impactful because they are built on emotion and rhythm, and that is what you want your page to carry too.

Make the first image free, and the two checks

Now it builds live. The first thing you make is a still image, not a video, for a simple reason: in Flow, images are free and videos cost credits. Make a free picture first, judge it, and only turn it into a video once you like it.

Set it up by clicking the small settings button on the prompt box. Choose Image as the type, Nano Banana Pro as the model, widescreen 16:9, one image per generation. The bottom of the panel literally says the generation will yield zero credits. Then paste the exact prompt that made the real film: an underwater shot of a white bath sphere releasing an orange cloud of dye, with two very specific demands, plenty of empty space around the sphere and a completely calm left side with no dye.

When the image comes back, run two checks before using it, and reprompt for free if it fails either. First, check the margins all the way around the frame, because Flow stamps a small watermark near a corner of every video it makes, and the plan is to crop the edges off later to remove it. So nothing you need to keep can touch the edge, or it gets cropped out. Second, check that the left third stays clean and calm, because that is where the brand name and the hero elements will sit once this becomes a website. If either check fails, paste the same prompt and run it again at no cost.

Turn the image into a video, in Frames mode

Once you approve an image, turn it into a video. Click the same settings button, choose Video, and pick the mode called Frames. Frames mode lets you hand Flow a starting image and optionally an ending image (not needed here), and it animates out from your first frame. That mode is what the whole method is built on. Choose Omni Flash, the cheapest video model, which is all this technique needs, then 6 seconds, widescreen, and a single video output. Check the price line before sending, because a stray earlier setting might be set to two or four outputs and quietly burn credits. Verify the number makes sense, then send.

Next, set the starting image. Click the slot labeled Start and a picker opens with the project's images. Your approved one sits at the top because it is the newest. Choose it, and now the video knows exactly what its first frame must be. Then add the motion prompt, which only describes what happens inside the already approved scene: the dye keeps blooming, the sphere stays small and high, the left side stays calm, a gentle opening shot. Send it, and that costs the 10 credits for the generation. A couple of minutes later the dye blooming clip renders. Open it, click the download icon at the top right, and it lands in your working folder as clip one.

The seam trick: chaining clips frame perfect

Here is the most important move in the method: making clip two continue perfectly from clip one with no visible jump at the cut. The problem is that an AI video never ends exactly where you expect. The fix is to extract the last frame of clip one and use it as the starting frame of clip two.

The host does it through Claude Code in a terminal open in the same folder as the clip, with one sentence: take the exact final frame of clip one and give it to me as an image so I can upload it as the start pin of clip two in Flow. Claude finds the clip, pulls the true final frame, and even double checks that it is literally frame 144 of 144, the actual last frame, not merely near the end. You can also do it by hand with an ffmpeg command by seeking a tenth of a second before the end and saving one frame, but here the AI does it.

Back in Flow, that extracted frame is now the newest file at the top of the image picker. Pin it into the Start slot of clip two. That is the entire trick: clip one ends on this exact frame, clip two now starts on this exact frame, so the cut lands on two identical images and nothing can jump. The prompt for clip two is the handoff: the orange dye slowly clears and drifts away, the sphere sinks gently toward the lower left, and a new pink magenta cloud starts blooming. Send it, another 10 credits.

Then prove the seam is real instead of claiming it. Back in the terminal: take the very first frame of clip two and put it side by side with clip one's last frame in a single image. Claude grabs frame one of clip two, stacks the two pictures next to each other, and you see clip one's ending frame on the left and clip two's opening frame on the right. They are identical, so the cut will never jump. Repeat this to stitch all six clips together, and you can chain as many clips as a project needs.

clip 1 orange
<rect class="box" x="152" y="90" width="118" height="70" rx="8"/>
<text class="mono" x="211" y="122" text-anchor="middle" font-size="12">clip 2</text>
<text class="dim" x="211" y="140" text-anchor="middle" font-size="11">pink</text>

<rect class="box" x="284" y="90" width="118" height="70" rx="8"/>
<text class="mono" x="343" y="122" text-anchor="middle" font-size="12">clip 3</text>
<text class="dim" x="343" y="140" text-anchor="middle" font-size="11">lime</text>

<rect class="box" x="416" y="90" width="118" height="70" rx="8"/>
<text class="mono" x="475" y="122" text-anchor="middle" font-size="12">clip 4</text>
<text class="dim" x="475" y="140" text-anchor="middle" font-size="11">purple</text>

<rect class="box" x="548" y="90" width="118" height="70" rx="8"/>
<text class="mono" x="607" y="122" text-anchor="middle" font-size="12">clip 5</text>
<text class="dim" x="607" y="140" text-anchor="middle" font-size="11">indigo</text>

<rect class="box-b" x="680" y="90" width="140" height="70" rx="8"/>
<text class="mono" x="750" y="122" text-anchor="middle" font-size="12">clip 6 CTA</text>
<text class="dim" x="750" y="140" text-anchor="middle" font-size="11">all colors</text>
seam seam seam seam seam at each seam: last frame of clip N is the exact same image as first frame of clip N+1 reads as one continuous 36 second shot
Figure 3. The seam trick. Because each clip starts on a frame identical to where the last one ended, the six cuts vanish and the film scrubs as a single shot. Prove it by stacking each pair of shared frames side by side.

Join and upscale the film

With the clips chained, join them into one continuous film in order with no fade or blend between them. You can ask for no fade precisely because of the seam work: the end of one clip and the start of the next are the same picture, so there is nothing to smooth over, and a fade would only make it look worse. In the same request, make the film bigger and a little sharper so it fills a 1600 by 900 frame. The cheap video model outputs 720p, which is fairly low resolution, and Flow has no enlarge button unless you are on an Ultra plan, so Claude upscales and sharpens it in one command.

Frames, not video: the scroll engine

Now turn the film into something people scroll through, without shipping a video file. The scroll engine takes no video at all. It only needs numbered still pictures, like a flip book. So cut the film into separate frames, again through Claude, and phrase the request carefully to dodge one error.

The tool that cuts frames is ffmpeg, a free program for working with video. Ask for the frames the obvious way and it does the wrong thing: it hands you one big file instead of hundreds of separate pictures, and the scroll engine cannot use that. So spell it out in the request, write separate numbered pictures, one per file, not a single combined file. That one instruction is the whole fix. Out come frame one, frame two, and on up, one picture per file. On the real template these are saved as webp, a lighter image format. Plain numbered pictures work the same way.

The engine itself is only about 30 lines, and you describe it to Claude rather than writing it by hand. It loads every frame up front. As you scroll it works out how far down the page you are, from zero at the top to one at the bottom, and draws the matching frame onto the canvas, which is just a blank drawing surface stretched across the background. Two touches make it feel premium. First it eases: instead of snapping to the exact frame it drifts toward it, so the film feels smooth and slightly weighted. Second it saves work: the moment you stop scrolling it settles on a frame and stops drawing, so the page goes completely quiet, and it only ever redraws when the frame actually changes. Smooth when you move, nothing when you do not.

SCROLL 0.0 top 1.0 bottom MAP target = round( progress x (TOTAL - 1) ) current += (target - current) x 0.12 ease toward it, then idle when settled CANVAS drawImage( frames[target] ) full viewport, cover fit redraw only on change
Figure 4. The scroll engine in one line of logic. Scroll progress becomes a target frame index, the current frame eases toward it for a weighted feel, the matching still is drawn to a full viewport canvas, and the loop stops the instant the frame stops changing.

The wow layer: headlines, marquee, card tilt

With the background done, add the components that combine with it for the wow effect. They follow one rule: only ever move two things, where something sits and how see through it is (position and opacity). Never move anything that forces the browser to recompute the whole page layout, because that is what makes a page lag. You ask for each effect in plain words to Claude. The three worth the most on the finished page:

All of it is customizable, and the host's reminder is that synchronizing the elements with the background is what makes it feel premium and expensive. Mix and match layouts, components, and effects until it feels unique.

Verify it with one command

Optionally, run a check. The check is a small program that opens your finished page in an invisible browser, one a script controls instead of a person, and loads the page exactly like a real visitor would, then tests it. The free tool underneath is Puppeteer, but you never touch it directly. You describe the checks you want and Claude writes and runs the script, or you just ask Claude to verify the features directly.

It tests eight things in order: nothing on the page crashed; there is no error in the console log; everything the page needed actually loaded; the moving background is really drawing and not frozen; the page is not blank (proven by screenshotting it and confirming the picture is not one flat color); it stays smooth while scrolling (measured as redraws per second, which must stay above 30); it still works shrunk to a phone screen; and the reduced motion version, for people who turn animations off, does not break. Build your own list of whatever matters to you, tell Claude, and it runs them. On the finished page it passes eight of eight, holding around 34 frames a second.

Wrap up

That is the whole build from start to finish: script the experience, generate a free reference image, animate it in Frames mode, chain the clips frame perfect, join and upscale, cut to numbered frames, wire the roughly 30 line scroll engine, layer on transform and opacity effects, and verify with a headless check. The finished result is a single self contained HTML file you can host and sell on Aura.

The reproduction spec: point Claude Code at this to rebuild it

This section is the copy and paste build guide. Point Claude Code at this page and follow it in order to reproduce a scroll scrubbed film site. Plan with Fable 5 if you want, implement with Sonnet 5 or Opus.

Step 1: the director brief (no code until approved)

Give the model a plain English brief in this shape. The rules are: a real brand and real product, real copy not placeholders, a script and storyboard before any HTML, one color and one job per section, and no code until you approve the script.

Act as an art director for a cinematic scroll website.
Brand: Wallow, a bath and body brand. Hero product: a single white bath sphere.
Before writing ANY HTML, write a director script. Generate no code until I approve it.

Rules:
- Real product and real on-screen copy only, no placeholders.
- The background is one continuous 36s film across the whole page.
- Break the film into 6 shots of 6 seconds. For EACH section give me a row of five:
  1) one color   2) one job   3) the film shot + camera angle
  4) the real final on-screen copy   5) one layer effect
- Color journey: orange -> pink -> lime -> purple -> indigo -> a CTA that carries all colors.
- Keep the hero product identical in every shot (same object, same logo).

Output the script as a table I can approve and tweak. Then stop and wait.

Iterate on this text until the experience is right. Text is cheap; video is not.

Step 2: generate the film in Google Flow

  1. Free reference image first. In Google Flow, settings button, Image type, model Nano Banana Pro, 16:9 widescreen, 1 image. The panel confirms 0 credits. Prompt the first shot, for example: an underwater shot of a white bath sphere releasing an orange cloud of dye, with plenty of empty space around the sphere and a completely calm left third with no dye. Two checks before you accept it: keep everything you need away from the frame edges (Flow watermarks a corner and you will crop the edges), and keep the left third clean (the brand name and hero text go there). Reprompt for free until both pass.
  2. Reference set for consistency. Ask for the same product from a few angles so the object, brand, and logo stay identical across every clip.
  3. Animate in Frames mode. Settings button, Video, mode Frames, model Omni Flash, 6s, widescreen, 1 output. Pin the approved image into the Start slot. Confirm the credit line before sending. Add a motion prompt that only describes movement inside the approved scene, for example: the dye keeps blooming, the sphere stays small and high, the left side stays calm, a gentle opening shot. Cost is about 10 credits per 6s clip.
  4. Chain each clip from the previous clip's last frame (Step 3 below). Repeat for all six shots, one color per shot.

Step 3: chain the clips frame perfect (the seam)

For each new clip, pin the previous clip's exact final frame as its Start image, so the cut lands on two identical frames. Extract that frame with ffmpeg (or ask Claude to):

# grab the exact final frame of a clip as a still (0.1s before the end)
ffmpeg -sseof -0.1 -i clip1.mp4 -frames:v 1 -q:v 2 clip1_last.png

# grab the first frame of the next clip and prove the seam is identical
ffmpeg -i clip2.mp4 -frames:v 1 -q:v 2 clip2_first.png
ffmpeg -i clip1_last.png -i clip2_first.png -filter_complex hstack seam_check.png

-sseof -0.1 seeks to a tenth of a second before the end. Upload clip1_last.png into Flow's Start slot for clip 2. The two halves of seam_check.png must be the same picture.

Step 4: join and upscale the film

Join the clips in order with no fade (the seams are already identical, so a crossfade would only smear them), then upscale and lightly sharpen to 1600 by 900:

# concat the six clips with no transition (they share codec/params)
printf "file 'clip1.mp4'\nfile 'clip2.mp4'\nfile 'clip3.mp4'\nfile 'clip4.mp4'\nfile 'clip5.mp4'\nfile 'clip6.mp4'\n" > list.txt
ffmpeg -f concat -safe 0 -i list.txt -c copy film_joined.mp4

# upscale 720p -> 1600x900 and sharpen a touch
ffmpeg -i film_joined.mp4 -vf "scale=1600:900:flags=lanczos,unsharp=5:5:0.6" -c:v libx264 -crf 18 -pix_fmt yuv420p film_1600.mp4

Step 5: cut the film to a numbered frame sequence (and the trap)

This is the ffmpeg gotcha that costs everyone twenty minutes. WebP, GIF, and APNG are animation capable container formats, so if you point ffmpeg at a single .webp output with no numbered pattern, it packs the whole film into one animated file, which the scroll engine cannot use. The fix is the %04d counter in the output name, which switches ffmpeg to the image sequence writer and produces one still per file:

mkdir -p frames
# CORRECT: %04d writes frame_0001.webp, frame_0002.webp, ... one still per file
ffmpeg -i film_1600.mp4 -vsync 0 -q:v 80 "frames/frame_%04d.webp"

# WRONG: no counter -> one animated webp, useless to the scroll engine
# ffmpeg -i film_1600.mp4 frames/film.webp

Count the frames so the engine knows the total: ls frames | wc -l.

Step 6: the scroll engine (about 30 lines, drop in)

A full viewport <canvas> and this vanilla JS. It preloads every numbered frame, maps scroll progress to a frame index, eases the current frame toward the target, draws it cover fit, and stops the loop when idle. No dependencies.

<canvas id="film" style="position:fixed;inset:0;width:100vw;height:100vh;z-index:-1"></canvas>
// Scroll scrubbed film: numbered frames drawn to a full viewport canvas.
const TOTAL  = 216;                                         // frames you cut in Step 5
const src    = i => `frames/frame_${String(i + 1).padStart(4, '0')}.webp`;
const canvas = document.getElementById('film');
const ctx    = canvas.getContext('2d');
const frames = [];
let ready = 0, target = 0, current = 0, running = false;

// 1. Preload every frame up front so scrubbing never waits on the network.
for (let i = 0; i < TOTAL; i++) {
  const img = new Image();
  img.onload = () => { if (++ready === 1) size(); };        // first frame in, paint
  img.src = src(i);
  frames[i] = img;
}

// 2. Map scroll position (0 at top, 1 at bottom) to a target frame index.
addEventListener('scroll', () => {
  const max = document.documentElement.scrollHeight - innerHeight;
  const progress = max > 0 ? scrollY / max : 0;
  target = Math.min(TOTAL - 1, Math.round(progress * (TOTAL - 1)));
  if (!running) { running = true; requestAnimationFrame(tick); }
}, { passive: true });
addEventListener('resize', size);

// 3. Ease toward the target frame, draw it, and stop the loop when settled.
function tick() {
  current += (target - current) * 0.12;                     // weighted drift, not a jump
  draw(Math.round(current));
  if (Math.abs(target - current) > 0.4) requestAnimationFrame(tick);
  else { current = target; draw(target); running = false; } // settle and go quiet
}

function size() { canvas.width = innerWidth; canvas.height = innerHeight; draw(Math.round(current)); }

function draw(i) {                                           // cover fit, centered
  const img = frames[i];
  if (!img || !img.complete || !img.width) return;
  const s = Math.max(canvas.width / img.width, canvas.height / img.height);
  const w = img.width * s, h = img.height * s;
  ctx.drawImage(img, (canvas.width - w) / 2, (canvas.height - h) / 2, w, h);
}

Give the page real scroll height (tall sections stacked over the fixed canvas) so there is room to scrub through all the frames.

Step 7: the wow layer (transform and opacity only)

Every effect moves position and opacity, nothing that triggers layout.

Split letter headline reveal. Wrap each letter in a masked span, stagger it, and reveal on scroll:

<h2 class="reveal">a brighter bath</h2>
.reveal .word { display:inline-block; overflow:hidden; vertical-align:top; }
.reveal .ltr  { display:inline-block; transform:translateY(110%); transition:transform .6s cubic-bezier(.2,.7,.2,1); }
.reveal.in .ltr { transform:translateY(0); }
const io = new IntersectionObserver((es, o) =>
  es.forEach(e => { if (e.isIntersecting) { e.target.classList.add('in'); o.unobserve(e.target); } }),
  { threshold: 0.4 });
document.querySelectorAll('.reveal').forEach(el => {
  el.innerHTML = el.textContent.trim().split(' ').map(word =>
    `<span class="word">${[...word].map(c => `<span class="ltr">${c}</span>`).join('')}</span>`
  ).join(' ');
  el.querySelectorAll('.ltr').forEach((s, i) => s.style.transitionDelay = `${i * 40}ms`); // dealt like cards
  io.observe(el);
});

The double marquee. Two rows, opposite directions, different speeds, one solid and one outline (duplicate the text inside each row so the loop is seamless):

.marquee { display:flex; overflow:hidden; white-space:nowrap; -webkit-mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent); }
.marquee span { padding-right:.3em; will-change:transform; animation:slide 22s linear infinite; }
.marquee.rev span { animation-direction:reverse; animation-duration:28s; }   /* opposite way, different speed */
.marquee.outline span { -webkit-text-stroke:1px currentColor; color:transparent; }
@keyframes slide { to { transform:translateX(-50%); } }                      /* text is duplicated, so -50% loops */

Pointer driven card tilt with a light sweep. Transform only, plus a gradient that follows the pointer:

document.querySelectorAll('.card').forEach(card => {
  card.addEventListener('pointermove', e => {
    const r = card.getBoundingClientRect();
    const px = (e.clientX - r.left) / r.width - 0.5;     // -0.5 .. 0.5
    const py = (e.clientY - r.top) / r.height - 0.5;
    card.style.transform = `perspective(700px) rotateX(${-py * 8}deg) rotateY(${px * 8}deg)`;
    card.style.setProperty('--mx', `${(px + 0.5) * 100}%`);  // drives the shine
  });
  card.addEventListener('pointerleave', () => { card.style.transform = ''; });
});
.card { transition:transform .2s ease; position:relative; }
.card::after { content:""; position:absolute; inset:0; opacity:0; transition:opacity .2s;
  background:radial-gradient(circle at var(--mx,50%) 0%, rgba(255,255,255,.35), transparent 60%); }
.card:hover::after { opacity:1; }                        /* the soft bend of light */

Step 8: verify with one headless command

Ask Claude to write a Puppeteer script (or run the check directly) that opens the page in a headless browser and asserts eight things in order:

node verify.mjs ./index.html

The eight checks: (1) no uncaught crash, (2) no console errors, (3) all requested assets loaded, (4) the canvas is actually drawing, not frozen, (5) a screenshot is not one flat color (page not blank), (6) redraws per second stay above 30 while scrolling, (7) it still works at a phone viewport, (8) the prefers-reduced-motion version does not break. Target: 8 of 8, roughly 34fps. Then ship the single HTML file on Aura.

When Fable 5 vs Opus or Sonnet

Fable 5 costs about two times Opus, so use it as the planner: let it think, research, and write the director script and the build plan. Hand the plan to Sonnet 5 or Opus to implement, since both are strong at execution and Opus quietly downgrades to Opus 4.8 if a classifier trips. The technique is model agnostic. If you already know it cold, run the whole thing on Opus.

Chapters

0:00 It's Not a Video: A Website Built With Fable 5 2:10 The Three Layers 3:02 Composing the Wow Factor 4:40 What Fable 5 Is (and When to Use It) 7:01 Start With a Script, Not Code 8:43 Google Flow and What Video Really Costs 13:29 The Director Prompt: Real Product, One Color Per Section 15:49 Reference Images for Consistency 18:37 Make the First Image Free (and the Two Checks) 21:45 Turn the Image Into a Video (Frames Mode) 24:11 The Seam Trick: Chaining Clips Frame-Perfect 28:14 Join and Upscale the Film 29:34 Frames, Not Video: The Scroll Engine 33:10 The Wow Layer: Headlines, Marquee, Card Tilt 35:09 Verify It With One Command 36:45 Wrap Up

Notable quotes

"It's not a video. It's actually a 36 second film. And you can go preview this template at this link right here." (0:20)

"So everything here fits in three layers. The first one is obviously the film. Then we go into the engine which takes the actual videos and extract the frames from them and then we draw it on the canvas which will be driven by our scroll animation." (2:10)

"So we can think of Fable 5 if you want to do it in an optimal way then you can use it to plan, to think, research and plan everything out. So then you can hand it over to Sonnet or Opus because they are still really good models." (5:30)

"Any cinematic page will start the same way and it's not about the code. So we are starting with a script. We're going to ask it to kind of act like an advertisement agency." (7:01)

"It's cheaper to write text, the script, prompting AI than to come here and test." (9:40)

"So before you write any HTML you ask it to write a director script. This is very important because we don't want the AI to generate any code, no code until it is approved." (13:40)

"Now comes the most important move in this whole method. Making clip two continue perfectly from clip one with no visible jump at the cut." (24:20)

"Clip one ends on this exact frame and clip two now starts on this exact frame. The cut between them lands on two identical images. So there's nothing that's going to jump." (26:40)

"If you ask for the frames in the obvious way it does the wrong thing. It hands you one big file instead of hundreds of separate pictures. So in my request I spell it out. I tell it to write separate numbered pictures, one per file, not a single combined file. That one instruction is the whole fix." (29:50)

"The engine itself is only about 30 lines and you don't have to write them by hand either. You describe it to Claude and it's going to build it for you." (31:10)

"It follows one rule: only ever move two things, where something sits and how see-through it is. Never anything that forces the browser to work out the whole page layout again because that's what makes a page laggy." (33:20)

"So you can see that here it passes all eight of eight. So everything is good. It's holding around 34 frames a second." (36:20)

Resources mentioned

Full transcript
I built this cinematic website entirely with Fable 5. And you can see here the background is one continuous film. It reacts to the scrolling. So we can scroll down and when I scroll back up, it's going in reverse. And there's smooth transitions between each section. So there's no jumping. It's not a video. It's actually a 36 second film. And you can go preview this template at this link right here. In this video, I'm going to show you the technique so you can achieve the same result. Let's get right into it. So let's have a look at the template here. It's Wallow. So this is a bath and body brand. So when I scroll this, you see the animations and all of this and also all the transitions between the sections. So all of this behind is a one continuous 36 seconds film in the background, but it's not a video. I can scroll through it, go backwards like this and it's going to play in reverse. And this is tied to my scrolling here. So you can see that it interacts with the scrolling. And all of this was created in a way that it's seamless in terms of transition. So we're going to learn about that today and also the full workflow on how you can use this to create your own website, your own template and customize it and bring it to your own project, and also the way we are going to think and direct our website, our experience. So you see that at the end here we have this big blast of colors and we have the CTA button here about in the middle. So this is something that you can think of when creating all these films and all the elements of your website so that they are going to work together and create a great experience for your users. So everything here fits in three layers. So let's have a look. The first one is obviously the film. So these are the six actual six videos that are 6 seconds long for a total of 36 seconds. So these are the videos that we need to create first and then we go into the engine here which takes the actual videos and extract the frames from them and then we draw it on the canvas which will be driven by our scroll animation. So then we have our web elements, the components, all the sections, the UI pattern, anything you want, here for example the text, the marquee, some effects, animations and some here the sticky animations if you want. So by combining both the background video with the actual web element then you can create a really amazing experience. So all of this together will create your wow factor. So if we look at the website here, you can see that this subject is on the right. We have the title on top and then the text on the left. And when we scroll down a bit, then the next part here, we have the text on the right and the subject on the other side. So these little effects or attention to the details makes all the difference. And as well as what I mentioned before, coming back down to the CTA section, we have the button here that is in the middle and our background is centered in the middle as well. So it creates this effect that everything is in sync and creates a really great experience for the user. So you really have to think about your background, your images, your videos and then your elements as a whole and not separate. And that depends on the kind of result that you want. So for example, this template, we have a background that is spanning throughout all the website. But sometimes in your product maybe you don't want that to be the case. You don't want the background to be in every section. So then you can work it section by section. But here since we have it all throughout the whole landing page then we work the film and the web element as one and we plan it together. So this was made with Fable 5, right? And now it's back, but it was pulled back by the government before because of the security and the cyber security and the bio. But now it's back and it's absolutely stunning. So for the pricing we have to be careful though because it's really expensive. It's two time the usage of Opus for example, and we have Sonnet 5 that just came out as well which is way less expensive. So I would say use this carefully, use it for example if we go into building something, we can use this as a planner. So before we used to use the plan mode and acting mode for building. Now less and less, but before we used to do that. So we can think of Fable 5 if you want to do it in an optimal way then you can use it to plan, to think, research and plan everything out. So then you can hand it over to Sonnet or Opus because they are still really good models. And Opus is actually really great because if you happen to trigger one of their classifiers then it's going to downgrade to Opus 4.8 automatically anyway. So by having Fable 5 plan out everything then it's just a matter of implementing and Opus is really great at that. So it's important to know that the technique that we are going to learn today is not bound to a certain model version. So it's not bound to only Fable 5. You can use any one that you want and it's going to work very well. But having it been planned before with Fable 5 makes it so much easier. So in terms of planning, you could use Fable 5. If you know the techniques already, then you can obviously use Opus throughout the whole process because you will know what the actual outcome you want. So any cinematic page will start the same way and it's not about the code. So we are starting with a script. So we're going to ask it to kind of act like an advertisement agency. So we are trying to build an experience here. We are going to think about all the interactions that we have before even building the HTML. So you can think of it as like a director that is going to write a script. So we're going to do it like a storyboard for an ad, for example. They're not going to create the ads right away. They're going to draw the storyboard, write the script, think about the transition, and that's exactly what we're going to do. We're going to think about the experience first and then once we have polished everything and have everything ready then we're going to transition into building. So here we have the first one. So the color for this one, we choose one color per section. So we have the orange in the first one and then this color kind of the pink and the lime. So if we look at the website we have this orange in the first place and then again this kind of pink and the lime which is here. So then we have this purple and so on. So we look here, we have the purple. And the last one is the CTA which has all the colors and this is where it's going to blend everything together. Everything comes together. So this is the result that the director like script gave us. So that's where we are going to plan the planning phase for our website because it's important when working with video generation it is very expensive. So here I'm using Google Flow. So this is the project here. Okay. So let's look at the one first that I use. When you create a video, for one video, a six-second video, it's going to cost 10 credit. And if you choose to do two iterations at every step, it's going to be double that. So 20 credits. Now this is the Omni Flash, the cheapest version. They have the best one here which is the quality and this is going to be drastically more pricier. So here for two we have 200 credits going to cost you and for one 100. So if you use this you better be preparing everything because it's cheaper to write text, the script, prompting AI than to come here and test. And with anything related to AI it's not going to be perfect. So you get the result sometimes it's good sometimes not. Most of the time it's not. So you have to test multiple shots. But let's have a look at how much it costs actually for this. So if we're looking here I'm in Canada and for the AI Google plans, here for the pro you have 1,000 credits. So that's 10 videos per month on the best model that they have. And for the cheapest one here it's 200. So it's only two video per month. And if you want to get more credits, more usage out of your plan, then you will need to use a Google AI Ultra plan. So the first one is 10,000 a month. This is the cheapest one at 140 Canadian. And there is another one that is more expensive, it's 200 something and I believe it's 20,000 monthly credit. So this is just a promotional pricing for 3 months. The real price is 27 Canadian which I believe is $20 US. So when you're going to start this, for example here the website that I created, we ended up using six videos. So that's already 600 and if they are all good, right, which will not be the case when you are working with AI, so it's going to be more expensive and you have to factor that in. Every time you create an image or a video then you have to know that it's not going to be good, sometimes it's good the first shot, sometimes not, sometimes going to take more iteration. But what's good about Flow is that they are counting this when you use it for videos. But if you use images, then you use the best model which is the Pro. And if you generate any image, it's not going to cost you anything. It's zero credit. I think you have up to a certain amount of images per month, but you rarely hit that. So this is really great and that's the reason that I'm using this one. You can obviously use other image and video generation. For example, you can use images with ChatGPT or you can use images and videos with Midjourney. So Midjourney is really great. They have really great images, but this is just overall for creating templates, for testing, and especially if you use the cheaper model here, which is the Omni Flash, then it's really good for iterating and testing because that's what you want. And we also have Grok that creates images and video if you guys want to test that as well. But pick your image and video platform and it's a good thing to subscribe to one of their plans because in terms of video you are going to be testing and actually generating a lot. So be mindful of that. And for this one we are using Google Flow to get the result that we want. We actually need to prompt right. So this one is the actual prompt for our scripting website, the website script, the experience script. So we're going to ask it to act as an art director. So before you write any HTML you ask it to write a director script. So this is very important because we don't want the AI to generate any code, no code until it is approved. So you are going to read the output and approve and tweak the script, the experience the way you want. So we also want to have real product and real details, real copy, not just placeholders. So this makes it so that as a preview you can make sure that from the script once we are going to create it we have some kind of a visual reference instead of just placeholders. So the template, the website feels more real, more production ready. And this is like the base for the prompt, the core. So the rest is all about how you want the experience to feel. So for example here we have, for every section we give it a row, name five things. So we have the colors, we give one color per section, one job, the film and camera angle, the camera behind it, and the real final onscreen copy and one layer effect. So the background combined with your HTML is going to create that unique experience. So the other important thing is that we need to have consistency. So for example, we have one product which is the bath bomb, but we need it to be consistent. It cannot change or shift into something different in any of the video because that would be really weird. And as a real product you would have your product, right. So here the web page, we have this product which is the bath bomb and we want the same product with the same logo with the same feature in every video. So we cannot have it different from one video to another one, one image to another. So the way to do this is to create first of all the image and then use it as a reference for the next video or use it as a reference for the next image. So your product or your brand, your logo has to be in the generator's context to be sure that it has everything to create everything consistently. So if you have this then you can give it and ask it to create more images from different angles so that we have references once we are at the video creation part which is really important. And all of this is to create a script, is to have a feeling of the website, to have a unique experience for the user because the better the experience that the user is going to have when visiting your website then the more they're going to remember which in turn is going to convert more. So the experience is really important and that's why in an ad it's always impactful. It's always about emotions and rhythm and stuff like that. So that's what you want to do on your website as well. So this is the part where it's only scripting. So this is where you want to iterate the most. This is where you want to take it to where you feel like it's going to fit perfectly with your product, with your work, with your project. So this is the planning phase. So make sure to get it right because once we get to the video creation then it's going to get really expensive real quick. So all the prompts needed for this demonstration are going to be available in the description so you can follow along and also easily copy it. Now we are using Google Flow for this template demonstration but if you want to use it for production then you would need the Google AI Ultra plan because this gives you the possibility to have up to 4K resolution as well as removing watermarks from your videos. So this is very important. So now we're going to see it live in action how to build this. So obviously it's AI so we are not going to get the same result but the steps are the same. So the first thing we make is a still image and there's a good reason we start with an image instead of a video. So in Flow images are completely free and videos cost credits. So before paying for any video we make a free picture first, then you can judge it and only turn it into a video once you're happy with how it looks. So set that up by clicking the small settings button on the prompt box and the panel opens. So you choose the image as a type with the Nano Banana Pro as the model. So widescreen 16x9 and one image per generation. And if you look at the bottom of the panel, there's literally a text saying that the generation will yield zero credits. So it's free. So now we need to prompt it. So I paste the exact same prompt that made the real film. It describes an underwater shot of a white bath sphere releasing an orange cloud of dye. And they ask for two very specific things. So plenty of space around the sphere and a completely calm left side with no dye. I'll show you why those two things matter in a second. So now we just send it and it's going to start to generate. So the image is done now. So before we use it we have to check if it passed the two checks that we asked. So this is an iteration process example. So if you don't like the first image then you can always reprompt it. So you can look here for this image, you can look at all the margins, all around the image, and the reason is that Flow stamps a small watermark near the corner of every video that it makes. And to deal with this our plan is to crop the edges off later to remove it. So if anything touches the edge of the frame, anything that you want in the video to be visible, then we're going to make sure that it's not going to be cropped out. So depending on your project, then you have to have that in mind. And we also check for the left third of the image. It has to stay clean and calm because that's where the brand name will sit when this becomes a website. So all our left hero element. So if you're not happy with this, then it's very easy. You just have to reprompt it because it's not going to cost you anything. So you paste the same prompt and you just run it again. So now that you have the image that you like, the one that you approve, then we need to turn it into a video. So I click the same settings button on the prompt box. This time we choose video. So inside the video there's two ways of working and I picked the one called frames. So frames is the mode where you can hand Flow a starting image and optionally you can add an ending image but we don't need it in this example, and it animates from your first frame. So that's the mode that this whole method is built on. For the model, we choose Omni Flash. It's the cheapest video model in Flow. And for this technique, it's all we need. So for this one, I chose 6 seconds long, widescreen, and only one video output. So again, if we look at the price line, we can see how many credits it's going to charge because the videos are not free. So make sure that you check that before you send because sometimes you might have clicked or it was on a previous setting that had two videos or three, four videos for each prompt. So that's where you can verify instead of wasting all your credits. So verify that the credit makes sense. And again, we just going to send it. So next we need the starting image. You just have to click the slot that's labeled start and then you have a picker open with the project's images. So our approved one or the one that you like is right at the top because it's the newest in the project. So we choose that one and then we need to add the prompt. So now the video knows exactly what its first frame has to look like. Now for the prompt, it's going to be like a motion prompt. It only tells Flow what should happen inside the scene we already approved. Here it's: the dye keeps blooming, the sphere stays small and high, the left side stays calm, a gentle opening shot. So we just send this and those are the 10 credits that we are going to spend for this generation. So the video is going to take a couple of minutes to render. So we're going to skip the wait. So now here it is the generated dye blooming video. To get the file, open the clip and click the download icon at the top right. It's going to save it to your computer and it goes into our working folder as clip one. So now comes the most important move in this whole method. Making clip two continue perfectly from clip one with no visible jump at the cut. So that's the problem we're solving. An AI video never ends exactly where you expect it to. What we are going to do is to extract the last frame from the first clip and use it as the starting frame for the second clip or the next clip if you have multiple. So to grab it I switch to the terminal where I have Claude Code session open in the same folder as the clip and my request is one simple sentence: take the exact final frame of clip one and give it to me as an image so I can upload it as the start pin of clip two in Flow. So now you can watch Claude Code working and it finds the clip, pulls out the true final frame and even double checks that it's literally frame 144 out of the 144, the actual last frame. So it's not somewhere at the end, it's actually the last last frame of it. You can also do this by hand by using ffmpeg command. You just need to jump to the tenth of a second before the end of the video and save one frame. That's it. But here we're using AI, so you don't need to do anything manually. Now back in Flow, that landed frame is uploaded and it shows up at the top of the image picker as the newest file. I open the start slot again and pin it. And this is the entire trick of the method. So clip one ends on this exact frame and clip two now starts on this exact frame. The cut between them lands on two identical images. So there's nothing that's going to jump. Then the prompt for clip two. It says: the orange dye slowly clears and drifts away, the sphere sinks gently towards the lower left and a new pink magenta cloud starts blooming up. So this clip is the handoff from the orange scene into the pink scene. And now we're going to send it. So we're going to use another 10 credits again. So now we're going to prove that the transition is real instead of just claiming it. So back in the terminal, one more request: take the very first frame of clip two and put it side by side with clip one's last frame in a single image. So what it's going to do, it's going to grab frame one of clip two, then stack the two pictures next to each other. So this is going to give you the option to preview both of the images. So the last frame of clip one and then the first frame of the next clip. In this case, it's the second clip. So those two should be exactly the same. And there it is. We have on the left the frame clip one where it ended and on the right the frame clip two where it starts. Those two are identical. So now the cut will never jump. So it's going to be seamless. So that's everything for this method to stitch all the six movies together, and you can use this method to combine as many videos as you want, whatever is needed for your project. So we have two clips joined together with a cut you can't see. Now we need to turn that into the scrolling. So the thing that people actually scroll through and we don't ship that as a video file. So this technique makes it so that it looks like the Apple style scroll. So for the first step I ask Claude to join the two clips into one continuous film in order with no fade or blend between them. I can ask it for that simply because of what we already did. The end of the first clip and the start of the second are the exact same picture. So there's nothing to smooth over and a fade would only make it look worse. In the same request, I tell it to make the film bigger and a little sharper. So it fills a 1600 by 900 frame. The clips that come out of the cheap video model are at 720p, which is fairly low resolution, and Flow has no button to enlarge them unless you are on an Ultra plan, which has better quality. So Claude does it right here in one command and you can see the exact words I typed on the screen. So this next step is what makes the scroll feel so good. The scroll engine is not going to take any video at all. As I said it only needs numbered still pictures, just like a flip book. So we cut the film into separate frames again. Again we use Claude and the way I ask it is to avoid errors. So the tool that does this is called ffmpeg which is a free program for working with video. If you ask for the frames in the obvious way it does the wrong thing. It hands you one big file instead of hundreds of separate pictures and the scroll engine can't use that. So in my request I spell it out. I tell it to write separate numbered pictures one per file, not a single combined file. That one instruction is the whole fix. And there they are. Frame one, frame two, all the way up, one picture per file. On the real template, these are saved as webp, which is just a lighter kind of image file. Here, they're plain numbered pictures. It's the same idea either way. So the reason we are doing this instead of just taking a normal video and sliding it back and forth is for performance. If you host your website and there's a video, it's really big and it's going to eat up a lot of your bandwidth, which going to cost you a lot of money. So here I compared them side by side. On the left, a video moved back and forth by the scroll, and on the right, our picture frames. So the left one gets stuck. It freezes on a single frame and won't move. To jump a video to any moment, the browser has to skip straight to the spot inside the video file. And that only works if the server it came from is set up to allow those jumps. Off a plain file on your computer or a simple server, it isn't. So the video just locks up. The frames on the right have nothing to jump to and nothing to unpack. So every picture is already loaded, so it moves smoothly. It also works with no internet. It works on phones and the moment you stop scrolling it stops doing any work at all. So a playing video can't do that. The engine itself is only about 30 lines and you don't have to write them by hand either. You describe it to Claude and it's going to build it for you. So let me show you what it does. It loads all the frames up front. Then as you scroll it works out how far down the page you are, so from zero at the top to one at the bottom, and it draws the matching frame onto the canvas. So the canvas is just a blank drawing surface stretched across the background of the page. So there's two things that would make it feel more premium. So first it eases, instead of jumping straight to the exact frame it drifts towards it. So the film feels smooth and a little weighted as you scroll. Second it saves work. So the moment you stop scrolling, it settles on a frame and stops drawing. The page goes completely quiet and it only ever redraws when the frame actually changes. So it feels smooth when you move and it does nothing when you don't. So now once the background animation is done, we come to the components, the elements. So this will combine with the background to make this wow effect. And it follows one rule: only ever move two things, where something sits and how see-through it is. So never anything that forces the browser to work out the whole page layout again because that's what makes a page laggy. So you ask for these the same way you ask it in Claude, just in plain words. So let me show you the ones worth the most here on the finished page. First the headline that appears one letter at a time. So each word is a little box that hides anything poking outside of it. And each letter sits inside that box. As the section scrolls into view, the letter slides up from below the edge, one just after another. So the line gets dealt out like cards instead of appearing all at once. You'll see it three times as we go: on the big Wallow, on "on god", and on the closing run "a brighter bath". Next, behind the product range, two rows of giant words slide across in opposite directions. So one row is filled in solid and the other one just an outline and they move at slightly different speeds. So they never quite line up which keep them feeling more alive and they fade out shortly at the edges. Now, on the product cards, as I move the cursor over one, it leans towards me and a soft bend of light slides across it. It's just a small tilt that follows the pointer. It never touches the page layout, but it makes the card feel like a real object you could pick up. So those are all animation effects and all the structure, the layout that you can always customize for your website. Just have in mind that if you synchronize it with your background, it's going to feel more premium. It's going to feel more expensive. So you can play with all kinds of different layouts and elements and components and all the effects and animations, mix and match and test different ones so that it feels really unique. So now for the last thing, optionally you can run a check. So the check is a small program that opens your finished page in a browser with no window, an invisible browser that a script controls instead of a person. It loads the page exactly like a real visitor's browser would then test it. So the free tool it uses is something that is called Puppeteer but you don't have to touch it directly. You describe the check you want and you make sure that Claude writes the script that's going to run it for you, or you can just ask Claude directly to verify all the features, all the descriptions that you want to be checked. So here it tests eight things in the order that you see them. So nothing on the page crashed. There's no error message in its log. Everything the page needed actually loaded. The moving background is really drawing, not frozen. The page isn't blank, and it proves that by taking a picture of the page and making sure the picture isn't just one flat color. It stays smooth while scrolling, which it measures by the number of times the page redraws each second, and that has to stay above 30. It still works shrunk down to a phone screen. And the reduced motion version of the page, the one for people who turn their animations off, doesn't break. So you make your own. You make sure that you put every kind of feature or steps or verification that you want. Make sure to tell Claude and it's going to run it and verify that your page is actually okay and passing all your internal tests. So you can see that here it passes all eight of eight. So everything is good. It's holding around 34 frames a second. So that's the whole build from start to finish. So if you found anything useful in this video, then make sure to hit the like button and subscribe so that you don't miss the next one. And I will see you in the next one.