Design System · Living Component Library

Building blocks for modern edge applications

Constructed on Tailwind CSS v4, a refined subdued canvas, and a scalable 60-30-10 multi-color branding engine. Every component is backed by mathematical WCAG AA contrast enforcement.

Interactive Brand Preset Switcher

Select a preset to preview how the 60-30-10 multi-brand architecture reskins components in real-time:

Tech Bluetech-blue

Enterprise SaaS starter palette: vibrant tech blue paired with warm sunset coral accent.

60% Canvas30% Primary10% Brand Accent
Restricted Accent Scope (Punctuation Only):

Enterprise Pipeline

$128,450

+18.4%
Q4 Target Completion84%

Punctuation Rule: Brand accent is restricted strictly to tiny dots and pill tags. Buttons always use primary or neutral.

Identity & Color

60-30-10 Multi-Color Brand Engine

Modern applications need distinct visual roles. The starter framework separates the neutral canvas (60%) from the primary brand structure (30%) and gives you first-class Brand Accent tokens (10%) for high-visibility badges, secondary actions, and highlight pills.

60%bg-background

Canvas & Negative Space

The page canvas is luminous off-white (#fafafa in light, #090909 in dark). Raised panels sit above the canvas with bg-card and crisp perimeter borders.

30%bg-primary

Primary Brand Structure

Primary buttons, active tabs, main links, and key navigation chrome. Anchor token --primary establishes product identity while keeping total brand fill under 10% of any viewport.

10%bg-brand-accent

Chromatic Accent Emphasis

Pills, callout tags, secondary CTAs, and KPI highlight badges. Guarantees high contrast against the canvas and primary brand surfaces without improvising low-opacity alpha tints.

Semantic Palette Swatches

Click any swatch to copy utility class

Non-Semantic Label Families

10 chromatic hues with 4 roles each (subtle, on-subtle, border, solid). Status colors communicate system health; labels categorize domain metadata.

Semantic Separation
Violetviolet
Subtle Tag
Solid Chip
Indigoindigo
Subtle Tag
Solid Chip
Tealteal
Subtle Tag
Solid Chip
Cyancyan
Subtle Tag
Solid Chip
Pinkpink
Subtle Tag
Solid Chip
Limelime
Subtle Tag
Solid Chip
Orangeorange
Subtle Tag
Solid Chip
Brownbrown
Subtle Tag
Solid Chip
Cool Graycool-gray
Subtle Tag
Solid Chip
Graygray
Subtle Tag
Solid Chip

Data Visualization & Chart Series

Visual color tokens configured for charts, graphs, and heatmaps, strictly decoupled from system status primitives.

12 Categorical Series (Discrete Data)--chart-1 … --chart-12
Series 1
Series 2
Series 3
Series 4
Series 5
Series 6
Series 7
Series 8
Series 9
Series 10
Series 11
Series 12 (Other)
Sequential Density Ramp (Low to High Intensity)--chart-seq-1 … --chart-seq-7
Seq 1 (Lightest)
Seq 2
Seq 3
Seq 4 (Mid)
Seq 5
Seq 6
Seq 7 (Darkest)
Diverging Delta Ramp (Negative → Neutral → Positive)--chart-div-neg-3 … --chart-div-pos-3
Neg 3 (Max neg)
Neg 2
Neg 1
Mid (Neutral)
Pos 1
Pos 2
Pos 3 (Max pos)

Surfaces & Elevation

Surfaces & Elevation

Six elevation levels designed for depth and hierarchy. Surfaces are pure semantic layers without arbitrary opacity hacks or decorative blur blobs.

--card

card

Raised panels, sticky header

light: n-0 · dark: n-900

--background

background

Page canvas

light: n-50 · dark: n-950

--background-subtle

background subtle

Sunken wells, icon tiles, alt rows

light: n-100 · dark: n-850

--popover

popover

Menus, dialogs, tooltips, toasts

light: n-0 · dark: n-850

--surface-inverse

surface inverse

Neutral inverse band (footer, CTA)

light: n-850 · dark: n-50

--surface-brand

surface brand

One full-bleed brand band per page

light: brand-800 · dark: brand-900

--scrim

scrim

Modal and dialog backdrop

light: black at 50% · dark: black at 64%

Elevation & Border Radius Tokens

R
rounded-xsTags, indicators
R
rounded-smSmall controls
R
rounded-mdButtons, inputs
R
rounded-lgStandard cards
R
rounded-xlElevated panels
R
rounded-2xlModals, dialogs

Typography & Scale

Predictable Typographical Hierarchy

Every heading, body, and caption maps to a tested type utility. Fluid scaling guarantees legibility across handheld viewports and ultra-wide monitors.

UtilitySpecimen PreviewMetrics
Ship the framework, not the scaffoldclamp(2.5rem, 1.35rem + 4.9vw, 4.5rem) · line-height 1.08
The quick brown fox jumps over the lazy dogclamp(2.125rem, 1.6rem + 2.2vw, 3rem) · line-height 1.12
The quick brown fox jumps over the lazy dogclamp(1.625rem, 1.3rem + 1.4vw, 2rem) · line-height 1.2
The quick brown fox jumps over the lazy dogclamp(2rem, 1.5rem + 2.2vw, 3rem) · line-height 1.15
The quick brown fox jumps over the lazy dog1.375rem · line-height 1.3
The quick brown fox jumps over the lazy dog1.125rem · line-height 1.5rem
The quick brown fox jumps over the lazy dog1rem · line-height 1.5rem
The quick brown fox jumps over the lazy dog0.875rem · line-height 1.25rem
The quick brown fox jumps over the lazy dog1.125rem · line-height 1.7rem
The quick brown fox jumps over the lazy dog1rem · line-height 1.6rem
The quick brown fox jumps over the lazy dog0.875rem · line-height 1.45rem
Fine print: token metadata, table cells and helper notes.0.8125rem · line-height 1.35rem
REACT ROUTER · SUPABASE · CLOUDFLARE0.75rem · line-height 1rem

Component Catalog

Upstream shadcn/ui Component Library

Complete collection of interactive UI primitives styled with semantic tokens. Vendored cleanly in app/components/ui/** and wrapped as needed.

Buttons & Actions

Variants, sizes, loading states, and icon configurations.

Button.tsx

Variants

Link Style

Sizes & States

On-Dark / Inverted Surfaces (Hero & Brand-Deep)

Form Controls & Validation

Inputs, textareas, selects, checkboxes, switches, and validation states.

Input.tsx · Select.tsx

Clear text input with leading iconography.

aria-invalid paints the destructive ring.

Keyboard-accessible floating menu.

Cards & Dashboard Widgets

KPI stats, interactive cards, and high-visibility highlight panels.

Card.tsx
Monthly Active Users
+24.6%
42,890

+8,120 net new accounts this cycle

Edge Database Sync
Distributed Supabase replication across Cloudflare Workers.
RECOMMENDEDv2.4

Automatic Type Strip

Native TypeScript parsing runs on Node 22+ with zero runtime transpilation overhead.

Learn more →

Badges & Status Families

Compact pills for metadata, counts, and system health status.

Badge.tsx

Badge Variants

DefaultSecondaryOutlineDestructiveAccent Pill TagSoft Primary

Status Family Indicators

success

Saved, verified, live

warning

Needs attention, not broken

destructive

Irreversible or failed

info

Neutral notice

Feedback, Alerts & Skeletons

System notifications, progress indicators, and loading skeletons.

Alert.tsx · Skeleton.tsx

Loading Skeleton States

Navigation & Data Tables

Breadcrumbs, tabs, sortable table rows, and interactive dialogs.

Tabs.tsx · Table.tsx · Dialog.tsx

Component Library

Reusable Patterns, Layout & Marketing Component Catalog

All components are pre-wired to Tier-3 semantic design tokens and adhere to the mechanical design system contract.

Section

app/components/patterns/Section.tsx

Every band of a page. It paints edge to edge; the container inside is what is constrained. `frame` adds the 1px rules in the gutter between viewport and content edges.

  • tone?: "page" | "raised" | "sunken" | "inverse" | "brand-deep"
  • theme?: "dark" | "light"
  • size?: "sm" | "md" | "lg" | "xl"
  • container?: "page" | "content" | "prose" | "none"
  • frame?: boolean | { sides?, top?, bottom? }
  • texture?: "grain" | "dotgrid" | "none"
  • background? (section-level art layer)
  • as?
  • id?
  • className?

<Section tone="page" size="sm">

<Section tone="raised" size="sm">

<Section tone="sunken" size="sm">

<Section tone="inverse" size="sm">

<Section tone="brand-deep" size="sm">

Auto-inverting dark context

<Section tone="page" theme="dark" size="sm">

Explicit dark island on any page

FrameLayers

app/components/patterns/Frame.tsx

The frame rules themselves, shared by Section, Hero and MarketingHeader so a header line and the line of the section below it land on the same x. `FRAME_VARS[container]` must be set on the enclosing element. Rule colour always comes from `--section-rule`, never `--border` — on a brand-deep surface `--border` resolves to a solid brand colour, which reads as a stripe rather than a hairline. Short surfaces pass `bottomEdge` so `frame.bottom` paints flush with their own edge (`frame-edge-bottom`) instead of lifting into the gutter, where it would land mid-height on an 84px row.

  • frame?: boolean | { sides?, top?, bottom? }
  • guideLines?: boolean (deprecated alias)
  • bottomEdge?: boolean

FrameLayers has no specimen

SectionHeading

app/components/patterns/SectionHeading.tsx

The start of a Section. Left-aligned by default; centre only when it is the whole band.

  • eyebrow?
  • title
  • description?
  • align?: "left" | "center"
  • aside? (slot)
  • className?

Section heading

A heading that owns the top of a band

Eyebrow, title, lede and an optional aside, in the order a reader scans them.

aside slot

Hero

app/components/patterns/Hero.tsx

The first screen of a marketing page. Supports centered ordina-style marketing stack or classic 7/5 split.

  • layout?: "split" | "centered"
  • eyebrow?
  • title
  • lede?
  • primary?
  • secondary?
  • artifact? (slot)
  • trust? (slot)
  • socialProof? (slot)
  • bento? (slot)
  • marquee? (slot)
  • frame?: boolean | { sides?: boolean; top?: boolean; bottom?: boolean }
  • container?: 'page' | 'content' | 'prose' | 'none'
  • guideLines?: boolean (deprecated alias for frame={{ sides: true }})
  • tone?: "page" | "brand-deep"
  • theme?: "dark" | "light"
  • className?
React Router 8 · Supabase · Cloudflare Workers

The edge-first full-stack starter built for scale

SSR on Cloudflare Workers, auth and storage wired to Supabase, and a three-tier design system — clone it, rename it, ship it.

  • React Router 8
  • Supabase
  • Cloudflare Workers
  • Tailwind v4
  • Vitest + Playwright
framework.dev/overview
Edge SSR · 12ms

Active Sessions

18,420

+14.2%

R2 Bandwidth

1.2 TB

5 MB cap per upload

TTFB

14ms

p50 · global edge

Requests · last hour

2.4M

Live activity

session.hydrate · user@company.com

Admin

r2.download · avatar-2026.webp

Signed 60s

loader · /api/metrics

200 OK
Supabase Auth Hydrated

PageHeader

app/components/patterns/PageHeader.tsx

The title block of an app or info page — replaces the centred heading in a box.

  • eyebrow?
  • title
  • description?
  • aside? (slot)
  • tone?: SectionTone
  • className?

Page header

An app or info page starts here

The title block of a secondary page — a full-bleed band, not a box centred on the canvas.

CtaBand

app/components/patterns/CtaBand.tsx

The closing ask. Full-bleed, copy left, actions right — never a box in whitespace. `overflow="visible"` is for the band that sits directly on top of the marketing footer: it unseals the clip so the watermark bleeds downward and pairs with the footer drawing the same `FRAME_VARS.page` sides, which is how ordina's CTA and footer read as one section while remaining two components.

  • title
  • description?
  • actions
  • tone?: "brand-deep" | "inverse"
  • theme?: "dark" | "light"
  • frame?
  • ghostMarks?
  • overflow?: "clip" | "visible"
  • className?

The closing ask

Full-bleed, copy left, actions right. This specimen uses the inverse tone; the page you are reading ends on the brand tone.

IconTile

app/components/patterns/IconTile.tsx

An icon that anchors a card. tone="brand" at most once per page.

  • size?: "sm" | "md" | "lg"
  • tone?: "muted" | "brand" | "accent"
  • icon?
  • className?

Muted by default; tone="brand" at most once per page.

CodeBlock

app/components/patterns/CodeBlock.tsx

A command, a config shape, or a hero artifact with accessible keyboard scrolling.

  • code
  • filename?
  • className?
app/globals.css
/* app/globals.css — Tier 2 never writes a hex */
--primary: var(--p-brand-600);
--foreground-subtle: var(--p-neutral-450);

LogoStrip

app/components/patterns/LogoStrip.tsx

Trust or stack row under a hero. Wordmarks, not images.

  • items: { label }[]
  • className?
  • React Router 8
  • Supabase
  • Cloudflare Workers
  • Tailwind v4
  • Vitest + Playwright

Eyebrow

app/components/patterns/Eyebrow.tsx

Hero kicker or section category badge in uppercase kicker or sentence-case label format.

  • variant?: "uppercase" | "label"
  • tone?: "neutral" | "brand" | "accent" | "sky" | "mint" | "cream" | "navy"
  • icon?
  • dot?: boolean
  • className?
Architecture (Label)
Feature kicker

Chip

app/components/patterns/Chip.tsx

Gradient-hairline pill chip with outer border-radius 6px and 1px lighting.

  • tone?: "neutral" | "mint" | "cream" | "navy" | "brand"
  • icon?
  • className?
Standard NeutralMint HighlightCream HighlightNavy AccentTidal Brand

StatCard

app/components/patterns/StatCard.tsx

Metric card with 64px Inter Display w500 numeral and footnote lead-in.

  • numeral
  • unit?
  • label
  • chip?
  • className?
99.9%

SLAuptime SLA across all distributed edge clusters

StatGrid

app/components/patterns/StatGrid.tsx

Responsive grid for stat cards with ordina-style staggered top offsets.

  • items
  • offsets?: number[]
  • className?
100%

free core edition with zero license keys

0ms

cold start penalty on Cloudflare Workers

10k+

active production sites running ZeeTheme

SplitFeatureRow

app/components/patterns/SplitFeatureRow.tsx

Alternating text column ↔ visual panel row with dark mode support.

  • eyebrow?
  • title
  • description
  • bullets?: string[]
  • visual
  • reverse?: boolean
  • theme?: "light" | "dark"
  • className?

Distributed Performance Without Compromise

Built directly for Cloudflare Workers and React Router v7 with zero runtime compromise.

  • Global edge-side rendering
  • Signed upload and download URLs
  • Automatic cache invalidation
Interactive Architectural Visual Panel

FeatureTile

app/components/patterns/FeatureTile.tsx

Two-column feature tile with ArtifactPanel visual and copy below.

  • title
  • description
  • visual
  • className?
Artifact Composition

Block Studio Inspector

Composable controls with accessible keyboard navigation.

StepTabs

app/components/patterns/StepTabs.tsx

Accessible tabbed workflow section built on Radix Tabs with active hairlines.

  • tabs: { id, title, description, content }[]
  • defaultValue?
  • className?

Local Authoring Workflow

Instant HMR and zero-build preview.

TrustRow

app/components/patterns/TrustRow.tsx

Data-driven rating glyphs and trust statement row.

  • items: { glyph?, label }[]
  • className?
WordPress® 6.7+ Compatible
100% Free Forever Core Edition
Zero Vendor Lock-In

Logo

app/components/layout/Logo.tsx

Token-driven brand mark with 6-sided isometric hexagon Z and Inter Display wordmark.

  • variant?: "badge" | "icon" | "monochrome"
  • size?: "sm" | "md" | "lg" | "display"
  • withWordmark?: boolean
  • className?

MarketingHeader

app/components/layout/MarketingHeader.tsx

Marketing header whose logo, wordmark, nav and buttons invert with its surface. `brand-deep` reuses the section tone so a header over a dark hero is painted the same colour; `transparent-on-brand` inverts without a surface. Sticky by default, and a transparent resting tone resolves to `solid` once scrolled. A sticky header occupies flow above the hero, so the hero's lines begin at y=header height — it normally needs `frame={{ sides: true, bottom: true }}` to keep the frame continuous, the bottom hairline being the same full-bleed 10%-white rule ordina draws. `solid` already carries a `border-b border-border` card edge, so do not add `frame.bottom` on top of it.

  • tone?: 'transparent' | 'transparent-on-brand' | 'solid' | 'brand-deep'
  • sticky?: boolean
  • scrolledTone?: HeaderTone
  • scrolled?: boolean
  • frame?: SectionFrame
  • container?: 'page' | 'content' | 'prose' | 'none'
  • className?

MarketingFooter

app/components/layout/MarketingFooter.tsx

Floating white sheet footer on surface-brand with 5 link columns and status pill. Draws its own frame (`FRAME_VARS.page` + `FrameLayers frame={{ sides: true, bottom: true }}`) so the vertical pair continues straight down from the closing CTA band above it, and the bottom rule is the section-scale inset one — ordina's sits 41px above the band end, not flush. Set `[--section-rule:var(--guide-line-color)]` explicitly: on this surface `--border` resolves to a solid brand colour and would read as a stripe.

  • className?

AppFooter

app/components/layout/AppFooter.tsx

Minimal legal footer for authenticated dashboard and admin shells.

  • version?
  • className?

Reveal

app/components/motion/Reveal.tsx

Scroll-triggered entrance animation with reduced-motion fallback.

  • children
  • direction?: 'up' | 'down' | 'left' | 'right' | 'none'
  • distance?: 'sm' | 'md' | 'lg'
  • once?: boolean
  • className?

Scroll Reveal Primitive

Animates smoothly into viewport; degrades gracefully under reduced motion.

Stagger

app/components/motion/Stagger.tsx

Parent orchestration container for staggered child reveals.

  • children
  • staggerMs?: number
  • className?
Staggered Card 1
Staggered Card 2
Staggered Card 3

StaggerItem

app/components/motion/StaggerItem.tsx

Child item inside a Stagger container receiving motion timings.

  • children
  • className?
Stagger Item Specimen

Marquee

app/components/motion/Marquee.tsx

Continuous pure-CSS horizontal ticker with edge fade masks.

  • children
  • speed?: 'slow' | 'normal' | 'fast'
  • pauseOnHover?: boolean
  • reverse?: boolean
  • className?
Gutenberg Block StudioFull Site Editing PatternsCloudflare Workers Edge SSRSemantic Design Tokens

StickyNarrative

app/components/motion/StickyNarrative.tsx

Scroll-bound narrative pinning text while artifacts scroll past.

  • steps: { statement, artifact }[]
  • reducedMotion?: boolean
  • className?

The platform that connects your work

people

ArtifactPanel

app/components/artifacts/ArtifactPanel.tsx

Elevated container for product UI specimens with shadow-float.

  • children
  • tone?: 'glass' | 'card' | 'sunken'
  • className?

Artifact Panel

Rendered with shadow-float and rounded-xl boundary.

GuideLines

app/components/artifacts/GuideLines.tsx

1px vertical rules at container edges for layout framing.

  • tone?: 'brand' | 'light'
  • className?
Guide lines rendered at container edges

GrainOverlay

app/components/artifacts/GrainOverlay.tsx

Local SVG noise texture overlay at 0.04 opacity.

  • className?

Local SVG Grain Texture

Subtle 0.04 opacity noise tile.

DotGridBackground

app/components/artifacts/DotGridBackground.tsx

Local SVG dot-pattern background for narrative sections.

  • className?

Dot Grid Pattern Background

Local SVG 780px circle tile.

GhostMarks

app/components/artifacts/GhostMarks.tsx

Oversized decorative Z watermark behind dark CTA bands. Marks sit flush on the section frame lines — left mirrored at the top, right rising from the bottom; pass via Section's `background` slot. Alpha comes from `--texture-ghost-opacity` (0.03, which is ordina's measured SVG fill alpha — it bakes the fade into the fill and leaves CSS opacity at 1), so never add an `opacity-*` class at a call site: tailwind-merge drops the primitive's own value and the mark silently renders several times too strong. `bleed` drops the clip and lifts the layer to `z-[1]` so the overshoot stays visible in the band below — ordina's closing CTA does this, its right mark runs 70px into the footer; leave it off unless the neighbouring band draws the same frame geometry.

  • variant?: "single" | "dual"
  • theme?: "light" | "brand" | "inverse"
  • bleed?: boolean
  • className?

