68 Canonical Archetypes
Canonical Component Studio
Copy-pasteable React + Tailwind JSX archetypes for common page sections. Use theme_component to theme any archetype with one of 1,239 brand systems.
ctaAccent Band
Banded
Full-bleed accent ribbon with one action. Earns its loudness by being the only one on the page.
ctaInline Form
Form-led
The input is the action. Single email field with inline submit and a real success state.
ctaInk ground
Inverted
Black ground, paper button. The contrast does the work - no accent, no gradient, no chrome.
ctaMotion-led
Marquee
A single phrase scrolls on infinite loop; the whole strip is clickable. Pauses on hover.
ctaTypographic CTA
Quiet
A typographic appeal, not a button. Reads as the end of an article.
ctaFloating row
Sticky compact
Low-contrast strip that floats at the foot; single short action.
ctaPrimary + ghost
Two-button
Primary action + a quiet secondary. Don't add a third - the page becomes a comparison, not a conversion.
faqNative <details>
Accordion
Native HTML, single-open behaviour. Affordance is a typographic + / -, not a chevron.
faqSliced by audience
Category tabs
Questions sliced by audience (Designers, Engineers, Curators). Useful when the FAQ serves multiple roles.
faqQ-only with inline reveal
Compact
Q-only by default; click expands A inline. Dense scanning for short answers.
faqOrdered manifesto FAQ
Numbered
Asked, briefly answered. Numbered prefix in mono - reads as a list of arguments.
faqFilter input + open list
Search-led
Search beats accordion when the FAQ runs long. Filtered, empty, and focus states all handled.
faqQ-left, A-right
Two-column
Every Q&A on display. Reads as a magazine interview, not a help-desk index.
faqClosing conversion
FAQ + CTA
Three Q&A rows followed by a quiet conversion strip. Converts readers who got most of the way through.
featuresVertical with side flip
Alternating
Three feature rows alternating side per row. The shape comes from the alternation.
featuresBento Grid
Bento
Six tiles, irregular spans. The largest carries the lead idea; smaller ones extend it.
featuresBefore / with
Compare
Capability comparison framed categorically (before / with) - no competitor names.
featuresThree primitives
Icon trio
Three features each carrying a typographic mark inside a hairline square. No SVG iconography.
featuresEssay rows
Long-form
Features written as paragraphs with marginal headings. Read, not scanned.
featuresProcess triplet
Numbered triplet
Three equal columns prefaced by big mono ordinals. Variety comes from type, not layout.
featuresCopy + demo
Workbench
Explanatory copy left, working demo right. Real strings, no faux chrome.
footerFt8 Address
Address card
Real-world contact info - postal, email, hours. No social row, no link map.
footerFt7 Colophon
Colophon
Magazine end-credit. Typefaces, stack, owner - set in mono so it reads as metadata, not body copy.
footerFt1 Index
Index
Hand-set table of contents. Reads as back-matter - numbered, mono, no underlines.
footerManifesto in miniature
Long copy
Closes the page with a small essay rather than a link map. Voice as last word.
footerFt6 Newsletter
Newsletter
Subscribe is the only action that earns a row. Three minimal links underneath, not a four-column map.
footerFt3 Sitemap
Sitemap
4-column link map. The most-AI-recognised footer shape; reserve for genuine docs roots or hubs.
footerFt5 Statement
Statement
One big sentence, one quiet sign-off. Lands the brand's last word on the page.
heroDocumentary
Documentary
Headline reads as the caption of a missing photograph; documentary credit sits in the margin.
heroManifesto
Manifesto
Dark ground, single declaration, one phrase punched in accent. The voice carries the brand.
heroMarquee Hero
Marquee
One thought set big, with a mono dateline as the editorial anchor. No imagery - the type is the design.
heroQuestion
Question
Hero asks rather than tells. Useful when the brief is invitational; the answer is the rest of the page.
heroSplit-screen
Split-screen
Typography on one half, atmospheric pure-CSS panel on the other. No image placeholder.
heroStat-Led
Stat-Led
The figure leads. Supporting copy pulls weight from the number. Use when the brief has a real number.
heroWord-as-art
Word-as-art
One word, set to fill the viewport width. The page leads with a noun, not a sentence.
logo-cloudVertical credit roll
Credits list
Partner roster as a vertical list with roles. Reads like film end-credits, not a logo wall.
logo-cloud4×3 contact sheet
Grid
Twelve marks in a hairline-ruled grid. Reads as a contact sheet, not a trust strip.
logo-cloudInfinite scroll
Marquee
Auto-scrolling wordmark loop with mask-faded edges. Pauses on hover, respects reduced-motion.
logo-cloudRounded chip row
Pill chips
Each wordmark in its own rounded chip. Denser than a strip; works at high partner counts.
logo-cloudGrouped by relation
Sectioned
Logos grouped by relationship (Partners, Featured in) - honest labels, not invented tiers.
logo-cloudSingle-row strip
Strip
Wordmark logos in a typographic row, opacity-muted. No invented "trusted by" framing.
navN8 Breadcrumb
Breadcrumb-led
Path is the primary nav. For deep hierarchies - docs, atlases, catalogue subsections.
navN5 Floating pill
Floating pill
Centred pill nav that doesn't sit on a full-width band. Good over full-bleed heroes.
navN1 Inline
Inline minimal
Wordmark left, links inline, utilities right. Utility cluster sits tighter than the nav links.
navN7 Marginal
Marginal
Vertical index in the left margin. Reads like a table-of-contents pulled into the chrome.
navN3 Mega
Mega menu
Top-level links reveal a multi-column panel on hover. For deep sites where flyouts get unwieldy.
navN4 Drawer
Off-canvas
Page leads with the wordmark and a menu affordance; full nav slides in from the right.
navN9 Search-first
Search-first
The search input IS the nav row. Common in archives and ⌘K-led products.
pricingContact-led
Enterprise
No prices visible. What's covered, what's negotiable, where to reach.
pricingLine items
Per-use
Pay-per-call menu rather than tiered plans. Reads as a menu, not a comparison.
pricingSingle focus
Single plan
One plan, no comparison. The page IS the plan. Reads as a brochure.
pricingFeature matrix
Comparison table
Tabular spec sheet. Thin rules, no zebra striping, hover lift to track across rows.
pricingHorizontal plan trio
Three-card
Classic three tiers. The recommended one raised by a thin accent rule - no "Most popular" badge.
pricingIrregular bento
Tier bento
Lead tier spans 2×2; supporting tiers smaller. Visual hierarchy expresses the recommendation.
pricingCadence toggle + 2 plans
Toggle
Bipolar choice with monthly/annual flip. Segmented control with radio semantics.
statStats + footnotes
Annotated
Each figure carries a superscript footnote naming its source. Invites "according to what?"
statHorizontal bars
Bar chart
Numbers shown as relative magnitudes, not isolated figures. Pure CSS, no chart library.
statTwo stats + arrow
Before / after
Shows movement, not just magnitude. Real numbers from the project - banner-killer impact.
stat6-stat grid
Stat grid
Three columns of two stats each. Denser than the row; carries editorial captions.
stat4-stat row
Stat row
Four real catalogue numbers, tabular-nums. No invented stats - these are real.
statOne giant number
Single hero
One number, set as large as the page allows. For when the strongest claim is countable and singular.
testimonialDark band + credit roll
Cinematic
Dark ground, single quote, attribution as film-credit row. Invites verbatim quotation.
testimonialChat snippet
Conversation
Three lines of dialogue. Invites the reader to overhear rather than be sold to.
testimonialQuote grid
Mosaic
Four cards, hover-lifted. Density that reads as range without picking one voice over another.
testimonialOutlet credit
Press quote
Single press mention with byline + outlet. Placeholder slots - never invent press.
testimonialSingle voice
Pull quote
One huge quote, single attribution. Voice as marketing. Placeholder slots - quotes are never invented.
testimonialStar + short quote
Reviews row
Three star reviews with one-line quotes. Counts placeholdered - no invented review totals.
testimonialFace + voice
Single portrait
One face, one voice. Portrait slot is bordered placeholder; replace with real photograph.
Bandedcta/banded
Full-bleed accent ribbon with one action. Earns its loudness by being the only one on the page.
React 19 + Tailwind v4 JSXOriginal source
/* inspo-reference-component
* type= cta | genre= editorial | theme= Inspo-paper
* archetype= Banded | diversification= differs from Quiet on paper band
* (accent-bleed vs paper) + voice (declarative vs invitational)
* states= default + hover (button: ink wipe), focus-visible (ring)
* contrast= pass (46-50)
*/
/**
* Banded CTA - full-bleed accent ribbon with a single action. The
* pattern earns its loudness by being the only one of its kind on the
* page. Reserve for the singular conversion ask; never stack two of
* these on one page.
*/
export function CtaBanded() {
return (
<section
className="relative overflow-hidden border-y rule bg-[var(--color-accent)] text-[var(--color-accent-ink)] px-8 py-20 sm:px-14 sm:py-24"
>
<div className="grid grid-cols-1 items-center gap-x-10 gap-y-8 lg:grid-cols-12">
<div className="lg:col-span-8">
<p className="font-mono text-xs tracking-normal text-[var(--color-paper)]/70">
Install once. Free forever.
</p>
<p
className="font-display mt-4 max-w-[22ch] text-balance leading-[1] tracking-tight"
style={{ fontSize: "clamp(2rem, 5vw, 3.5rem)" }}
>
Lend your agent some taste.
</p>
</div>
<div className="lg:col-span-4 lg:justify-self-end">
{/* Inverse button - paper background on accent ground. Hover
wipes to ink so the button stays the heaviest thing in
the band even after the eye adjusts to the red. */}
<a
href="#"
className="group/btn relative inline-flex h-12 items-center gap-3 overflow-hidden border-2 px-7 font-mono text-sm tracking-normal transition-colors duration-300 ease-out"
style={{
borderColor: "var(--color-paper)",
color: "var(--color-accent)",
backgroundColor: "var(--color-paper)",
}}
>
<span
aria-hidden
className="absolute inset-0 origin-left scale-x-0 transition-transform duration-300 ease-out group-hover/btn:scale-x-100"
style={{ backgroundColor: "var(--color-ink)" }}
/>
<span className="relative z-10 transition-colors duration-300 group-hover/btn:text-[var(--color-paper)]">
npx inspo init
</span>
<span
aria-hidden
className="relative z-10 transition-[transform,color] duration-300 group-hover/btn:translate-x-0.5 group-hover/btn:text-[var(--color-paper)]"
>
→
</span>
</a>
</div>
</div>
</section>
);
}