KOMPOSE.
All resources
WebsiteClaude

Building a 10k website with AI: the full pipeline

The problem it solves

A client shows you igloo.inc and asks for a quote. These sites look impossible to ship solo, yet two of the three run on a very reproducible stack. This guide gives the real teardown of all three, what a 10k budget actually buys, and the full production pipeline with Claude and the external tools around it.

The prompt to copy

Optimized withClaude
# Protocol: build a studio-grade marketing site, step by step

You are my build partner on a high-end marketing site. Quality bar: noth.in,
buttermax.net, Awwwards Site of the Day.

This message is not a request for a site. It is a 9-step working protocol.
You run the steps in order, one per exchange.

## Rules of the game (they override everything else)
- One step per message. You produce the deliverable, you ask whatever you are
  missing, you write "GATE n: waiting for your GO", you stop.
- You never skip a step and you never run ahead. Writing code before step 5
  is a mistake, even when you think you know what to build.
- You guess nothing. No invented brand, number, testimonial or copy. If
  something is missing, you ask for it.
- No lorem ipsum, ever. No real content, no section.
- If one of my requests contradicts this protocol or the constraints at the
  bottom, you say so before writing a single line.

## Step 0: scoping and tier
Ask me every question in one go: the brand and what it sells, the audience,
the budget, the deadline, how many pages, the content and media that already
exist, licensed typefaces or ones to buy, hosting, whether a CMS is needed,
whether 3D is needed.
Then give me a one-page scoping note that places the project on three tiers.
Tier 1: one page or five, a clean motion layer, one strong visual moment,
shippable solo. Tier 2: full CMS, filmed case studies, custom shaders, two
people for two months. Tier 3: 3D art direction, modelling, sound design,
months of team work.
Tell me plainly what the stated budget does not buy.

## Step 1: teardown of the references
I give you 2 or 3 URLs of sites I like. For each one, ask me to run
`curl -sL [URL] -o ref.html`, then to pull the main JS bundle, and read the
files. Never describe a site from memory.
Deliverable: for each reference, the platform and framework, the animation
libraries, the exact typefaces, the real palette in hex, the section-by-
section structure, the animation pattern. Every claim is backed by the line
that proves it. Finish with what is reproducible inside my budget and what
is not.

## Step 2: the project constitution
Write `CLAUDE.md` at the root, from the decisions made in steps 0 and 1:
frozen stack, art direction (two named typefaces, a background, a text
colour, exactly one accent), motion system, performance budget, working
rules. That file becomes the law of the project. You re-read it every session
and you refuse anything that contradicts it. No code until I have approved it.

## Step 3: tokens first, then three primitives
Generate the tokens file: colours, a type scale in `clamp()`, spacing rhythm,
animation durations and easings. Everything else references it. Then exactly
three components: the container, the section heading, the button. Nothing
else until the real content exists.

## Step 4: the page plan, in plain text
Before any JSX, write the full plan. For each section: its job, the real
content I gave you, the type hierarchy and the single motion moment. Three
bullets per section, no more. We fix it here, which costs ten seconds instead
of 400 lines.

## Step 5: one section at a time
For each section, in order: you restate the layout, the type scale and the
motion in three bullets, you wait for my GO, you code it, you stop. The hero
takes a third of the total time. That is correct, the hero is what people
are buying.

## Step 6: a motion layer separate from the markup
One file scans the DOM and animates anything carrying an attribute
(`data-anim="line" | "word" | "fade" | "scale"`). Never a hand-written tween
inside a component. Reveals: opacity 0 to 1 plus y 12-24px, duration 0.6-0.9s,
ease expo.out, stagger 0.04-0.08s, on headings and section intros only. One
signature moment per page. Everything wrapped in `gsap.matchMedia()` with a
`prefers-reduced-motion: reduce` branch that renders the final state instantly.

## Step 7: the visual loop
Open the site with Playwright, screenshot at 1440px then at 390px, look at
both, critique your own render against `CLAUDE.md`: type hierarchy, vertical
density, alignment, contrast, how mobile holds up. Give the five
highest-impact fixes ranked by impact, apply the first three, screenshot
again. Three rounds minimum before you tell me it is done.