Ghost Marks Watermark

Two oversized hexagon-Z marks at 0.03 opacity.

TestimonialCard

app/components/marketing/TestimonialCard.tsx

Customer proof card in portrait photo or wide dark quote format.

  • quote
  • author
  • role
  • image?
  • logo?
  • variant?: 'portrait' | 'quote'
  • className?

“ZeeTheme fundamentally changes how WordPress agencies build client sites.”

Sarah Jenkins

Principal Architect, Studio Nine

“The cleanest design system in the WordPress ecosystem. Zero drift, zero bloat.”

Marcus Vance

Head of Product, PublishFlow

TestimonialRail

app/components/marketing/TestimonialRail.tsx

Drag-and-snap horizontal customer quote carousel built on Embla.

  • items: TestimonialCardProps[]
  • className?

“The speed and ergonomics are unmatched.”

Elena Rostova

Tech Director

“Our engineers love the strict token architecture.”

David Kim

Lead Developer

PhotoOverlayCard

app/components/marketing/PhotoOverlayCard.tsx

Full-bleed photo card with top-left title and subtitle overlay for hero bentos.

  • title
  • subtitle?
  • imageSrc
  • imageAlt
  • href?
  • className?

Site Editor Canvas

Full site editing with zero layout shift

ImpactCarousel

