15 hacks that turn Claude into a design genius.
Copy it. Paste it. Get the result. Every hack comes with the files you need, so you can grab and go.
Set up two tools first.
Hacks 1, 5 and 14 use these. Set them up once, before you start.
The fifteen, at a glance.
Click one to jump to it. Each has a picture, three steps, a prompt, real proof and links.
Grab and go
R: Here is a reference clip I love: [link or file]. Here is my brand: [logo, colours, fonts, screenshots]. I: Make a [15]-second film for [product]. First download the reference and pull one frame every half second. Write style.md: palette, type, shot lengths, transitions, camera moves, grain, and how text enters and leaves. Then write three storyboards in that style. Stop and wait for me to pick one. S: Copy the style of the reference, never its content, logos or characters. Camera: slow every zoom to 0.7x. Hard cut on the beat. Keep my real logo and colours. Render a real MP4 with [HyperFrames or Remotion]. E: Before anything moves, make one still per scene and show me. After you render, check the frames at 0%, 25%, 50%, 75% and 100%. Score the film out of 10 for look, timing and brand. Fix every score under 8, then render again.
Works in Claude Code or the Claude app. Pick a project folder first, so Claude can save style.md.
Preview the file
# style.md: the look of [reference name] Fill this in from the reference clip. Be specific: use numbers, hex codes and real names. ## Palette - Background: # - Main ink: # - Accent 1: # - Accent 2: # - Never use: (colours the clip never shows) ## Type - Display font: - Body font: - Sizes: (title, label) - Weight and case: ## Shots - Number of shots: - Shot length: (shortest to longest, in seconds) - Hold on the last shot: (seconds) ## Transitions - Which ones (hard cut, whip, morph, wipe) and how often: ## Camera - Moves (push in, pull back, pan, parallax) and their speed: ## Texture - Grain, noise, shadow, blur: ## Text - How text enters: - How text leaves: - Words per shot: ## Never - Three looks to avoid (for example: centred text on a purple gradient):
Preview the file
# Camera words Claude understands Say these in your brief. Add a number when you can. - Push in: the camera moves closer. Try "push in 8% over 3 seconds". - Pull back: the camera moves away to show more. - Slow every zoom to 0.7x: all zooms run at 70% of their speed. - Hard cut on the beat: switch shots on a drum hit, with no fade. - Whip pan: a fast sideways blur that hides a cut. - Match cut: the next shot starts with the same shape in the same place. - Rack focus: the sharp part moves from one thing to another. - Parallax: layers move at different speeds, so the scene feels deep. - Hold: stay still on the last frame for 1.5 seconds. - Ease out: start fast, finish slow. It looks natural.
Why it works
Imagine: A sports car stuck in first gear.
What it does
Give Claude a reference, a plan and a camera brief.
Why it matters
One prompt gives the average clip. The workflow gives the pro one.
Do three things
- 1Start from a real reference.
Pick one or two clips. Copy their style, never their content.
- 2Plan before it moves.
Send logo, colours, fonts, screenshots. Ask for three storyboards.
- 3Direct it like a camera crew.
Say "slow every zoom to 0.7x". Then check five frames.
HyperFrames is open source, made by HeyGen. Run these two lines in Claude Code.
claude plugin marketplace add heygen-com/hyperframes claude plugin install hyperframes@hyperframes
Proof
Inspiration
- How to Make Insane Motion Graphics With Opus 5.5Lukas Margerie · 20 min · the long version of this hack
- The post that proved one prompt is not enough@rexan_wong · 17.8K saves
- HyperFramesHeyGen · free, open source · HTML in, MP4 out
- Claude Design: Export to HyperFramesAnthropic help page · the official video path
- whatships.comLaunch videos from X. Pick one as your reference
- motion-video-kitechris6 · a skill with motion rules from 28 launch films
- awesome-opus5-5-videosyihui-dev · 475 videos, each with its prompt or post
- The scene review page ideaBart Slodyczka · the bonus step above
Review page: ask Claude to split the film into scenes with one comment box each. Write all your notes, then send them once.
Grab and go
R: Here is my deck outline: [paste the slide titles]. Here are my brand files: [logo, colours, fonts]. I: Make one HTML deck. Every slide has one idea and one moving graphic. Each graphic loops for 6 to 10 seconds and the last frame matches the first. Before you build, show me three different styles. Wait for me to pick one. S: Five rules. 1) Use the real logo of every tool you name. 2) Make each slide visually engaging: one graphic, no bullet lists. 3) Keep it simple: a headline of 8 words at most and one line of 10 words at most. 4) Use real design sources, such as a design system from a real brand, and name them. 5) Make it gorgeous: real texture, no sparkle icons, no clipped text. E: Draw each loop in code from one render(t) function. Check the frames at 0%, 25%, 50%, 75% and 100% on every slide. Fix what looks off. Then make slide 1 again as 9:16.
Swap the five rules for your own. Keep rule 3. It stops walls of text.
Preview the file
# Deck outline: [topic] One idea per slide. Headline: 8 words at most. The line under it: 10 words at most. | # | Headline | One moving graphic (loops 6 to 10 seconds) | It is like... | |---|---|---|---| | 1 | The hook | | | | 2 | The problem | | | | 3 | The idea | | | | 4 | How it works | | | | 5 | The proof | | | | 6 | The result | | | | 7 | The next step | | | | 8 | The ask | | |
Preview the file
# Five slide rules 1. Use the real logo of every tool you name. 2. Every slide has one idea and one moving graphic. No bullet lists. 3. Headline: 8 words at most. The line under it: 10 words at most. 4. Use real design sources, such as a design system from a real brand, and name them. 5. Make it look finished: real texture, no sparkle icons, no clipped text. Before you build, show me three different styles. Wait for my pick.
Why it works
Imagine: A pop-up book. Each page opens while you talk.
What it does
One idea and one looping graphic per slide.
Why it matters
A still slide shows an idea. A moving slide explains it.
Do three things
- 1Write each slide's point in one line.
One idea per slide. Two lines means two slides.
- 2Ask for three styles first.
Claude shows three looks first. You pick one.
- 3Give every slide a loop.
Six to ten seconds. It ends where it began.
Proof
Inspiration
- deck.galleryReal pitch decks to study before you prompt
- Can Opus 5.5 make a brand presentation like this?@yahyavision · the teal brand deck
- Social posts and animation from one prompt@nazmijavierl · a social set to pair with a deck
- A case study, one shot, in Claude Design@arjmahesh · a 2,000 word write-up becomes a story
Bonus: make slide 1 again as 9:16. It works for Instagram and TikTok.
Grab and go
R: Here is my page: [file or URL]. Here are three motion details I like: [a Kinetics prompt, or a clip from 60fps.design]. I: Add small, premium motion. Only these five. 1) A 4px lift on hover for cards. 2) A soft press (scale 0.97) on buttons. 3) A 40ms stagger when cards enter. 4) Numbers that count up once. 5) A focus ring that eases in. S: Small motions take 150 to 300ms and ease out. A count-up takes under 1 second. No more than three things move at once. Respect prefers-reduced-motion: turn motion off for those users. Never move text while people read it. E: Test at 390px wide, like a phone. Check that nothing janks or shifts the layout. Show me a before and after. Then list every motion you added.
Edit the numbers to taste. Keep the reduced-motion rule.
Preview the file
/* Small premium motion. Paste into your stylesheet.
Only transform and opacity move, so it stays smooth. */
:root {
--ease-out: cubic-bezier(.2, .7, .2, 1);
--t-fast: 180ms;
--t-med: 260ms;
}
/* 1. A lift on hover (give your cards the class "card") */
.card { transition: transform var(--t-med) var(--ease-out), box-shadow var(--t-med) var(--ease-out); }
@media (hover: hover) {
.card:hover { transform: translateY(-4px); box-shadow: 0 14px 30px -12px rgb(0 0 0 / .25); }
}
/* 2. A soft press (give your buttons the class "btn") */
.btn { transition: transform var(--t-fast) var(--ease-out); }
.btn:active { transform: scale(.97); }
/* 3. A stagger when things enter.
Add class "reveal" and style="--i:0", then --i:1, --i:2 ... */
.reveal { opacity: 0; transform: translateY(12px); animation: rise 300ms var(--ease-out) forwards; animation-delay: calc(var(--i, 0) * 40ms); }
@keyframes rise { to { opacity: 1; transform: none; } }
/* 4. A focus ring that eases in */
:focus-visible { outline: 2px solid currentColor; outline-offset: 3px; animation: ring var(--t-fast) var(--ease-out); }
@keyframes ring { from { outline-offset: 0; } }
/* 5. Respect "reduce motion". Never remove this block. */
@media (prefers-reduced-motion: reduce) {
*, *::before, *::after { animation-duration: 1ms !important; animation-delay: 0ms !important; transition-duration: 1ms !important; }
.reveal { opacity: 1; transform: none; }
}
Preview the file
// Count a number up once, when it scrolls into view.
// Use: <span data-count="1280">0</span>
(() => {
const reduce = matchMedia('(prefers-reduced-motion: reduce)').matches;
const ease = t => 1 - Math.pow(1 - t, 3); // ease-out
const run = el => {
const to = +el.dataset.count, ms = 900, start = performance.now();
if (reduce) { el.textContent = to.toLocaleString(); return; }
const tick = now => {
const t = Math.min(1, (now - start) / ms);
el.textContent = Math.round(to * ease(t)).toLocaleString();
if (t < 1) requestAnimationFrame(tick);
};
requestAnimationFrame(tick);
};
const io = new IntersectionObserver(entries => entries.forEach(e => {
if (e.isIntersecting) { run(e.target); io.unobserve(e.target); }
}), { threshold: .4 });
document.querySelectorAll('[data-count]').forEach(el => io.observe(el));
})();
Why it works
Imagine: A watch. Tiny gears make it feel expensive.
What it does
Small touches: hover lifts, soft presses, counting numbers.
Why it matters
Visitors may not name them. They feel them.
Do three things
- 1Collect details, not pages.
Copy one Kinetics prompt. Watch 60fps.design for real apps.
- 2Add three, not thirty.
Hover lift, soft press, counting numbers.
- 3Test on a phone.
Check at 390px wide. Turn on reduce motion.
Proof
Inspiration
- Kinetics153 spring effects, each with a copy-paste prompt
- 60fps.designRecordings of real app animations · free to explore
- Motion PrimitivesFree, open source motion components for React
- transitions.dev43+ UI transitions and a skill that applies them
- LottieFilesSmall ready-made animations · free ones are free to use
Bonus: Lottie files are ready-made small animations. Ask Claude to use one for icons.
Grab and go
R: Here are my brand sources: [brand book PDFs or screenshots, my logo, my live site URL, one reference DESIGN.md I like]. The format is the official DESIGN.md spec from Google Labs: YAML tokens on top, then eight sections in a fixed order.
I: Write ONE file called DESIGN.md for [brand name]. Start with YAML tokens: colors, typography, rounded, spacing, components. Then these sections in this order: Overview, Colors, Typography, Layout, Elevation & Depth, Shapes, Components, Do's and Don'ts. Then add Iconography and Voice. If I gave a live URL, read the real CSS from the page. Copy the structure of any reference file, never its brand.
S: Every colour is a hex code with a job. One accent colour only. Name every font with its weights and a free substitute. Write rules with numbers, not adjectives. Every Don't must come from my sources. Write TODO for anything you cannot find. Never invent a value. Keep it under [250] lines.
E: Check that every {token reference} resolves, that button text passes 4.5:1 contrast, and that the sections are in order. List every TODO. Then build [my sign-up page] using only DESIGN.md. Show me which rule you followed for each choice.In Claude Code, save the file as DESIGN.md in the project root. In Claude Design, add it with your design system assets, then check that Claude follows it.
Preview the file
---
version: alpha
name: Your Brand Name
description: One sentence. Who it is for and how it should feel.
colors:
primary: "#111827" # main ink: headlines and body text. Replace.
secondary: "#6B7280" # muted text and borders. Replace.
tertiary: "#2563EB" # your ONE accent: buttons and links only. Replace.
neutral: "#F9FAFB" # page background. Replace.
surface: "#FFFFFF" # cards and inputs. Replace.
on-tertiary: "#FFFFFF" # text that sits on the accent. Replace.
typography:
headline-lg:
fontFamily: Fraunces # your headline font. Replace.
fontSize: 48px
fontWeight: 600
lineHeight: 1.1
letterSpacing: -0.02em
body-md:
fontFamily: Inter # your body font. Replace.
fontSize: 16px
fontWeight: 400
lineHeight: 1.6
label-md:
fontFamily: Inter
fontSize: 14px
fontWeight: 600
lineHeight: 1
letterSpacing: 0.02em
rounded:
sm: 4px
md: 8px
lg: 16px
full: 9999px
spacing:
sm: 8px
md: 16px
lg: 32px
xl: 64px
components:
page:
backgroundColor: "{colors.neutral}"
textColor: "{colors.primary}"
typography: "{typography.body-md}"
button-primary:
backgroundColor: "{colors.tertiary}"
textColor: "{colors.on-tertiary}"
typography: "{typography.label-md}"
rounded: "{rounded.md}"
padding: 12px
button-primary-hover:
backgroundColor: "{colors.primary}"
textColor: "{colors.on-tertiary}"
card:
backgroundColor: "{colors.surface}"
textColor: "{colors.primary}"
rounded: "{rounded.lg}"
padding: 32px
caption:
backgroundColor: "{colors.neutral}"
textColor: "{colors.secondary}"
typography: "{typography.body-md}"
---
# Your Brand Name
Fill in every line. Use numbers and hex codes, never "nice" or "clean". If a brand book does not say, write TODO. Never guess.
## Overview
[Two or three sentences. Who is it for? Calm or loud? Dense or spacious? Photo, illustration or type-led? Name one real brand it should feel close to.]
## Colors
- **Primary (#111827):** Main ink. Headlines and body text.
- **Secondary (#6B7280):** Muted text, borders, captions.
- **Tertiary (#2563EB):** The only accent. Buttons and links. Nothing else.
- **Neutral (#F9FAFB):** Page background.
- **Surface (#FFFFFF):** Cards and inputs.
[Add the rule for how often the accent appears, for example: once per screen.]
## Typography
Two fonts only. **Fraunces** (600) for headlines. **Inter** (400 and 600) for everything else. Body text is 16px with lines under 75 characters. Both fonts are free for commercial use. Link: [paste your Google Fonts or Fontshare link].
## Layout
[Grid and page width, for example: 12 columns, 1120px maximum.] The spacing scale is 8, 16, 32 and 64px. Keep sections 64px apart.
## Elevation & Depth
[Shadows or flat? For example: no shadows. Depth comes from a 1px border in the secondary colour.]
## Shapes
Corners are 8px on buttons and 16px on cards. Pills (9999px) only for tags.
## Components
- **Buttons:** accent fill, label-md text, 12px padding. The hover state darkens to the primary colour.
- **Cards:** white surface, 16px corners, 32px padding.
- **Inputs:** [border, height, focus ring, error state.]
## Do's and Don'ts
- Do use the accent once per screen, on the main action.
- Do keep text contrast at 4.5:1 or better.
- Don't add a second accent colour.
- Don't use a third font.
- Don't [add one more rule your brand book shows. Copy it from the misuse page.]
## Iconography
One icon set: [Lucide]. 24px, 2px stroke, text colour. No decorative icons. Company logos come from the real mark, never drawn by hand.
## Voice
[Three words for the tone. Two real example lines from the brand. Five words to never use.]
Preview the file
# Brand inspiration list: real brand books, logos and DESIGN.md files Every link was opened on 5 Oct 2026. Brand books belong to their owners. Study the structure. Do not copy a brand you do not own. ## Brand book checklist Open a brand book. Tick each item you can copy into your own DESIGN.md. If the book skips it, write TODO. - [ ] Logo: versions for light and dark, icon-only version, clear space, minimum size. - [ ] Colour: hex codes, the job of each colour, and which one is the only accent. - [ ] Type: font names, weights, sizes, line height, upper or lower case. Add a free substitute if the font is paid. - [ ] Imagery: photo style, crops, illustration rules, icon style. - [ ] Layout: grid, spacing scale, corner radius, shadow or border. - [ ] Voice: three tone words and two real example lines. - [ ] Misuse page: every "do not" the book shows. These become your Don'ts. - [ ] Motion: speed and easing, if the book has a motion page. Score: 6 ticks or more makes a strong source. Fewer than 4, find another book. ## Where to find more brand books - Brand Styleguide Document Showcase (PDF brand books): https://www.brandguidelines.net - Branding style guidelines archive: https://brandingstyleguides.com - Standards Manual (classic manuals as books, such as NASA and NYC Transit): https://standardsmanual.com - Visual Journal (branding and graphic design projects): https://visualjournal.it - Rebrand Gallery (rebrand videos and identities): https://www.rebrand.gallery - Rebrand Gallery, AI brands: https://www.rebrand.gallery/industries/ai - Rebrand Gallery, fintech brands: https://www.rebrand.gallery/industries/fintech - Rebrand Gallery, warm brands: https://www.rebrand.gallery/feels/warm - Brand New (identity reviews by Under Consideration): https://www.underconsideration.com/brandnew/ - Pentagram, all work: https://www.pentagram.com/work ## Real brand books to open today (free, official) - GitHub: https://brand.github.com/ - Netflix: https://brand.netflix.com/ - Dropbox: https://brand.dropbox.com/ - Spotify (design and branding guidelines): https://developer.spotify.com/documentation/design - Linear: https://linear.app/brand - Vercel (Geist brand page): https://vercel.com/geist/brands - Figma: https://www.figma.com/using-the-figma-brand/ - Pinterest: https://business.pinterest.com/brand-guidelines/ - Mozilla: https://brand.mozilla.com/ - Klarna: https://brand.klarna.com/ - Miro: https://brandkit.miro.com/corporate-visual-identity/the-miro-logo - eBay Playbook: https://playbook.ebay.com/ - Herman Miller: https://brandstandards.hermanmiller.com/ - LinkedIn: https://brand.linkedin.com/ - Twitch: https://brand.twitch.com/ - Zoom: https://brand.zoom.com/ - Shopify: https://www.shopify.com/brand-assets - Slack: https://slack.com/media-kit - Mailchimp: https://mailchimp.com/about/brand-assets/ - SeatGeek: https://brand.seatgeek.com/ - Super.com: https://brand.super.com/ ## Design systems that carry brand rules too - IBM Carbon: https://www.carbondesignsystem.com/ - Google Material 3: https://m3.material.io/ - Microsoft Fluent 2: https://fluent2.microsoft.design/ - Apple Human Interface Guidelines: https://developer.apple.com/design/human-interface-guidelines/ ## Individual logos (Logosystem pages, credit the designer) - Calendly, by Smith & Diction: https://logosystem.co/logo/calendly - Deezer, by Koto: https://logosystem.co/logo/deezer-3 - Bolt, by Koto: https://logosystem.co/logo/bolt - Aether Studios, by Drapz: https://logosystem.co/logo/aether-studios - Aqua, by Alex Socoloff: https://logosystem.co/logo/aqua - Dose, by Sungsik Kim: https://logosystem.co/logo/dose - Elwood Bathhouse, by Roy: https://logosystem.co/logo/elwood-bathhouse - More logos: https://logosystem.co - Animated logos: https://logosystem.co/animated - App icons: https://logosystem.co/app-icons ## Brand identities by designers on X (credit the designer) - Drapz, brand guideline design: https://x.com/drapzdesigns/status/2105319736448020602 - Studio Bakers, Void Entertainment: https://x.com/studiobakers/status/2105580980790829386 - Swarnima, Cicely: https://x.com/swarnima_otw/status/2094679145771160055 - Swarnima, Bythlon visual identity guidelines: https://x.com/swarnima_otw/status/2098666300667248954 - Kyle Anthony, Synthetic: https://x.com/kyleanthony/status/2092388760776290527 - Praveen, O3SEC: https://x.com/praveenisomer/status/2098403688926593381 - Sajon, Arcana: https://x.com/sajon_co/status/2101891691896783088 - Penguin, Agentic Fabriq: https://x.com/penguindsgn/status/2104537313560908137 - Ifeoluwa Gideon, okeowo studios: https://x.com/IfeoluwaaGideon/status/2096693743436869682 - 1984 Los Angeles Olympics identity (posted by @luusssso): https://x.com/luusssso/status/2093399264156152284 - SEA Games 2027 concept, by @20_brahms: https://x.com/20_brahms/status/2094320052334211319 ## DESIGN.md files ready to copy - Refero Styles (2,000+ files, beta): https://styles.refero.design - awesome-design-md (MIT): https://github.com/VoltAgent/awesome-design-md - getdesign.md (the site behind those files): https://getdesign.md - Power Design brand library (72 brand-style.md files, MIT): https://github.com/ItsssssJack/power-design/tree/main/brands - awesome-claude-design (68 files, MIT): https://github.com/VoltAgent/awesome-claude-design - A second extractor prompt, by rohitg00: https://github.com/rohitg00/awesome-claude-design/blob/main/prompts/brand-to-design-md.md Refero says its files are not official brand guides, and the awesome-design-md files call themselves inspired readings. Use them as a starting shape. Then replace every value with your own. ## Read first - The official DESIGN.md format, from Google Labs (Apache-2.0): https://github.com/google-labs-code/design.md - Vercel on its own design.md: https://vercel.com/blog/how-our-agents-build-on-brand-pages-with-design-md - Vercel's public file: https://vercel.com/design.md - The Vercel CEO post that started the talk: https://x.com/rauchg/status/2094541309579235680
Why it works
Imagine: A style guide taped above the designer's desk.
What it does
One file holds your colours, type and rules. Claude reads it first.
Why it matters
Claude stops guessing your brand. Every page then looks like you.
Do three things
- 1Collect real brand books.
Save five you love from brandguidelines.net, as PDFs or screenshots.
- 2Turn them into one file.
Claude writes one DESIGN.md from the books and your logo.
- 3Put it where Claude looks.
Save it in the project root. Say: read DESIGN.md first.
Google Labs made the format. The linter flags broken links and low contrast.
npx @google/design.md lint DESIGN.md
Proof
Inspiration
- Refero Styles2,000+ DESIGN.md files from real sites. Not official guides
- awesome-design-mdVoltAgent · 70+ DESIGN.md files · MIT · 119K stars
- Power Design brand libraryJack's own · 72 brand-style.md files · MIT
- DESIGN.md format (Google Labs)The official spec and linter · Apache-2.0
- brandguidelines.netReal brand books as PDFs. Search, then save five
- logosystem.co1,300+ logos by top designers. Filter by style
- Visual JournalCampaign images to feed Claude as references
- Rebrand GalleryReal visual identities to study and feed Claude
- Drapz on X: a brand styleguide showcaseA thread of brand guidelines worth studying
Skip the blank page. Copy a real file from Refero Styles, then swap in your own values.
Grab and go
R: Here is my Claude Design project: [project name]. Here is my brand: [logo files, colours, fonts, live site URL]. I: Write a brand handoff brief for a vector design tool. Return one markdown file with: the brand name and website address; the logo files to upload, and which one is for light and which for dark; every colour as a hex code with its job; the headline font and the body font, each with weights and a free source; the voice in three words plus two example lines; five things the brand never does; the first design to make ([a LinkedIn post]) with its exact headline and body copy; the sizes I need, one per line. S: Use only what exists in my project. If something is missing, write MISSING. Never invent it. Hex codes only. Fonts by exact name. Copy exactly as final text. Keep the brief to one page. E: Check every item against my files and list what is MISSING. Then write one paragraph I can paste as the design prompt.
Bring your brand into Linearity first. Then paste the one-paragraph prompt and check each colour and font it found against the brief.
Preview the file
# Brand handoff checklist: Claude to Linearity Send these items. Tick each one before you start. Linearity can set up your brand from your website address. ## Collect from your Claude project - [ ] Website address: the live site your brand lives on. - [ ] Logo files: SVG if you have it, PNG if not. One for light, one for dark, one icon-only. - [ ] Colours: every hex code and its job. One accent only. - [ ] Fonts: exact names and weights, plus where each one is from and its licence. - [ ] Voice: three tone words and two real example lines. - [ ] Never list: five things the brand never does. - [ ] Final copy: the exact words, headline first. Do not ask the tool to rewrite them. - [ ] The brief: one paragraph. What to make, and where it will be used. - [ ] Sizes: one per line, in the order you need them. - [ ] A reference draft: Claude Design's PDF export. Use it as a picture to compare against. ## Check after the brand loads - [ ] The logo is your real logo, not a redraw. - [ ] Every colour matches your hex codes. - [ ] Both fonts show. If one is missing, fix it now. - [ ] Click the headline and retype it. The text should be live. - [ ] Photos stay as pixels. Text and shapes are the layers you edit. ## For each size - [ ] Ask for one format per run. Do one, review it, then do the next. - [ ] Check margins, safe areas and text size. - [ ] Your original design stays untouched. ## Export SVG, PDF, PNG or JPEG. Open the file and check it before you send it on.
Preview the file
# Your first Linearity run: Claude plans, Linearity builds the layers About 10 minutes. Tick each box as you go. 1. In Claude Design, write your brief and your final copy, for example for a LinkedIn post. Done [ ] 2. In Linearity, set up your brand. Add your website address if it asks for one. Logo [ ] Colours [ ] Fonts [ ] 3. Paste your brief. Ask for ONE format only, for example one LinkedIn post. Right colours? [ ] Right fonts? [ ] Real logo? [ ] 4. Click the headline and retype it. Click a shape and move it. Text editable? [ ] Shapes editable? [ ] 5. Need another size? Click the small Design dropdown, open History, reuse the same prompt and change the format. Or use AI Resize to make one new size. Layout looks right? [ ] Margins safe? [ ] 6. Export an SVG, PDF or PNG. Open it. Looks the same as on screen? [ ] Tip: one format per run gives the cleanest result.
Why it works
Imagine: A photo of a poster versus its layered file.
What it does
Linearity loads your brand, then builds designs with editable layers.
Why it matters
Claude Design exports pages and slides. Brands also need layered files.
Do three things
- 1Plan the idea in Claude.
Write the brief and copy in Claude Design first.
- 2Load your brand into Linearity.
Add your website address. Check the logo, colours and fonts.
- 3Build it as layers.
Paste your brief. Click a word or shape. Edit it.
Ask for one format per run, for example one Instagram post. For another size, click the small Design dropdown, open History, reuse the same prompt and change the format.
On the Enterprise plan, Linearity also connects to Claude over MCP. Claude can then use your Linearity brand kit (logos, colours, fonts and tone of voice), so its designs come out on brand.
Proof
Inspiration
- LinearityBrand setup, editable layers and AI Resize
- Linearity pricingFree plan: one AI brand setup
- Linearity AI Resize guideOne size per run. Your original stays untouched
- Linearity Arrow 2 vector postEach shape is its own layer. Paths stay editable
- Claude Design: export optionsThe official list: zip, PDF, PPTX, HTML, Slides, handoffs
- Linearity on using Claude DesignHow Linearity works with Claude, including MCP
Bonus: AI Resize rebuilds the layout for one new size. Your original stays.
Grab and go
R: Read my brand files in this project (logo, colours, any DESIGN.md) and note any fonts I already use. If there are none, use this mood: [calm fintech, loud sneaker drop]. I: Pick ONE headline font and ONE body font. Load both with real code: a Google Fonts or Fontshare <link> in the <head>. Set them as CSS variables, --font-head and --font-body, and use only those two everywhere. Tell me both names, why they pair, and the exact link you used. S: Free for commercial use only: Google Fonts or Fontshare. Two fonts at most, clearly different (a serif with a plain sans, or a wide display with a quiet sans). Never pick the font you would pick for any project. At most three weights. Body 16 to 18px, lines under 75 characters. If I name a pairing, use it exactly. If the link does not load in the preview, say so. Never swap in a system font without telling me. E: The headline font has real personality. The body font is quiet. Nothing uses a third font. Show me the two CSS variables, then check the fonts still show on a computer that has neither installed.
Tested in a normal browser, not inside Claude Design. If the preview blocks a link, Claude should say so. Then save the pair in DESIGN.md.
Preview the file
R: Read my design. List every place an icon appears (navigation, buttons, feature cards, lists). Mark which ones are logos of real companies. I: Use ONE icon set for every interface icon: Lucide. Load it with <script src="https://unpkg.com/lucide@latest"></script>, write each icon as <i data-lucide="name"></i>, and call lucide.createIcons() once. For company logos use Simple Icons (https://cdn.simpleicons.org/NAME/HEX). For AI companies use Lobe Icons (https://unpkg.com/@lobehub/icons-static-svg@latest/icons/NAME.svg). Then give me a short list of which icon you used where. S: One set, one size (24px), one stroke width (2px). Icons take the text colour. Never draw a logo by hand. If neither source has a logo, write the company name as plain text and tell me. No decorative icons: no sparkles next to headings. Every icon sits next to visible text or has an aria-label. If the preview blocks the script, paste the SVG markup inline instead. Same set, same size. E: At a glance the icons look like one family. The logos are the real marks. If I swapped Lucide for another set, the layout would not move. Show me the list, then fix anything that breaks these rules.
Preview the file
# Type and icons block for DESIGN.md
Two parts go into your DESIGN.md. The third part is for you. Swap the names for yours. Keep the rules.
## Part 1: tokens (top of the file, replace the typography: group)
```yaml
typography:
headline-lg:
fontFamily: Fraunces
fontSize: 48px
fontWeight: 600
lineHeight: 1.1
letterSpacing: -0.02em
body-md:
fontFamily: Inter
fontSize: 16px
fontWeight: 400
lineHeight: 1.6
label-md:
fontFamily: Inter
fontSize: 14px
fontWeight: 600
lineHeight: 1
letterSpacing: 0.02em
```
## Part 2: words (replace the Typography section, then add or replace Iconography)
```md
## Typography
Two fonts only. Both are free for commercial use.
- **Headlines:** Fraunces 600.
- **Body and labels:** Inter 400 and 600.
- Body is 16px with a 1.6 line height. Lines stay under 75 characters.
- Use no more than three weights anywhere.
- Load both with one link: <link href="https://fonts.googleapis.com/css2?family=Fraunces:wght@600&family=Inter:wght@400;600&display=swap" rel="stylesheet">
- Set --font-head (Fraunces) and --font-body (Inter) once. Never write a font name anywhere else.
- If the link does not load in the preview, say so. Never swap in a system font without telling me.
## Iconography
- One icon set: Lucide. 24px, 2px stroke. Icons take the text colour.
- Load it with <script src="https://unpkg.com/lucide@latest"></script>. Write <i data-lucide="rocket"></i>. Call lucide.createIcons() once.
- Company logos: Simple Icons, https://cdn.simpleicons.org/NAME/HEX. For AI companies: Lobe Icons, https://unpkg.com/@lobehub/icons-static-svg@latest/icons/NAME.svg
- Never draw a logo by hand. If neither source has it, write the company name as plain text and tell me.
- No decorative icons. No sparkles. Every icon sits next to visible text or has an aria-label.
- If the preview blocks the script, paste the SVG markup inline. Same set, same size.
```
## Part 3: where each one comes from (for you, not for Claude)
Checked 5 Oct 2026. Read the licence line before you ship.
Fonts
- Google Fonts, https://fonts.google.com . Free for commercial use. Mostly SIL Open Font License. A few use Apache or Ubuntu licences.
- Fontshare, https://www.fontshare.com . Free for personal and commercial use. Licence v2.0 (17 Aug 2026) lets you self-host on your own sites. You may not edit, subset or convert the files. Never hand the files to other people.
- Google Fonts MCP (pairings), https://github.com/sliday/google-fonts-skill . MIT. 73 pairings. Small project (16 stars), so read the code first.
- Fonts In Use, https://fontsinuse.com . Real fonts in real work. Nothing to download. Check each font's licence.
- Typewolf, https://www.typewolf.com/google-fonts . The 40 best free Google Fonts, with real sites using each. Nothing to download.
Icons
- Lucide, https://lucide.dev . ISC licence. About 150 icons from Feather are MIT. Keep the licence notice if you copy the source.
- Phosphor, https://phosphoricons.com . MIT. Six weights, so you change the feel by changing one weight.
- Iconify, https://iconify.design . Search many open icon sets at once. Each set has its own licence. Read it on the set page.
- Simple Icons, https://simpleicons.org . Real brand logos. The collection is CC0. Brands keep their trademarks. It has no OpenAI, LinkedIn, Microsoft or Slack mark today.
- Lobe Icons, https://icons.lobehub.com . Logos for AI companies, including OpenAI and Claude. The package is MIT. The logos stay trademarks of their owners.
Before you ship, pin the Lucide version: https://unpkg.com/lucide@1.52.0
Why it works
Imagine: A uniform. Two fonts and one icon set, worn everywhere.
What it does
Pick two free fonts and one icon set. Claude uses only those.
Why it matters
Left to guess, Claude picks safe defaults. Named choices look designed.
Do three things
- 1Pick two fonts that differ.
Look at Fonts In Use. Note two fonts you love.
- 2Pick one icon set.
Lucide for the interface. Simple Icons for company logos.
- 3Write both in DESIGN.md.
Name both fonts and the icon set. Claude repeats them.
The Google Fonts MCP gives Claude 73 pairings. It needs uv installed.
claude mcp add google-fonts -- uvx google-fonts-mcp
Proof
Inspiration
- Fonts In Use34,722 real font uses. Find a brand like yours
- TypewolfTop 40 Google Fonts, each with real examples
- FontshareFree for commercial use. Self-hosting is allowed
- Google FontsFree for commercial use. Mostly Open Font License
- Pangram PangramNeue Montreal, Editorial New. Free to try, pay to ship
- ABC DinamoPro type studio. Free trial fonts to test
- Grilli TypeGT America and more. Free trial fonts
- DisplaayPro type studio. Free trial fonts
- Lucide1,866 icons on one grid · ISC licence
- Simple IconsReal brand logos as SVG · CC0 collection
- Icons8Icons in many styles, in matching families
- FlaticonIcon families you can match to your brand
Bonus: ask Claude for the closest free match to any paid font.
Grab and go
R: Here is my page: [file or URL]. Here is the gallery pick for the [navbar]: [link or screenshot]. Here is my brand: [DESIGN.md, or logo, colours and fonts]. I: Rebuild only the [navbar] of my page. First study the pick. Write 5 plain lines about it: layout, spacing, type sizes, one motion, one small detail. Then build my version from those lines. S: Copy the pattern, never the pixels, words, logo or images. Use my colours, fonts and words. One main action. Add a comment at the top of the file: Inspired by [gallery name], [pick name]. E: Show the pick and my section side by side at 1440px and 390px wide. List what you kept and what you changed. Fix anything that looks copied or off brand. Then stop and wait for the next section.
Run it once for each section. Keep the credit comment in your code.
Preview the file
# Section shopping list: [page name] One gallery for each section. Fill one row per section. Then run the section remix prompt once for each row. | Section | Gallery | My pick (link or screenshot) | What I like, in one line | What I will change | Credit line | |---|---|---|---|---|---| | Navbar | navbar.gallery | | | | Inspired by navbar.gallery, [pick] | | Hero | landdding.com or scrolltide.co | | | | Inspired by [gallery], [pick] | | CTA | cta.gallery | | | | Inspired by cta.gallery, [pick] | | Footer | footer.design | | | | Inspired by footer.design, [pick] | | 404 | 404s.design | | | | Inspired by 404s.design, [pick] | ## Rules - One pick per section. Two picks make a mess. - Copy the pattern, never the pixels, the words, the logo or the images. - Write the credit line before you build. Keep it as a comment in your code. - Build in this order: navbar, hero, CTA, footer, 404. - Check each section at 390px wide before you start the next. ## After the five - Do the sections still look like one page? If not, fix the colours and fonts first. Then the spacing. - Keep a list of every gallery you used. Credit them in your video notes or your README.
Preview the file
# Gallery map: one gallery for each section Checked on 5 Oct 2026. Every site below loads. Most show screenshots and links, not code. You still write the prompt. | Section | Gallery | What it holds | Cost | |---|---|---|---| | Navbar | https://navbar.gallery | Navbars sorted by type: static, dropdown, mega menu, side bar, search bar, announcement | Free to browse | | Hero | https://landdding.com | Website designs by category (SaaS, Startup, Technology and more) and by platform | Free to browse. A PRO tier exists | | Hero or any section, with a ready prompt | https://scrolltide.co | Website prompts and templates. Copy a prompt, paste it into your AI | Paid. Lifetime access was $299 one-time on 5 Oct 2026. Some templates are free | | CTA | https://cta.gallery | Call-to-action designs: buttons, forms, modals, newsletters, pricing pages | Free to browse | | Footer | https://footer.design | Footers sorted by style: typographic, illustrative, grid, flat, animated, cards | Free to browse | | 404 | https://404s.design | Creative 404 pages, sorted by style and by how they react | Free to browse | | Sign-up form parts | https://component.gallery | Real components from design systems: 60 components, 95 design systems, 2,671 examples | Free | | Launch posts | https://posts.design | Social posts that real brands ship: 680+ brands | Free to browse | | Fresh work | https://recent.design | Recent web design, branding, OG images, app screenshots | Free to browse | | Daily feed | https://inspora.design | A feed that updates hourly: web, branding, product, motion and more | Free to browse | ## Credit - The navbar, footer, CTA and 404 galleries appear on two public lists. Credit both: - @iamtanzil_, 4 Oct 2026: https://x.com/iamtanzil_/status/2106710926145781986 - @viktoroddy, 13 Sep 2026: https://x.com/viktoroddy/status/2099152986102796467 - landdding.com came to us through @VullnetAdemaj, 27 Sep 2026: https://x.com/VullnetAdemaj/status/2104169192438296889 - Credit the gallery and the pick in your own work. A line of text is enough.
Why it works
Imagine: A tailor's swatch book. Pick the cloth, then cut.
What it does
Each gallery covers one section. Pick one and Claude remixes it.
Why it matters
A page is a stack of sections. Each needs its own reference.
Do three things
- 1Name the five sections.
Navbar, hero, CTA, footer, 404. One gallery for each.
- 2Pick one from each.
Save the link or a screenshot. Note what you like.
- 3Remix it and credit it.
Copy the pattern, not the pixels. Use your own brand.
Proof
Inspiration
- The 8-link list we trimmed to four@iamtanzil_ · four of our picks start here
- An earlier post with the same list@viktoroddy · 13 Sep 2026 · credit it too
- navbar.galleryNavbars by type · screenshots, free to browse
- landdding.comReal site designs by category · PRO tier exists
- recent.designWeb, OG images, app screens · free to browse
- ScrolltideCopy-paste section prompts · paid, some free
- jiro.build1,200+ design prompts
- footer.designBetter footers
- cta.galleryCall-to-action inspiration
- 404s.design404 pages worth seeing
- unsection.comReady-made sections
- bentogrids.comBento grid ideas
Bonus: Scrolltide sells ready prompts for sections. Lifetime access is $299.
Grab and go
R: My product is [product]. The flow to fix is [sign-up]. My current flow: [screenshots or URL]. My brand: [DESIGN.md, or colours and fonts]. Connected tool: [Mobbin, Refero or Inspo]. I: Search [Mobbin] for sign-up flows from five apps in [my category]. For each one, write the number of steps, the order of the steps, the fields it asks for, the step where the user first gets value, and one thing it does well. Put it all in flow-teardown.md. Show me and wait. Then rebuild my sign-up in the best order. S: Copy the order and the logic, never the screens, words or logos. Keep my brand. Ask for the fewest fields. One main action on each step. Credit the five apps in a comment. E: Show my flow next to the best reference, step by step. Count my steps and fields before and after. Remove any step the references do not need. Fix it, then show me again.
Mobbin also works inside Claude Design through its connector. Inspo needs no login.
Preview the file
# Flow teardown: [my flow, for example the Glaido sign-up] Fill one block for each reference flow. Use numbers. Write what you see, not what you feel. ## Reference 1: [app name] - Where I found it: [Mobbin, Refero or Inspo link] - Number of steps: - Fields it asks for, in order: - The step where the user first gets value: - Steps a user can skip (social sign-in, "later"): - Where it feels slow or heavy: - One thing to steal: - One thing to never copy: (Copy this block for references 2 to 5.) ## Compare | Flow | Steps | Fields | First value at step | Skippable steps | |---|---|---|---|---| | Reference 1 | | | | | | Reference 2 | | | | | | Reference 3 | | | | | | Reference 4 | | | | | | Reference 5 | | | | | | My flow now | | | | | | My flow next | | | | | ## Decision - Steps in my new flow: - Fields in my new flow: - What I move earlier: - What I remove: - What I keep because it is mine: - Credit: [list the apps]
Preview the file
# Connector setup: Mobbin, Refero and Inspo
Checked on 5 Oct 2026 against each tool's own docs. The install lines are copied from those docs.
## Mobbin (needs a paid Mobbin plan)
- Plans with MCP: Pro, Team and Enterprise. A free account cannot connect. (docs.mobbin.com/mcp/introduction)
- Server address: https://api.mobbin.com/mcp
- Opening that address in a browser returns 401. That is normal. It needs your Mobbin login.
- Best route, in Mobbin's own words: add the Mobbin connector in Claude on desktop or web. Claude Code and Claude Design then share it.
In Claude: Customize, then Connectors, then Add, then Browse connectors, then Mobbin. Click Connect. Sign in.
- Claude Code only:
claude mcp add mobbin --scope user --transport http https://api.mobbin.com/mcp
claude /mcp
In the list, pick mobbin, choose Authenticate, and sign in when the browser opens.
- Tools: search_screens, search_flows, search_sections. Use search_flows for sign-up.
- Image links expire after 30 days. Save the screens you need.
- First test: Search Mobbin for onboarding screens from banking apps
- Optional official skills:
claude plugin marketplace add mobbin/skills
claude plugin install mobbin@mobbin
## Refero (needs a paid Refero plan)
- Plans: Pro, Team or Lifetime.
- Server address: https://api.refero.design/mcp
- Claude Code:
claude mcp add --transport http refero https://api.refero.design/mcp --header "Authorization: Bearer <token>"
If you sign in with OAuth, leave out the --header part and follow the sign-in your client opens.
- It covers sites and apps, styles, screens, flows, images and similar screens.
- Limit: 8,000 MCP tool calls per monthly period for each licensed user.
- Optional skill, in Claude Code:
/plugin marketplace add referodesign/refero_skill
/plugin install refero@refero
## Inspo (free, no login)
- 832 sites and 2,320 screens, with a DESIGN.md for each site.
- One line. It finds Claude Code, Cursor, Codex, VS Code, Windsurf, Zed and Claude Desktop, then writes the config. Add --dry-run to see the plan first.
npx -y inspo-mcp install
- Or point Claude Code at the hosted address yourself:
claude mcp add --transport http inspo https://inspomcp.dev/api/mcp
- Its tools find whole sites and their pages. Check that a sign-up page was captured for each site you use.
## Check it works
- Ask Claude: "List the Mobbin tools you can use." You should see search_screens, search_flows and search_sections.
- If a tool is missing, run claude /mcp and read the status.
Why it works
Imagine: A chef eating at ten restaurants before writing a menu.
What it does
Connect Mobbin or Refero to Claude. It searches real apps for flows.
Why it matters
Claude sees how top apps order steps. It stops guessing your sign-up.
Do three things
- 1Connect one reference tool.
Mobbin or Refero need a paid plan. Inspo is free.
- 2Ask for flows, not screens.
Ask for five sign-up flows. Count the steps in each.
- 3Write a teardown first.
Note steps and fields. Then rebuild it in your brand.
Lines from each official doc. Mobbin and Refero need a paid plan.
# Mobbin (paid plan). Then run claude /mcp, pick mobbin, choose Authenticate. claude mcp add mobbin --scope user --transport http https://api.mobbin.com/mcp # Refero (paid plan). Leave out --header if you sign in with OAuth. claude mcp add --transport http refero https://api.refero.design/mcp --header "Authorization: Bearer <token>" # Inspo (free, no login) npx -y inspo-mcp install
Proof
Inspiration
- Mobbin MCP for Claude CodeOfficial docs · Pro, Team, Enterprise plans
- Refero MCP setupOfficial docs · paid plan needed
- Inspo MCPFree, no login · 832 sites, 2,320 screens
- The post that launched Inspo@nutlope · a free design MCP for coding agents
- A CRM built from real app patterns@adomicael · 57 Mobbin searches, six subagents
- Keel, the CRM it built (live)Live demo by @adomicael · try it
- 21st.devReady-made UI components to grab
Proof: @adomicael's CRM used 57 Mobbin searches.
Grab and go
R: Build [GOAL: what you want, and how long or how big]. My bar: [one real thing that already does this brilliantly, one you can open: a site, a video or a doc]. If I have no bar, propose three, one line each, and take the hardest. If my bar is vague, ask me once for the exact page or file. My files: [design system, brand doc, script or draft]. I: First run a preflight, as a check and not a question. Fetch the bar now. Confirm you can render our output (screenshots for a site, a filmstrip of frames for animation, a PDF render for a doc). Report in one block what works, what is missing, and which critic goes blind. Then read the bar properly and write 5 to 7 checkable mechanisms to bar.md. Mechanisms, not adjectives. Show me the file and wait for my go. S: Split the goal into three or four pieces. For each piece, run a builder, then three critics with fresh context who do not know how the builder worked. Write each critic's brief for this goal. Brief critic: judges my stated goal only and ignores looks. System critic: judges against design-system.md only. If I have none, say so and skip it. Craft critic: judges the render against bar.md only, never the code. It puts ours next to the bar with labels stripped, says which is better, and names the single biggest gap. Use the strongest model you have for this one. A weak one approves everything. E: Critics are harsh. Praise is not useful. Each gives a pass or fail, never a score. All three must pass. Any fail goes back to the builder with the one biggest gap. Repeat each piece until all three pass. There is no fixed round count. I will stop you when I am happy. Keep a live progress page: each piece, each verdict, the gap history and the round count. Show rounds, not a token cost. You cannot see your own spend. Credit: the gauntlet loop is Matt Shumer's. The teardown, the three fixed critic roles and the preflight are added on top.
Run it in Claude Code. Claude Design cannot start fresh critics. Watch the run and stop it when happy.
Preview the file
R: My brand and design system: [DESIGN.md, or logo, colours and fonts]. The page is [a sign-up page for my product]. One page I admire: [link]. I: Build five full, different versions of [the page]. Same brand, same colours, my design system. Totally different layouts. Name each version in three words and say what it gives up. S: Version 1 is the safest. Version 5 is the boldest. No two versions share a hero layout. Keep my real words and logo. One main action per version. E: Show all five side by side at 1440px and 390px wide. Rank them for clarity. Tell me which parts to mix, for example the hero of 2 and the footer of 4. Wait for my pick, then build the mix.
Preview the file
# bar.md: what makes [reference] good Reference: [name and URL, or file] Piece I am building: [what, and how big] Date: ## How to write it Write 5 to 7 mechanisms. A mechanism is a rule a critic can check by looking at a render. - Useless: "Feels premium." - Useful: "The headline is 5x the body size. There are three type sizes in total." Write only what a person can see. Never write about the code. ## Mechanisms 1. Type: [sizes, weights, how many styles] 2. Colour: [how many colours, where the accent goes, how often] 3. Layout: [grid, alignment, what sits where] 4. Space: [how much air, where] 5. Motion: [what moves, how long, which direction] 6. Detail: [one small thing the reference does that most people miss] 7. (Optional) [anything else a critic can check by looking] Examples to copy the style of: - The headline is 5x the body size, with three type sizes in total. - One accent colour, used at most twice per screen. - Motion always resolves in one direction. - Nothing animates for under 400ms. - Whitespace above the fold is at least 40% of the frame. ## Rules for the critics - Be harsh. Praise is not useful. - Judge the render, never the code. - Give a pass or a fail. Never a score. - The craft critic puts ours next to the reference with labels stripped, says which is better, and names the single biggest gap. - All three critics must pass: brief, system and craft. - If a critic cannot see (no design-system.md, no render), say so. Do not carry on quietly. ## Round log | Round | Brief | System | Craft | Biggest gap | |---|---|---|---|---| | 1 | | | | | | 2 | | | | | | 3 | | | | |
Why it works
Imagine: A talent show. Five acts, three judges, one winner.
What it does
Ask for five designs. A loop of three critics then improves one.
Why it matters
Five options show what you like. The loop improves the pick.
Do three things
- 1Ask for five, not one.
Same brand, totally different layouts. Then mix the best parts.
- 2Write the bar first.
Pick one great example. Write five to seven visible checks.
- 3Loop it with three critics.
Three fresh critics judge each round. All three must pass.
/variate is free and MIT licensed. Run this in your project.
npx skills add Nutlope/variate # then ask your agent: /variate four takes on the hero
Proof
Inspiration
- Ask for five sites, then mix them@coreyganim · about 20 minutes of generation time
- variateNutlope · four versions of one file · MIT
- The /variate launch post@nutlope · 20 Aug 2026
- Many redesigns, critiqued and iterated@trq212 · a personal site, redesigned and critiqued
- The Gauntlet LoopMatt Shumer · the method behind the loop
- Claude-of-DutyMatt Shumer · a game the loop built
- 404s.designThe best 404 page designs, for reference
Bonus: @nutlope's /variate flips four real versions of one file with arrow keys.
Grab and go
R: Here is my page: [file, folder or URL]. Here is my checklist: design-checklist.md. Here is my brand file: [DESIGN.md]. I: Audit my page. Start five subagents, one for each job in the checklist. Each agent checks its four rules and reports problems. Agents only read. They never edit a file. Every agent also flags dead buttons, broken links and leftover placeholder text. S: Each agent returns one list. For every problem give the rule number, where it is, how bad it is (high, medium or low) and the fix in one line. Test at 390px and 1280px wide. E: Merge the five lists into one fix list and show it to me. Change nothing until I say go. Then fix everything yourself, so no two agents edit one file. Run the failed checks again. Show before and after screenshots.
Run it in Claude Code with your page open. Agents only read because you tell them to.
Preview the file
# Design checklist: 20 checks in five agent jobs Source: the web rules in Jack's Power Design repo (github.com/ItsssssJack/power-design, principles/web-principles.md). Rule numbers match that file. Each agent owns one job of four checks. Agents read the page and report. They never edit. How to report each problem: the rule number, where it is, how bad it is (high, medium, low) and the fix in one line. ## Agent 1: Layout and phone - [ ] 1. Mobile first. The 360px layout is the base. The page shell is 1200 to 1440px wide at most. Text columns are 75ch at most. - [ ] 2. Breakpoints follow content. Each one exists because the layout breaks there. Test at 320, 768, 1024 and 1440px. No sideways scroll. - [ ] 3. Fluid type and space. Sizes use clamp(). They do not jump at breakpoints. - [ ] 4. Body text is 16px or more. Tap targets are 44 by 44px or more, with 8px between them. ## Agent 2: Type and rhythm - [ ] 7. Scanning. Body text is left-aligned, never justified. A hero reads in a Z, with the main button where the eye ends. Headings start with the key word. - [ ] 8. Line length is 45 to 75 characters. Text blocks use max-width: 65ch. - [ ] 9. Line height is 1.5 or more for body text and 1.0 to 1.2 for big headings. The gap between paragraphs is 0.75em or more. - [ ] 10. One spacing scale and one type scale. Every gap is 4, 8, 12, 16, 24, 32, 48, 64, 96 or 128px. Type sizes come from one ratio. No odd sizes such as 13px or 27px. ## Agent 3: Colour and states - [ ] 11. Contrast. Text is 4.5:1 or more (large text 3:1). Icons, borders and focus rings are 3:1 or more. Colour is never the only signal. - [ ] 12. Colour tokens. Components use names such as --bg, --fg and --accent, defined in OKLCH. No raw hex in components. Dark mode changes the tokens only. - [ ] 13. Five states. Every button, link and input has default, hover, focus-visible, active and disabled. The focus ring is 2px or more and 3:1 or more. - [ ] 14. Empty, loading and error states are designed. Loading shows a skeleton. Empty says what goes here and what to do next. An error sits next to its field and says how to fix it. ## Agent 4: Motion, speed and access - [ ] 15. Motion takes 150 to 300ms and eases out. Reduced motion is respected. Nothing flashes more than 3 times a second. No autoplay that cannot pause. - [ ] 16. Space is reserved. Images and embeds have width and height, or aspect-ratio. Layout shift (CLS) is under 0.1. - [ ] 17. Speed budget on a mid-range phone. LCP under 2.5s, INP under 200ms, CLS under 0.1. Hero image 200KB or less. JavaScript 300KB or less (gzip). Two font families at most. - [ ] 18. Structure. Real header, nav, main and footer. A skip link. One h1. No skipped heading levels. The whole page works with a keyboard only. ## Agent 5: Message and action - [ ] 5. One main action per screen. One filled accent button per screenful, 44px tall or more. Repeat the same button down the page. - [ ] 6. The first screen answers three questions in five seconds: what is this, who is it for, what do I do next. Check at 1366 by 768px and at 390px wide. - [ ] 19. Forms. A visible label on every field, not only a placeholder. The right input type and autocomplete. Check each field on blur. Ask for the fewest fields. - [ ] 20. Share layer. Title 60 characters or fewer. Description 155 or fewer. One 1200 by 630px share image. A favicon set. theme-color. JSON-LD for the main thing on the page. ## Every agent also flags Dead buttons, broken links and leftover placeholder text. (An idea from the @Voxyz_ai post.)
Preview the file
# Fix list: [page name] Page: [file or URL] Date: [date] Checked by: five agents ## Rules for this list - Agents add rows. They never edit the page. - The fixer changes nothing until the owner writes GO below. - One fix per row. Say what to do, not only what is wrong. | # | Agent (1-5) | Rule | Where | Problem | Fix | How bad | Status | |---|---|---|---|---|---|---|---| | 1 | 1 | 4 | Sign-up button, phone | Example: the tap target is 32px tall | Make it 44px tall | High | To do | | 2 | | | | | | | | | 3 | | | | | | | | | 4 | | | | | | | | | 5 | | | | | | | | How bad: High means people cannot finish the task. Medium means it looks or works badly. Low means polish. Status: To do, Fixed, or Skipped (write why). ## Approval GO: [yes or no] Date: ## After the fix - [ ] Every failed check ran again and now passes - [ ] Before and after screenshots saved at 390px and 1280px wide - [ ] Each Skipped row has a reason
Why it works
Imagine: A pre-flight check. Five crew members, four items each.
What it does
Five agents each check four rules. One pass then fixes everything.
Why it matters
Claude forgets small things. Agents catch them before visitors do.
Do three things
- 1Save the checklist once.
Drop it in your project. Five jobs, four checks each.
- 2Send one agent per job.
Each agent reads and lists problems. None of them edit.
- 3Fix once, from one list.
Approve the list, then ask for before and after shots.
Free and open source, by Paul Bakaus. It adds audit and polish commands.
npx impeccable install # then, inside Claude Code: /impeccable init /impeccable audit
Proof
Inspiration
- Five agents, twenty checks, one fix pass@Voxyz_ai · 6.8K saves · the source post
- Power Design: the 20 web rulesJack's repo · the 20 rules the agents check
- ImpeccablePaul Bakaus · free · 61 detector rules
- A skill that un-slops AI apps@tobiadonadon_ · 4K likes · scans and critiques apps
- Power Design field manualJack's 20 slide rules, illustrated
Bonus: ask for before and after screenshots, so you see every fix.
Grab and go
R: Here is my screen: [file, URL or screenshot]. Here is my brand file: [DESIGN.md]. I: Make five versions of [my sign-up step]. The one job of this screen is [to get an email address]. Make each version simpler in a different way. Show all five side by side. Wait for me to pick. S: One main button, 44px tall or more. A visible label on every field. Ask only for what you need today. Plain words. Nothing on screen that does not help the one job. Keep the colours and fonts in my brand file. E: Score each version with the one-screen test: count the fields, buttons, links and words. Rank them from fewest to most. Keep the simplest and tell me what you cut. Then remove one more thing and check that the job still works.
Name the one job first. Then you can compare the five versions fairly.
Preview the file
# The one-screen test Run it on every version. Answer yes or no. Then count the parts. The version with the fewest parts and no "no" wins. Built from Power Design web rules 5, 6 and 19, and the ideas in Steve Krug's book "Don't Make Me Think". No text from the book. ## Ten checks 1. One job. Can you say what this screen is for in ten words or fewer? 2. Five seconds. Show it for five seconds. Can a stranger say what it is, who it is for and what to do next? 3. One main button. Is there exactly one filled, accent-coloured button on the screen, 44px tall or more? 4. Clickable looks clickable. Do buttons and links look pressable? Does plain text look like plain text? 5. Labels. Does every field have a visible label, not only a placeholder? 6. Fewest fields. Does every field earn its place for today's job? Could you ask for it later? 7. Plain words. Does a stranger know every word at once? 8. Nothing extra. Remove one item that does not help the job. Does the job still work? 9. Familiar places. The logo at top left goes home. Menus sit where people expect them. 10. Phone. At 390px wide, can you finish with one thumb and no sideways scroll? ## Count the parts | Version | Fields | Buttons | Links | Words | Checks passed (of 10) | |---|---|---|---|---|---| | A | | | | | | | B | | | | | | | C | | | | | | | D | | | | | | | E | | | | | | Keep the winner. Then try to remove one more thing.
Preview the file
Here is my form: [paste the HTML, a URL or a screenshot]. Its one job is: [for example, get an email address to start a trial]. Make it as short as it can be and still do that job. 1. List every field. For each one, say if we need it today (yes or no) and why. 2. Remove every field we do not need today. We can ask for it later. 3. Use one column. Give every field a visible label, the right input type and an autocomplete value. 4. Use one main button. Its label starts with a verb and names the result, such as "Start free trial", not "Submit". 5. Show each error next to its field. Say what went wrong and how to fix it. Never clear what the person typed. 6. Mark optional fields "(optional)". If the form has steps, show "Step 2 of 3". Show a before and after, the fields you removed, and a count: fields before, fields after. Then run the one-screen test (one-screen-test.md) on the result and show me the score.
Why it works
Imagine: A road sign. You read it at speed, without slowing.
What it does
Claude builds five versions of one screen. You keep the simplest one.
Why it matters
People take the first thing that works. Make that thing obvious.
Do three things
- 1Ask for five versions.
Same screen, five layouts. Name the screen's one job.
- 2Count what is on screen.
Use the one-screen test. Count fields, buttons and words.
- 3Keep the simplest one.
Pick the lowest count. Then remove one more thing.
Proof
Inspiration
- Don't Make Me Think, RevisitedSteve Krug · the book behind this hack
- The ONLY Video Of Design Teachings NOT Found On YouTube!Satori Graphics · 131K views · design teachings
- Power Design rule 5: one primary actionJack's repo · rule 5 cites Krug
- cta.galleryReal call-to-action buttons to compare
- component.galleryEvery UI component, from many design systems
Bonus: show the screen for five seconds. Can a friend say what it does?
Grab and go
R: Here is my copy: [paste the page text, email or script]. It will appear on [a sign-up page]. The reader is [who reads it]. Use the Slop Monster skill: [~/.claude/skills/slopmonster]. I: Edit my copy. 1) Run the checker and show me the score out of 5. 2) Rewrite it so the first line answers the reader's first question. 3) Ask a rival model to clean it, then run the checker again. 4) Compare the final copy with my first draft. S: Plain English. Short active sentences. One idea per sentence. Small common words. No em dashes. Keep my facts and my meaning. Never invent a number, a customer, a rating or a quote. Write [needs number] where proof is missing. E: Show me the final copy, the score before and after, and five lines on what changed. Tell me if the rival-model pass did not run. List every claim I must check myself.
The rival-model pass needs a second AI tool, such as Codex. With none, paste the printed prompt into another chat.
Preview the file
# Plain English for Claude: Jack's ELI5 style Based on ASD-STE100 Simplified Technical English, a real writing standard from aerospace. This setup asks Claude to follow its spirit: small words, active voice, one idea per sentence. It does not make the output official STE. ## Set it up once in Claude Code Copy everything in the block below and paste it into Claude Code. It saves the style file and turns it on. Restart Claude Code after. ``` Set my Output Style to the one below. Save it in my global output-styles folder. Name the file after its name field. Then set outputStyle to that name in my global settings file and in my local project settings files. Create the folder or the key if either is missing. Do not break the existing JSON. Then list the files you changed and tell me to restart Claude Code. --- name: ELI5 description: keep it simple pls keep-coding-instructions: true --- It's been a long day and my brain is fried, talk to me like I'm 5. Only report to me in ASD-STE100 Simplified Technical English. That means approved plain words, active voice, and one instruction or idea per sentence. Small words, short sentences, short paragraphs. If you have to use a big word, explain it right after. Only return what's actually necessary. Just tell me what you did, did it work, what do I do now. If I have to decide something: 2 options max, the context I need to pick fast, and which one you'd go with. Keep paths and commands exact. I have no brain cells left for the rest. ``` ## The quick version for any Claude chat ``` Only report to me in ASD-STE100 Simplified Technical English. Plain words, active voice, one idea per sentence. Just tell me what you did, did it work, what do I do now. ``` ## What the real standard says - Owner: ASD, the Aerospace, Security and Defence Industries Association of Europe. Current issue: Issue 9, January 2025. - 53 writing rules and a dictionary of about 900 approved words. - Up to 20 words in a sentence of instructions. Up to 25 in a description. - Up to 6 sentences in a paragraph. - Source: https://www.asd-ste100.org
Preview the file
# AI tells checklist (short)
From the catalogue in Jack's Slop Monster repo (github.com/ItsssssJack/SlopMonster, references/signs-of-ai-writing.md). That catalogue draws on Wikipedia's "Signs of AI writing". People write some of these too. Read each match in context. Do not edit by rote.
## 1. Words: cut them, or swap for a plain word
delve, tapestry, testament to, seamless, robust, navigate the landscape, in today's fast-paced world, it's important to note, unlock, supercharge, elevate, game-changing, harness the power of, dive deep, myriad, plethora, realm, ever-evolving, cutting-edge, transformative, paradigm shift, synergy, holistic, embark.
Check in context: leverage, foster, crucial, pivotal, streamline, empower, showcase, curated, compelling, innovative, comprehensive, journey, solution, effortless, intuitive, world-class, boost.
Fix: a plain word. "Leverage" becomes "use".
## 2. Shapes
- "Not just X, but Y" and "more than just": cut the first half, keep the claim.
- "Whether you're X or Y": name the one reader.
- "That's where X comes in": say what X does.
- "Say goodbye to": name what replaces it.
- "Imagine a": show it instead.
- Stacked hedges such as "may potentially": keep one at most.
- A question that answers itself ("The result? Faster."): write a sentence.
- A closing summary nobody asked for. A bold lead on every bullet.
## 3. Punctuation
- Two or more em dashes in one sentence.
- Four hyphenated compounds in one sentence.
- Many semicolons.
## 4. Rhythm
- A list of exactly three ("faster, smarter, better"). Keep a list only when every item adds something.
## 5. Proof
- Any number, user count, rating or quote you cannot show. Write [needs number] and ask the owner.
## Last check
- Does the first line answer the reader's first question?
- Does every sentence add something?
- Is every claim true, and can you show it?
- Would you say it out loud to a friend?
- Did you keep the writer's meaning?
A score of 5/5 only means no scored pattern matched. It does not prove the copy is clear or true.
Why it works
Imagine: A mechanic's manual. Nobody wants poetry while fixing a plane.
What it does
Slop Monster scores copy out of 5. One style makes Claude plain.
Why it matters
Readers spot machine words fast. Plain words are easier to read.
Do three things
- 1Set plain English once.
Paste the ELI5 block into Claude Code. Then restart it.
- 2Score the draft.
Run Slop Monster. It marks your copy out of 5.
- 3Rewrite, cleanse, score again.
A rival model edits it. Then check the facts.
Free and open source (MIT). It needs only Python 3 and git.
git clone https://github.com/ItsssssJack/SlopMonster ~/.claude/skills/slopmonster python3 ~/.claude/skills/slopmonster/tools/deslop.py --text "It's not just a tool, it's a game-changing journey."
Proof
Inspiration
- SlopMonsterJack's repo · MIT · scores copy out of 5
- Stop Claude Waffling: ELI5 SystemJack's plain English setup, step by step
- ASD-STE100 Simplified Technical EnglishThe real standard · Issue 9, January 2025
- humanizerblader · 54K stars · checks 26 patterns
- no-ai-sloppetergyang · 11.9K stars · 20+ patterns
- Wikipedia: Signs of AI writingThe guide behind Slop Monster and humanizer
Also good: humanizer by blader and no-ai-slop by petergyang.
Grab and go
R: Here is my reference poster: [Savee link or image file]. Here is my brand: [logo, colours, fonts]. Here are my facts: [title, date, place, one line]. I: Make a [A2 portrait] poster for [event or product]. First study the reference. Write poster-notes.md: the grid, the type sizes, the colours with hex codes, how much empty space, and the one unusual move. Then write three layout ideas in that style. Stop and wait for me to pick one. S: Copy the structure and feel of the reference, never its art, words, logos or characters. Use only my facts. Invent no dates, prices or names. Draw it in HTML and CSS at true size in mm, with 3 mm bleed and a 6 mm safe margin. One big thing to look at first. Embed every font. E: Show me a small preview first. Check that all text sits inside the safe margin and the title still reads at 200 px wide. Export a vector PDF at trim plus bleed size, a 300 dpi PNG and a 4:5 social crop. Score the poster out of 10 for match to the reference, hierarchy and print readiness. Fix every score under 8.
Works in Claude Code or Claude Design. Ask your printer for their bleed before you export.
Preview the file
# Poster sizes and bleed checklist Checked 5 Oct 2026. Sources are at the bottom. Ask your printer first. Some want more bleed or a different file type. ## The rule in one line Build the file at trim size plus bleed. Keep every word inside the safe margin. - Trim: the final size after the poster is cut. - Bleed: extra art past the trim, so no white edge shows. Add 0.125 in (3 mm) on all four sides. - Safe margin: keep text and logos at least 0.25 in (6 mm) inside the trim. ## Print sizes, ISO A series, at 300 dpi Pixels = inches x 300. The file size is the trim plus 3 mm on each side. | Size | Trim (mm) | Trim in pixels | File with bleed (mm) | File in pixels | |------|-----------|----------------|----------------------|----------------| | A4 | 210 x 297 | 2480 x 3508 | 216 x 303 | 2551 x 3579 | | A3 | 297 x 420 | 3508 x 4961 | 303 x 426 | 3579 x 5031 | | A2 | 420 x 594 | 4961 x 7016 | 426 x 600 | 5031 x 7087 | | A1 | 594 x 841 | 7016 x 9933 | 600 x 847 | 7087 x 10004 | | A0 | 841 x 1189 | 9933 x 14043 | 847 x 1195 | 10004 x 14114 | ## Print sizes, US, at 300 dpi The file size is the trim plus 0.125 in on each side. | Size | Trim in pixels | File with bleed (in) | File in pixels | |------|----------------|----------------------|----------------| | 11 x 17 in | 3300 x 5100 | 11.25 x 17.25 | 3375 x 5175 | | 18 x 24 in | 5400 x 7200 | 18.25 x 24.25 | 5475 x 7275 | | 24 x 36 in | 7200 x 10800 | 24.25 x 36.25 | 7275 x 10875 | ## Social sizes | Where | Ratio | Size | Note | |-------|-------|------|------| | Instagram feed | 4:5 | 1440 x 1800 px | Meta's size for feed image ads. JPG or PNG. | | Instagram Story | 9:16 | 1440 x 2560 px | Keep the top 14%, the bottom 35% and the sides 6% free of text. | | Pinterest Pin | 2:3 | 1000 x 1500 px | Taller than 2:3 may get cropped. | A print poster is not a social post. Make a separate crop for each place. Do not reuse the print safe margin. ## Before you send it - [ ] The file is trim plus bleed in size. - [ ] Art runs to the edge of the bleed. No white strip. - [ ] All text sits 6 mm (0.25 in) inside the trim. - [ ] Fonts are embedded in the PDF. - [ ] Photos are 300 dpi at the final size. For a large poster, 150 to 250 dpi is fine. - [ ] Colour: printers ask for CMYK. Ask yours to convert, or convert before you send. Expect small shifts. - [ ] File type is PDF. It keeps layout and fonts. - [ ] You looked at a proof, or a small test print. - [ ] Each social crop is made for its own place. ## Sources - ISO 216 A series sizes: https://en.wikipedia.org/wiki/ISO_216 - Bleed, safe margin, dpi, CMYK, file type, US sizes: https://www.vistaprint.com/hub/poster-printing-preparation-guide - Instagram feed: https://www.facebook.com/business/ads-guide/image/instagram-feed - Instagram Story: https://www.facebook.com/business/ads-guide/image/instagram-story - Pinterest: https://help.pinterest.com/en/business/article/pinterest-product-specs
Preview the file
# Poster in code: starter
One HTML file that draws a true-size print poster, with bleed and safe-zone guides. It prints to a one-page vector PDF.
Tested 5 Oct 2026 in Chrome 154: one page, about 426 x 600 mm (A2 with 3 mm bleed), fonts embedded, no raster images.
## 1. The starter prompt
Paste this into Claude Code or Claude Design. Save poster.html (section 2) in the folder first.
```
Make a poster in code. Use poster.html in this folder as the base. Do not change the sheet, bleed or safe-zone setup.
Subject: [what the poster is for].
Facts: [title, date, place, one line]. Use only these facts. Invent nothing else.
Style: [one reference image or link, or three plain words].
Rules: draw in HTML, CSS and inline SVG only. Size everything in mm. Art may run into the bleed. Text stays inside the safe margin. One big thing to look at first. Two typefaces at most.
Show me a small preview first. Then press G to show the guides and check them. Then export the PDF.
```
## 2. poster.html
Open it in a browser. Press G to show the guides: red is the trim line, blue is the safe line. The guides never print.
For another size, change --trim-w, --trim-h and the @page line. The @page line cannot read variables.
```html
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Poster starter</title>
<style>
/* A2 portrait: 420 x 594 mm trim, 3 mm bleed, 6 mm safe margin.
Another size? Change --trim-w, --trim-h, and the @page line (it cannot read variables). */
:root { --trim-w: 420mm; --trim-h: 594mm; --bleed: 3mm; --safe: 6mm; --paper: #f3efe6; --ink: #151515; --accent: #e5532d; }
@page { size: 426mm 600mm; margin: 0; } /* trim + 2 x bleed */
* { box-sizing: border-box; margin: 0; padding: 0; }
html, body { background: #2a2a2c; }
body { font-family: "Helvetica Neue", Arial, sans-serif; color: var(--ink); }
/* The sheet is the full file: trim size plus bleed on every side. */
.sheet { position: relative; overflow: hidden; background: var(--paper);
width: calc(var(--trim-w) + 2 * var(--bleed)); height: calc(var(--trim-h) + 2 * var(--bleed)); }
/* Art goes here. It may run all the way to the edge of the sheet, so it bleeds. */
.art { position: absolute; inset: 0; }
.art .disc { position: absolute; width: 300mm; height: 300mm; border-radius: 50%; background: var(--accent);
right: -60mm; top: 250mm; }
/* Text goes here. It stays inside the safe margin, so nothing is cut at the trim. */
.safe { position: absolute; inset: calc(var(--bleed) + var(--safe)); display: flex; flex-direction: column; }
h1 { font-size: 74mm; line-height: .86; letter-spacing: -.02em; font-weight: 800; }
.line { font-size: 12mm; line-height: 1.15; max-width: 250mm; margin-top: 12mm; }
.facts { margin-top: auto; display: grid; grid-template-columns: repeat(3, 1fr); gap: 8mm; font-size: 6.5mm; line-height: 1.3; border-top: .6mm solid var(--ink); padding-top: 5mm; }
.facts b { display: block; font-size: 4.2mm; letter-spacing: .08em; text-transform: uppercase; opacity: .65; }
/* Guides: add ?guides to the address, or press G. They never print. */
.guides::before, .guides::after { content: ""; position: absolute; pointer-events: none; z-index: 5; }
.guides::before { inset: var(--bleed); outline: .4mm dashed #e11; } /* trim line */
.guides::after { inset: calc(var(--bleed) + var(--safe)); outline: .4mm dashed #19c; } /* safe line */
/* On screen, shrink the sheet to fit the window. */
@media screen { .sheet { zoom: var(--fit, .35); margin: 0 auto; } }
@media print { html, body { background: none; } .guides::before, .guides::after { display: none; } }
</style>
</head>
<body>
<main class="sheet" id="sheet">
<div class="art"><div class="disc"></div></div>
<div class="safe">
<h1>Your<br>title<br>here</h1>
<p class="line">One line that says what this poster is for.</p>
<div class="facts">
<div><b>When</b>[Date and time]</div>
<div><b>Where</b>[Place]</div>
<div><b>More</b>[Web address]</div>
</div>
</div>
</main>
<script>
const sheet = document.getElementById('sheet');
const fit = () => {
// Measure the sheet at full size, then scale it to fit the window. Works for any poster size.
sheet.style.setProperty('--fit', 1);
const r = sheet.getBoundingClientRect();
sheet.style.setProperty('--fit', Math.min(1, (innerWidth - 32) / r.width, (innerHeight - 32) / r.height));
};
addEventListener('resize', fit); fit();
if (location.search.includes('guides')) sheet.classList.add('guides');
addEventListener('keydown', e => { if (e.key.toLowerCase() === 'g') sheet.classList.toggle('guides'); });
</script>
</body>
</html>
```
## 3. Export
Mac, with Chrome installed:
```
"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" --headless=new --no-pdf-header-footer --print-to-pdf=poster.pdf poster.html
```
Optional: a 300 dpi PNG from the PDF. It needs poppler (brew install poppler).
```
pdftoppm -r 300 -png -singlefile poster.pdf poster
```
The PDF page can be about 0.1 mm wider than the sheet. That sliver sits inside the bleed and is cut off.
Send the PDF to the printer. Use the PNG for a preview or a social post. Make the social crop separately: see poster-sizes-and-bleed.md.
Why it works
Imagine: A tailor copies the cut, never the cloth.
What it does
Save one poster you love. Claude breaks it down, then draws yours.
Why it matters
Claude draws better from a real poster than from a vague word.
Do three things
- 1Save one poster you love.
Open Savee. Search poster. Pick one real reference, not ten.
- 2Break it down first.
List its grid, type and colour. Add one twist.
- 3Build it in code.
Real size in HTML. Export a PDF and a PNG.
Search 6M+ references from chat. It needs a paid Savee plan. Run this once in Claude Code.
claude mcp add --transport http --scope user savee https://mcp.savee.com/mcp
Proof
Inspiration
- Savee6M+ references · paid plans add a Claude MCP
- Savee MCPSearch references from Claude. Paid plans only
- Posters drawn in pure code@owl_posting · art made in code, not an image model
- A character builder made in one chat@magnific · a character with sliders, built in one chat
- Poster resolution, bleed and CMYKA printer's own file rules
- Instagram feed image sizesMeta's own spec for 4:5 images
- The 1957 crest film I rebuilt as JR 1992Reference film by dani.martos, saved on Savee
Bonus: ask for a 4:5 social crop of the same poster.
Grab and go
R: Here is a reference site: [URL]. Here is a one-minute screen recording where I scroll it and say out loud what moves: [video file or link]. Here is my brand: [logo, colours, fonts] and my product photos: [files]. I: Build my own one-page site for [product]. First study the recording: pull one frame every half second and read my words. Write motion-notes.md: for each scroll moment, what moves, how fast and what triggers it. Explain the reference back to me. Then make a concept page with the story, colours, fonts and images. Stop and wait. Write no site code until I approve. S: Copy how it moves, never its words, art, logo or code. Build with [Three.js, GSAP and Lenis]. If a generated 3D model looks rough, use scroll-scrubbed video or photos instead. Keep the first view light. Aim for 2.5 seconds or less on a phone. Turn motion off for people who ask for reduced motion. E: When version one is ready, I will send a feedback video. Reply with a plan first. Change nothing until I say go. Test at 390 px wide and on desktop. Score the site out of 10 for motion match, speed and brand. Fix every score under 8, then show me.
The method is @PrajwalTomar_'s. In his run, Claude watched the video through a recorder connector. Without one, Claude can read ffmpeg frames and a transcript.
Preview the file
R: The subject is [what the scene shows, for example a koi pond at dusk]. The mood is [three plain words]. One reference: [a photo or a link]. Use three-starter.html in this folder as the base. I: Build one HTML file with Three.js loaded from a CDN with an import map. Pin the version. The scene fills the window. People can orbit and zoom. One thing in the scene reacts to the cursor. S: Name one choice each for camera, light, material and motion. Use simple shapes. Use instancing for anything that repeats. Cap the pixel ratio at 2. Idle motion is a gentle drift, never a slow zoom. Turn motion off for people who ask for reduced motion. E: Open it in a browser and fix every console error. Test at 390 px wide and at 1440 px wide. Report renderer.info.render.calls and triangles. If they are high, cut shapes until a phone can run it. Show me a screenshot at each width.
Preview the file
<!doctype html>
<html lang="en">
<head>
<!-- Single-file Three.js starter. Open it in a browser. No install.
Three.js 0.186.1 loads from the jsDelivr CDN (checked 5 Oct 2026).
For a real site, download Three.js and serve it from your own host. -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Three.js starter</title>
<link rel="icon" href="data:,">
<style>
html, body { margin: 0; height: 100%; background: #0b0d12; overflow: hidden; }
canvas { display: block; touch-action: none; }
#hint { position: fixed; left: 16px; bottom: 16px; color: #9aa3b2; font: 13px/1.4 system-ui, sans-serif; }
</style>
<script type="importmap">
{
"imports": {
"three": "https://cdn.jsdelivr.net/npm/three@0.186.1/build/three.module.js",
"three/addons/": "https://cdn.jsdelivr.net/npm/three@0.186.1/examples/jsm/"
}
}
</script>
</head>
<body>
<div id="hint">Drag to orbit. Scroll or pinch to zoom.</div>
<script type="module">
import * as THREE from 'three';
import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
const reduceMotion = matchMedia('(prefers-reduced-motion: reduce)').matches;
// Renderer: cap the pixel ratio at 2 so phones stay smooth.
const renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setPixelRatio(Math.min(devicePixelRatio, 2));
renderer.setSize(innerWidth, innerHeight);
document.body.appendChild(renderer.domElement);
const scene = new THREE.Scene();
scene.background = new THREE.Color(0x0b0d12);
scene.fog = new THREE.Fog(0x0b0d12, 8, 20);
const camera = new THREE.PerspectiveCamera(50, innerWidth / innerHeight, 0.1, 100);
camera.position.set(3.2, 2.2, 4.2);
// Light: one soft sky light and one key light.
scene.add(new THREE.HemisphereLight(0xbcd0ff, 0x1a1d26, 1.1));
const key = new THREE.DirectionalLight(0xffffff, 2.2);
key.position.set(3, 5, 2);
scene.add(key);
// The object. Swap this block for your own model or shape.
const knot = new THREE.Mesh(
new THREE.TorusKnotGeometry(0.9, 0.3, 160, 24),
new THREE.MeshStandardMaterial({ color: 0xea580c, roughness: 0.35, metalness: 0.2 })
);
knot.position.y = 1.2;
scene.add(knot);
// A floor, so the scene has a place to sit.
const floor = new THREE.Mesh(
new THREE.CircleGeometry(8, 64),
new THREE.MeshStandardMaterial({ color: 0x1a1d26, roughness: 0.9 })
);
floor.rotation.x = -Math.PI / 2;
scene.add(floor);
// Orbit controls: drag to look around, with a soft stop.
const controls = new OrbitControls(camera, renderer.domElement);
controls.target.set(0, 1.1, 0);
controls.enableDamping = true;
controls.maxPolarAngle = Math.PI / 2 - 0.05; // never go under the floor
controls.minDistance = 2.5;
controls.maxDistance = 9;
let last = 0;
renderer.setAnimationLoop((now) => {
const dt = Math.min((now - last) / 1000, 0.1); // seconds since the last frame
last = now;
if (!reduceMotion) { knot.rotation.y += dt * 0.6; knot.rotation.x += dt * 0.2; }
controls.update();
renderer.render(scene, camera);
});
addEventListener('resize', () => {
camera.aspect = innerWidth / innerHeight;
camera.updateProjectionMatrix();
renderer.setSize(innerWidth, innerHeight);
});
// Performance check: type stats() in the console. Watch draw calls and triangles on your phone.
window.stats = () => ({ calls: renderer.info.render.calls, triangles: renderer.info.render.triangles });
window.__ready = { objects: scene.children.length, three: THREE.REVISION };
</script>
</body>
</html>
Why it works
Imagine: You film the shot. A crew builds the set.
What it does
Record a site you admire. Claude studies it and builds your own.
Why it matters
A link shows layout. A recording shows how the page moves.
Do three things
- 1Record one minute, talking.
Scroll a site you like. Say what moves.
- 2Send one prompt, with approval.
Claude explains the site back. You approve, then it builds.
- 3Fix with a feedback video.
Scroll version one and talk. Ask for a plan first.
Nine skills for Three.js games and scenes. MIT licence. Run this in a terminal.
npx skills add majidmanzarpour/threejs-game-skills --skill '*' -a claude-code -g -y
Proof
Inspiration
- Record a site for a minute, Claude rebuilds it@PrajwalTomar_ · few likes, but a real demo
- The full workflow, with every prompt and cost@PrajwalTomar_ · his article behind the demo
- threejs-game-skillsmajidmanzarpour · MIT · 2,431 stars · built for games
- ThreeUIThree.js components, templates and shaders to start from
- Lofi Cities@SafaElmali · pixel-art cities, music made in the browser
- Koi pond@buildwithsid · water, fish and blossoms to play with
- Yogi Suria on XA 3D website built the same way
- Pulp PressA live scroll-film site
Free route: record with QuickTime. Claude Code can read frames with ffmpeg.
Grab and go
R: My design folder is [path to design-os/]. Read CLAUDE.md first. Then read DESIGN.md, taste/inspo.md, the files in rules/ and memory/corrections.md. I: Build [the page, poster or deck]. Before you draw anything, tell me in six lines what you read and which rules apply. Then ask me for the one reference this piece must beat. Write projects/[name]/brief.md and rules/bar.md. Then build it. S: Obey DESIGN.md over your own taste. Never invent a colour, font, logo or icon. Use only files from assets/. Write the words by rules/words.md. If my request clashes with DESIGN.md, stop and ask. E: Run checks/preship.py and the 20-point list in rules/web-20.md. Show me every fail first. Fix them and run again until all pass. Then add each correction I give you to memory/corrections.md as one rule.
Works in Claude Code. Point it at your own folder. Keep CLAUDE.md short, so Claude reads all of it.
Preview the file
# The design folder: scaffold
A folder of design files that Claude reads at the start of every project. Copy the pattern. Fill it with your own taste.
Start small. DESIGN.md and taste/inspo.md already beat a blank chat. Add the rest one file at a time.
## 1. The tree
```
design-os/
CLAUDE.md What to read first, in order. Keep it short.
DESIGN.md Your brand: colour, type, space, shape, motion, voice, bans.
taste/
inspo.md Links to pieces you admire. One line each: what to steal.
references/ Screenshots of the real pieces you copy from.
rules/
web-20.md The pre-ship 20-point checklist (preship-20.md).
words.md Plain English rules and banned phrases.
bar.md Checkable traits of the reference you must beat.
assets/ Logos, one icon pack, fonts. Real files only.
skills/ One folder per winning style: SKILL.md, a short PROMPT.md, a check.
checks/
preship.py Runs the static checks on any HTML file.
memory/
corrections.md Every fix you ask for, written as a rule.
projects/
[your-project]/ brief.md, drafts, final. One folder per piece.
```
## 2. Make it
Run this once, in your project folder:
```
mkdir -p design-os/{taste/references,rules,assets,skills,checks,memory,projects}
touch design-os/{CLAUDE.md,DESIGN.md} design-os/taste/inspo.md design-os/rules/{web-20.md,words.md,bar.md} design-os/memory/corrections.md
```
Copy preship-20.md into rules/web-20.md. Save the script in section 3 as checks/preship.py.
## 3. The starter files
### CLAUDE.md
```
# Read this first
Before any design work, read these files in this order.
1. DESIGN.md. It is the brand. It wins over your own taste.
2. taste/inspo.md and taste/references/. This is the taste to match.
3. rules/web-20.md, rules/words.md and rules/bar.md.
4. memory/corrections.md. These are past mistakes. Do not repeat them.
Then work like this.
- Say in six lines what you read and which rules apply.
- Never invent a colour, font, logo or icon. Use DESIGN.md and assets/ only.
- If my request clashes with DESIGN.md, stop and ask.
- Before you say done, run checks/preship.py and the 20-point list.
- When I correct you, add the fix to memory/corrections.md as one rule.
```
### DESIGN.md
```
# DESIGN.md: [brand name]
Fill every line. Use numbers and hex codes, not adjectives.
## One line
[What the brand is, and how it should feel, in one sentence.]
## Colour
- Background: #
- Text: #
- Muted text: #
- Accent (one only): #
- Border: #
- Never use: [colours the brand never shows]
## Type
- Font: [name and source link]
- Sizes: H1 [px], H2 [px], body [px]
- Weight and case:
## Space and shape
- Spacing unit: [4 or 8] px
- Corner radius: [px]
- Shadows: [none, or the one allowed]
## Buttons
- Primary: [fill, text colour, radius, one example label]
- Secondary: [style]
## Motion
- Speed: [ms] and easing: [ease-out]
- What may move: [list]
- Never: [list]
## Voice
- Plain English. Short sentences.
- Words to use: [list]
- Words never to use: [list]
## Bans (add one every time the output drifts)
1.
2.
3.
```
### taste/inspo.md
```
# inspo.md: taste, as links
One line each: the link, then what to steal. Steal the structure, never the content.
Last checked: [date]
## Websites
- [link]: [what to steal, for example the empty-state layout]
## Posters and print
- [Savee board link]: [what to steal]
## Flows (sign-up, checkout)
- [Mobbin or Refero link]: [what to steal]
## Motion
- [link]: [what to steal]
## Do not resemble
- [pieces you like but must not copy]
```
### rules/bar.md
```
# bar.md: what the reference does well
Read the reference. Write 5 to 7 traits you can check. A trait is a fact, not an adjective.
Good: the headline is 5 times the body size. Bad: it feels premium.
Reference: [link or file]
1. [trait]
2. [trait]
3. [trait]
4. [trait]
5. [trait]
After each draft, score every trait pass or fail. Our piece must pass them all.
```
### rules/words.md
```
# words.md: plain English
- Short, active sentences. One idea each.
- Small, common words. Say "use", not "utilise".
- No em dashes. No emoji.
- Use numbers and names, not adjectives.
- Banned words: seamless, unlock, elevate, effortless, cutting-edge, journey, game-changer.
- Banned shape: "not just X, but Y".
- Before you ship, run the copy through SlopMonster until it scores 5 of 5.
```
### memory/corrections.md
```
# corrections.md
One rule per fix. Add the date. Claude reads this before every project.
- Example: No sparkle or star icons. Use the icon pack in assets/.
```
### projects/[your-project]/brief.md
```
# Brief: [name]
Goal: [one sentence]
Who opens it, and on what device: [person, phone or laptop]
The one action they take next: [action]
Reference to beat: [link]
Facts allowed on the page: [list. Nothing else.]
Done when: all 20 points in rules/web-20.md pass.
```
### checks/preship.py
```python
#!/usr/bin/env python3
"""preship.py: static checks for one HTML file. Python 3 only, no installs.
Run: python3 checks/preship.py path/to/page.html
It checks what a script can see (checklist points 3, 16, 18, 19 and 20, in part).
It cannot judge taste, contrast or speed. Do those by eye and with Lighthouse."""
import re, sys
from html.parser import HTMLParser
class P(HTMLParser):
def __init__(s):
super().__init__(); s.tags = []; s.title = ''; s.in_title = False
s.meta = {}; s.labels_for = set(); s.inputs = []; s.imgs = []; s.links = []
def handle_starttag(s, tag, a):
a = dict(a); s.tags.append(tag)
if tag == 'title': s.in_title = True
if tag == 'meta':
k = a.get('name') or a.get('property')
if k: s.meta[k.lower()] = a.get('content', '')
if tag == 'label' and a.get('for'): s.labels_for.add(a['for'])
if tag == 'input' and a.get('type', 'text') not in ('hidden', 'submit', 'button', 'checkbox', 'radio'):
s.inputs.append(a)
if tag == 'img': s.imgs.append(a)
if tag == 'link': s.links.append(a)
if tag == 'html': s.meta['_lang'] = a.get('lang', '')
def handle_endtag(s, tag):
if tag == 'title': s.in_title = False
def handle_data(s, d):
if s.in_title: s.title += d
def run(path):
h = open(path, encoding='utf-8', errors='ignore').read()
p = P(); p.feed(h); t = p.tags; m = p.meta
labelled = [i for i in p.inputs if i.get('id') in p.labels_for or i.get('aria-label') or i.get('aria-labelledby')]
viewport = m.get('viewport', '')
checks = [
('18 html has a lang attribute', bool(m.get('_lang'))),
('18 exactly one h1', t.count('h1') == 1),
('18 main landmark present', 'main' in t),
('18 header or nav, and footer present', ('header' in t or 'nav' in t) and 'footer' in t),
('3 viewport meta present, zoom not blocked', 'width=device-width' in viewport and 'user-scalable=no' not in viewport and 'maximum-scale=1' not in viewport.replace(' ', '')),
('20 title is 1 to 60 characters', 1 <= len(p.title.strip()) <= 60),
('20 meta description is 1 to 155 characters', 1 <= len(m.get('description', '')) <= 155),
('20 og:image is set', bool(m.get('og:image'))),
('20 theme-color is set', bool(m.get('theme-color'))),
('20 favicon link is set', any('icon' in (l.get('rel') or '') for l in p.links)),
('16 every img has width and height', all(i.get('width') and i.get('height') for i in p.imgs)),
('18 every img has an alt attribute', all('alt' in i for i in p.imgs)),
('19 every form input has a visible label or aria-label', len(labelled) == len(p.inputs)),
]
fails = 0
for name, ok in checks:
print(('PASS ' if ok else 'FAIL ') + name); fails += (not ok)
print(f'\n{len(checks) - fails}/{len(checks)} pass')
return fails
if __name__ == '__main__':
if len(sys.argv) != 2: sys.exit('usage: python3 preship.py page.html')
sys.exit(1 if run(sys.argv[1]) else 0)
```
## 4. How the pattern maps to Jack's own setup
Jack does not keep one folder with this name. His pieces live in separate skills and project folders. This scaffold puts the same layers in one place.
| Your folder | Jack's version |
|-------------|----------------|
| taste/inspo.md | References from Savee, Refero and Mobbin, plus his Five Shelves page of 40 sites |
| DESIGN.md | One brand-style.md per brand. Power Design holds 72, Glaido's included |
| rules/web-20.md | The 20 web rules in Power Design (principles/web-principles.md) |
| rules/bar.md | The teardown step of his Design Loop skill: 5 to 7 checkable traits of the reference |
| skills/ | Style skills made by Design DNA: a record, a 2 KB prompt and a check script per style |
| assets/ | His asset skill: a licensed icon library, Lottie files and a logo kit |
| rules/words.md | SlopMonster and a plain English (ASD-STE100 style) setup |
| checks/ | Check scripts that fail a build, for example the deck gate in his Horizon Strike skill |
| memory/corrections.md | His feedback notes: each correction saved as a rule, such as no sparkle icons |
Public parts: Power Design https://github.com/ItsssssJack/power-design and SlopMonster https://github.com/ItsssssJack/SlopMonster (both MIT licence).
Preview the file
# Pre-ship checklist: 20 points Twenty yes-or-no checks to run on a page before it goes live. They come from the 20 web rules in Jack's Power Design repo (principles/web-principles.md). Each point names its rule. How to use it: paste this list under your page and ask Claude to answer yes or no for every point, with proof. Fix every no. Run it again until all 20 are yes. 1. [ ] Mobile first. The 360 px layout works with no media queries. The page shell stops at 1440 px wide. Text blocks stop at 75 characters wide. (Rule 1) 2. [ ] You tested at 320, 390, 768, 1024 and 1440 px. Nothing scrolls sideways. Every breakpoint has a visible reason. (Rule 2) 3. [ ] Type and spacing use clamp(). No raw vw units on type. Text still zooms to 200%. The viewport tag does not block zoom. (Rule 3) 4. [ ] Body text is 16 px or more. Tap targets are 44 by 44 px or more, 8 px apart. (Rule 4. 44 is Apple's size. The WCAG AA minimum is 24 by 24.) 5. [ ] One main button per screen, in the accent colour. Repeat the same button down a long page. (Rule 5) 6. [ ] The first screen says what this is, who it is for and what to do next. True on a 1366 by 768 laptop and on a 390 px phone. (Rule 6) 7. [ ] Body text is left-aligned. Nothing is justified. A hero reads in a Z, with the button at the end. (Rule 7) 8. [ ] Lines are 45 to 75 characters long. (Rule 8) 9. [ ] Body line height is 1.5 or more. Headlines are 1.0 to 1.2. (Rule 9) 10. [ ] Spacing sits on an 8-point grid. Sizes come from one scale. No odd sizes such as 13 or 27 px. (Rule 10) 11. [ ] Text contrast is 4.5 to 1, or 3 to 1 for large text. Icons and focus rings are 3 to 1. Colour never carries meaning alone. (Rule 11. WCAG 1.4.3) 12. [ ] Colours are named tokens such as --bg and --accent. No loose hex codes in the styles. Dark mode reuses the same names. (Rule 12) 13. [ ] Every button, link and field has five states: default, hover, focus, pressed and disabled. The keyboard focus ring is visible. (Rule 13) 14. [ ] Empty, loading and error states are designed. Errors sit next to the field. (Rule 14) 15. [ ] Motion runs 150 to 300 ms and eases out. Reduced motion is respected. Nothing autoplays without a pause button. (Rule 15) 16. [ ] Images and embeds have a set size, so the page does not jump while it loads. (Rule 16) 17. [ ] On a mid-range phone: LCP 2.5 s or less, INP 200 ms or less, CLS 0.1 or less. Jack's budget: hero image 200 KB, JavaScript 300 KB. (Rule 17. Core Web Vitals, measured at the 75th percentile.) 18. [ ] One h1. Real header, nav, main and footer. A skip link. The tab order matches the page. (Rule 18) 19. [ ] Forms: every field has a visible label, the right input type and an inline error. No extra fields. (Rule 19) 20. [ ] The share layer is set: title 60 characters or fewer, description 155 or fewer, a 1200 by 630 share image, a theme colour and a favicon. (Rule 20) ## What a script can check checks/preship.py (in the design folder scaffold) tests part of points 3, 16, 18, 19 and 20. It cannot judge contrast, taste or speed. Check those by eye, with Lighthouse, or with a second agent. ## Sources - Jack's 20 web rules: https://github.com/ItsssssJack/power-design/blob/main/principles/web-principles.md - Core Web Vitals thresholds: https://web.dev/articles/vitals - Text contrast (WCAG 1.4.3): https://www.w3.org/WAI/WCAG22/Understanding/contrast-minimum.html - Minimum target size (WCAG 2.5.8, 24 by 24 px): https://www.w3.org/WAI/WCAG22/Understanding/target-size-minimum.html - Apple's 44 by 44 point tap size: https://developer.apple.com/design/tips/
Why it works
Imagine: A new hire who reads the style guide first.
What it does
A folder of design files. Claude reads it before every project.
Why it matters
Claude forgets your taste each chat. The folder remembers it for you.
Do three things
- 1Save your taste in files.
Brand, links, rules and assets. One file for each.
- 2Begin every project the same.
Claude reads the folder first. Then ask for the page.
- 3Check, fix, save corrections.
Run 20 checks. Turn every fix into a rule.
Run this once in your project. Then fill each file.
mkdir -p design-os/{taste/references,rules,assets,skills,checks,memory,projects}
touch design-os/{CLAUDE.md,DESIGN.md} design-os/taste/inspo.md design-os/rules/{web-20.md,words.md,bar.md} design-os/memory/corrections.mdProof
Inspiration
- Jack's 20 web rulesThe source of the 20-point checklist
- Power Design72 brand files and 20 slide rules · MIT licence
- SlopMonsterJack's copy linter · MIT licence
- Refero Styles2,000+ DESIGN.md files to start your own from
- One prompt, six agents, 11 design skills@adomicael · the skills behind a real CRM
- Five ShelvesJack's page of 40 places to look
Start small. DESIGN.md and a link list already beat a blank chat.
My skills
Preview the file
---
name: design-loop
description: Takes a goal and a real-world reference, extracts what actually makes the reference good, then runs builder and three fresh-context critics on every piece until all three agree ours wins. Triggers on "/design-loop", "design loop", "run the critic loop", "loop this against".
---
# Design Loop
Four phases: interview, preflight, teardown, loop. Do not skip ahead. Do not start building during phases 1 to 3.
## Phase 1: Interview
Ask exactly these three, together, then stop and wait.
1. What are you building, and how long or how big?
2. Name something that already does this brilliantly. A site, a video, a doc, anything I can open. If nothing comes to mind, say skip.
3. Any files I should work from? Design system, brand doc, script, existing draft.
If they name something vague ("Apple's website", "good SaaS design"), push once for the specific page or file. A vague bar is the number one reason this method fails: the critic invents a comparison and approves everything on round one.
If they say skip on question 2, propose three candidate bars, one line each on why, and wait. If they do not answer, take the hardest one.
## Phase 2: Preflight
A check, not a question. Run it before any work and report in one block.
- Fetch the bar now. Screenshot the URL or read the file. If it is blocked or missing, say so and ask for another.
- Confirm you can render our output: screenshots for a site, a filmstrip of frames for animation, a PDF render for a doc. No render means no craft critic.
- Name any generation tools the goal needs (image, video, voice) and confirm they are connected.
- Confirm the input files exist: design-system.md, brand doc, script.
Then print: what is working, what is missing, and **which critic goes blind** if something is missing. Never carry on quietly with a critic that cannot see.
## Phase 3: Teardown
Read the reference properly and write 5 to 7 mechanisms to `bar.md`.
Mechanisms, not adjectives. "Feels premium" is useless. These are useful:
- headline is 5x body size, three type sizes total
- one accent colour, used at most twice per screen
- motion always resolves in one direction
- nothing animates for under 400ms
- whitespace above the fold is at least 40% of the frame
Every line must be something a critic can check by looking. Show `bar.md` to the user before continuing.
## Phase 4: Loop
Split the goal into the smallest pieces that can be improved and judged on their own. You choose the pieces. Keep it to three or four unless told otherwise, because every extra piece multiplies the run.
For each piece: fan out a builder, then three critics, each with fresh context and no knowledge of how the builder worked.
- **Brief critic** judges against the stated goal only. Does it do the thing? Ignore aesthetics.
- **System critic** judges against `design-system.md` only. Objective adherence.
- **Craft critic** judges against `bar.md` and rendered output only. Put ours next to the reference blind with labels stripped, say which is better, name the single biggest gap.
Write each critic's brief yourself, adapted to this specific goal. Do not reuse generic wording across different goals.
Rules:
- Critics are harsh. Praise is not useful.
- Critics judge rendered output, never the code. Reading the implementation makes a critic evaluate intent instead of result.
- Binary verdicts, not scores. Scores drift upward every round.
- All three must pass. Any fail goes back to the builder with the single biggest gap named.
- No fixed round count. The exit is winning, or the user stopping the run.
Keep a live progress page updating as work evolves: piece status, each critic's verdict, gap history, round count.
## Cost
There is no reliable self-reported token cost, so do not pretend to show one. Show round count and elapsed pieces instead.
If the user names a ceiling, treat it as a checkpoint: pause and ask before continuing past it. Tell them plainly that the real brake is them watching and stopping the run.
## What breaks this
- A vague bar. By far the most common failure.
- The builder judging its own work. Critics need fresh context.
- A soft critic. Binary job, not a score.
- A fixed round count. The exit is winning.
- Over-specifying. Every extra instruction is one fewer decision the model makes with its own judgment.
Preview the file
---
name: scroll-film-studio
description: Build a cinematic scroll-film website where the whole page is one continuous shot that scrubs as you scroll. Trigger on scroll-film, scrollytelling site, cinematic scroll site, one continuous shot website.
---
# Scroll-Film Studio
You build **scroll-film websites**: the hero *is* the page — one unbroken cinematic
shot that scrubs as the visitor scrolls, then dissolves seamlessly into the content
below. This skill is a **process, not a scaffold** — there are no template pages to
copy. Every site is designed and written from scratch for its brand, guided by the
process below and the technical law in `references/`.
Two ways to make the film:
- **Lane A — Pure-code (default, zero setup):** the "film" is GSAP + Lenis motion —
pinned scenes, parallax, clip-path reveals, horizontal runs. Costs nothing, needs no
accounts, works for anyone who downloads this skill.
- **Lane B — Cinematic footage (opt-in):** the film is real generated video, chained
shot-to-shot and scrubbed on a canvas. **Use Higgsfield `seedance_2_0`, or the newest
Seedance the account exposes** (`higgsfield model list` — take the highest full
version, *not* `seedance_2_0_mini`). Kie.ai Veo 3.1 via `kie-chain.py` is the alternate
when there is a Kie key and no Higgsfield credits. Both pin every clip at BOTH ends;
an engine that can only pin the start is not good enough for this lane. Needs the
user's own account + credits. This is the signature look.
Everyone gets a gorgeous result. Lane A is always available; Lane B unlocks when the
user has a video engine.
---
## THE GOLDEN RULE — design is done by the best model available, and never delegated
**Run this skill on the strongest model you have access to, at the highest effort setting
it offers**, and keep every taste-bearing decision on that model: concepts, art direction,
palette, type, layout, motion design, copy, the build itself (all HTML/CSS/JS), and the
final design review.
If you are running on a fast or cheap tier, stop and switch before you start. The output
of this skill is judged as a premium website, and no amount of process rescues a design
made by a model that was picked for speed. Likewise if the harness exposes an effort or
reasoning dial, put it at the top — this is a long, taste-heavy build, not a lookup.
Delegate only two things, and never the design:
- **Mechanical work** → pure shell/code with *no model at all* (ffmpeg, SSIM scoring,
frame extraction, verification, deploys).
- **Bounded drafting** → fresh sub-agents (drafting one chapter's video prompt, writing
one after-film section, acting as the adversary in STEP 1). Same model is fine; what
makes a sub-agent useful is fresh context, not different weights.
**Every brand gets its own page.** Do not reskin a site you built earlier in the session —
same structure, same beat positions, same chrome, new colours. That is the single fastest
way to produce two mediocre sites instead of one good one, and it is invisible to every
gate in this skill because both copies pass identically. The engine is shared infrastructure
and should be; the page is not.
---
## STEP 0 — The interview
Ask these up front (batch them; prefer the host's structured-question UI if available).
**Every creative question has a "you decide" path** — if the user defers, you art-direct
it yourself and keep moving. Never block on a design answer you can make well.
1. **What are we building, and the one-line vibe?**
Brand/product name, what it is, and the feeling. (e.g. *"VOLTA — an electric race
team. Aggressive, electric, fast."*)
2. **Brand assets, or should I create the world?**
Existing logo / colours / fonts / real images — or full creative freedom.
3. **The journey — the one continuous shot, top to bottom.**
Where the camera starts and where it ends — the *transformation*. (e.g. *"moonlit
field → into a single bloom → a drop of gold → the bottle."*) Or: "design the arc
from my brand." **This is the heart of the whole build.**
4. **Real video, or pure motion?** → picks Lane B or Lane A. If unsure or zero-setup,
default to **Lane A (pure-code)**.
5. **(Lane B only) "Are you using Higgsfield, or something else?"** Ask this
explicitly — **this answer, not the brief, decides how long the film can be.**
Higgsfield CLI is the reference path (scripts included) and must pass the start-pin
preflight, so it gets the full **25s / 5-clip film**. Kie.ai, fal,
Replicate or any other image-to-video model still works, but check `playbook.md` §2a
first: an engine that ignores start pins cannot be chained cleanly and drops you to a
single ≤15s take. Say that out loud before they choose. Then: is it installed/authed?
How many chapters (clips)? A credit ceiling? — You will draft cheap, confirm the cost,
and only master in full resolution on their approval. If they have no engine, fall
back to Lane A.
6. **What comes after the film?** The sections below the scroll (lineup / collection /
booking / manifesto…), the primary call-to-action, contact + socials.
7. **Where does it go live?** Local only, or publish to *their own* Vercel.
---
## STEP 1 — Pitch concepts back (before building anything)
From the interview, develop **2–3 named creative concepts** and pitch them. Rules:
- Lead with your **recommended** concept, explicitly marked "(Recommended)".
- Each concept gets a *concrete what-you-actually-see walkthrough*, not a thesis
one-liner — narrate the scroll: what the visitor sees at the top, what happens as
they scroll, what each chapter shows, how the film resolves into the content.
(e.g. *"You open on a moonlit flower field, huge serif wordmark floating over it.
Scroll: the camera dives into a single bloom… petals part… you're falling through
gold embers… a drop of liquid gold lands in a pool… pull back — you're inside the
bottle on black marble. The page then melts into the collection."*)
- Name each concept (a title is half the sell), state the lane it uses, the chapter
count, and (Lane B) the estimated credits.
- **Adversarial sparring on the concepts — MANDATORY, never skipped.** Before presenting,
the concepts get attacked by something that did not write them. **Default to a fresh
sub-agent** (the Task tool) — same model is completely fine. A second frontier-model CLI
(`codex`, `gemini`) is a nice-to-have, not a requirement: `codex exec` boots a whole
agent session per question, so under load it can take minutes while printing nothing,
which is indistinguishable from a hang to anyone watching. If you do use it, the
`--skip-git-repo-check` flag is required (without it codex refuses outside a git repo),
background it with a timeout, and after ONE slow or failed attempt kill it and fall back
to the sub-agent. Never loop on this step — that has cost a whole build. What
makes the critique real is fresh context, not different weights: the adversary is given
the concepts and the brand only, never your reasoning, never which one you prefer, and
never the fact that you wrote them. Ask it to (a) attack each concept — is the journey
legible? memorable? feasible in N chapters? does the transformation actually transform,
or is it four unrelated scenes in a row? — and (b) propose one wildcard angle you
haven't considered. Fold what survives into your pitch (credit the sparring in one line).
**This is strategy critique only — the sparring partner never writes copy, code, or any
design decision; you arbitrate and you author.**
*A model reviewing its own freshly-written work inside the same context is not a review —
it tends to defend what it just argued for. A `self-review.json` in the verdicts folder
means the gate did not run.*
- Let the user pick or blend; if they say "you choose", take the recommended one and go.
Only after a concept is chosen do you build.
---
## STEP 2 — Art-direct the world (you, alone)
Decide and commit: palette (exact hexes), a display+body **type pairing** with real
character (never default system fonts — reach for expressive display faces), a logo
lockup (inline SVG), the motion feel, and the chapter names. Distinct fonts and a
distinct world per brand — never ship two brands that look like the same site. Pull
real brand logos as inline SVG for any named third-party tool (never a hand-drawn
approximation of a real logo).
---
## LANE A — Pure-code (default)
Write a single self-contained HTML page from scratch for this brand. Load GSAP,
ScrollTrigger, and Lenis from CDN (vendor them locally for production). Compose the
film from the motion vocabulary in `references/engine.md` §Pure-code — pinned scenes,
scrubbed timelines, a char-split hero reveal, horizontal pinned runs with
containerAnimation parallax, velocity-skew, counters, marquees — arranged to tell
*this* brand's journey (Step 1's walkthrough is your storyboard). Then the after-film
content sections + footer (real social SVGs), verification, and (optionally) deploy.
Critical ordering law: **create ScrollTriggers for ambient/background effects AFTER
pinned scenes** — creation order is refresh order; violating this silently mis-positions
everything after a pin spacer.
---
## LANE B — Cinematic footage (any image-to-video engine)
### Which video model — not negotiable
**Use Seedance 2.0, or the newest Seedance available when you read this.** It is the
best image-to-video model on the user's account and the only one this lane is tuned
for. Before the first generation, list the models the engine actually exposes
(`higgsfield model list`, or the provider's equivalent) and pick the **highest Seedance
version present**. Say in chat which one you picked and why.
Never quietly drop to an older Seedance, to Veo, or to anything else because one call
returned an error — retry, or stop and say the engine is down. A film silently made on a
weaker model is the failure that is hardest to see and most expensive to redo: it does
not look broken, it just looks cheap.
Veo 3.1 via Kie stays supported as the **keyless-of-Higgsfield** path (`kie-chain.py`),
and it is the right choice when there is a Kie key and no Higgsfield credits. Both pin
clips at both ends. Everything below applies identically to either.
---
Read `references/playbook.md` first — it is the law for this lane. The playbook and
`scripts/chain-step.sh` implement the **Higgsfield Seedance** reference path out of the
box. For any other engine (Kie.ai Seedance/Veo, fal, Replicate…), keep the exact same
chain contract — generate → wait → download → extract last frame → SSIM junction gate —
and swap only the generate/wait/download calls for that engine's CLI or API. In brief:
1. **Storyboard** the chosen concept as N chapters, one continuous camera direction the
whole way down.
**Default to 5 clips × 5 seconds = a 25-second film, and confirm it with the user
before you generate anything.** At 24fps this is about 600 frames, which is practical
to ship without reducing motion to a low-frame-rate slideshow. Quote the user the clip
count, seconds each, total runtime and current provider cost, and get a yes. If they want a
longer journey, add **clips**, not seconds per clip. See `references/playbook.md` §1b.
**Do not shrink the film to dodge the junctions.** The 25s shape is only reachable by
chaining, and chaining is the craft this skill exists to get right — §2b tells you the
exact failure mode and gives you two free checks that catch it before you spend.
The one thing that can force a shorter film is the **engine**, never the ambition.
Before storyboarding, settle `references/playbook.md` §2a: does this engine honour a
start pin? Higgsfield `seedance_2_0` does (native `start_image` + `end_image` — it is
when it passes the preflight) → chain the full 25s. If an engine re-imagines a
byte-identical, publicly-fetchable start frame, use a single ≤15s take instead.
Unknown engine: generate one clip, measure one junction, then commit.
Tell the user which path they are on and what it costs them. A 15s single take is 40%
shorter than the reference shape and cannot hold distinct chapters; ship it only when the engine leaves
no choice, never as a shortcut.
**Budget distance, not runtime.** The thing that breaks a film is how far one clip is
asked to travel, not how long the film is. The hard rule:
> **One clip = one camera direction, one location, one lighting state.**
> If any of those three has to change, it is a separate clip.
**And the whole film gets ONE vector.** Name it in a sentence before you write a single
clip — *"the camera only ever goes further in"*, *"the camera only ever falls"* — then
every clip must continue that vector. The visitor is scrolling one direction; if the
camera goes forward, then sideways, then out, then in again, the scroll stops meaning
anything and the film reads as a reel of clips that happen to be joined.
Write the transitions, not just the shots. Each clip's prompt must say **how it
continues the previous one**, not merely what is in it: *"continuing the same forward
push, now passing the hive wall"* — never *"a shot of the hive entrance"*. The junction
is the product; the shot is just where it happens.
Audit your own storyboard before you spend a credit: grep every clip prompt for
direction words. If a single clip contains both an inward word (*into, through, deeper,
push*) and an outward one (*out, back, retreat, pull*), that clip reverses on itself.
If a clip contains no direction word at all, it has no instruction and the model will
invent one. The result feels like disconnected locations rather than a journey with a
clear direction.
**One reversal is allowed if the reversal IS the story.** Declare it in the vector
sentence. An undeclared reversal is a mistake.
A clip told to go from a sunlit meadow to the inside of a dark hive is being asked to
change all three at once, and an i2v model will cut rather than travel — it lands on
the target so the seam passes, and jump-cuts through the middle where nothing is
looking. High junction similarity cannot rescue discontinuity inside a clip.
Prefer **more, shorter clips**: 5s drifts less than 9.5s, and eight small moves beat
four big ones at identical total runtime. If the storyboard needs a scale change *and*
a location change, insert an intermediate keyframe and let a clip do each.
**Audit the storyboard before you spend a credit — this check is free:**
```bash
python3 ~/.claude/skills/scroll-film-studio/scripts/vector-check.py <storyboard.json> # must PASS
```
It reads every clip prompt and fails the ones that contain both an inward and an
outward instruction, the ones that state no direction at all, and any clip travelling
against the film's declared `"vector"`. One `"reversal_at": "<clip id>"` may be
declared, and flips the expected direction for every clip from there on.
Run it, fix the storyboard, run it again. Every other gate in this skill costs time or
money and runs *after* generation; this one is instant and runs before.
2. **Generate the film. Higgsfield Seedance 2.0 is the preferred path; Kie/Veo is the
fallback.**
Model choice materially changes the finished film even when the process and gates are
identical. Prefer the current full Seedance model and do not reach for a weaker fallback
merely because it has a ready-made script.
```bash
# PREFERRED — Higgsfield, both ends pinned, per clip:
zsh ~/.claude/skills/scroll-film-studio/scripts/chain-step.sh <assets-dir> <clip-name> <start.png> <end.png> "<prompt>" [resolution] [prev-last.png]
```
Only if there are no Higgsfield credits and a Kie key exists:
```bash
python3 ~/.claude/skills/scroll-film-studio/scripts/kie-chain.py <storyboard.json> <outdir>
```
Needs a Kie.ai key in `KIE_API_KEY` or `~/.config/kie/key`. For multi-clip sequential
chaining, also set `KIE_UPLOAD_PATH` to a folder path owned by the current Kie account;
the skill deliberately ships without an account-specific default. It does the whole film:
N keyframes → N-1 clips → concat → master.mp4. Resumable — anything already on disk
is not regenerated, so a crash or a provider error does not automatically cost twice.
Request a current quote before running it.
Two properties make it produce a continuous film where start-frame chaining did not:
- **The keyframes are themselves a chain.** Keyframe N+1 is generated with keyframe N
as an image reference, serially, so palette, light, materials and scale are
inherited rather than re-invented. Ten stills that belong to one place.
- **Every clip is pinned at BOTH ends.** The clip is *forced to land* on the next
keyframe. A start-frame-only model is free to drift anywhere and then cut back to the
target — that freedom produces visible jump-cuts. Both-ends-pinned removes it
structurally rather than by asking the prompt nicely.
**But the START pin is the previous clip's real extracted last frame, NOT the
keyframe** — i.e. `[clipN-last.png, kf(N+1)]`, never `[kfN, kf(N+1)]`.
See `references/playbook.md` §2 — the law is engine-agnostic and
it forces the chain to be **sequential**: clip N must finish rendering before clip
N+1 can start. Never fan the clips out in parallel.
Do not upload keyframes anywhere. Nano Banana 2 results already live on Kie's own CDN
and that URL feeds straight into the video call; uploading them again adds a large,
redundant payload. **Extracted last frames are the
exception** — they are local files with no CDN URL, so each one must be uploaded before
it can serve as the next clip's `first_frame_url`. Downscale it to 1080p-wide JPEG first
so the base64 payload stays small.
**Kie also serves Seedance 2.0 directly — prefer it over Veo when Higgsfield is down.**
When available, model id `bytedance/seedance-2` uses
`https://api.kie.ai/api/v1/jobs/createTask`, input fields `prompt`, `first_frame_url`,
`last_frame_url`, `resolution`, `duration`, `aspect_ratio` (`9:16` gives a true portrait
film for a mobile build). Verify the provider's current schema before spending, then
poll with `jobs/recordInfo?taskId=…`.
*Higgsfield path:* `scripts/chain-step.sh` drives Higgsfield. **Use `seedance_2_0` —
or whatever the newest Seedance is at the time you read this.** Check with
`higgsfield model list` and prefer the highest Seedance version available; never fall
back to an older Seedance or a non-Seedance model because a command failed once.
Confirm the selected Seedance model exposes both `start_image` and `end_image` with
`higgsfield model get <model>`. Pin both ends on
Higgsfield exactly as you would on Veo:
```
higgsfield generate create seedance_2_0 \
--start-image kf07.png --end-image kf08.png \
--prompt "…" --duration 8 --resolution 1080p
```
Ask the provider for a current quote before generation. A scroll-film is silent, so
leave audio off.
3. **Continuity-gate the WHOLE film before you build anything** —
`zsh ~/.claude/skills/scroll-film-studio/scripts/continuity-gate.sh <frames-dir> 8` must PASS.
A seam gate and a continuity gate measure different things, and the seam gate alone
will lie to you. Chaining sets each clip's start image to the previous clip's last
frame, so the seams match *by construction* — they cannot fail. What escapes is the
middle of each clip. Sample it throughout; a model can cut rather than travel when a
prompt asks it to cross an enormous distance.
**The cause is almost always storyboard granularity, not the engine.** If a clip has
to change location, scale and lighting all at once, it will teleport. More clips, each
moving less, chained tighter — one continuous camera direction throughout.
4. **Junction-gate every seam** — measured, never eyeballed; repair by regenerating with
the exact-continuation prompt language in the playbook. Dissolves over bad seams are
forbidden.
5. **Assemble** with `~/.claude/skills/scroll-film-studio/scripts/assemble.sh` (drops duplicate junction frames, encodes
`-fps_mode vfr`, samples the seam colour). **Extract at the film's NATIVE frame rate** —
a 72s film at 24fps is 1,728 frames, and shipping "about 300" of it makes the page scrub a
4fps slideshow. That is a direct cause of visibly uneven motion, and it is invisible in code
review because the engine is fine and simply has nothing to draw. Trade resolution for
frames: 1024px at `-q:v 6` beats 1280px at `-q:v 4` for the same bytes. See
`references/engine.md` §Frame payload for the measurements and the window sizing.
5b. **Trim the head of the film, then set `FRAME_COUNT` to the trimmed count.** Generated
films routinely open on a shot that has not started moving, or on a framing that looks
like a different video — it reads as a jump-cut into your own film and it is the very
first thing anyone sees. Inspect the first ~2 seconds frame by frame and cut until the
opening frame is already inside the movement. See `references/finishing.md` §1.
6. **Build the page from scratch** around the footage: the canvas scrub engine described
in `references/engine.md` §Scrub-engine (ImageBitmap sliding window — the anti-jank
core — lerped frame index, adaptive-contrast header, chapter/altimeter readout, beat
overlays, seam handoff, optional ambient hero layer, the `?jump`/`__ready` dev
contract). Write it for this brand; don't copy a previous site.
If a provider reports a server-side failure, confirm the billing state before retrying.
---
## THE DELEGATION MODEL (how tokens stay low)
You are the orchestrator and the designer. Spend frontier tokens only where taste lives.
| Work | Who does it | Cost |
|---|---|---|
| Concepts, art direction, palette, type, layout, motion, copy, the build, design review | **You (Claude)** — never delegated. Run design on the strongest model available. | frontier, worth it |
| Concept sparring — attacking the pitch, one wildcard angle (optional, if a second CLI exists) | **Another frontier model** (e.g. GPT/Codex, Gemini) — strategy text only, never design | one cheap call |
| Drafting each chapter's video prompt; writing one after-film section | Claude **sub-agents**, fanned out in parallel | cheap, parallel |
| Frame extraction, SSIM gating, assembly, seam sampling, jank test, screenshots, deploy | **Pure shell — no model** (`scripts/*`, ffmpeg, puppeteer, vercel) | ~free |
Fan out independent pieces concurrently; keep the taste-bearing spine on yourself.
---
## COST DISCIPLINE (Lane B)
1. **Audio OFF** — `--generate-audio false`. Audio ON silently ~3×'s the bill.
2. **Confirm before spending.** Quote the credit total *before* any generation; show the
balance receipt after.
3. **Draft cheap, master once.** Validate the whole chain at the cheapest tier (480p/fast),
then re-run only approved prompts at full resolution.
4. **Reuse the footage.** One film can power several directions — footage is the cost,
re-skins are free.
---
## VERIFY (both lanes)
**One-time setup on a fresh machine — do this before the first verification, not after it
fails.** `verify.js` and `shot.js` need `puppeteer-core` and a system Chrome/Chromium:
```bash
cd ~/.claude/skills/scroll-film-studio/scripts && npm install
```
`node_modules` is deliberately not shipped in this skill, so a downloaded copy will throw
`Cannot find module 'puppeteer-core'` until that runs once. Set `CHROME_PATH` if Chrome is
installed somewhere non-standard; `shot.js` searches the usual macOS/Linux/Windows paths.
Implement the dev contract in every build: `?jump=<scrollY>` lands pre-scrolled with all
scroll state force-settled, and `window.__ready = true` fires only once the page is truly
ready. Then `scripts/verify.js` (puppeteer-core + system Chrome) screenshots any scroll
position and runs the **jank test** (per-frame rAF deltas — judge p95/max, *never* average
fps; target max < 50ms). Screenshot every beat and every junction. Never ask the user to
eyeball what you can prove. Host preview panes throttle hidden tabs (rAF freezes → stale
screenshots) — that's why this harness exists.
**Never run a preview server in the foreground.** It never exits, so the tool call blocks
until the whole turn is killed — an agent that does this loses the entire build with no
error message, only a truncated transcript. Always `nohup … &`, then poll the port with
curl, and `pkill` it when finished. The same goes for any long-running process.
**Then `node ~/.claude/skills/scroll-film-studio/scripts/copy-gate.js site/index.html` — it must exit 0 before you ship.**
Free, deterministic, no model. It fails the build if the page narrates its own concept
at the visitor ("How to read this page", "as you scroll the frame narrows", "one
continuous descent"), if placeholder text survived, or if a hand-drawn `<svg>` stands in
for a real brand logo. A page that captions its own mechanic has described the brief
instead of performing it — the most common way a build passes every mechanical check and
is still obviously not a website. Fix the copy; never silence the gate.
**The harness is evidence, not truth — always look at the pixels too.** Automated checks
can fail in either direction: a broken page can receive a high score, while a finished page
can be misread as empty. Treat a surprising score — good or bad — as a claim about the
harness until a screenshot agrees with it. Two cheap habits catch both failures: read
`window.__ready`, the canvas dimensions and a visible-element count directly, and capture
one screenshot at the top and one mid-scroll. Note also that a missing `/favicon.ico` is
enough to fail `console-errors`; ship a favicon or discount that single 404.
**Grade the transformation, not the beats.** Screenshots at 0% and 100% must be
recognisably the *same journey's* start and end — the protagonist carried through, not
swapped. If you can reorder two chapters without the page reading as broken, it is not
one continuous shot; it is a stack of sections and the build has failed its premise.
---
## DEPLOY (opt-in, their Vercel)
Build a **lean** copy first — `index.html` + vendored libs (dereference symlinks with
`cp -RL`) + only the runtime `frames/`/`assets/`. Never upload build intermediates (raw
clips, keyframes — often 100MB+). Then `vercel deploy --prod --yes` from the lean dir.
Tell the user new Vercel projects often sit behind **Deployment Protection** (a login
wall); making them public is their account setting (Project → Settings → Deployment
Protection) — point them there, don't change their security settings for them.
---
## GUARDRAILS
- **This skill ships with zero personal data** — no API keys, no accounts, no personal
paths. Every user brings their own video engine + Vercel. Never bake credentials in.
- Design + build stay on Claude. Mechanical work goes to code; design never does.
- Confirm credits before spending; show the receipt after.
- One continuous shot; one world per brand; no visible seams; no dissolve masking.
- Respect `prefers-reduced-motion` in every build.
- **The concepts always get attacked by something that didn't write them** (Step 1) —
second CLI if present, fresh sub-agent if not. Never skipped, never self-review.
- Reference files: `references/playbook.md` (footage law), `references/engine.md`
(build recipes), `references/finishing.md` (**the craft that decides whether it looks
expensive** — head-trim, chrome over footage, why pages go flat below the film, real
brand logos, mobile as its own film, honest verification), `scripts/chain-step.sh`,
`~/.claude/skills/scroll-film-studio/scripts/assemble.sh`, `scripts/verify.js`, `scripts/copy-gate.js` (deterministic copy
gate — must exit 0 to ship).
## OPERATIONAL TRAPS
- **Never run a preview server in the foreground.** It never returns, the turn dies, and
the whole build is lost with no error. `nohup … &`, poll with curl, `pkill` after.
- **Never let two writers touch one file.** If a human or another agent is editing the
page you are editing, stop one of them first. Interleaved writes corrupt silently.
- **A long autonomous build will hit context compaction.** Instructions given in chat are
summarised away; a written `BRIEF.md` in the project directory survives. Put the frame
paths, `FRAME_COUNT`, seam colour and the do-nots in the file, not in the conversation.
- **Stale to-do lists outlive corrections.** After compaction an agent resumes whatever its
checklist says, so correct the checklist, not just the conversation.
- **Download from a CDN with a browser User-Agent** and **persist job ids to disk the
moment they are issued** — a failed download after a paid render is otherwise
unrecoverable and costs the render twice.
---
## Full trigger notes (moved out of frontmatter)
>-
Build a genuinely beautiful animated scroll-film website — the whole page is one
continuous cinematic shot that plays as the visitor scrolls. Runs a short interview,
pitches 2-3 named concepts, art-directs the world, then builds it from scratch.
Two lanes: free pure-code GSAP/Lenis motion (zero setup, works for anyone) or a
cinematic footage film from the user's own image-to-video engine (Higgsfield Seedance
2.0 or newer is the reference and the required model; Kie.ai also serves the same
Seedance 2.0 as `bytedance/seedance-2` and is the fallback when Higgsfield is down,
Veo only as a last resort — the default film is 5 clips x ~5s = 25s / ~600
frames, chained with BOTH ends pinned; a single ≤15s take is the shorter fallback used
only when the engine will not honour a start pin).
Trigger on "scroll-film", "cinematic scroll site", "scrollytelling website", "build me
an animated/scroll website", "film-scroll site", "one continuous shot website", or any
request for a premium scroll-scrubbed animated site. NOT for slide decks / HTML
explainers or static brochure sites.
Set up
Go deeper
Every link, by hack
Every prompt, in one go.
Copy all the prompts at once. Paste them into a note, or into your project folder.