## Step 8: assets, SEO, handover
Compress the GLB files (Draco plus KTX2 textures), background video under
2MB with a poster frame, images as AVIF through `next/image` with explicit
dimensions, fonts subset to woff2, two families maximum, only the display
face preloaded. Then title and description per page, Open Graph with a real
image, structured data, sitemap, hreflang if the site is multilingual.
Finish with the list of what is left on the client's side.

## Constraints that apply at every step
- Never Inter, Roboto, Arial, Open Sans or system-ui as a design choice.
- One accent, three appearances per page at most. No gradients unless I ask,
  never purple to blue.
- No card drop shadows, no `rounded-2xl` on everything, no emoji, no icon soup.
- One idea per viewport. Headlines under 8 words, statement paragraphs under 40.
- LCP under 2s on 4G mobile, CLS under 0.05, INP under 200ms, JS under 250KB
  gzipped excluding the 3D bundle, which lazy-loads on view.
- Semantic HTML, correct h1 to h3 order, alt text, visible focus states, full
  keyboard navigation.

Start now with step 0. Do nothing else.

Five sites come up again and again when a client shows you what they want: noth.in, landonorris.com, buttermax.net and igloo.inc and lusion.co. They live in the same mental bucket, the expensive one, while playing in completely different leagues. The first can be reproduced in two weeks. The last two are months of work by a specialised team. This guide starts from an actual inspection of all five, sets what a 10k budget really buys, then walks the full pipeline: tools, commands, prompts, performance budget and how to price it.

https://noth.in, https://landonorris.com, https://buttermax.net, https://igloo.inc, https://lusion.co

What is actually running under the hood

noth.in: Webflow, plus a custom animation layer

data-wf-site attributes, jQuery 3.5.1 and webflow.js served from the Webflow CDN: this is a Designer-built site, not an app. On top of it sits a ~750KB bundle compiled with Vite and hosted on Netlify, shipping GSAP and injecting a runtime stylesheet that sets opacity:0 on anything carrying the [line], [letter], [opacity] or [scale] attributes. One JS file scans the DOM and animates everything marked that way. Keep that pattern: the sophistication lives in a single layer, not in fifty hand-wired animations.

landonorris.com: the noth.in stack, pushed all the way

Same starting point as noth.in: Webflow, data-wf-site, jQuery 3.5.1, markup and CSS served from the Webflow CDN. On top of it, the OFF+BRAND studio dropped a single 1.46MB bundle (405KB gzipped) hosted on its own domain, shipping GSAP, ScrollTrigger, SplitText, Lenis, Three.js with its WebGLRenderer, Draco-compressed models, KTX2 textures and the Rive runtime. Everything is driven from the markup: 31 data-anim, 40 data-anim-high (the variant reserved for machines that can keep up), 16 data-rive-file with their data-rive-state-machine. Two type families only: Brier for display, Mona Sans Variable for text. The budget behind a site like this has nothing to do with tier 1. Its architecture does: it is exactly the pattern from step 4 of this guide, at global-client scale.

buttermax.net: Next.js, headless CMS, custom shaders

Next.js on the pages router, served statically, with data injected into __NEXT_DATA__ by a self-hosted headless CMS (Payload-shaped, media on a Google Cloud Storage bucket named bx-site-cms). Scrolling runs through Lenis. The home chunk carries around twenty shader references: thumbnail transitions are WebGL planes, not CSS transform. Case studies are 3 to 5MB .mp4 files streamed from the bucket, never GIFs. The page JSON alone weighs 346KB, which tells you the important part: the content is structured and editable, not hardcoded.

igloo.inc: not a website, a 3D application

The <body> is empty. One Vite entry module, then a 1.5MB App3D chunk loaded on demand. Inside: Three.js and its WebGLRenderer, GSAP with ScrollTrigger, GLB models compressed with Draco and Meshopt, every texture in KTX2 (a GPU format, not PNG), an EffectComposer with bloom, MSDF-rendered text so typography can animate inside the 3D scene, and four Web Workers dedicated to EXR decoding, bitmaps, fonts and audio. There is embedded sound design. This tier does not come out of a prompt: it is a team, a 3D art director and several months.