app/components/marketing/ImpactCarousel.tsx

Full-bleed horizontal carousel with display stats and brand logos.

  • slides: { title, stat, label, imageSrc, imageAlt }[]
  • className?
100%

Lighthouse Performance Score

IntegrationGrid

app/components/marketing/IntegrationGrid.tsx

Ecosystem integration grid with trademark-safe wordmarks in UI sans.

  • items: { label, icon? }[]
  • variant?: 'static' | 'marquee'
  • className?
WO
WordPress
GU
Gutenberg
RE
React Router
CL
Cloudflare
SU
Supabase
TA
Tailwind

LogoMarquee

app/components/marketing/LogoMarquee.tsx

Continuous grayscale wordmark marquee with edge fades.

  • items: { label }[]
  • speed?: 'slow' | 'normal' | 'fast'
  • className?
  • WordPress
  • Gutenberg
  • React Router
  • Cloudflare Workers
  • Supabase
  • WordPress
  • Gutenberg
  • React Router
  • Cloudflare Workers
  • Supabase

PostCard

app/components/marketing/PostCard.tsx

Standard editorial blog post card with category chip and metadata.

  • category
  • date
  • readTime
  • title
  • excerpt
  • href
  • imageSrc
  • imageAlt
  • className?
Architecture
Nov 2, 20265 min read

