CoolLanding
Premise
This skill does not define one look. It prevents catalog order and past demos from becoming a default by requiring the agent to:
- Diagnose the brand, audience, and emotional target.
- Select one Style World from
references/style-worlds.mdusing the diagnosed brief andscripts/select_world.py. - Optionally attach one Technique Pack from
references/motion-lab.md§13 (living archive, elastic media, physical playground, data monument, visual instrument, rule decomposition, or retro signal). - Compose 2–4 Mechanics from
references/mechanics-library.mdthat fit that world (not the same combo used last time). - Invent one Signature Mechanic that nobody else has — the one thing this brand owns.
- Verify the result is unique, readable, and on-brand.
The output is never "the CoolLanding style". The output is a page only that brand could ship.
When the request targets an existing page, enter redesign mode: inspect the current route and user-visible contract first, preserve substantive content and brand facts unless a change is requested, and turn each reported defect (for example contrast collision, unexplained geometry, janky scroll, or weak asset silhouette) into an acceptance check. Measure the current motion/rendering path before changing it, then re-run the same checks after the edit.
Start with
references/world-selection.md, then read the committed world's chapter inreferences/style-worlds.mdand the matching mechanics inreferences/mechanics-library.md. Formedium/lowconfidence, read both top candidate chapters before committing; forhighconfidence, read the selected chapter before implementation. Readreferences/composition-strategy.mdandreferences/anti-template-rules.mdbefore shipping. Readreferences/motion-lab.mdwhen the brief involves WebGL media, kinetic type, physics, page transitions, data portraits, shader tools, decomposition, or retro post-FX. When the user asks for reference-grade parity or "as close as possible" animation, also readreferences/kinetic-parity.md(the entrance + pointer + scroll + local-state + renderer proof ladder). When you generate illustrations, also readreferences/asset-isolation.mdand the$imagegenskill instructions. Usescripts/asset_prompt.pyfor world-specific prompt direction, the imagegen skill's installed chroma-key helper for generated transparent assets, andscripts/preview_cutouts.pyfor halo review. Reservescripts/chroma_cut.pyfor supplied/pre-existing chroma sources or explicitly adopted project-local tuning. When you build a WebGL/3D/particle hero, readreferences/webgl-animation.md(the GPU-particle + bloom + smooth-scroll recipe distilled from the reference sites' shipped code). When researching new references or assets, readreferences/reference-sites.mdandreferences/inspiration-sources.md, then usescripts/site_motion_probe.py.
Workflow
1. Ground the brief
- Read local repo instructions,
AGENTS.md,README.md, nearby docs. - Inspect current stack, file structure, existing UI patterns.
- If the user provides reference sites, capture real screenshots or DOM/style signals before designing.
- If external libraries are needed, verify current official docs.
1.5 Harvest the reference websites before designing
When the user asks for reference-grade parity, do not design from memory. Build an evidence folder first.
- Start with
scripts/site_motion_probe.py. Runpython3 scripts/site_motion_probe.py <urls> --screenshots --out <evidence-dir>; it records response hashes, technique signatures, shader uniform names, runtime library/canvas facts, DOM/CSS signals, and initial/after-scroll screenshots without storing source bodies. - Scan for rendering and choreography signals:
THREE, OGL, WebGPU/TSL,WebGLRenderTarget, bloom/postprocessing, curl/noise/raymarch, DataTextures/FBO, instancing, GLTF/Draco, Lenis, GSAP/Flip/ScrollTrigger, Barba/View Transitions, Matter, Howler/Web Audio, Rive/Lottie, clip/mask/blend/filter, and native scroll timelines. - If line-level diagnosis of a publicly shipped bundle is genuinely required, keep that capture inside a private evidence workspace and extract only transferable algorithms/state names into the skill. Never vendor a reference site's source into the target project or this skill.
- Probe behavior, not just files: screenshot at load, after pointer movement, after 5s, and after scroll. Record whether motion changes, scroll changes, canvas count, video count, fixed layers, font stack, and dominant layout grammar.
- Classify every result as
runtime-verified,DOM-verified,visual-only, orunavailable. If a site blocks or serves no public assets, mark itvisual-only; do not invent a tech stack. - Convert evidence into a mechanism inventory: hero anchor object, renderer, scroll clock, post-FX, typography scale, cursor behavior, asset strategy, and mobile fallback.
- Use the inventory as source material only. Do not copy proprietary markup, minified code, branded copy, product objects, or trademarked visual signatures.
The implementation target is 90% perceived effect parity, not code parity. Judge against:
- first-viewport impact and single anchor object,
- actual render layer parity (WebGL/canvas/DOM/SVG as appropriate),
- scroll and pointer cause/effect,
- typography scale and crop behavior,
- material/texture quality,
- entrance ritual,
- mobile fallback,
- console cleanliness and nonblank canvas checks.
2. Diagnose the brand
Answer these out loud before touching code; ask the user once when a required field is unclear instead of guessing:
- Product category: physical product, SaaS, event, portfolio, real estate, agency, service, manifesto, etc.
- Brand archetype: heritage / challenger / playful / operational / luxury / artisan / system / studio.
- Audience temperature: cold/skeptical, warm/curious, hot/converted, technical, mainstream.
- Emotion target: awe, intrigue, joy, exclusivity, trust, energy, calm, momentum.
- One-sentence promise: what the first viewport must communicate before the user scrolls.
- Performance ceiling: heavy WebGL OK, or must stay lean?
- Reference vibe: which 1–2 worlds from the catalog feel closest? (Do not pick more than 2.)
- Technique pack: does the brand benefit from one legible transformation system, or is the lead world already enough?
2.5 Select the Style World from evidence
- Run
python3 scripts/select_world.pywith the diagnosed product, audience, emotion, promise, and constraints. Keep its JSON ranking beside the composition brief. The helper is a deterministic lexical aid, not an oracle. - Use
--require-high-confidencein an automated build or handoff gate. It fails closed when the brief has only one signal category or the top two worlds are too close; interactive work may omit it only while recording the required human review. - Never choose a world because it is listed first, because it was used in the
demo, or because it is the easiest renderer. A blank or signal-free brief
must stop for clarification; a
mediumorlowresult must be reviewed against the top two world chapters. - Pass
--recent-worldor--avoid-worldwhen prior outputs are available. Use--worldonly for an explicit user/brand override; the helper requires--override-reasonso the decision cannot lose its audit trail. - Write an
ANCHORsentence before generating assets: name the concrete subject, its placement, and the brief job it performs. Use the selected world's asset strategy andscripts/asset_prompt.py; never inherit the first world's object or a generic center ring. Seereferences/world-selection.mdfor the gate. - Keep the selection packet together:
world,confidence,evidence,review_reasons, top two candidates,ANCHOR, asset mode, semantic parts, and mobile fallback. Do not start image generation before this packet exists. When usingscripts/asset_prompt.py, pass its JSON path with--selection-json ... --require-selection; the helper rejects a mismatched world or an unconfirmed scored packet.
3. Pick exactly one Style World per scope
For a new single-world page, pick the lead world. The lead world controls color logic, type system, layout grammar, motion grammar, asset strategy, and the dominant feeling. You may borrow at most one minor accent from a second world, but the page must read as one world.
For an existing multi-world switcher or catalog, do not collapse the site into
one lead world. Treat each requested world as its own selection scope: preserve
the existing world IDs, write one selector packet and one ANCHOR per world,
and read that world's chapter/mechanics before editing it. Split a mixed brief
into per-theme briefs (for example, data records and a luxury watch) and run
select_world.py separately for each. The global one-world rule applies to a
new page scope, not to a catalog whose product is the contrast between worlds.
If two worlds tie, run the uniqueness check:
- Which world has the agent used least recently in this codebase / chat?
- Which world creates the strongest contrast with what competitors do?
- Which world rewards the brand's one-sentence promise best?
Then commit. Do not blend three worlds into a "safe average".
Optionally pick one Technique Pack from references/motion-lab.md §13 after
the world is locked. The pack changes the hero's material and interaction, while
the lead world keeps ownership of color, type, layout, and emotional pacing.
4. Compose 2–4 Mechanics
From references/mechanics-library.md, pick 2–4 mechanics that amplify the world.
- Worlds suggest a default mechanic shortlist — read them.
- One mechanic must be the hero mechanic (carries the first viewport).
- The others are supporting mechanics (used in 2nd / 3rd / footer sections).
- If a Technique Pack is active, its hero and supports count toward the same 2–4 limit.
- Never copy the exact combination listed as a reference site's signature. Re-arrange. Re-time. Re-color.
5. Invent one Signature Mechanic
The page must have one thing no reference has. Examples:
- A custom cursor that becomes the product's icon when hovered.
- A scroll bar that is the product itself (e.g., a knife blade, a bracelet link).
- A loader that types out the user's location/IP city.
- A 3D hero where the camera follows the actual time of day at the user's locale.
- A footer that prints a generated postcard the user can save.
Write the Signature Mechanic in one sentence before implementing.
6. Generate or create assets
- Bitmap visuals: when the user requests generated imagery, load and follow the
$imagegenskill first and use its built-inimage_genpath by default. Generate only 1–3 assets that have a documented job, copy the final files into the project, and never leave them only in the generator's output folder. Include the selected world in every image prompt (usescripts/asset_prompt.py) so an editorial brief does not receive a luxury or cinematic object by accident. - Choose the asset mode before prompting. Use
--mode hero-platewhen complete product identity, realistic materials, and an authored text plane matter; use--mode cutoutonly when the layout needs an isolated object. The prompt script chooses a different imagegen use case, scene, placement, and avoid list for every world. Never reuse a successful World 1 prompt as a universal style. - For
generative-system, runpython3 scripts/asset_prompt.py <subject> --world generative-system --mode procedural; this is a code-native handoff, not an imagegen request. A raster exception requires both--allow-rasterand--override-reason, and must be limited to a named logo or texture. Fordata-monument, attach a documented--data-sourceplus repeated structured--data-map field:type[unit]=channelentries before creating any visual asset. Include one stable=identitymapping and at least one visible channel. - If the image-generation endpoint or skill is unavailable, say so plainly and
do not silently switch models or invoke a CLI. The imagegen CLI fallback
requires an explicit user choice and
OPENAI_API_KEY. Otherwise use supplied/licensed or procedural assets only when they fit the brief. Mark the provenance in the project notes; never describe a local procedural image as AI-generated or imply that an unavailable model was called. - If the user explicitly asks to use a supplied compatible endpoint, follow
the explicit provider procedure in
references/asset-isolation.mdStep 0. This remains$imagegen's explicit API/CLI fallback configuration, not a third default mode, and it never bypasses world selection, semantic review, or the no-generic-ring rule. - Run a five-second semantic gate on every hero asset: an uninformed reviewer must name the intended object and see its identity-bearing parts. A watch needs a readable dial, hands, crown, strap and clasp; a fictional instrument needs a credible function, chassis and controls. If it reads as a bottle, thermos, generic gadget or abstract ornament, regenerate with that exact misread in the avoid list. CSS, bloom and copy cannot repair a failed silhouette.
- Isolate every cutout illustration. A cutout inside a visible rectangle, a halo, or a fake "transparency checkerboard" reads as a cheap template. Full-bleed photoreal hero plates are a separate mode: blend their backdrop into the page, reserve copy space in the generated composition, and do not key them out.
- Never matte a subject out of a busy scene (rembg/SAM on a full studio shot halos and eats into the subject — 误伤). Instead, generate the asset on a uniform high-contrast chroma backdrop, then key that one color out. Pick the backdrop hue to be absent from the subject (green by default; magenta/violet when the subject contains green or many bright colors). Follow
references/asset-isolation.mdfor the backdrop table, prompt template, the color-distance + gated-despill keyer, and the CSS to present cutouts as floating objects. - Use
scripts/asset_prompt.pyto produce the world-specific prompt. For a generated transparent asset, follow$imagegenand run its installedremove_chroma_key.pyhelper. Usescripts/chroma_cut.pyonly for supplied/pre-existing chroma sources or explicit local tuning, then usescripts/preview_cutouts.pyto review over dark/cream/kraft backgrounds. - 3D assets: use Blender exports (.glb), keep file size low (texture atlas, draco compression).
- Avoid external stock unless the user explicitly allows them.
- Prefer 1–3 strong assets over many weak decorations.
7. Build the first screen as the experience
- Make the first viewport the actual product/brand signal, not a marketing preamble.
- Full-bleed or unframed layouts; do not put the hero inside a decorative card.
- Let a hint of the next section appear on common desktop and mobile viewports.
- Keep nav and CTAs usable even when the visual layer is intense.
8. Implement kinetic systems
- Use CSS variables for color, spacing, type scale, motion timings — switching worlds should be possible by swapping a
data-worldattribute and a variable bundle. - For reference-grade work, install a kinetic director before polishing visuals: one scoped loop that writes normalized pointer, local scroll, chapter, and entry values into each world. Follow
references/kinetic-parity.md; a static lookalike is not enough. - Add canvas/WebGL/procedural layer only when the world demands it. If you add one, it must carry data via uniforms (mouse, scroll, time, pulse).
- For media formations, sticky image planes, physics, route Flip, velocity type, retro post-FX, data portraits, shader tool surfaces, and scroll decomposition, use the implementation/failure/verification recipes in
references/motion-lab.mdand the matching named mechanics. Do not combine them as an effect checklist. - A flat full-screen fragment-shader gradient is not a hero. Pick one
semantic owner for the anchor: an inspected glTF, a product-specific SDF whose
silhouette passes the five-second gate, or a supplied/generated hero plate.
When a hero plate owns product detail, WebGL should add atmosphere, light,
particles, reflection and post-FX behind it; do not raymarch a second,
approximate product over the image. Use the portable recipes in
references/webgl-animation.mdonly when the chosen world and performance budget justify them. Feature-detect WebGL, detect weak renderers, cap quality, and provide a legible DOM/static fallback. - Custom cursor, magnetic buttons, parallax, scroll progress, ticker text, hover distortion: each must have a purpose tied to the world's grammar.
- Respect
prefers-reduced-motion; always cap DPR and pause the loop when offscreen. - For scroll-heavy pages, follow the Scroll performance contract in
references/webgl-animation.md§5–6: one rAF owner, scroll callbacks that only sample, cached geometry with reads-before-writes, active-world-only rendering, LenisanimatedScrollfor wheel smoothing,actualScrollfor divergent native scrollbar/restoration state, and an event-driven/static reduced-motion mode. Keep DOM/compositor writes per-frame; stride or hold the last complete frame of the expensive full-screen renderer during an active gesture, then restore full cadence. Do not tune damping until a real wheel/trackpad trace shows the frame budget and p95 interval.
9. Verify visually
- Run the app in a browser.
- Capture desktop and mobile screenshots for every section.
- Check that generated images load, canvas pixels are nonblank, text does not overlap, buttons fit, scrolling works, no console errors.
- For the CoolLanding demo, run the repository's pixel-level contrast probe in
addition to the motion probe:
python3 tools/verify_spatial_contrast.py. It resizes the live route across desktop/mobile viewports, waits for the runtime frame-ready marker, captures the visible frame, temporarily hides only the target canvas, and uses the screenshot delta to prove that the WebGL layer contributed real pixels before checking WCAG ratios for visible copy. A default-framebufferreadPixelsresult is diagnostic only (withpreserveDrawingBuffer: falseit may be all zeroes after buffer swap); it is never the nonblank verdict. For another repo, build an equivalent rendered-background check; CSS token contrast alone is insufficient. - For each hero plate, capture desktop and mobile product crops and compare the actual copy/product stage rectangles. The intended object must remain identifiable, the copy must stay on its reserved plane, and neither may be rescued by hiding the product under a dark overlay.
- For isolated assets, composite each cutout over its real world background
(dark/cream/kraft) and render in real headless Chromium — the IDE preview
caches images and hides fringes. Use 90% separation quality as a review target,
not a claim that a reference has been numerically reproduced. See
references/asset-isolation.md§5. - Inspect the output yourself before claiming success.
- Run the anti-template audit in
references/anti-template-rules.md. - If the brief compared the page to reference sites, run a motion proof:
screenshot before/after pointer, before/after scroll, active-state DOM
assertions, nonblank canvas checks, console capture, and a real scroll frame
trace (the reusable probe accepts
--performance). In the CoolFE demo this ispython3 tools/verify_motion.py; in other repos, build equivalent checks locally. Report the evidence level and remaining gaps; never claim "reference-grade" from static screenshots alone. - Treat
site_motion_probe.pyevidence asruntime-verifiedonly when it observed a live canvas context; bundle signatures alone aredom-verified. With--screenshots, retain the initial, after-pointer, after-5s, and after-scroll captures, plus console/page-error output.
Reference Lineages
The nine lead Style Worlds are anchored by these references. The agent must not copy any of them—only inherit mechanisms.
| # | Site | World | Signature mechanism |
|---|---|---|---|
| 1 | Sidewave | cinematic-dark | WebGL2 black void, single luminous origin, loading ritual |
| 2 | Active Theory | cinematic-dark | Sparse DOM, ASCII/data texture, runtime asset stage |
| 3 | Blit Studio | editorial-interference | Huge cropped wordmark, white field, custom cursor, media collisions |
| 4 | Remote Rituals | ritual-craft | Saturated panels, sticker UI, calendar/desktop metaphors |
| 5 | AIR Center | spatial-architecture | 2D↔3D↔2D RenderTarget transitions, water reflector, panoramic glass |
| 6 | Razorpay Sprint 26 | festival-kinetic | 100+ scroll/click triggers, chapter index (01/A…), B2B-as-consumer storytelling |
| 7 | Aimee's Papercraft | papercraft-tactile | Character-led scrollytelling, baked 2D illustrations on 3D geometry |
| 8 | Cartier Watches & Wonders | luxury-alcove | Six dreamlike 3D rooms per product, hidden gestures, Web Audio score |
| 9 | WC 2026 Data Portraits | data-monument | Stable event records mapped into comparable spatial portraits |
Each row maps to a chapter in references/style-worlds.md and tested mechanisms
in references/mechanics-library.md. Historical rendering evidence for the
original eight rows is in references/webgl-animation.md §1. The later
data-monument/WC26 evidence is documented in references/reference-sites.md
§11 and references/motion-lab.md §§10–11; do not cite the historical bundle
table as WC26 runtime evidence.
The motion catalog adds Obys Experiment, TRIONN, 21 Hrs, Made With GSAP, Glitch
& Grit, Normal Is Boring, Artem, IZANAMI, Daoism Systems, Grainient v2, WC 2026
Data Portraits, Spotify Wrapped Party, and Mondrian Tribute. Their evidence,
transferable boundaries, and failure modes live in references/motion-lab.md
and references/reference-sites.md. Inherit mechanisms, not markup, branded
objects, copy, palettes, or proprietary/minified code.
Quality Bar
- Every visual asset must have a job.
- Motion must clarify state, depth, or rhythm — never decoration alone.
- The page must remain readable at mobile widths.
- Avoid generic AI aesthetics: stock gradients, vague glassmorphism, repeated rounded cards, filler badges, decorative purple/blue blobs.
- Report generated asset paths, implementation files, and verification commands.
- Report reference evidence level and the do-not-copy boundary for each borrowed mechanism.
- The result must pass the uniqueness test: a critic should not be able to say "this is the CoolLanding skill output". They should say "this is the brand".