lusion.co: a hand-written WebGL engine

A static page generated by Astro, one hoisted module of 1.2MB (315KB gzipped), and everything happens inside it: Three.js on a WebGL2 context, around a hundred ShaderMaterial occurrences, half of them RawShaderMaterial, close to two hundred gl_FragColor, post-processing with bloom, InstancedMesh for the dense scenes. The detail that matters: no GSAP, no ScrollTrigger, no Lenis. The studio wrote its own scroll and animation engine, which only pays off if that engine is reused on every project. Media is almost absent: .webp and a few .mp4, because the image is computed on the GPU instead of streamed. Same tier as igloo: show it as a reference, never promise it for 10k.

The three price tiers

  • Tier 1, 8k to 15k: the noth.in level. One page or five, monochrome, a licensed typeface, a clean motion layer, one strong visual moment. Reproducible solo with AI. This is what the guide targets.
  • Tier 2, 30k to 80k: the buttermax level. Add a full CMS, filmed case studies, custom shaders, a designer and a developer for two months.
  • Tier 3, 150k and up: the igloo or lusion level. 3D art direction, modelling, sound design, GPU optimisation. AI helps with the code, it replaces neither the modeller nor the art director.

Selling a tier 1 while showing a tier 3 reference is how you guarantee a disappointed client. The first conversation exists to place the project on that scale.

What 10k actually buys

A 10k site is roughly eighteen days of work at 550 a day. The honest split:

  • Art direction and references: 2 days
  • Designing the key screens, desktop and mobile: 4 days
  • Build and integration: 5 days
  • Motion layer: 3 days
  • Content, SEO, localisation: 2 days
  • QA, performance, accessibility, launch: 2 days

AI compresses the build, the integration and part of the motion work: five days instead of twelve, comfortably. It compresses nothing on art direction, on getting content out of the client, or on approval rounds. Reinvest the time you save into detail, because detail is exactly what separates a decent site from an expensive one.

Freeze one stack, forever

Margin does not come from being fast on one project, it comes from repetition. One stack, one in-house starter, reused ten times.

  • Next.js (App Router) and TypeScript: static by default, optimised images, one-command Vercel deploys.
  • Tailwind for layout, plus a tokens file (colours, type scale, animation durations). Tokens before components, always.
  • GSAP and ScrollTrigger: free since 2025, SplitText included. It is the motion layer of noth.in, landonorris.com and igloo.inc.
  • Lenis for inertial scrolling. Two lines of code, immediate effect on perceived quality. buttermax and landonorris.com both run on it.
  • React Three Fiber only when 3D is justified. A well-animated site without 3D beats a badly optimised site with it, every time.
  • Sanity or Payload when the client must edit. Otherwise MDX, and do not bill for a CMS nobody will open.

The toolbox beyond AI

  • A licensed typeface (Pangram Pangram, Klim, Displaay, Grilli Type): 50 to 300 per project, the best value in the whole budget. noth.in runs on PP Neue Montreal paired with IBM Plex Mono. A paid grotesk plus a monospace is most of the studio effect on its own.
  • Figma for three or four key screens, not the whole site. The rest gets decided in the browser, which is faster with AI in the loop.
  • Blender and gltf-transform for 3D, or Spline if nobody on the project can model. A GLB always goes through compression before it enters the repo.
  • Rive for interactive vector motion: a few kilobytes, drivable by scroll or hover, infinitely lighter than video. landonorris.com loads sixteen of them, declared straight in the HTML.
  • ffmpeg for background video, Sharp or Squoosh for images.
  • Playwright, locally and through its MCP server: this is what lets Claude see the render instead of guessing it.
  • Midjourney or Flux for textures and mood visuals, Topaz for upscaling, Runway for a short video loop when the client has no usable footage.
  • Vercel and Lighthouse CI for shipping and for catching performance regressions on every commit.

The pipeline with Claude, step by step

Step 0: the constraints file, not the prompt