Building Block Themes in Production

How to architect modern full-site-editing themes for high-traffic environments.

PostCardFeatured

app/components/marketing/PostCardFeatured.tsx

Large featured blog card capable of straddling navy to white section boundaries.

  • category
  • date
  • readTime
  • title
  • excerpt
  • href
  • imageSrc
  • imageAlt
  • straddle?: boolean
  • className?
Design Systems
Nov 2, 20268 min read

The Future of WordPress Design Tokens

Unified typography, spatial rhythm, and accessible contrast ladders across web and blocks.

ProseBlock

app/components/marketing/ProseBlock.tsx

Long-form editorial article typography at 759px measure with 1.6 line height.

  • children
  • className?

AuthorBio

app/components/marketing/AuthorBio.tsx

Author avatar, title, and bio card for article readers.

  • name
  • role
  • bio
  • avatarSrc
  • className?
Alex Rivera

Alex Rivera

Staff Design Systems Engineer

Leading open-source block infrastructure and accessible token architecture.

FaqAccordion

app/components/marketing/FaqAccordion.tsx

Accessible FAQ accordion with hairline rows built on Radix Accordion.

  • items: { question, answer }[]
  • headerAside? (slot)
  • className?

PricingCard

app/components/marketing/PricingCard.tsx

Plan pricing card with 64px display numeral and D-2 brass accent CTA when highlighted.

  • name
  • price
  • period?
  • description
  • features: string[]
  • highlighted?: boolean
  • ctaLabel?
  • ctaHref?
  • className?

