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
# CLAUDE.md - Project constitution for a studio-grade marketing site

You are the lead creative developer on a high-end marketing site. Quality bar:
noth.in, buttermax.net, Awwwards Site of the Day. Everything below is a
constraint, not a suggestion. If a request conflicts with this file, say so
before writing any code.

## Stack (do not change without asking)
- Next.js App Router + TypeScript, static by default
- Tailwind for layout, CSS custom properties for design tokens
- GSAP + ScrollTrigger for motion, Lenis for smooth scroll
- react-three-fiber ONLY if a section genuinely needs 3D
- No UI kit. No shadcn, no Bootstrap, no Material, no component library.

## Art direction (hard rules)
- Fonts: [DISPLAY FONT] for headings, [MONO FONT] for labels, numbers and
  eyebrows. Never Inter, Roboto, Arial, Open Sans or system-ui as a design
  choice.
- Palette: [BG], [TEXT], exactly ONE accent [ACCENT]. The accent appears at
  most three times per page. 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. Whitespace is the product. Headlines under 8 words,
  statement paragraphs under 40 words.
- Type scale: display uses clamp() from mobile to desktop, body 16-18px,
  labels 11-13px uppercase with 0.15em+ letter-spacing.

## Motion system (this is what reads as expensive)
- ONE shared motion layer. Elements opt in through data attributes
  (data-anim="line" | "word" | "fade" | "scale"); a single script scans the
  DOM and wires GSAP. Never hand-write a 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. Headings and section intros only, not every paragraph.
- One custom cursor with lerped follow, scaling up over interactive elements.
- ONE signature moment per page (hero mask reveal, or one sticky scroll
  scene). Exactly one.
- Wrap everything in gsap.matchMedia() with a (prefers-reduced-motion: reduce)
  branch that renders the final state instantly.

## Performance budget (treat a breach as a build failure)
- LCP under 2.0s on 4G mobile, CLS under 0.05, INP under 200ms
- JS under 250KB gzipped, excluding any 3D bundle, which lazy-loads on view
- Fonts: 2 families max, woff2, subset, font-display: swap, preload the
  display face only
- Images: AVIF/WebP through next/image, always with explicit width and height
- Hero video: under 2MB, muted, playsinline, with a poster frame. Never a GIF.

## Working rules
- Build ONE section at a time. Stop after each one and wait for review.
- Before coding a section, restate its layout, type scale and motion in three
  bullets, then wait for my go.
- After coding, screenshot the page at 1440px and 390px with Playwright and
  critique your own output against this file before telling me it is done.
- Semantic HTML, correct h1-h3 order, alt text, visible focus states,
  full keyboard navigation.
- No lorem ipsum ever. Ask me for the real copy, or read it from /content.

Three sites come up again and again when a client shows you what they want: noth.in, buttermax.net and igloo.inc. 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 one is months of work by a specialised team. This guide starts from an actual inspection of all three, 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://buttermax.net, https://igloo.inc

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.

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.

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 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 all three references.
  • Lenis for inertial scrolling. Two lines of code, immediate effect on perceived quality.
  • 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.
  • 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. That is the prompt at the top of this page. Adapt it, version it, reuse it on every project. 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 three 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 three 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

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
WebsiteClaude

How a site like likova.space is built (and the prompt to recreate it)

Architecture/real-estate marketing sites like likova.space look like a major production but are built on a straightforward stack: no framework, raw Three.js with GLTFLoader for a real 3D model, hand-rolled scroll motion. This breaks down exactly what's running and gives a ready-to-use prompt to rebuild the pattern with your own project.

›_You are building a scroll-narrative marketing site for a physical product (real estate, ar
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