The leverage is not the opening prompt, it is the CLAUDE.md file at the root of the project. It gets re-read every session and it kills the defaults: Inter, purple gradients, shadowed cards, animation everywhere. The prompt at the top of this page has step 2 produce that file, from the decisions taken just before, then it drives the rest of the pipeline. Half the failed builds fail because this file never existed.

Step 1: art direction before the first line of code

Never ask for “a site in the style of X”. Hand it the actual code of X. Pull the DOM and the scripts, then have it do the teardown:

curl -sL https://reference-site.com -o ref.html

# then, in Claude Code:
"Read ref.html. List: the platform and framework, the animation libraries,
the exact typefaces, the real palette in hex, the section-by-section
structure, and the animation pattern in use. Guess nothing: for each claim,
quote the line that proves it."

The difference is stark. Without the file, Claude describes a generic studio site from memory. With it, you get the real stack, the real font names and the real motion system. The five teardowns at the top of this guide were produced exactly that way. Pull the JS bundle too, that is where Three.js, Draco and KTX2 hide.

Step 2: tokens first, components second

The first thing to generate is a tokens file. Colours (background, text, one accent), a type scale in clamp(), spacing rhythm, animation durations and easings. Everything else references it. Skip this and every section invents its own values, so by the third one the site is a patchwork. Then build three primitives only: the container, the section heading and the button. Nothing else until real content exists.

Step 3: one section at a time

“Build the site” produces plausible mush. One section per exchange, with the real content, and make Claude restate the layout, type scale and motion in three bullets before writing anything. You correct the description, which costs ten seconds, instead of correcting 400 lines of JSX. The hero takes a third of the total time. That is correct: the hero is what people are buying.

Step 4: a motion layer separate from the markup

This is the technical thing all five references share, and the most common mistake when AI improvises. Do not put a useEffect with a tween inside every component. Write one file that scans the DOM and animates anything carrying an attribute:

// motion.ts: written once, for the whole site
gsap.utils.toArray('[data-anim="line"]').forEach((el) => {
  const split = new SplitText(el, { type: 'lines' })
  gsap.from(split.lines, {
    yPercent: 110, opacity: 0,
    duration: 0.9, ease: 'expo.out', stagger: 0.06,
    scrollTrigger: { trigger: el, start: 'top 85%' },
  })
})

The markup only ever carries data-anim="line". Everything is tuned from one place, including the prefers-reduced-motion fallback, which is not optional: without it the site is unusable for part of your visitors and it gets dropped from award selections.

Step 5: the visual loop, the real secret

A model that cannot see its own output is coding blind. Wire the Playwright MCP server (claude mcp add playwright npx @playwright/mcp@latest) and close the loop:

"Open http://localhost:3000 with Playwright, screenshot the page at 1440px
wide, then at 390px. Look at both screenshots and critique your own render
against CLAUDE.md: type hierarchy, vertical density, alignment, contrast,
how mobile holds up. Give the five highest-impact fixes ranked by impact,
then apply the first three."

Three rounds of that loop beat thirty blind prompts. This is where the gap with a generic site opens up: spacing tightens, typography gains hierarchy, mobile stops breaking.

Step 6: assets, where these sites die

A raw Blender GLB weighs 40MB and kills phones. igloo.inc loads far heavier scenes than yours and stays smooth, because everything is compressed before it reaches the browser. Two commands cover 90% of cases:

# 3D: Draco mesh + KTX2 textures (often -95% in weight)
npx @gltf-transform/cli optimize in.glb out.glb --texture-compress ktx2

# background video: under 2MB, muted, with a poster frame
ffmpeg -i source.mov -an -vf "scale=1600:-2" -c:v libx264 -crf 28 
  -movflags +faststart hero.mp4
ffmpeg -i hero.mp4 -vframes 1 -q:v 3 hero-poster.jpg

Images go through next/image as AVIF with explicit dimensions. Fonts get subset to woff2, two families maximum, and only the display face is preloaded.

Step 7: content, SEO and handover

Real content comes before design, never after. Filler text always hides a layout problem. Then: title and description per page, Open Graph with a real image, Organization structured data, sitemap, and hreflang if the site is multilingual. Hand over with a five-minute Loom showing how to edit content, and a monthly retainer offered in the original quote, not six months later.