Core Edition

Everything you need to build fast, accessible block themes.

$0/forever

Included features

  • All Standard Blocks
  • Full Site Editing
  • Community Forum

Pro Studio

Advanced tooling and premium addons for agency teams.

$49/mo

Included features

  • Unlimited Client Domains
  • Premium Dynamic Addons
  • Direct Slack Access

PricingGrid

app/components/marketing/PricingGrid.tsx

Multi-tier pricing grid layout for subscription plans.

  • children
  • className?
Plan Option A
Plan Option B

BillingToggle

app/components/marketing/BillingToggle.tsx

Segmented monthly vs annual billing toggle control.

  • value: 'monthly' | 'annual'
  • onChange: (val) => void
  • discountLabel?
  • className?

CurrencyToggle

app/components/marketing/CurrencyToggle.tsx

Accessible USD vs INR currency selector.

  • value: 'USD' | 'INR'
  • onChange: (val) => void
  • className?

ComparisonMatrix

app/components/marketing/ComparisonMatrix.tsx

Accessible feature comparison table with real thead and row/col scopes.

  • columns: string[]
  • categories: { name, rows: { feature, values: (string | boolean)[] }[] }[]
  • className?
CapabilityCore EditionAgency Cloud
Full Site EditingIncludedIncluded
Multi-Domain LicensingIncludedIncluded
Priority Support SLAExcludedIncluded