The performance budget

A slow site does not look expensive, it looks broken. The thresholds to hold:

  • LCP under 2 seconds on 4G mobile, CLS under 0.05, INP under 200ms
  • Under 250KB of gzipped JavaScript, excluding the 3D bundle, which loads when it enters the viewport
  • Final GLB under 3MB, textures in KTX2
  • Hero video under 2MB, with a poster frame
  • Lighthouse mobile at 90 minimum on a page without 3D, 75 minimum on a page with a WebGL scene

The five details that read as expensive

  • Paid typography. A foundry grotesk plus a monospace for numbers and labels. It is the fastest signal there is, and AI will never reach for it on its own.
  • Restraint. One accent, one visual moment, one idea per screen. What you remove matters more than what you add.
  • Motion that responds. A cursor that follows with lag, a reveal triggered by scroll. An animation that loops on its own costs the eye nothing.
  • Content rhythm. Headline under eight words, manifesto paragraph under forty. Expensive sites have little text, placed very well.
  • Transitions. A short loader with a counter, a page-to-page fade, a hover state someone actually thought about. Three details, half a day, and the site changes category.

The mistakes that cost you the project

  • Asking for the whole site in one prompt, then spending three days repairing code you never read.
  • Letting AI pick the fonts and the palette. It will pick Inter and a purple gradient, like thousands of others.
  • Accepting every diff without looking at the render. The code compiles, the page is ugly.
  • Stacking animations. Five simultaneous effects are worth less than one executed properly.
  • Forgetting prefers-reduced-motion and keyboard navigation.
  • Shipping an uncompressed GLB. Gorgeous on your MacBook, unplayable on the client’s phone.

Charging 10k without flinching

The price is not justified by the days spent, it is justified by what the site replaces: an identity that lets them charge more, a funnel that converts, a position competitors do not hold. A readable quote: art direction and mockups, build and motion, content and SEO, launch and training. Two revision rounds included per phase, further rounds billed. What is not included is written plainly: full copywriting, photo shoots, custom 3D scenes. And a monthly retainer from day one, because a living site pays out longer than a delivered one.

AI did not make these sites free. It moved the work: less time on the build, far more on taste, constraints and detail. That is good news, because that part does not copy.

Related resources

All resources
WebsiteClaude

How the Lando Norris, Charles Leclerc and Oscar Piastri sites are built

F1 driver sites (landonorris.com, charlesleclerc.com, oscarpiastri.com) look like an unreachable budget, yet none of the three uses 3D: it is all Lenis, GSAP ScrollTrigger, masked line-by-line text reveals and well encoded full-bleed video. The real blocker is that a single prompt cannot produce this kind of site, because the systems depend on each other (scroll engine before any animation, preloader before the hero, consecutive pins in one sequence). This breaks down what actually runs on all three, then splits the build into 10 steps with a ready-to-paste prompt for each.

›_You are my build partner for a cinematic athlete / driver one-page site in the style of la
Open the sheet
WebsiteClaude

Build an Apple-style product page from A to Z (the code teardown)

Apple product pages look out of reach, yet they rest on five stackable layers that are all reproducible. This resource opens the production JavaScript bundles of iPhone 17 Pro, AirPods Pro and MacBook Pro, shows what each one actually does (hand written GLSL shaders, HLS video scrubbing, a CSS driven keyframe engine), then gives the build order and the full prompt.

›_You are building an Apple-style product page: a long scroll where the visuals are driven b
Open the sheet
WebsiteClaude

Building genuinely high-end scroll animations

Smooth scroll dropped in with three lines gives you a sluggish site that judders on pinned sections and turns annoying on mobile. Studio-grade scrolling is four distinct layers, each tuned separately: inertia, reveal, pinning, scrubbing. This guide covers all four, with the code, the values that actually work, and a teardown of three sites that get them right.

›_# Scroll motion layer: build spec # Portable: save it as CLAUDE.md (Claude Code) or AGENTS
Open the sheet
Take action

Want us to build the site?

These resources set the tone. We can deliver the full site, fast and built to convert.

Book a callAbout us