CovenantList

app/components/marketing/CovenantList.tsx

Data-driven commercial covenant and guarantee list.

  • items: { promise, evidence }[]
  • className?

Zero Block Gating

Core block primitives will never be moved to a paid tier.

Grandfathered Pricing

Subscription renewal rates never increase during active membership.

CatalogCard

app/components/marketing/CatalogCard.tsx

Generic catalog card with prominent '100% Free Forever' badge for blocks and themes.

  • title
  • description
  • archetype?
  • category?
  • preview? (slot)
  • actions? (slot)
  • className?
Portfolio100% Free Forever

Apex Portfolio Theme

Minimalist portfolio theme designed for creative agencies.

FilterPills

app/components/marketing/FilterPills.tsx

Category filter pills built on ToggleGroup.

  • options: { id, label }[]
  • selected: string | string[]
  • onChange
  • multiple?: boolean
  • className?

StatusPill

app/components/marketing/StatusPill.tsx

Live operational status pill with pulsing indicator.

  • status?: 'online' | 'degraded' | 'offline'
  • label?: string
  • className?
Maintainers Online

NewsletterForm

app/components/marketing/NewsletterForm.tsx

Accessible email capture form with inline error validation.

  • actionUrl?
  • onSuccess?
  • className?

Zero spam. Unsubscribe anytime in one click.

DeviceFrame

app/components/marketing/DeviceFrame.tsx

Responsive iframe viewport switcher (1440 / 768 / 375).

  • url
  • title
  • initialDevice?: 'desktop' | 'tablet' | 'mobile'
  • className?

CodeInspector

app/components/marketing/CodeInspector.tsx

Tabbed code specimen container with copy-to-clipboard button.

  • tabs: { filename, code, language? }[]
  • className?
theme.json
/* app/globals.css — Tier 2 never writes a hex */
--primary: var(--p-brand-600);
--foreground-subtle: var(--p-neutral-450);

Interactive States

Micro-Interactions & The 3:1 Focus Chain

Every interactive state maps to an explicit token step, not an opacity cheat. Focus rings preserve a 3:1 contrast ratio against both the control fill and the surrounding page canvas.

light
Default
dark
Default

bg-primary text-primary-foreground

bg-primary + text-primary-foreground

light
Hover
dark
Hover

bg-primary-hover text-primary-foreground

one step down the ramp, never an alpha

light
Focus-visible
dark
Focus-visible

bg-primary text-primary-foreground border-ring outline-none ring-[3px] ring-ring ring-offset-2 ring-offset-ring-offset

two-tone focus chain: ring-offset-2 separates ring from solid fill

light
Active
dark
Active

bg-primary-active text-primary-foreground

brand-800 under the finger

light
Selected
dark
Selected

bg-accent-selected text-accent-foreground

active or selected row fill, distinct from hover

light
Disabled
dark
Disabled

bg-surface-disabled border border-border-disabled text-foreground-disabled

solid disabled fill and border clearing >= 3:1 boundary

light
Loading
dark
Loading

bg-accent text-accent-foreground animate-pulse

the skeleton step, not a spinner per control

light
Error
dark
Error

bg-destructive text-destructive-foreground

aria-invalid paints border-destructive too

light
Empty
dark
Empty

bg-background-subtle text-foreground-muted

the sunken step, so an empty well still reads as a well

WCAG 3:1 Focus Ring Chain Demonstrator

Tab to the buttons below. The outer ring is border-ring and ring-[3px] ring-ring, separated from the button fill by a 2px gap via ring-offset-2 ring-offset-ring-offset. This mechanical separation guarantees WCAG AA compliance across dark and light modes.

Inline Link Focus

Engineering Best Practices

Design System Best Practices: Do's & Don'ts

Prose translation of AGENTS.md and DESIGN.md rules. Automated checks in npm run check:ds mechanically reject violations on CI.

Engineering Do's

  • Build all pages using pattern recipes (Section, Hero, FeatureCard, CtaBand).
  • Take color strictly from semantic tokens: bg-card, text-foreground-muted, border-border.
  • Default to Single-Primary brand mode. If enabled, restrict --brand-accent strictly to tiny punctuation (8px indicator dots, small pill tags).
  • Verify both light and dark themes on every UI modification.
  • Use text-link for brand text to satisfy the 4.5:1 reading floor.

Engineering Don'ts

  • Never use brand or status colors at low alpha as surface fills (bg-primary/5).
  • Never write hardcoded hex values or arbitrary RGB strings in app code.
  • Never use decorative blur blobs or fake opacity tints on color utilities.
  • Never use --brand-accent on buttons, cards, or hero backgrounds — primary CTAs must always use bg-primary.
  • Never place raw boxed CTAs floating in whitespace — use CtaBand.
  • Never edit app/components/ui/** directly; wrap it and record changes in PATCHES.md.

Verification & Architecture

Technical Specifications & WCAG Audit Ledger

Complete architectural contract: in-browser verified contrast ratios for all 57 token pairs and dictionary of all 165 Tier-2 tokens.

Verified Contrast Pairs

57 / 57

100% WCAG AA Passing

Tier-2 Semantic Tokens

165

Fully Referenced

Text Contrast Floor

4.5:1

Body & Heading Content

Boundary Contrast Floor

3.0:1

Focus Rings & Charts

Authoritative AI Specification & Contract Dictionary

To keep the live showcase focused on components, interactions, and design guidance, the exhaustive 165-token reference table, 57-pair WCAG contrast manifest, and copy-pasteable TSX blueprints are canonically documented in the root design handbook.

165 Tier-2 Tokens57 Contrast Pairs (4.5:1 / 3.0:1)10 UI Pattern Recipes

Ship your next interface

Every component is pre-wired to semantic tokens and verified across 57 contrast tests. Compose with patterns; never write raw hex.