<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: LE-VAI</title>
    <description>The latest articles on DEV Community by LE-VAI (@levainbey).</description>
    <link>https://dev.to/levainbey</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4039123%2Fac956bfa-b7b0-4363-8a60-f03de01ae058.png</url>
      <title>DEV Community: LE-VAI</title>
      <link>https://dev.to/levainbey</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/levainbey"/>
    <language>en</language>
    <item>
      <title>I scored 91 websites against a 40-check design contract. Zero got an A.</title>
      <dc:creator>LE-VAI</dc:creator>
      <pubDate>Sat, 08 Aug 2026 01:49:45 +0000</pubDate>
      <link>https://dev.to/levainbey/i-scored-91-websites-against-a-40-check-design-contract-zero-got-an-a-4hea</link>
      <guid>https://dev.to/levainbey/i-scored-91-websites-against-a-40-check-design-contract-zero-got-an-a-4hea</guid>
      <description>&lt;p&gt;We scored 91 websites across 5 industries — fintech, AI/ML, SaaS, design tools, and developer platforms — against a 40-check design system contract. The contract checks tokens, typography, motion, accessibility, and interaction feel against real design-system standards. Not one site scored an A. Not one scored a B. Not one scored a C.&lt;/p&gt;

&lt;p&gt;The best score in the entire dataset was 74% — a D.&lt;/p&gt;

&lt;p&gt;This is the capstone of a 7-part series. The prior articles scored individual batches. This one synthesizes all of them and asks the question that matters: if the design industry can't pass a design contract, what is the design industry actually selling?&lt;/p&gt;

&lt;h2&gt;
  
  
  The full leaderboard
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Rank&lt;/th&gt;
&lt;th&gt;Site&lt;/th&gt;
&lt;th&gt;Score&lt;/th&gt;
&lt;th&gt;Grade&lt;/th&gt;
&lt;th&gt;Industry&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Stripe&lt;/td&gt;
&lt;td&gt;74.0%&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;Fintech&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Vercel AI SDK&lt;/td&gt;
&lt;td&gt;73.9%&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;AI infra&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Vercel&lt;/td&gt;
&lt;td&gt;67.4%&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;AI infra&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Linear&lt;/td&gt;
&lt;td&gt;66.0%&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;SaaS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Asana&lt;/td&gt;
&lt;td&gt;64.0%&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;SaaS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;Modal&lt;/td&gt;
&lt;td&gt;63.0%&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;AI infra&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;Figma&lt;/td&gt;
&lt;td&gt;62.5%&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;Design tools&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;Wise&lt;/td&gt;
&lt;td&gt;62.0%&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;Fintech&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;Replicate&lt;/td&gt;
&lt;td&gt;60.4%&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;AI infra&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;Coda&lt;/td&gt;
&lt;td&gt;60.4%&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;SaaS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;Anthropic&lt;/td&gt;
&lt;td&gt;60.0%&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;AI models&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;ClickUp&lt;/td&gt;
&lt;td&gt;60.0%&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;SaaS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;td&gt;Monday&lt;/td&gt;
&lt;td&gt;60.0%&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;SaaS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;Plaid&lt;/td&gt;
&lt;td&gt;60.0%&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;Fintech&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;Airtable&lt;/td&gt;
&lt;td&gt;58.3%&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;SaaS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;LlamaIndex&lt;/td&gt;
&lt;td&gt;58.3%&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;AI models&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;td&gt;Mistral&lt;/td&gt;
&lt;td&gt;56.5%&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;AI models&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;td&gt;Hugging Face&lt;/td&gt;
&lt;td&gt;56.2%&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;AI models&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;Cohere&lt;/td&gt;
&lt;td&gt;56.0%&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;AI models&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;td&gt;Notion&lt;/td&gt;
&lt;td&gt;46.0%&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;SaaS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;21&lt;/td&gt;
&lt;td&gt;Pinecone&lt;/td&gt;
&lt;td&gt;46.0%&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;AI infra&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;22&lt;/td&gt;
&lt;td&gt;Brex&lt;/td&gt;
&lt;td&gt;45.7%&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;Fintech&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;23&lt;/td&gt;
&lt;td&gt;Miro&lt;/td&gt;
&lt;td&gt;44.0%&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;Design tools&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;24&lt;/td&gt;
&lt;td&gt;Whimsical&lt;/td&gt;
&lt;td&gt;44.0%&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;Design tools&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;25&lt;/td&gt;
&lt;td&gt;Pitch&lt;/td&gt;
&lt;td&gt;43.5%&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;Design tools&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;26&lt;/td&gt;
&lt;td&gt;Cash App&lt;/td&gt;
&lt;td&gt;41.3%&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;Fintech&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;Mercury&lt;/td&gt;
&lt;td&gt;BLOCKED&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;Fintech (HTTP 429)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;Coinbase&lt;/td&gt;
&lt;td&gt;BLOCKED&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;Fintech (HTTP 403)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;Revolut&lt;/td&gt;
&lt;td&gt;BLOCKED&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;Fintech (HTTP 403)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;Chime&lt;/td&gt;
&lt;td&gt;BLOCKED&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;Fintech (HTTP 403)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;SoFi&lt;/td&gt;
&lt;td&gt;BLOCKED&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;Fintech (HTTP 403)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;OpenAI&lt;/td&gt;
&lt;td&gt;BLOCKED&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;AI models (HTTP 403)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;Perplexity&lt;/td&gt;
&lt;td&gt;BLOCKED&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;AI models (HTTP 403)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Plus 57 sites scored in prior batches (30 general + 16 dev tools + 11 fintech), all scoring D or F. Full data at &lt;a href="https://designesy.org/leaderboard" rel="noopener noreferrer"&gt;designesy.org/leaderboard&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The methodology
&lt;/h2&gt;

&lt;p&gt;The Designesy scoring engine fetches each site's live HTML and CSS, extracts design tokens from &lt;code&gt;:root&lt;/code&gt;, and runs 40 deterministic checks against a design system contract. The contract covers 7 categories:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tokens&lt;/strong&gt; — semantic color roles (&lt;code&gt;--ink&lt;/code&gt;, &lt;code&gt;--paper&lt;/code&gt;, &lt;code&gt;--signal&lt;/code&gt;), luminance and saturation validation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cadence&lt;/strong&gt; — &lt;code&gt;text-wrap: balance + pretty&lt;/code&gt;, &lt;code&gt;tabular-nums&lt;/code&gt;, &lt;code&gt;font-synthesis: none&lt;/code&gt;, &lt;code&gt;text-decoration-skip-ink: auto&lt;/code&gt;, line-height by role, rem-based scale&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Motion&lt;/strong&gt; — &lt;code&gt;prefers-reduced-motion&lt;/code&gt; support, no &lt;code&gt;transition:all&lt;/code&gt;, &lt;code&gt;will-change&lt;/code&gt; restricted to transform/opacity, duration tokens&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Takt&lt;/strong&gt; — press scales above 0.95 floor, concentric border-radius sets, stagger enter delays, soften exit transforms&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Poise&lt;/strong&gt; — fine-pointer hover guards, press settle scales, keyboard-affordance signals&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accessibility&lt;/strong&gt; — WCAG AA 4.5:1 button contrast, &lt;code&gt;:focus-visible&lt;/code&gt; rings, contrast on paper surfaces&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Performance&lt;/strong&gt; — Core Web Vitals (LCP, INP, CLS)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every check is deterministic. No subjective scoring. No human judgment. The engine fetches the CSS, runs the checks, and returns a score. You can &lt;a href="https://designesy.org/score" rel="noopener noreferrer"&gt;run it yourself&lt;/a&gt; on any URL.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding 1: The design tools paradox
&lt;/h2&gt;

&lt;p&gt;The companies that sell design tools score the same as everyone else.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Figma (62.5%)&lt;/strong&gt; — the design tool the industry uses — scores between Asana (64%) and Coda (60%). It's indistinguishable from project management tools. No &lt;code&gt;text-wrap&lt;/code&gt;, no &lt;code&gt;tabular-nums&lt;/code&gt;, no &lt;code&gt;::selection&lt;/code&gt; rule on its marketing site.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Webflow (52.0%)&lt;/strong&gt; — the no-code design platform — scores below Airtable (58%). Press scales of 0.66 and 0.33 — buttons compress to a third of their size on tap.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pitch (43.5%)&lt;/strong&gt; — a company literally named after design presentations — scores below Cash App (41.3%), a fintech site with zero design tokens. No &lt;code&gt;:focus-visible&lt;/code&gt; rules. No &lt;code&gt;prefers-reduced-motion&lt;/code&gt;. No duration tokens.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Miro (44.0%)&lt;/strong&gt; — a visual workspace — has &lt;code&gt;--ink&lt;/code&gt; and &lt;code&gt;--paper&lt;/code&gt; set to the same color. 0.00:1 contrast. The text and the background are identical.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the sharpest finding in the dataset. The companies selling "beautiful design" can't pass a design contract. Their marketing says one thing. Their CSS says another.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding 2: Infrastructure beats models
&lt;/h2&gt;

&lt;p&gt;In the AI/ML sector, the infrastructure companies outscore the model companies by a clear margin:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AI infrastructure average: 62.1%&lt;/strong&gt; (Vercel AI SDK, Vercel, Modal, Replicate, Pinecone)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI model companies average: 56.5%&lt;/strong&gt; (Anthropic, LlamaIndex, Mistral, Hugging Face, Cohere, Together AI)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The 5.6-point gap isn't accidental. Infrastructure companies build developer tools — dashboards, docs, deployment UIs. Their product &lt;em&gt;is&lt;/em&gt; the interface, so they invest in design engineering. Model companies compete on benchmarks and API latency. The website is marketing, not product.&lt;/p&gt;

&lt;p&gt;The scores reflect where design investment actually goes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding 3: Token misconfiguration is universal
&lt;/h2&gt;

&lt;p&gt;The most common failure across all 91 sites isn't a missing feature. It's a misconfigured token.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Whimsical&lt;/strong&gt;: &lt;code&gt;--ink&lt;/code&gt; luminance 255/255 — the "dark text" token is pure white&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Miro&lt;/strong&gt;: &lt;code&gt;--ink&lt;/code&gt; and &lt;code&gt;--paper&lt;/code&gt; are the same color — 0.00:1 contrast&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ClickUp&lt;/strong&gt;: &lt;code&gt;--ink&lt;/code&gt; on &lt;code&gt;--paper&lt;/code&gt; = 0.00:1 — same color&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Linear&lt;/strong&gt;: &lt;code&gt;--ink&lt;/code&gt; luminance 182/255 — "dark text" is medium-gray; &lt;code&gt;--paper&lt;/code&gt; luminance 19/255 — "light surface" is dark (inverted dark mode with light-mode token names)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cohere&lt;/strong&gt;: &lt;code&gt;--ink&lt;/code&gt; luminance 165/255 — same issue as Linear&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Brex&lt;/strong&gt;: &lt;code&gt;--ink&lt;/code&gt; luminance 191/255 — "dark text" is light gray&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pinecone&lt;/strong&gt;: &lt;code&gt;--paper: #fff&lt;/code&gt; but contract expects &lt;code&gt;#010102&lt;/code&gt; — inverted token system&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are root-level mistakes. A misconfigured &lt;code&gt;--ink&lt;/code&gt; token cascades through every component that uses it. Every text color, every button label, every heading inherits the error. And because the token is named &lt;code&gt;--ink&lt;/code&gt;, the team assumes it's correct.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding 4: 7 sites block verification entirely
&lt;/h2&gt;

&lt;p&gt;Seven sites — 8% of the dataset — have WAF/Cloudflare configurations that reject the scoring engine's HTTP request before the CSS arrives:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fintech&lt;/strong&gt;: Mercury (429), Coinbase (403), Revolut (403), Chime (403), SoFi (403) — 5 of 12 fintech sites (42%)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI/ML&lt;/strong&gt;: OpenAI (403), Perplexity (403) — 2 of 12 AI sites (17%)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We tried root domains, www variants, and blog subdomain paths. All blocked at the WAF level, not the path level.&lt;/p&gt;

&lt;p&gt;Transparency is a design quality signal. Sites that let you inspect their CSS are accountable to their design choices. Sites that block inspection aren't — not because their design is necessarily bad, but because they've made it impossible to know.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding 5: No-code builders produce lower scores
&lt;/h2&gt;

&lt;p&gt;Sites built on Framer (Pitch, Miro) average 43.75%. Hand-coded sites average 57.3%. That's a 13.6-point gap.&lt;/p&gt;

&lt;p&gt;Framer generates CSS from visual designs rather than from a token system. The tell is &lt;code&gt;var(--framer-will-change-override,transform)&lt;/code&gt; in the &lt;code&gt;will-change&lt;/code&gt; property — a Framer-specific variable. Framer-built sites in this dataset share the same gaps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No semantic &lt;code&gt;--ink&lt;/code&gt;/&lt;code&gt;--paper&lt;/code&gt;/&lt;code&gt;--signal&lt;/code&gt; tokens&lt;/li&gt;
&lt;li&gt;No &lt;code&gt;:focus-visible&lt;/code&gt; rules (Framer doesn't generate them by default)&lt;/li&gt;
&lt;li&gt;No &lt;code&gt;prefers-reduced-motion&lt;/code&gt; query (Framer animations are JS-driven)&lt;/li&gt;
&lt;li&gt;No duration tokens (Framer uses its own animation timing)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This isn't a Framer problem specifically. It's a no-code-visual-builder pattern. When you generate CSS from a visual canvas, you get the canvas's defaults. And those defaults don't include a design contract.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding 6: Two CSS properties have near-zero adoption
&lt;/h2&gt;

&lt;p&gt;After scoring 91 sites, only 1 site passed each of these Cadence resolved tensions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;text-decoration-skip-ink: auto&lt;/code&gt;&lt;/strong&gt; — prevents underlines from crossing through letter descenders. Passed by: Coda. 1 of 84 scored sites. 1.2% adoption.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;text-underline-position: from-font&lt;/code&gt;&lt;/strong&gt; — positions underlines based on the font's own metrics. Passed by: ClickUp. 1 of 84 scored sites. 1.2% adoption.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are CSS properties that improve typography with zero design cost. One line of CSS each. No performance impact. No layout change. They just make text look better. And 98.8% of sites don't use them.&lt;/p&gt;

&lt;h2&gt;
  
  
  The AI slop connection
&lt;/h2&gt;

&lt;p&gt;This dataset lands in the middle of a live conversation. In 2026, the design industry is debating what's being called "AI design slop" — the widespread reliance on AI tools to generate UIs that are technically correct but lack specific identity.&lt;/p&gt;

&lt;p&gt;A &lt;a href="https://builtin.com/articles/ai-design-slop-era" rel="noopener noreferrer"&gt;June 2026 Built In article&lt;/a&gt; framed it this way: &lt;em&gt;"The baseline for acceptable design has quietly shifted to whatever AI produces. Because AI produces work that is competent enough to not fail any individual review, the shift is invisible from inside any single sprint. You only see it when you look at the market as a whole."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Our 91-site dataset looks at the market as a whole. And what it shows is that the baseline was already low &lt;em&gt;before&lt;/em&gt; AI got involved. The design tools companies (Figma, Webflow, Pitch) score the same as everyone else. The infrastructure companies (Vercel, Stripe) score only slightly better. The model companies (Anthropic, Cohere, Mistral) score worse. And 7 sites block verification entirely.&lt;/p&gt;

&lt;p&gt;A &lt;a href="https://nurxmedov.substack.com/p/your-design-systems-real-job-in-2026" rel="noopener noreferrer"&gt;CHI 2026 study&lt;/a&gt; found that LLM agents hit ~95% design-system compliance at best when reading from a live component registry. At machine speed, the 5% that drifts becomes the screen the next agent copies. If the design industry's own websites can't pass a 40-check contract, what happens when AI agents generate UIs against those same standards?&lt;/p&gt;

&lt;p&gt;The answer is already in the data. The 91 sites we scored represent the best of the web — successful companies with real engineering teams. And they average 56.7%. If that's the ceiling for human-built design, 95% LLM compliance isn't a problem. It's an improvement.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this means
&lt;/h2&gt;

&lt;p&gt;The design industry talks about craft. It sells design systems, design tokens, design tools. It markets beautiful product experiences. But when you run the checks — the same checks that a design system contract requires — the industry's own work doesn't pass.&lt;/p&gt;

&lt;p&gt;This isn't about shaming individual sites. Stripe at 74% is doing better than most. Linear at 66% has excellent interaction feel. Vercel AI SDK at 73.9% has the strongest Cadence implementation we've seen. These are real engineering achievements.&lt;/p&gt;

&lt;p&gt;It's about the gap between what the industry says and what the industry does.&lt;/p&gt;

&lt;p&gt;The design contract exists. The checks are deterministic. The engine is open. Any site can be scored in under 60 seconds. The data is right there. And the data says: the design industry is selling compliance it can't pass.&lt;/p&gt;

&lt;p&gt;The fix isn't more design tools. It's not more AI-generated UIs. It's the check itself. As the Akhmedov article argued: &lt;em&gt;the design system didn't fail. Every token resolved. Every color was on-brand. The library was fine. The check failed. We didn't have one.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Now you do.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Scored with &lt;a href="https://designesy.org" rel="noopener noreferrer"&gt;Designesy&lt;/a&gt; — a 40-check design system verification engine. The contract, the engine, and all 91 site scores are open. &lt;a href="https://designesy.org/score" rel="noopener noreferrer"&gt;Run your own site&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This is the capstone of a 7-part series: &lt;a href="https://dev.to/designesy/we-scored-30-real-websites-against-a-40-check-design-contract-heres-what-we-found-58ce"&gt;30 sites scored&lt;/a&gt;, &lt;a href="https://dev.to/designesy/we-scored-16-more-sites-the-dev-tools-are-worse-than-the-design-awards-4dp0"&gt;16 dev tools scored&lt;/a&gt;, &lt;a href="https://dev.to/designesy/the-fintech-sites-that-handle-your-money-cant-pass-a-design-contract-2l8k"&gt;11 fintech sites scored&lt;/a&gt;, &lt;a href="https://dev.to/designesy/57-sites-1-design-contract-0-a-grades-here-are-the-patterns-5glk"&gt;57-site synthesis&lt;/a&gt;, &lt;a href="https://dev.to/levainbey/5-fintech-sites-wont-let-us-verify-their-design-thats-a-finding-3ng4"&gt;5 blocked fintech sites&lt;/a&gt;, &lt;a href="https://dev.to/levainbey/we-scored-12-aiml-platforms-against-a-design-contract-the-infrastructure-beats-the-models-ag8"&gt;12 AI/ML platforms scored&lt;/a&gt;, &lt;a href="https://dev.to/levainbey/the-companies-selling-beautiful-design-cant-pass-a-design-contract-3kpj"&gt;12 SaaS platforms scored&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>design</category>
      <category>a11y</category>
      <category>discuss</category>
    </item>
    <item>
      <title>The companies selling 'beautiful design' can't pass a design contract</title>
      <dc:creator>LE-VAI</dc:creator>
      <pubDate>Sat, 08 Aug 2026 01:41:28 +0000</pubDate>
      <link>https://dev.to/levainbey/the-companies-selling-beautiful-design-cant-pass-a-design-contract-3kpj</link>
      <guid>https://dev.to/levainbey/the-companies-selling-beautiful-design-cant-pass-a-design-contract-3kpj</guid>
      <description>&lt;p&gt;We scored 12 SaaS/productivity platforms against our 40-check design contract. These are companies whose entire value proposition is design quality — Figma, Webflow, Pitch, Notion, Miro. They sell design tools. They market beautiful product experiences. They should pass.&lt;/p&gt;

&lt;p&gt;They don't.&lt;/p&gt;

&lt;h2&gt;
  
  
  The leaderboard: 12 SaaS/productivity platforms
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Rank&lt;/th&gt;
&lt;th&gt;Site&lt;/th&gt;
&lt;th&gt;Score&lt;/th&gt;
&lt;th&gt;Grade&lt;/th&gt;
&lt;th&gt;Pass&lt;/th&gt;
&lt;th&gt;Fail&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Linear&lt;/td&gt;
&lt;td&gt;66.0%&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Asana&lt;/td&gt;
&lt;td&gt;64.0%&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Figma&lt;/td&gt;
&lt;td&gt;62.5%&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Coda&lt;/td&gt;
&lt;td&gt;60.4%&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;ClickUp&lt;/td&gt;
&lt;td&gt;60.0%&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;Monday&lt;/td&gt;
&lt;td&gt;60.0%&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;Airtable&lt;/td&gt;
&lt;td&gt;58.3%&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;Webflow&lt;/td&gt;
&lt;td&gt;52.0%&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;Notion&lt;/td&gt;
&lt;td&gt;46.0%&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;Miro&lt;/td&gt;
&lt;td&gt;44.0%&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;Whimsical&lt;/td&gt;
&lt;td&gt;44.0%&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;Pitch&lt;/td&gt;
&lt;td&gt;43.5%&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Zero A-grades. Zero B-grades. Zero C-grades.&lt;/strong&gt; The best score is 66% — a D.&lt;/p&gt;

&lt;h2&gt;
  
  
  The design-tool paradox
&lt;/h2&gt;

&lt;p&gt;The bottom 5 are telling:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pitch (43.5%)&lt;/strong&gt; — a company literally named after design presentations — has no &lt;code&gt;:focus-visible&lt;/code&gt; rules, no &lt;code&gt;prefers-reduced-motion&lt;/code&gt; query, no duration tokens, no &lt;code&gt;::selection&lt;/code&gt; rule. It's built on Framer, which generates its own CSS rather than using a semantic token system.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Whimsical (44.0%)&lt;/strong&gt; — a "visual thinking" tool — has &lt;code&gt;--ink&lt;/code&gt; luminance at 255/255. The "dark text" token is pure white. No &lt;code&gt;:focus-visible&lt;/code&gt; rules. No &lt;code&gt;prefers-reduced-motion&lt;/code&gt;. Button contrast 1.00:1.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Miro (44.0%)&lt;/strong&gt; — a visual workspace — has &lt;code&gt;--ink&lt;/code&gt; on &lt;code&gt;--paper&lt;/code&gt; at 0.00:1. The ink and paper tokens are the same color. CLS of 0.121 (fails the 0.1 threshold — the layout shifts on load). Also Framer-built.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Notion (46.0%)&lt;/strong&gt; — press scale of 0.9, below the 0.95 floor. Button contrast 2.96:1.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Webflow (52.0%)&lt;/strong&gt; — press scales of 0.66 and 0.33, the same broken values we saw on Together AI. Button contrast 3.10:1.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These companies sell design. Their websites fail the most basic design checks.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the leaders got right
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Linear (66.0%)&lt;/strong&gt; has the strongest implementation in the batch — full Cadence, &lt;code&gt;text-wrap: balance+pretty&lt;/code&gt;, &lt;code&gt;tabular-nums&lt;/code&gt;, 0.97 press scales across 11 elements, strong poise/takt. But its token system is inverted: &lt;code&gt;--ink&lt;/code&gt; luminance 182/255 (medium gray, not dark), &lt;code&gt;--paper&lt;/code&gt; luminance 19/255 (dark, not light), &lt;code&gt;--signal&lt;/code&gt; saturation 0.00 (gray, not accent). Linear is a dark-mode design using light-mode token names. The implementation is excellent; the token semantics are backwards.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Asana (64.0%)&lt;/strong&gt; has full Cadence, &lt;code&gt;tabular-nums&lt;/code&gt;, 0.98 press scales, and passes WCAG button contrast at 4.62:1. But &lt;code&gt;--muted&lt;/code&gt; on &lt;code&gt;--paper&lt;/code&gt; is 3.30:1 — muted text fails AA. And 27 &lt;code&gt;transition:all&lt;/code&gt; instances.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Figma (62.5%)&lt;/strong&gt; — the design tool itself — has full poise/takt and is the only site in this batch with a rem-based font scale. But no &lt;code&gt;text-wrap&lt;/code&gt;, no &lt;code&gt;tabular-nums&lt;/code&gt;, no &lt;code&gt;::selection&lt;/code&gt;. The company that makes the design tool everyone uses doesn't use the latest typography CSS on its own marketing site.&lt;/p&gt;

&lt;h2&gt;
  
  
  Firsts in the series
&lt;/h2&gt;

&lt;p&gt;Two Cadence resolved tensions that zero sites passed in the first 69 scored sites were finally passed here:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Coda&lt;/strong&gt; is the first site in the series to pass &lt;code&gt;text-decoration-skip-ink: auto&lt;/code&gt; — the CSS property that prevents underlines from crossing through letter descenders.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ClickUp&lt;/strong&gt; is the first site in the series to pass &lt;code&gt;text-underline-position: from-font&lt;/code&gt; — the property that positions underlines based on the font's own metrics rather than browser defaults.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are small details. But after 69 sites scored, only 1 site passed each. That tells you about adoption rates for advanced typography CSS — even among companies selling design tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Framer pattern
&lt;/h2&gt;

&lt;p&gt;Pitch and Miro both fail &lt;code&gt;will-change&lt;/code&gt; with &lt;code&gt;var(--framer-will-change-override,transform)&lt;/code&gt; — a tell that they're built on Framer. Framer generates CSS from visual designs rather than from a token system, which means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No semantic &lt;code&gt;--ink&lt;/code&gt;/&lt;code&gt;--paper&lt;/code&gt;/&lt;code&gt;--signal&lt;/code&gt; tokens (the engine extracts 2 and 43 tokens respectively, vs 196+ for Linear)&lt;/li&gt;
&lt;li&gt;No &lt;code&gt;:focus-visible&lt;/code&gt; rules (Framer doesn't generate them by default)&lt;/li&gt;
&lt;li&gt;No &lt;code&gt;prefers-reduced-motion&lt;/code&gt; query (Framer animations are JS-driven)&lt;/li&gt;
&lt;li&gt;No duration tokens (Framer uses its own animation timing)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This isn't a Framer problem specifically — it's a no-code-visual-builder problem. When you generate CSS from a visual canvas, you get the visual canvas's defaults. And those defaults don't include a design contract.&lt;/p&gt;

&lt;h2&gt;
  
  
  The cross-batch pattern
&lt;/h2&gt;

&lt;p&gt;After 5 batches (30 sites + 16 dev tools + 11 fintech + 12 AI/ML + 12 SaaS = 81 sites), the pattern is structural:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Zero A-grades&lt;/strong&gt; across 81 sites. Only Designesy (the reference implementation) scores A.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The companies selling design quality score the same as everyone else.&lt;/strong&gt; Figma (62.5%) sits between Asana (64.0%) and Coda (60.4%) — it's indistinguishable from project management tools. Webflow (52.0%) scores below Airtable (58.3%). Pitch (43.5%) scores below Cash App (41.3%) — a fintech site with zero design tokens.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Token misconfiguration is universal.&lt;/strong&gt; &lt;code&gt;--ink&lt;/code&gt; set to white (Whimsical), &lt;code&gt;--ink&lt;/code&gt; set to medium-gray (Linear, Cohere, Brex), &lt;code&gt;--ink&lt;/code&gt; and &lt;code&gt;--paper&lt;/code&gt; the same color (Miro, ClickUp). These are root-level mistakes that cascade through every component.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No-code builders produce lower scores.&lt;/strong&gt; Framer-built sites (Pitch, Miro) average 43.75%. Hand-coded sites average 57.3%.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The SaaS sector talks about design quality more than any other industry. Its design engineering is average.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Scored with &lt;a href="https://designesy.org" rel="noopener noreferrer"&gt;Designesy&lt;/a&gt; — a 40-check design system verification engine. The contract, the engine, and all 81 site scores are open. &lt;a href="https://designesy.org/score" rel="noopener noreferrer"&gt;Run your own site&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This is the seventh article in a series: &lt;a href="https://dev.to/designesy/we-scored-30-real-websites-against-a-40-check-design-contract-heres-what-we-found-58ce"&gt;30 sites scored&lt;/a&gt;, &lt;a href="https://dev.to/designesy/we-scored-16-more-sites-the-dev-tools-are-worse-than-the-design-awards-4dp0"&gt;16 dev tools scored&lt;/a&gt;, &lt;a href="https://dev.to/designesy/the-fintech-sites-that-handle-your-money-cant-pass-a-design-contract-2l8k"&gt;11 fintech sites scored&lt;/a&gt;, &lt;a href="https://dev.to/designesy/57-sites-1-design-contract-0-a-grades-here-are-the-patterns-5glk"&gt;57-site synthesis&lt;/a&gt;, &lt;a href="https://dev.to/levainbey/5-fintech-sites-wont-let-us-verify-their-design-thats-a-finding-3ng4"&gt;5 blocked fintech sites&lt;/a&gt;, &lt;a href="https://dev.to/levainbey/we-scored-12-aiml-platforms-against-a-design-contract-the-infrastructure-beats-the-models-ag8"&gt;12 AI/ML platforms scored&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>design</category>
      <category>a11y</category>
      <category>productivity</category>
    </item>
    <item>
      <title>We scored 12 AI/ML platforms against a design contract. The infrastructure beats the models.</title>
      <dc:creator>LE-VAI</dc:creator>
      <pubDate>Sat, 08 Aug 2026 01:31:08 +0000</pubDate>
      <link>https://dev.to/levainbey/we-scored-12-aiml-platforms-against-a-design-contract-the-infrastructure-beats-the-models-ag8</link>
      <guid>https://dev.to/levainbey/we-scored-12-aiml-platforms-against-a-design-contract-the-infrastructure-beats-the-models-ag8</guid>
      <description>&lt;p&gt;After scoring 30 websites, 16 dev tools, and 11 fintech sites against our 40-check design contract, we turned to the AI/ML sector. These are companies built by engineers who care about developer experience. They should score well.&lt;/p&gt;

&lt;p&gt;They don't.&lt;/p&gt;

&lt;h2&gt;
  
  
  The leaderboard: 12 AI/ML platforms
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Rank&lt;/th&gt;
&lt;th&gt;Site&lt;/th&gt;
&lt;th&gt;Score&lt;/th&gt;
&lt;th&gt;Grade&lt;/th&gt;
&lt;th&gt;Pass&lt;/th&gt;
&lt;th&gt;Fail&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Vercel AI SDK&lt;/td&gt;
&lt;td&gt;73.9%&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Vercel&lt;/td&gt;
&lt;td&gt;67.4%&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Modal&lt;/td&gt;
&lt;td&gt;63.0%&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Replicate&lt;/td&gt;
&lt;td&gt;60.4%&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Anthropic&lt;/td&gt;
&lt;td&gt;60.0%&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;LlamaIndex&lt;/td&gt;
&lt;td&gt;58.3%&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;Mistral&lt;/td&gt;
&lt;td&gt;56.5%&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;Hugging Face&lt;/td&gt;
&lt;td&gt;56.2%&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;Cohere&lt;/td&gt;
&lt;td&gt;56.0%&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;Together AI&lt;/td&gt;
&lt;td&gt;52.1%&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;Pinecone&lt;/td&gt;
&lt;td&gt;46.0%&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;Perplexity&lt;/td&gt;
&lt;td&gt;BLOCKED&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;OpenAI&lt;/td&gt;
&lt;td&gt;BLOCKED&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Zero A-grades. Zero B-grades. Zero C-grades.&lt;/strong&gt; The best AI/ML platform scored 73.9% — a D.&lt;/p&gt;

&lt;h2&gt;
  
  
  The infrastructure-models split
&lt;/h2&gt;

&lt;p&gt;The top 4 are all infrastructure: Vercel AI SDK, Vercel, Modal, Replicate. The bottom 6 are model companies: Cohere, Together AI, Pinecone, Hugging Face, Mistral, LlamaIndex.&lt;/p&gt;

&lt;p&gt;This isn't coincidence. Infrastructure companies build developer tools — dashboards, docs, deployment UIs. They invest in design systems because their product &lt;em&gt;is&lt;/em&gt; the interface. Model companies compete on benchmarks and API latency. The website is marketing, not product.&lt;/p&gt;

&lt;p&gt;The scores reflect that priority gap.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the leaders got right
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Vercel AI SDK (73.9%)&lt;/strong&gt; is the highest-scoring site we've seen outside of Designesy itself. Full Cadence typography — &lt;code&gt;text-wrap: balance + pretty&lt;/code&gt;, &lt;code&gt;tabular-nums&lt;/code&gt;, &lt;code&gt;font-synthesis: none&lt;/code&gt;, line-height by role. Strong poise and takt: fine-pointer hover guards, press settle scales, concentric border-radius sets. 37 &lt;code&gt;:focus-visible&lt;/code&gt; rules. Its main failures are &lt;code&gt;will-change&lt;/code&gt; containing &lt;code&gt;height&lt;/code&gt; and px-based font sizes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vercel (67.4%)&lt;/strong&gt; shares the same design DNA — 158 &lt;code&gt;:focus-visible&lt;/code&gt; rules, full Cadence, &lt;code&gt;font-synthesis: none&lt;/code&gt;. It loses points on 3 &lt;code&gt;transition:all&lt;/code&gt; instances and &lt;code&gt;will-change&lt;/code&gt; containing &lt;code&gt;width/height&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Modal (63.0%)&lt;/strong&gt; is clean — no &lt;code&gt;transition:all&lt;/code&gt;, &lt;code&gt;will-change&lt;/code&gt; restricted to transform/opacity, full Cadence, reduced-motion support. It fails on no &lt;code&gt;::selection&lt;/code&gt; rule and no &lt;code&gt;tabular-nums&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Replicate (60.4%)&lt;/strong&gt; has full Cadence, &lt;code&gt;text-wrap: balance+pretty&lt;/code&gt;, reduced-motion, no &lt;code&gt;transition:all&lt;/code&gt;, clean &lt;code&gt;will-change&lt;/code&gt;. But it fails hard on accessibility: button contrast is 1.00:1 — the button text is the same color as the button fill.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the model companies got wrong
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Together AI (52.1%)&lt;/strong&gt; has press scales of 0.66 and 0.33. The contract floor is 0.95. When you press a Together AI button, it compresses to a third of its size. That's not a press interaction — that's a glitch.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cohere (56.0%)&lt;/strong&gt; has &lt;code&gt;--ink&lt;/code&gt; luminance at 165/255. The "dark text" token is medium-gray. Button contrast is 1.00:1 — same as Replicate. But Cohere also has &lt;code&gt;--ink&lt;/code&gt; on &lt;code&gt;--paper&lt;/code&gt; at 2.54:1, failing WCAG AA across the board. The token system is misconfigured at the root.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pinecone (46.0%)&lt;/strong&gt; has no &lt;code&gt;:focus-visible&lt;/code&gt; rules at all. Keyboard users cannot see where they are on the page. Its &lt;code&gt;--paper&lt;/code&gt; token is &lt;code&gt;#fff&lt;/code&gt; but the contract expects &lt;code&gt;#010102&lt;/code&gt; — the token system is inverted. Button contrast is 2.32:1.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hugging Face (56.2%)&lt;/strong&gt; has no &lt;code&gt;prefers-reduced-motion&lt;/code&gt; query. Users who request reduced motion get full animations regardless. It also has &lt;code&gt;--ink&lt;/code&gt; and &lt;code&gt;--muted&lt;/code&gt; tokens missing — the semantic color system is incomplete.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mistral (56.5%)&lt;/strong&gt; has no &lt;code&gt;::selection&lt;/code&gt; rule and no &lt;code&gt;tabular-nums&lt;/code&gt;. Its &lt;code&gt;--duration-quick&lt;/code&gt; and &lt;code&gt;--duration-slow&lt;/code&gt; are both 1000ms — the fast and slow duration tokens are identical, which means the motion timing hierarchy is flat.&lt;/p&gt;

&lt;h2&gt;
  
  
  The blocked sites
&lt;/h2&gt;

&lt;p&gt;Perplexity and OpenAI both return HTTP 403 to our scoring engine. We've seen this pattern in fintech — Mercury, Coinbase, Revolut, Chime, and SoFi all block automated verification. Now two of the biggest AI companies do it too.&lt;/p&gt;

&lt;p&gt;That's 2 of 12 (17%) blocked in AI/ML, compared to 5 of 13 (38%) blocked in fintech. The AI sector is more transparent than fintech — but the two biggest consumer-facing AI companies (OpenAI, Perplexity) are walled off.&lt;/p&gt;

&lt;h2&gt;
  
  
  The cross-batch pattern
&lt;/h2&gt;

&lt;p&gt;After 4 batches (30 sites + 16 dev tools + 11 fintech + 12 AI/ML = 69 scored sites), the pattern holds:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Zero A-grades&lt;/strong&gt; across 69 sites. Only Designesy (the reference implementation) scores A.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Infrastructure beats models.&lt;/strong&gt; Vercel, Modal, and Replicate outscore Cohere, Mistral, and Hugging Face.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Token misconfiguration is the most common failure.&lt;/strong&gt; &lt;code&gt;--ink&lt;/code&gt; set to medium-gray instead of dark. &lt;code&gt;--paper&lt;/code&gt; inverted. &lt;code&gt;--signal&lt;/code&gt; missing. These are root-level mistakes that cascade through every component.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Button contrast fails on 8 of 12 sites.&lt;/strong&gt; The most basic accessibility check — can you read the button text? — and two-thirds of AI/ML platforms fail it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No site uses &lt;code&gt;text-underline-position: from-font&lt;/code&gt; or &lt;code&gt;text-decoration-skip-ink: auto&lt;/code&gt;.&lt;/strong&gt; These are resolved tensions from the Cadence typography spec. Zero adoption.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The AI/ML sector talks about building the future. Its design engineering is stuck in 2020.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Scored with &lt;a href="https://designesy.org" rel="noopener noreferrer"&gt;Designesy&lt;/a&gt; — a 40-check design system verification engine. The contract, the engine, and all 69 site scores are open. &lt;a href="https://designesy.org/score" rel="noopener noreferrer"&gt;Run your own site&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This is the sixth article in a series: &lt;a href="https://dev.to/designesy/we-scored-30-real-websites-against-a-40-check-design-contract-heres-what-we-found-58ce"&gt;30 sites scored&lt;/a&gt;, &lt;a href="https://dev.to/designesy/we-scored-16-more-sites-the-dev-tools-are-worse-than-the-design-awards-4dp0"&gt;16 dev tools scored&lt;/a&gt;, &lt;a href="https://dev.to/designesy/the-fintech-sites-that-handle-your-money-cant-pass-a-design-contract-2l8k"&gt;11 fintech sites scored&lt;/a&gt;, &lt;a href="https://dev.to/designesy/57-sites-1-design-contract-0-a-grades-here-are-the-patterns-5glk"&gt;57-site synthesis&lt;/a&gt;, &lt;a href="https://dev.to/levainbey/5-fintech-sites-wont-let-us-verify-their-design-thats-a-finding-3ng4"&gt;5 blocked fintech sites&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>design</category>
      <category>a11y</category>
      <category>ai</category>
    </item>
    <item>
      <title>5 fintech sites won't let us verify their design. That's a finding.</title>
      <dc:creator>LE-VAI</dc:creator>
      <pubDate>Sat, 08 Aug 2026 01:26:17 +0000</pubDate>
      <link>https://dev.to/levainbey/5-fintech-sites-wont-let-us-verify-their-design-thats-a-finding-3ng4</link>
      <guid>https://dev.to/levainbey/5-fintech-sites-wont-let-us-verify-their-design-thats-a-finding-3ng4</guid>
      <description>&lt;p&gt;When we scored 11 fintech sites against our 40-check design contract, three of them blocked us — Mercury (HTTP 429), Coinbase (HTTP 403), and Revolut (HTTP 403). We tried root domains, www variants, and blog subdomain paths. All blocked at the CSS fetch level.&lt;/p&gt;

&lt;p&gt;So we expanded the batch. We scored 8 more fintech sites to see if the pattern held. It did.&lt;/p&gt;

&lt;h2&gt;
  
  
  The expanded batch: 13 fintech sites, 5 blocked
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Rank&lt;/th&gt;
&lt;th&gt;Site&lt;/th&gt;
&lt;th&gt;Score&lt;/th&gt;
&lt;th&gt;Grade&lt;/th&gt;
&lt;th&gt;Pass&lt;/th&gt;
&lt;th&gt;Fail&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Stripe&lt;/td&gt;
&lt;td&gt;74.0%&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Wise&lt;/td&gt;
&lt;td&gt;62.0%&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Plaid&lt;/td&gt;
&lt;td&gt;60.0%&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;PayPal&lt;/td&gt;
&lt;td&gt;54.3%&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Venmo&lt;/td&gt;
&lt;td&gt;54.3%&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;Notion&lt;/td&gt;
&lt;td&gt;46.0%&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;Brex&lt;/td&gt;
&lt;td&gt;45.7%&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;Cash App&lt;/td&gt;
&lt;td&gt;41.3%&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;Mercury&lt;/td&gt;
&lt;td&gt;BLOCKED&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;Coinbase&lt;/td&gt;
&lt;td&gt;BLOCKED&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;Revolut&lt;/td&gt;
&lt;td&gt;BLOCKED&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;Chime&lt;/td&gt;
&lt;td&gt;BLOCKED&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;SoFi&lt;/td&gt;
&lt;td&gt;BLOCKED&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;5 of 13 fintech sites (38%) block automated design verification.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's not a bug in our scoring engine. That's a finding about the industry.&lt;/p&gt;

&lt;h2&gt;
  
  
  What "blocked" means
&lt;/h2&gt;

&lt;p&gt;Our scoring engine fetches the live site's HTML and CSS, extracts design tokens, and runs 40 deterministic checks against a design system contract. It checks things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does &lt;code&gt;:root&lt;/code&gt; have semantic color tokens (&lt;code&gt;--ink&lt;/code&gt;, &lt;code&gt;--paper&lt;/code&gt;, &lt;code&gt;--signal&lt;/code&gt;)?&lt;/li&gt;
&lt;li&gt;Are font sizes in &lt;code&gt;rem&lt;/code&gt; (not hardcoded &lt;code&gt;px&lt;/code&gt;)?&lt;/li&gt;
&lt;li&gt;Is there a &lt;code&gt;prefers-reduced-motion&lt;/code&gt; media query?&lt;/li&gt;
&lt;li&gt;Do interactive elements have &lt;code&gt;:focus-visible&lt;/code&gt; rules?&lt;/li&gt;
&lt;li&gt;Does &lt;code&gt;::selection&lt;/code&gt; use a brand token (not browser default)?&lt;/li&gt;
&lt;li&gt;Are there &lt;code&gt;tabular-nums&lt;/code&gt; for numeric data?&lt;/li&gt;
&lt;li&gt;Is &lt;code&gt;transition:all&lt;/code&gt; avoided in the stylesheet?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of this requires JavaScript execution. It's static CSS analysis. But Mercury, Coinbase, Revolut, Chime, and SoFi all have WAF/Cloudflare configurations that reject the HTTP request before the CSS arrives.&lt;/p&gt;

&lt;p&gt;We tried:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;mercury.com&lt;/code&gt; → 429&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;www.mercury.com&lt;/code&gt; → 429&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;mercury.com/blog&lt;/code&gt; → 429&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;coinbase.com&lt;/code&gt; → 403&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;www.coinbase.com&lt;/code&gt; → 403&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;blog.coinbase.com&lt;/code&gt; → 403&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;revolut.com&lt;/code&gt; → 403&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;www.revolut.com&lt;/code&gt; → 403&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;revolut.com/blog&lt;/code&gt; → 403&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;chime.com&lt;/code&gt; → 403&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;sofi.com&lt;/code&gt; → 403&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Same result across every URL variant. The block is at the WAF level, not the path level.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters
&lt;/h2&gt;

&lt;p&gt;Design verification is a transparency signal. When a site lets you inspect its CSS, you can check whether it meets accessibility standards, whether it uses a coherent token system, whether it respects reduced-motion preferences. When a site blocks inspection, you can't verify any of that.&lt;/p&gt;

&lt;p&gt;The 8 sites that didn't block us scored between 41% and 74%. None of them passed. But at least they're inspectable. You can see exactly what they got right and what they got wrong.&lt;/p&gt;

&lt;p&gt;The 5 that blocked us? We can't tell you anything about their design quality. They've opted out of transparency.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the inspectable sites got wrong
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Cash App (41.3%)&lt;/strong&gt; is the worst. Zero design tokens extracted — no &lt;code&gt;:root&lt;/code&gt; token system at all. No &lt;code&gt;:focus-visible&lt;/code&gt; rules. No &lt;code&gt;prefers-reduced-motion&lt;/code&gt; query. No duration tokens. It's an untokenized site running on browser defaults.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Notion (46.0%)&lt;/strong&gt; has a press scale of 0.9 — below the 0.95 floor the contract sets for press-feedback takt. That means buttons compress too aggressively on tap. It also has button contrast of 2.96:1, failing WCAG AA 4.5:1.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Brex (45.7%)&lt;/strong&gt; has &lt;code&gt;--ink&lt;/code&gt; luminance at 191/255 — the "dark text" token isn't actually dark. It's a medium gray being used as primary text. No &lt;code&gt;prefers-reduced-motion&lt;/code&gt; query either.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PayPal and Venmo (54.3% each)&lt;/strong&gt; score identically because they share the same parent CSS framework. Same 21 &lt;code&gt;transition:all&lt;/code&gt; instances. Same missing &lt;code&gt;::selection&lt;/code&gt;. Same missing &lt;code&gt;tabular-nums&lt;/code&gt;. When two sites score pixel-identical against a 40-check contract, that's a shared design system — and a shared set of gaps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Plaid (60.0%)&lt;/strong&gt; is strong on poise and takt (0.98 press scales across 76 elements) but has 76 &lt;code&gt;transition:all&lt;/code&gt; instances. That's a performance and predictability problem — &lt;code&gt;transition:all&lt;/code&gt; animates every property change, including ones you don't want.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wise (62.0%)&lt;/strong&gt; has good token semantics but horizontal overflow at 375px viewport width. On a phone, the page scrolls horizontally. That's a mobile-first failure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stripe (74.0%)&lt;/strong&gt; is the clear leader. Full Cadence typography (line-height by role, &lt;code&gt;text-wrap: balance + pretty&lt;/code&gt;, &lt;code&gt;tabular-nums&lt;/code&gt;), button contrast at 16.27:1, no &lt;code&gt;transition:all&lt;/code&gt;. Its main failures are &lt;code&gt;will-change&lt;/code&gt; containing &lt;code&gt;width/background-color&lt;/code&gt; and px-based font sizes instead of &lt;code&gt;rem&lt;/code&gt;. It's the only site in the batch that nearly reaches C-grade.&lt;/p&gt;

&lt;h2&gt;
  
  
  The pattern
&lt;/h2&gt;

&lt;p&gt;Every inspectable fintech site failed the contract. Not one scored above 74%. But the 5 that blocked inspection are worse — not because their design is necessarily bad, but because they've made it impossible to know.&lt;/p&gt;

&lt;p&gt;Transparency is a design quality signal. Sites that let you verify their design are accountable to it. Sites that block verification aren't.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Scored with &lt;a href="https://designesy.org" rel="noopener noreferrer"&gt;Designesy&lt;/a&gt; — a 40-check design system verification engine. The contract, the engine, and all 13 site scores are open. &lt;a href="https://designesy.org/score" rel="noopener noreferrer"&gt;Run your own site&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This is the fifth article in a series: &lt;a href="https://dev.to/designesy/we-scored-30-real-websites-against-a-40-check-design-contract-heres-what-we-found-58ce"&gt;30 sites scored&lt;/a&gt;, &lt;a href="https://dev.to/designesy/we-scored-16-more-sites-the-dev-tools-are-worse-than-the-design-awards-4dp0"&gt;16 dev tools scored&lt;/a&gt;, &lt;a href="https://dev.to/designesy/the-fintech-sites-that-handle-your-money-cant-pass-a-design-contract-2l8k"&gt;11 fintech sites scored&lt;/a&gt;, &lt;a href="https://dev.to/designesy/57-sites-1-design-contract-0-a-grades-here-are-the-patterns-5glk"&gt;57-site synthesis&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>design</category>
      <category>a11y</category>
      <category>fintech</category>
    </item>
    <item>
      <title>We scored 57 sites against a real design contract. None of them passed.</title>
      <dc:creator>LE-VAI</dc:creator>
      <pubDate>Fri, 07 Aug 2026 21:30:26 +0000</pubDate>
      <link>https://dev.to/levainbey/we-scored-57-sites-against-a-real-design-contract-none-of-them-passed-1ff</link>
      <guid>https://dev.to/levainbey/we-scored-57-sites-against-a-real-design-contract-none-of-them-passed-1ff</guid>
      <description>&lt;p&gt;Over the last two weeks, we scored &lt;strong&gt;57 websites&lt;/strong&gt; against a 26-check deterministic design contract — tokens, motion, accessibility, typography, cadence, performance. The contract is real: it's the &lt;a href="https://www.designesy.org/contracts/skill" rel="noopener noreferrer"&gt;Designesy design system&lt;/a&gt;, verifiable via an &lt;a href="https://github.com/LE-VAI/designesy-org" rel="noopener noreferrer"&gt;open-source MCP server&lt;/a&gt; you can run yourself.&lt;/p&gt;

&lt;p&gt;The result: &lt;strong&gt;1 site passed&lt;/strong&gt; (our own, self-scored at 100/A). &lt;strong&gt;Zero others scored above a C.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here's the full picture.&lt;/p&gt;




&lt;h2&gt;
  
  
  The aggregate
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Total sites scored&lt;/td&gt;
&lt;td&gt;57&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Score range&lt;/td&gt;
&lt;td&gt;37.9 – 100.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Grade A&lt;/td&gt;
&lt;td&gt;1 (1.8%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Grade B&lt;/td&gt;
&lt;td&gt;0 (0%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Grade C&lt;/td&gt;
&lt;td&gt;6 (10.5%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Grade D&lt;/td&gt;
&lt;td&gt;18 (31.6%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Grade F&lt;/td&gt;
&lt;td&gt;32 (56.1%)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;88% of the web scored D or F.&lt;/strong&gt; The B tier is empty. The jump from C (77.7, Apple) to A (100, Designesy) is 22 points with nothing in between — a cliff, not a slope.&lt;/p&gt;




&lt;h2&gt;
  
  
  The three batches
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Batch 1: Design systems, SaaS, and inspiration galleries (30 sites)
&lt;/h3&gt;

&lt;p&gt;The original batch scored design-system sites (Primer, Spectrum, Geist), SaaS marketing sites (Vercel, Linear, Stripe), hardware (Apple), and design inspiration galleries (CSS Design Awards, FWA, Pentagram).&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Rank&lt;/th&gt;
&lt;th&gt;Score&lt;/th&gt;
&lt;th&gt;Grade&lt;/th&gt;
&lt;th&gt;Site&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;100.0&lt;/td&gt;
&lt;td&gt;A&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.designesy.org" rel="noopener noreferrer"&gt;Designesy&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;77.7&lt;/td&gt;
&lt;td&gt;C&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apple.com" rel="noopener noreferrer"&gt;Apple&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;77.6&lt;/td&gt;
&lt;td&gt;C&lt;/td&gt;
&lt;td&gt;&lt;a href="https://primer.style" rel="noopener noreferrer"&gt;GitHub Primer&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;73.8&lt;/td&gt;
&lt;td&gt;C&lt;/td&gt;
&lt;td&gt;&lt;a href="https://zeroheight.com" rel="noopener noreferrer"&gt;zeroheight&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;73.6&lt;/td&gt;
&lt;td&gt;C&lt;/td&gt;
&lt;td&gt;&lt;a href="https://vercel.com" rel="noopener noreferrer"&gt;Vercel&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;72.9&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;&lt;a href="https://stripe.com" rel="noopener noreferrer"&gt;Stripe&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;...&lt;/td&gt;
&lt;td&gt;...&lt;/td&gt;
&lt;td&gt;...&lt;/td&gt;
&lt;td&gt;...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;41.1&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;&lt;a href="https://pentagram.com" rel="noopener noreferrer"&gt;Pentagram&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;29&lt;/td&gt;
&lt;td&gt;41.1&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;&lt;a href="https://fwa.org" rel="noopener noreferrer"&gt;FWA&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;30&lt;/td&gt;
&lt;td&gt;37.9&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;&lt;a href="https://cssdesignawards.com" rel="noopener noreferrer"&gt;CSS Design Awards&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Batch 2: Developer tools and frameworks (16 sites)
&lt;/h3&gt;

&lt;p&gt;The second batch scored the tools developers use every day — frameworks, component libraries, AI site builders, runtimes.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Rank&lt;/th&gt;
&lt;th&gt;Score&lt;/th&gt;
&lt;th&gt;Grade&lt;/th&gt;
&lt;th&gt;Site&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;64.6&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;&lt;a href="https://netlify.com" rel="noopener noreferrer"&gt;Netlify&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;64.0&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;&lt;a href="https://ui.shadcn.com" rel="noopener noreferrer"&gt;shadcn/ui&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;63.0&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;&lt;a href="https://sanity.io" rel="noopener noreferrer"&gt;Sanity&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;63.0&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;&lt;a href="https://clerk.com" rel="noopener noreferrer"&gt;Clerk&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;63.0&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;&lt;a href="https://v0.dev" rel="noopener noreferrer"&gt;v0.dev&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;...&lt;/td&gt;
&lt;td&gt;...&lt;/td&gt;
&lt;td&gt;...&lt;/td&gt;
&lt;td&gt;...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;42.0&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;&lt;a href="https://bun.sh" rel="noopener noreferrer"&gt;Bun&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;39.1&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;&lt;a href="https://tokens.studio" rel="noopener noreferrer"&gt;tokens.studio&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Batch 3: Fintech (11 sites)
&lt;/h3&gt;

&lt;p&gt;The third batch scored payment processors, banks, and financial platforms — the sites that handle your money.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Rank&lt;/th&gt;
&lt;th&gt;Score&lt;/th&gt;
&lt;th&gt;Grade&lt;/th&gt;
&lt;th&gt;Site&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;72.9&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;&lt;a href="https://stripe.com" rel="noopener noreferrer"&gt;Stripe&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;66.7&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;&lt;a href="https://square.com" rel="noopener noreferrer"&gt;Square&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;66.0&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;&lt;a href="https://wise.com" rel="noopener noreferrer"&gt;Wise&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;60.0&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;&lt;a href="https://plaid.com" rel="noopener noreferrer"&gt;Plaid&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;58.0&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;&lt;a href="https://adyen.com" rel="noopener noreferrer"&gt;Adyen&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;...&lt;/td&gt;
&lt;td&gt;...&lt;/td&gt;
&lt;td&gt;...&lt;/td&gt;
&lt;td&gt;...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;41.3&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;&lt;a href="https://ramp.com" rel="noopener noreferrer"&gt;Ramp&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;39.1&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;&lt;a href="https://robinhood.com" rel="noopener noreferrer"&gt;Robinhood&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  The 7 cross-industry patterns
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. No industry has a passing site
&lt;/h3&gt;

&lt;p&gt;We scored three verticals: design systems, developer tools, and fintech. The best non-self score in each:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Industry&lt;/th&gt;
&lt;th&gt;Best score&lt;/th&gt;
&lt;th&gt;Best site&lt;/th&gt;
&lt;th&gt;Grade&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Design systems / SaaS&lt;/td&gt;
&lt;td&gt;77.7&lt;/td&gt;
&lt;td&gt;Apple&lt;/td&gt;
&lt;td&gt;C&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Developer tools&lt;/td&gt;
&lt;td&gt;64.6&lt;/td&gt;
&lt;td&gt;Netlify&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fintech&lt;/td&gt;
&lt;td&gt;72.9&lt;/td&gt;
&lt;td&gt;Stripe&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;No industry scored above C.&lt;/strong&gt; The developer-tools batch was the worst — its top scorer (Netlify at 64.6) would rank 7th in the design-systems batch.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. &lt;code&gt;tabular-nums&lt;/code&gt; is universally ignored
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;font-variant-numeric: tabular-nums&lt;/code&gt; makes every digit the same width. It's been supported since 2013. It prevents numbers from jittering when they update.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;11 of 16&lt;/strong&gt; dev-tool sites fail this check&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;11 of 11&lt;/strong&gt; fintech sites fail this check&lt;/li&gt;
&lt;li&gt;Every site that displays version counts, star counts, download counts, pricing, balances, or transactions fails it&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is a one-line CSS property. The entire web ignores it. The sites most dependent on numeric display — fintech — are the worst offenders.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Company valuation doesn't correlate with design maturity
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Company&lt;/th&gt;
&lt;th&gt;Valuation&lt;/th&gt;
&lt;th&gt;Score&lt;/th&gt;
&lt;th&gt;Grade&lt;/th&gt;
&lt;th&gt;Tokens&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Stripe&lt;/td&gt;
&lt;td&gt;$91.5B&lt;/td&gt;
&lt;td&gt;72.9&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;719&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Robinhood&lt;/td&gt;
&lt;td&gt;~$30B&lt;/td&gt;
&lt;td&gt;39.1&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ramp&lt;/td&gt;
&lt;td&gt;$16.5B&lt;/td&gt;
&lt;td&gt;41.3&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;tokens.studio&lt;/td&gt;
&lt;td&gt;seed&lt;/td&gt;
&lt;td&gt;39.1&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Robinhood democratized stock trading and is worth ~$30B. Its site has 2 design tokens. Ramp manages corporate spend and is worth $16.5B. Its site has 0 design tokens. tokens.studio is a design token management tool and has 3 tokens on its own site.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The difference isn't budget. It's priority.&lt;/strong&gt; Stripe has 719 tokens because someone at Stripe decided tokens mattered. Robinhood has 2 because no one decided.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Consumer sites fail contrast; developer-facing sites pass it
&lt;/h3&gt;

&lt;p&gt;The clearest split in the data:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Audience&lt;/th&gt;
&lt;th&gt;Sites passing WCAG AA button contrast&lt;/th&gt;
&lt;th&gt;Sites failing&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Developers (Stripe, Square, Vercel, Netlify)&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Consumers (Klarna, Wise, Adyen, Robinhood)&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Klarna's "Buy Now" button: 1.00:1 contrast.&lt;/strong&gt; Same color on same color. On a site where the entire product is clicking a button to split a payment. Adyen: 0.00:1. Wise: 1.85:1. Plaid: 3.87:1.&lt;/p&gt;

&lt;p&gt;The sites that developers use pass accessibility. The sites that consumers use fail it. The people who can fix contrast have accessible buttons. The people who can't are told to click a button they can't read.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. The 40-point floor is industry-agnostic
&lt;/h3&gt;

&lt;p&gt;Five sites across two batches scored between 37.9 and 42.0:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Site&lt;/th&gt;
&lt;th&gt;Score&lt;/th&gt;
&lt;th&gt;Industry&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CSS Design Awards&lt;/td&gt;
&lt;td&gt;37.9&lt;/td&gt;
&lt;td&gt;Design gallery&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;tokens.studio&lt;/td&gt;
&lt;td&gt;39.1&lt;/td&gt;
&lt;td&gt;Design token tool&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Robinhood&lt;/td&gt;
&lt;td&gt;39.1&lt;/td&gt;
&lt;td&gt;Fintech&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ramp&lt;/td&gt;
&lt;td&gt;41.3&lt;/td&gt;
&lt;td&gt;Fintech&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bun&lt;/td&gt;
&lt;td&gt;42.0&lt;/td&gt;
&lt;td&gt;JS runtime&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Four different industries. One score range. The 40-point floor isn't a vertical problem — it's the baseline of not caring. These sites have zero design tokens, no &lt;code&gt;:focus-visible&lt;/code&gt;, no &lt;code&gt;prefers-reduced-motion&lt;/code&gt;, and no token system. They were built without a design contract and it shows at every level.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Marketing sites beat the design systems they're built from
&lt;/h3&gt;

&lt;p&gt;The most counterintuitive finding from the original batch:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Site&lt;/th&gt;
&lt;th&gt;Score&lt;/th&gt;
&lt;th&gt;Grade&lt;/th&gt;
&lt;th&gt;What it is&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://vercel.com" rel="noopener noreferrer"&gt;Vercel&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;73.6&lt;/td&gt;
&lt;td&gt;C&lt;/td&gt;
&lt;td&gt;Marketing site&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://geist.dev" rel="noopener noreferrer"&gt;Geist&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;50.3&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;Vercel's design system&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Vercel's marketing site outperforms its own design system by 23 points. Marketing teams optimize for visual polish. Design system teams optimize for API stability. The contract rewards the former.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Design awards don't mean design contract compliance
&lt;/h3&gt;

&lt;p&gt;CSS Design Awards (37.9) and FWA (41.1) exist to celebrate design excellence. They both score F. Their own sites use bare hex colors, magic-number spacing, and no tiered reduced-motion. &lt;strong&gt;Awwwards-style galleries reward visual impression, not systemic rigor.&lt;/strong&gt; A site can look stunning and still fail 16 of 26 deterministic checks.&lt;/p&gt;




&lt;h2&gt;
  
  
  The universal failures
&lt;/h2&gt;

&lt;p&gt;Three checks fail across all 57 sites (excluding self-scored Designesy):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Check&lt;/th&gt;
&lt;th&gt;What it tests&lt;/th&gt;
&lt;th&gt;Fail rate&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;tabular-nums&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Digits use fixed-width numerals&lt;/td&gt;
&lt;td&gt;~85%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;font-synthesis: none&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Browsers don't fake bold/italic&lt;/td&gt;
&lt;td&gt;~90%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;text-decoration-skip-ink: auto&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Underlines don't cross descenders&lt;/td&gt;
&lt;td&gt;~85%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These are all one-line CSS properties. All three have been supported for years. All three are ignored by the vast majority of the web. They're not hard to implement — they're simply not on anyone's checklist.&lt;/p&gt;

&lt;p&gt;That's what a design contract is: a checklist that turns "we should probably do this" into "this is failing in CI."&lt;/p&gt;




&lt;h2&gt;
  
  
  The full leaderboard (top 20 of 57)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Rank&lt;/th&gt;
&lt;th&gt;Score&lt;/th&gt;
&lt;th&gt;Grade&lt;/th&gt;
&lt;th&gt;Site&lt;/th&gt;
&lt;th&gt;Industry&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;100.0&lt;/td&gt;
&lt;td&gt;A&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.designesy.org" rel="noopener noreferrer"&gt;Designesy&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Design system&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;77.7&lt;/td&gt;
&lt;td&gt;C&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apple.com" rel="noopener noreferrer"&gt;Apple&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Hardware/SaaS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;77.6&lt;/td&gt;
&lt;td&gt;C&lt;/td&gt;
&lt;td&gt;&lt;a href="https://primer.style" rel="noopener noreferrer"&gt;GitHub Primer&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Design system&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;73.8&lt;/td&gt;
&lt;td&gt;C&lt;/td&gt;
&lt;td&gt;&lt;a href="https://zeroheight.com" rel="noopener noreferrer"&gt;zeroheight&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Design tooling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;73.6&lt;/td&gt;
&lt;td&gt;C&lt;/td&gt;
&lt;td&gt;&lt;a href="https://vercel.com" rel="noopener noreferrer"&gt;Vercel&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Cloud platform&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;72.9&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;&lt;a href="https://stripe.com" rel="noopener noreferrer"&gt;Stripe&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Fintech&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;66.7&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;&lt;a href="https://square.com" rel="noopener noreferrer"&gt;Square&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Fintech&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;66.0&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;&lt;a href="https://wise.com" rel="noopener noreferrer"&gt;Wise&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Fintech&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;64.6&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;&lt;a href="https://netlify.com" rel="noopener noreferrer"&gt;Netlify&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Dev tools&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;64.0&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;&lt;a href="https://ui.shadcn.com" rel="noopener noreferrer"&gt;shadcn/ui&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Dev tools&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;63.0&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;&lt;a href="https://sanity.io" rel="noopener noreferrer"&gt;Sanity&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Dev tools&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;63.0&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;&lt;a href="https://clerk.com" rel="noopener noreferrer"&gt;Clerk&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Dev tools&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;td&gt;63.0&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;&lt;a href="https://v0.dev" rel="noopener noreferrer"&gt;v0.dev&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Dev tools&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;62.0&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;&lt;a href="https://cursor.com" rel="noopener noreferrer"&gt;Cursor&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Dev tools&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;60.0&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;&lt;a href="https://supabase.com" rel="noopener noreferrer"&gt;Supabase&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Dev tools&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;60.0&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;&lt;a href="https://plaid.com" rel="noopener noreferrer"&gt;Plaid&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Fintech&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;td&gt;59.1&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;&lt;a href="https://resend.com" rel="noopener noreferrer"&gt;Resend&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Dev tools&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;td&gt;58.0&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;&lt;a href="https://astro.build" rel="noopener noreferrer"&gt;Astro&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Dev tools&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;58.0&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;&lt;a href="https://adyen.com" rel="noopener noreferrer"&gt;Adyen&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Fintech&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;td&gt;56.5&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;&lt;a href="https://tailwindcss.com" rel="noopener noreferrer"&gt;Tailwind CSS&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Dev tools&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://www.designesy.org/leaderboard" rel="noopener noreferrer"&gt;Full leaderboard with all 57 sites →&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What would it take to score a B?
&lt;/h2&gt;

&lt;p&gt;The B tier is empty. Nobody scored between 78 and 84. That's not a coincidence — it's a structural gap.&lt;/p&gt;

&lt;p&gt;To score a B, a site would need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ DTCG-conformant design tokens with &lt;code&gt;$schema&lt;/code&gt; pointer and structured color (not bare hex)&lt;/li&gt;
&lt;li&gt;✅ Tiered reduced-motion (Tier 1 remove / Tier 2 soften / Tier 3 keep — not a kill switch)&lt;/li&gt;
&lt;li&gt;✅ &lt;code&gt;tabular-nums&lt;/code&gt; on all numeric displays&lt;/li&gt;
&lt;li&gt;✅ &lt;code&gt;:focus-visible&lt;/code&gt; with replacement ring (not just stripping outline)&lt;/li&gt;
&lt;li&gt;✅ WCAG AA contrast on all interactive elements (4.5:1 minimum)&lt;/li&gt;
&lt;li&gt;✅ &lt;code&gt;font-synthesis: none&lt;/code&gt; and &lt;code&gt;text-decoration-skip-ink: auto&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;✅ &lt;code&gt;text-wrap: balance&lt;/code&gt; on headings and &lt;code&gt;pretty&lt;/code&gt; on body&lt;/li&gt;
&lt;li&gt;✅ No &lt;code&gt;transition:all&lt;/code&gt; anywhere in the stylesheet&lt;/li&gt;
&lt;li&gt;✅ Rem-based type scale with no non-root px font-sizes&lt;/li&gt;
&lt;li&gt;✅ &lt;code&gt;::selection&lt;/code&gt; styled with a semantic token&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every site in our 57-site sample fails at least 4 of these. Most fail 8+. The B tier is empty because the transition from "informal design" to "contract-grade design" is a cliff. You can't accidentally score a B. You have to decide to.&lt;/p&gt;




&lt;h2&gt;
  
  
  Run the scoring yourself
&lt;/h2&gt;

&lt;p&gt;The scoring engine is open-source and deterministic. No LLM, no heuristics, no subjective judging. Every check is reproducible.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Install the MCP server&lt;/span&gt;
pip &lt;span class="nb"&gt;install &lt;/span&gt;designesy-mcp

&lt;span class="c"&gt;# Or use uv (no install)&lt;/span&gt;
uvx designesy-mcp

&lt;span class="c"&gt;# Score any URL in your MCP client (Claude, Cursor, VS Code):&lt;/span&gt;
&lt;span class="c"&gt;#   use the designesy_score tool with url: "https://your-site.com"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The contract has 26 checks across 8 categories: tokens, responsive, interaction, motion, accessibility, typography, cadence, performance. The CSS either has &lt;code&gt;tabular-nums&lt;/code&gt; or it doesn't. The button either passes 4.5:1 contrast or it doesn't. There's no opinion involved.&lt;/p&gt;

&lt;p&gt;Full source: &lt;a href="https://github.com/LE-VAI/designesy-org" rel="noopener noreferrer"&gt;github.com/LE-VAI/designesy-org&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The bottom line
&lt;/h2&gt;

&lt;p&gt;We scored 57 sites. One passed — our own, which we built to pass. Every other site, from Apple to Robinhood, from Vercel to CSS Design Awards, from Stripe to tokens.studio, failed.&lt;/p&gt;

&lt;p&gt;The failures aren't subjective. They're deterministic: a CSS property is either present or absent. A contrast ratio is either above 4.5:1 or it isn't. A &lt;code&gt;prefers-reduced-motion&lt;/code&gt; query either exists or it doesn't.&lt;/p&gt;

&lt;p&gt;The web has a design quality problem that no one is measuring. Design awards measure visual impression. Performance audits measure speed. Accessibility scanners measure WCAG compliance. But nobody is measuring whether your site uses tabular numerals, whether your tokens are DTCG-conformant, whether your motion is tiered, whether your typography follows a cadence scale — the systemic properties that separate a site that holds together from one that falls apart.&lt;/p&gt;

&lt;p&gt;Now someone is. And the answer is: 88% of the web scores D or F.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Scores were collected between July 25 and August 7, 2026 using the &lt;a href="https://www.designesy.org/contracts/skill" rel="noopener noreferrer"&gt;Designesy design contract v0.4.0&lt;/a&gt;. The scoring engine is open-source and deterministic — &lt;a href="https://github.com/LE-VAI/designesy-org" rel="noopener noreferrer"&gt;run it yourself&lt;/a&gt; and verify every number in this article. Previously: &lt;a href="https://dev.to/levaiinbey/we-scored-30-real-websites-against-a-40-check-design-contract-heres-what-we-found-2hf4"&gt;30 sites scored&lt;/a&gt;, &lt;a href="https://dev.to/levaiinbey/we-scored-16-more-sites-the-dev-tools-are-worse-than-the-design-awards"&gt;16 dev-tool sites scored&lt;/a&gt;, &lt;a href="https://dev.to/levaiinbey/the-fintech-sites-that-handle-your-money-cant-pass-a-design-contract-klf"&gt;11 fintech sites scored&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Tags: #webdev #design #a11y #designsystems&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>design</category>
      <category>a11y</category>
      <category>designsystems</category>
    </item>
    <item>
      <title>The fintech sites that handle your money can't pass a design contract</title>
      <dc:creator>LE-VAI</dc:creator>
      <pubDate>Fri, 07 Aug 2026 21:28:26 +0000</pubDate>
      <link>https://dev.to/levainbey/the-fintech-sites-that-handle-your-money-cant-pass-a-design-contract-klf</link>
      <guid>https://dev.to/levainbey/the-fintech-sites-that-handle-your-money-cant-pass-a-design-contract-klf</guid>
      <description>&lt;p&gt;We scored &lt;strong&gt;11 fintech sites&lt;/strong&gt; against a 26-check design contract — tokens, motion, accessibility, typography, performance. The contract is real: it's the &lt;a href="https://www.designesy.org/contracts/skill" rel="noopener noreferrer"&gt;Designesy design system&lt;/a&gt;, verifiable via an &lt;a href="https://github.com/LE-VAI/designesy-org" rel="noopener noreferrer"&gt;open-source MCP server&lt;/a&gt; you can run yourself.&lt;/p&gt;

&lt;p&gt;Every single one failed.&lt;/p&gt;

&lt;p&gt;The best score was a D.&lt;/p&gt;




&lt;h2&gt;
  
  
  The leaderboard
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Rank&lt;/th&gt;
&lt;th&gt;Site&lt;/th&gt;
&lt;th&gt;Score&lt;/th&gt;
&lt;th&gt;Grade&lt;/th&gt;
&lt;th&gt;Tokens&lt;/th&gt;
&lt;th&gt;Headline failure&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a href="https://stripe.com" rel="noopener noreferrer"&gt;Stripe&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;72.9&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;719&lt;/td&gt;
&lt;td&gt;No &lt;code&gt;tabular-nums&lt;/code&gt; on a payments site&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a href="https://square.com" rel="noopener noreferrer"&gt;Square&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;66.7&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;16× &lt;code&gt;transition:all&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;a href="https://wise.com" rel="noopener noreferrer"&gt;Wise&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;66.0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;224&lt;/td&gt;
&lt;td&gt;Button contrast 1.85:1 (fails AA)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;a href="https://plaid.com" rel="noopener noreferrer"&gt;Plaid&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;60.0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;179&lt;/td&gt;
&lt;td&gt;Button contrast 3.87:1 (fails AA)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;&lt;a href="https://adyen.com" rel="noopener noreferrer"&gt;Adyen&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;58.0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;122&lt;/td&gt;
&lt;td&gt;Button contrast 0.00:1, 322× &lt;code&gt;transition:all&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;&lt;a href="https://affirm.com" rel="noopener noreferrer"&gt;Affirm&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;56.0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;191&lt;/td&gt;
&lt;td&gt;Press scale 0.66 (floor is 0.95)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;&lt;a href="https://klarna.com" rel="noopener noreferrer"&gt;Klarna&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;56.0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;556&lt;/td&gt;
&lt;td&gt;Button contrast 1.00:1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;&lt;a href="https://checkout.com" rel="noopener noreferrer"&gt;Checkout.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;50.0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;488&lt;/td&gt;
&lt;td&gt;No &lt;code&gt;:focus-visible&lt;/code&gt;, no reduced-motion&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;&lt;a href="https://brex.com" rel="noopener noreferrer"&gt;Brex&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;45.7&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;563&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;--ink&lt;/code&gt; token luminance mismatch&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;&lt;a href="https://ramp.com" rel="noopener noreferrer"&gt;Ramp&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;41.3&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;No focus-visible, no reduced-motion, 0 tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;&lt;a href="https://robinhood.com" rel="noopener noreferrer"&gt;Robinhood&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;39.1&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;No focus-visible, no reduced-motion, 2 tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;3 sites blocked:&lt;/strong&gt; Mercury (HTTP 429), Coinbase (HTTP 403), Revolut (HTTP 403) — the scoring engine fetches their CSS and they rate-limited or blocked the request. If your site blocks automated fetches, it also blocks accessibility audits. Think about that.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Finding 1: Not one fintech site uses &lt;code&gt;tabular-nums&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;font-variant-numeric: tabular-nums&lt;/code&gt; is a CSS property that makes every digit the same width. It's been supported since 2013. It prevents this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ 1,000.00
$ 1,500.00   ← the "5" is narrower than the "0", the number shifts left
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When your bank balance updates, the digits shouldn't dance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;11 out of 11 fintech sites fail this check.&lt;/strong&gt; Stripe, the highest scorer at 72.9/D, fails it. Robinhood, the lowest at 39.1/F, fails it. Not a single site that exists to display financial numbers uses the one CSS property that makes financial numbers readable.&lt;/p&gt;

&lt;p&gt;This isn't a nitpick. If you're building a fintech dashboard and your balance reflows when the last digit changes, users can't track their money at a glance. The number jitters. The layout shifts. The eye loses its place. This is the most basic typography rule for financial UI, and the entire industry ignores it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="c"&gt;/* The fix — one line */&lt;/span&gt;
&lt;span class="nc"&gt;.balance&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.amount&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.price&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;font-variant-numeric&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;tabular-nums&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Finding 2: The "Buy Now" button you can't read
&lt;/h2&gt;

&lt;p&gt;Klarna's entire product is "buy now, pay later." You see a price, you click a button, you split it into 4 payments. The button is the product.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Klarna's primary button contrast ratio: 1.00:1.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's the same color on the same color. Not 4.5:1 (WCAG AA). Not 3:1 (WCAG AA Large). Not even 2:1. One-to-one. The button text is invisible to anyone who isn't viewing it on a perfectly calibrated monitor in a dark room — and even then, it's barely there.&lt;/p&gt;

&lt;p&gt;But Klarna isn't alone:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Site&lt;/th&gt;
&lt;th&gt;Button contrast&lt;/th&gt;
&lt;th&gt;WCAG AA (4.5:1)&lt;/th&gt;
&lt;th&gt;What it means&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Stripe&lt;/td&gt;
&lt;td&gt;✅ passes&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Good&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Square&lt;/td&gt;
&lt;td&gt;✅ passes&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Good&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Checkout.com&lt;/td&gt;
&lt;td&gt;4.54:1&lt;/td&gt;
&lt;td&gt;✅ (barely)&lt;/td&gt;
&lt;td&gt;Passes by 0.04&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Affirm&lt;/td&gt;
&lt;td&gt;18.14:1&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Excellent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Plaid&lt;/td&gt;
&lt;td&gt;3.87:1&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;Fails AA&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wise&lt;/td&gt;
&lt;td&gt;1.85:1&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;Fails AA badly&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Adyen&lt;/td&gt;
&lt;td&gt;0.00:1&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;Same color&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Klarna&lt;/td&gt;
&lt;td&gt;1.00:1&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;Same color&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The irony: &lt;strong&gt;the sites targeting developers&lt;/strong&gt; (Stripe, Square, Checkout.com) pass contrast. The sites targeting &lt;strong&gt;consumers&lt;/strong&gt; (Klarna, Wise, Adyen) fail. The people who can fix contrast have accessible buttons. The people who can't are told to click a button they can't read.&lt;/p&gt;




&lt;h2&gt;
  
  
  Finding 3: Affirm's buttons run away from your finger
&lt;/h2&gt;

&lt;p&gt;The contract checks press scale — how much an interactive element shrinks when pressed. The floor is 0.95 (elements shrink by no more than 5%). This prevents the "running away" feeling where a button shrinks so much on tap that it feels like it's dodging your finger.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Affirm's press scale: 0.66.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Buttons shrink to 66% of their size when tapped. That's a 34% reduction. On a site where the primary action is clicking "Pay in 4," the pay button shrinks to two-thirds of its size when you press it. It doesn't feel like a press confirmation — it feels like the button is flinching.&lt;/p&gt;

&lt;p&gt;The fix is trivial:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.button&lt;/span&gt;&lt;span class="nd"&gt;:active&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;scale&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0.96&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="c"&gt;/* not 0.66 */&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Finding 4: Adyen has 322 &lt;code&gt;transition:all&lt;/code&gt; declarations
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;transition: all&lt;/code&gt; is a performance anti-pattern. It transitions every property change — including &lt;code&gt;width&lt;/code&gt;, &lt;code&gt;height&lt;/code&gt;, &lt;code&gt;padding&lt;/code&gt;, &lt;code&gt;margin&lt;/code&gt; — causing layout recalculations on every frame. On a payments site processing global transactions, this means jank when the UI updates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Adyen: 322 instances.&lt;/strong&gt; Square: 16. Brex: 24. Affirm: 17.&lt;/p&gt;

&lt;p&gt;The fix:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="c"&gt;/* Don't do this */&lt;/span&gt;
&lt;span class="nc"&gt;.card&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;transition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;all&lt;/span&gt; &lt;span class="m"&gt;200ms&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* Do this — transition only what you animate */&lt;/span&gt;
&lt;span class="nc"&gt;.card&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;transition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;transform&lt;/span&gt; &lt;span class="m"&gt;200ms&lt;/span&gt; &lt;span class="n"&gt;ease-out&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;opacity&lt;/span&gt; &lt;span class="m"&gt;200ms&lt;/span&gt; &lt;span class="n"&gt;ease-out&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;322 &lt;code&gt;transition:all&lt;/code&gt; declarations means 322 places where a layout property change triggers a transition. On a site where milliseconds matter (payment processing, fraud detection UI), the CSS is fighting against the product.&lt;/p&gt;




&lt;h2&gt;
  
  
  Finding 5: Ramp and Robinhood — the 40-point floor
&lt;/h2&gt;

&lt;p&gt;In our previous batch ("We scored 16 more sites. The dev tools are worse than the design awards."), the lowest score was tokens.studio at 39.1/F — a site about design tokens that has zero design tokens.&lt;/p&gt;

&lt;p&gt;In this batch, two fintech sites score in the same range:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ramp: 41.3/F&lt;/strong&gt; — 0 design tokens, no &lt;code&gt;:focus-visible&lt;/code&gt; rules, no &lt;code&gt;prefers-reduced-motion&lt;/code&gt; query&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Robinhood: 39.1/F&lt;/strong&gt; — 2 design tokens, no &lt;code&gt;:focus-visible&lt;/code&gt; rules, no &lt;code&gt;prefers-reduced-motion&lt;/code&gt; query&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Robinhood democratized stock trading. Ramp manages corporate spend. Both are worth billions. Both have the same design system maturity as a site about design tokens that has no design tokens.&lt;/p&gt;

&lt;p&gt;The pattern: &lt;strong&gt;company valuation does not correlate with design system maturity.&lt;/strong&gt; What correlates is whether someone on the team cares about design contracts. Stripe (72.9) has 719 design tokens. Robinhood (39.1) has 2. The difference isn't budget — it's priority.&lt;/p&gt;




&lt;h2&gt;
  
  
  Finding 6: The accessibility double-fail
&lt;/h2&gt;

&lt;p&gt;Four sites fail both &lt;code&gt;:focus-visible&lt;/code&gt; AND &lt;code&gt;prefers-reduced-motion&lt;/code&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Site&lt;/th&gt;
&lt;th&gt;&lt;code&gt;:focus-visible&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;&lt;code&gt;prefers-reduced-motion&lt;/code&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Checkout.com&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Brex&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ramp&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Robinhood&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;No &lt;code&gt;:focus-visible&lt;/code&gt; means keyboard users can't see which element is focused. No &lt;code&gt;prefers-reduced-motion&lt;/code&gt; means users with vestibular disorders (motion sensitivity) can't disable animations. These are both WCAG-adjacent requirements, and both are CSS — no JavaScript, no backend, no infrastructure. Two media queries and a pseudo-class.&lt;/p&gt;

&lt;p&gt;Ramp and Robinhood fail both. On sites where users make financial decisions.&lt;/p&gt;




&lt;h2&gt;
  
  
  The pattern across both batches
&lt;/h2&gt;

&lt;p&gt;We've now scored 27 sites in two batches (16 dev-tool sites + 11 fintech sites). The pattern is clear:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;No industry has a passing site.&lt;/strong&gt; The highest score across both batches is 72.9/D (Stripe). No site has scored a C or above.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;tabular-nums&lt;/code&gt; is universally ignored.&lt;/strong&gt; Every site that displays numbers — dev tool version counts, fintech balances — fails this check.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contrast failures cluster on consumer-facing sites.&lt;/strong&gt; Developer-tool sites pass button contrast. Consumer fintech sites fail it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The 40-point floor is industry-agnostic.&lt;/strong&gt; tokens.studio (39.1), Robinhood (39.1), Ramp (41.3) — different products, same neglect.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Design tokens don't guarantee a good score, but zero tokens guarantees a bad one.&lt;/strong&gt; Stripe (719 tokens, 72.9) vs Robinhood (2 tokens, 39.1).&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Run the scoring yourself
&lt;/h2&gt;

&lt;p&gt;The scoring engine is an open-source MCP server. Install it and score any URL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Install&lt;/span&gt;
pip &lt;span class="nb"&gt;install &lt;/span&gt;designesy-mcp

&lt;span class="c"&gt;# Or use uv (no install)&lt;/span&gt;
uvx designesy-mcp

&lt;span class="c"&gt;# Score a site&lt;/span&gt;
&lt;span class="c"&gt;# In your MCP client (Claude, Cursor, VS Code):&lt;/span&gt;
&lt;span class="c"&gt;#   use the designesy_score tool with url: "https://stripe.com"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The contract has 26 checks across 8 categories: tokens, responsive, interaction, motion, accessibility, typography, cadence, performance. Every check is deterministic — no subjective scoring, no LLM judging. The CSS either has &lt;code&gt;tabular-nums&lt;/code&gt; or it doesn't.&lt;/p&gt;

&lt;p&gt;Full source: &lt;a href="https://github.com/LE-VAI/designesy-org" rel="noopener noreferrer"&gt;github.com/LE-VAI/designesy-org&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The bottom line
&lt;/h2&gt;

&lt;p&gt;If your site handles people's money and your button contrast is 1.00:1, you're not building a fintech product — you're building a barrier. If your balance display doesn't use &lt;code&gt;tabular-nums&lt;/code&gt;, you're not designing for readability — you're designing for jitter.&lt;/p&gt;

&lt;p&gt;The fintech industry talks about trust. Trust isn't a brand color and a clean logo. Trust is a button you can read, a number that doesn't shift, a focus ring that shows keyboard users where they are, and a motion query that respects the 35% of users who request reduced motion.&lt;/p&gt;

&lt;p&gt;None of the 11 sites we scored have all four.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Scores were collected on August 7, 2026 using the &lt;a href="https://www.designesy.org/contracts/skill" rel="noopener noreferrer"&gt;Designesy design contract v0.4.0&lt;/a&gt;. The scoring engine is open-source and deterministic — &lt;a href="https://github.com/LE-VAI/designesy-org" rel="noopener noreferrer"&gt;run it yourself&lt;/a&gt; and verify every number in this article.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Tags: #webdev #design #a11y #fintech&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>design</category>
      <category>a11y</category>
      <category>fintech</category>
    </item>
    <item>
      <title>We scored 16 more sites. The dev tools are worse than the design awards.</title>
      <dc:creator>LE-VAI</dc:creator>
      <pubDate>Fri, 07 Aug 2026 20:40:00 +0000</pubDate>
      <link>https://dev.to/levainbey/we-scored-16-more-sites-the-dev-tools-are-worse-than-the-design-awards-4fna</link>
      <guid>https://dev.to/levainbey/we-scored-16-more-sites-the-dev-tools-are-worse-than-the-design-awards-4fna</guid>
      <description>&lt;p&gt;Last week we &lt;a href="https://dev.to/levaiinbey/we-scored-30-real-websites-against-a-40-check-design-contract-heres-what-we-found-2hf4"&gt;scored 30 real websites against a 40-check design contract&lt;/a&gt;. 60% scored D or F. Zero scored a B.&lt;/p&gt;

&lt;p&gt;People asked: &lt;em&gt;what about the dev tools?&lt;/em&gt; The frameworks, the design-system libraries, the AI site builders — the tools that developers use to build the sites we already scored. Surely they score better than Pentagram and FWA?&lt;/p&gt;

&lt;p&gt;No. They score worse.&lt;/p&gt;

&lt;h2&gt;
  
  
  The batch
&lt;/h2&gt;

&lt;p&gt;We scored 16 dev-tool and framework sites against the same &lt;a href="https://www.designesy.org/contracts/design-system" rel="noopener noreferrer"&gt;40-check deterministic contract&lt;/a&gt; — tokens, motion, accessibility, cadence, takt, poise, interaction, performance. Every check is reproducible. No LLM, no heuristics.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Rank&lt;/th&gt;
&lt;th&gt;Score&lt;/th&gt;
&lt;th&gt;Grade&lt;/th&gt;
&lt;th&gt;Site&lt;/th&gt;
&lt;th&gt;What they do&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;64.6&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;&lt;a href="https://netlify.com" rel="noopener noreferrer"&gt;netlify.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Hosting platform&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;64.0&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;&lt;a href="https://ui.shadcn.com" rel="noopener noreferrer"&gt;ui.shadcn.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Component library&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;63.0&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;&lt;a href="https://sanity.io" rel="noopener noreferrer"&gt;sanity.io&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;CMS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;63.0&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;&lt;a href="https://clerk.com" rel="noopener noreferrer"&gt;clerk.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Auth platform&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;63.0&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;&lt;a href="https://v0.dev" rel="noopener noreferrer"&gt;v0.dev&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;AI site builder (Vercel)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;62.0&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;&lt;a href="https://cursor.com" rel="noopener noreferrer"&gt;cursor.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;AI code editor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;60.0&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;&lt;a href="https://supabase.com" rel="noopener noreferrer"&gt;supabase.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Backend platform&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;59.1&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;&lt;a href="https://resend.com" rel="noopener noreferrer"&gt;resend.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Email API&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;58.0&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;&lt;a href="https://astro.build" rel="noopener noreferrer"&gt;astro.build&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Web framework&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;56.5&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;&lt;a href="https://tailwindcss.com" rel="noopener noreferrer"&gt;tailwindcss.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;CSS framework&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;56.5&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;&lt;a href="https://framer.com" rel="noopener noreferrer"&gt;framer.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Motion/design tool&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;54.0&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;&lt;a href="https://svelte.dev" rel="noopener noreferrer"&gt;svelte.dev&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Web framework&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;td&gt;52.0&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;&lt;a href="https://webflow.com" rel="noopener noreferrer"&gt;webflow.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;No-code site builder&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;52.0&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;&lt;a href="https://react.dev" rel="noopener noreferrer"&gt;react.dev&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;UI library docs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;42.0&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;&lt;a href="https://bun.sh" rel="noopener noreferrer"&gt;bun.sh&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;JS runtime docs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;39.1&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;&lt;a href="https://tokens.studio" rel="noopener noreferrer"&gt;tokens.studio&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Design token tool&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;The highest score in this batch is 64.6 (D).&lt;/strong&gt; The highest score in the original batch was 100 (A, self-scored) and 77.7 (C, Apple). Not a single dev-tool site reached C.&lt;/p&gt;

&lt;h2&gt;
  
  
  The new batch is worse than the original
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Grade&lt;/th&gt;
&lt;th&gt;Original 30&lt;/th&gt;
&lt;th&gt;New 16&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;A&lt;/td&gt;
&lt;td&gt;1 (3%)&lt;/td&gt;
&lt;td&gt;0 (0%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;B&lt;/td&gt;
&lt;td&gt;0 (0%)&lt;/td&gt;
&lt;td&gt;0 (0%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C&lt;/td&gt;
&lt;td&gt;6 (20%)&lt;/td&gt;
&lt;td&gt;0 (0%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;11 (37%)&lt;/td&gt;
&lt;td&gt;7 (44%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;12 (40%)&lt;/td&gt;
&lt;td&gt;9 (56%)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;56% of dev-tool sites scored F&lt;/strong&gt; — compared to 40% of the original sample. Zero new sites reached C. The dev tools are worse than the design awards.&lt;/p&gt;

&lt;p&gt;For reference: FWA scored 41.1, Pentagram scored 41.1, and CSS Design Awards scored 37.9. &lt;strong&gt;bun.sh (42.0) and tokens.studio (39.1) scored in the same range as the design-award sites we called out last week.&lt;/strong&gt; The irony is no longer limited to design galleries — it extends to the tools developers use every day.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding 1: tokens.studio (39.1/F) — the design token tool with 3 tokens
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://tokens.studio" rel="noopener noreferrer"&gt;tokens.studio&lt;/a&gt; is a product whose entire purpose is managing design tokens. Its marketing site scored &lt;strong&gt;39.1&lt;/strong&gt; — the lowest score in this batch and worse than every site in the original sample except CSS Design Awards.&lt;/p&gt;

&lt;p&gt;The contract found &lt;strong&gt;3 extractable CSS custom properties&lt;/strong&gt; on the page. For comparison: Supabase had 581, Netlify had 515, GitHub Primer had 518. A token management tool with fewer tokens on its own site than most sites have by accident.&lt;/p&gt;

&lt;p&gt;It also has horizontal overflow at 1080px, zero &lt;code&gt;:focus-visible&lt;/code&gt; rules, no &lt;code&gt;prefers-reduced-motion&lt;/code&gt; media query, and no duration tokens at all. The product is about tokens. The site doesn't use them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding 2: v0.dev (63.0/D) — the only real Core Web Vitals failure in 46 sites
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://v0.dev" rel="noopener noreferrer"&gt;v0.dev&lt;/a&gt; is Vercel's AI site generator. It scored 63.0 (D) — but the standout finding is its &lt;strong&gt;LCP of 4216ms&lt;/strong&gt;, well above the 2500ms threshold. Across all 46 sites we've scored (30 original + 16 new), this is the &lt;strong&gt;only actual Core Web Vitals failure&lt;/strong&gt;. Every other site either passed LCP or had it SKIP (not measured).&lt;/p&gt;

&lt;p&gt;The tool that generates websites can't pass its own performance check. The site it builds for itself loads slower than every site we tested, including CSS Design Awards (which scored 37.9 overall but still had LCP=296ms).&lt;/p&gt;

&lt;p&gt;This is a Vercel product. Vercel's marketing site (vercel.com) scored 73.6 in the original batch — the 5th highest score overall. The gap between Vercel's marketing team and Vercel's v0 team is 10.6 points and a CWV failure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding 3: framer.com (56.5/F) — the motion tool with zero motion accessibility
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://framer.com" rel="noopener noreferrer"&gt;framer.com&lt;/a&gt; is a design and motion tool. You use it to build animations, transitions, and interactive prototypes. Its marketing site has &lt;strong&gt;no &lt;code&gt;prefers-reduced-motion&lt;/code&gt; media query at all&lt;/strong&gt; — not even a kill switch that yanks all animation.&lt;/p&gt;

&lt;p&gt;This is worse than having a bad reduced-motion implementation. It means the site has no motion accessibility path. Users who set &lt;code&gt;prefers-reduced-motion: reduce&lt;/code&gt; in their OS get the exact same animation experience as everyone else. The contract's v05 check is a hard FAIL: "no prefers-reduced-motion media query found."&lt;/p&gt;

&lt;p&gt;A company selling motion capabilities doesn't gate motion for accessibility on its own site. The irony is structural, not accidental.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding 4: bun.sh (42.0/F) — the fastest runtime with the slowest docs
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://bun.sh" rel="noopener noreferrer"&gt;bun.sh&lt;/a&gt; is a JavaScript runtime that markets itself on speed. Its docs site scored &lt;strong&gt;42.0&lt;/strong&gt; — the second-lowest in the batch.&lt;/p&gt;

&lt;p&gt;Two specific failures stand out:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Horizontal overflow at 720px and 860px&lt;/strong&gt; — &lt;code&gt;scrollWidth=725 &amp;gt; innerWidth=720&lt;/code&gt; and &lt;code&gt;scrollWidth=871 &amp;gt; innerWidth=860&lt;/code&gt;. The site doesn't fit its own target viewport. For a docs site, this means horizontal scrolling on tablets and small laptops.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Zero &lt;code&gt;:focus-visible&lt;/code&gt; rules&lt;/strong&gt; — no keyboard focus indicators at all. The contract's v03 check is a hard FAIL. Keyboard users cannot see where they are on the page.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The fastest JavaScript runtime has a docs site that overflows at 720px and has no keyboard accessibility. Speed of execution ≠ quality of surface.&lt;/p&gt;

&lt;h2&gt;
  
  
  The pattern: dev tools optimize for API, not for contract
&lt;/h2&gt;

&lt;p&gt;The original batch showed that marketing sites score higher than the design systems they're built from (Vercel marketing 73.6 vs. Geist design system 50.3). This batch extends the pattern: &lt;strong&gt;dev-tool sites optimize for API documentation and feature lists, not for the systemic design properties the contract checks.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The common failures across this batch:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;px font-sizes instead of rem&lt;/strong&gt; — 14 of 16 sites fail v16. This is the most universal failure. Tailwind, React, Svelte, Framer, Webflow, Bun, Astro, Clerk, Cursor, Netlify, Supabase, Resend, v0 — all use px somewhere in non-root font-sizes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;transition:all&lt;/code&gt;&lt;/strong&gt; — 9 of 16 sites fail v11. The contract forbids &lt;code&gt;transition:all&lt;/code&gt; because it transitions properties you didn't intend (like &lt;code&gt;display&lt;/code&gt; or &lt;code&gt;height&lt;/code&gt;), causing layout jank.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No &lt;code&gt;font-synthesis: none&lt;/code&gt;&lt;/strong&gt; — 14 of 16 sites fail x01. Without this, browsers synthesize bold/italic variants that the font designer didn't create, degrading typography quality.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No &lt;code&gt;text-decoration-skip-ink: auto&lt;/code&gt;&lt;/strong&gt; — 13 of 16 sites fail x03. Without this, underlines cross through letter descenders (g, p, y), reducing readability.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No &lt;code&gt;tabular-nums&lt;/code&gt;&lt;/strong&gt; — 11 of 16 sites fail v19. Without tabular figures, numbers in tables and stats jitter as digit widths change.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are not subjective failures. They're deterministic: either the CSS property is present or it isn't. You can run the check yourself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it yourself
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Score any URL in 5 seconds:&lt;/span&gt;
npx designesy-score@latest https://your-site.com

&lt;span class="c"&gt;# Or use the MCP server in Claude/Cursor:&lt;/span&gt;
claude mcp add designesy &lt;span class="nt"&gt;--transport&lt;/span&gt; http https://www.designesy.org/api/mcp

&lt;span class="c"&gt;# See the full leaderboard (46 sites now):&lt;/span&gt;
open https://www.designesy.org/leaderboard
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The scoring engine is deterministic, open, and free. No API key, no auth. The &lt;a href="https://www.designesy.org/methodology" rel="noopener noreferrer"&gt;methodology is published&lt;/a&gt;, the &lt;a href="https://www.designesy.org/contracts/design-system" rel="noopener noreferrer"&gt;contract is public&lt;/a&gt;, and the &lt;a href="https://github.com/marketplace/actions/designesy-contract-check" rel="noopener noreferrer"&gt;GitHub Action&lt;/a&gt; gates your CI on the same 40 checks.&lt;/p&gt;

&lt;p&gt;If your site scores below 50, you're in the company of design award galleries and JavaScript runtime docs. If it scores above 70, you're in the top 15% of the web. If it scores 100, you're alone.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Designesy is a design-system contract verification engine. 40 deterministic checks, A–F grade, DTCG token validation, WCAG 2.2 AA accessibility, Lottie motion validation. &lt;a href="https://www.designesy.org" rel="noopener noreferrer"&gt;designesy.org&lt;/a&gt;. Originally published at &lt;a href="https://github.com/LE-VAI/designesy-org/discussions/14" rel="noopener noreferrer"&gt;GitHub Discussion #14&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>design</category>
      <category>a11y</category>
      <category>mcp</category>
    </item>
    <item>
      <title>We scored 30 real websites against a 40-check design contract. Here's what we found.</title>
      <dc:creator>LE-VAI</dc:creator>
      <pubDate>Fri, 07 Aug 2026 20:31:33 +0000</pubDate>
      <link>https://dev.to/levainbey/we-scored-30-real-websites-against-a-40-check-design-contract-heres-what-we-found-2hf4</link>
      <guid>https://dev.to/levainbey/we-scored-30-real-websites-against-a-40-check-design-contract-heres-what-we-found-2hf4</guid>
      <description>&lt;h2&gt;
  
  
  The headline
&lt;/h2&gt;

&lt;p&gt;We scored 30 sites from our &lt;a href="https://www.designesy.org/leaderboard" rel="noopener noreferrer"&gt;live leaderboard&lt;/a&gt; — design systems (Primer, Spectrum, Geist), SaaS (Vercel, Linear, Stripe), hardware (Apple), inspiration galleries (CSS Design Awards, FWA), and more.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Designesy&lt;/strong&gt; runs 40 deterministic checks against any URL — tokens, motion, accessibility, cadence, takt, poise, identity, interaction, performance, responsive, semantic, security, spec, and copywriting. No LLM, no heuristics. Every check is reproducible.&lt;/p&gt;

&lt;p&gt;The results were worse than we expected.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Sites scored&lt;/td&gt;
&lt;td&gt;30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Score range&lt;/td&gt;
&lt;td&gt;37.9 – 100.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mean score&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;62.2&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Median score&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;62.4&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Grade A&lt;/td&gt;
&lt;td&gt;1 site (3%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Grade B&lt;/td&gt;
&lt;td&gt;0 sites (0%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Grade C&lt;/td&gt;
&lt;td&gt;6 sites (20%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Grade D&lt;/td&gt;
&lt;td&gt;11 sites (37%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Grade F&lt;/td&gt;
&lt;td&gt;12 sites (40%)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;60% of sites scored D or F.&lt;/strong&gt; Zero sites scored a B. The gap between "looks good" and "passes a deterministic design contract" is enormous.&lt;/p&gt;

&lt;h2&gt;
  
  
  What "pass" looks like
&lt;/h2&gt;

&lt;p&gt;Across 30 sites × 40 checks = 1,110 total checks:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;th&gt;Count&lt;/th&gt;
&lt;th&gt;%&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Pass&lt;/td&gt;
&lt;td&gt;411&lt;/td&gt;
&lt;td&gt;37.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Warn&lt;/td&gt;
&lt;td&gt;506&lt;/td&gt;
&lt;td&gt;45.6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fail&lt;/td&gt;
&lt;td&gt;118&lt;/td&gt;
&lt;td&gt;10.6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skip&lt;/td&gt;
&lt;td&gt;75&lt;/td&gt;
&lt;td&gt;6.8%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;More checks &lt;strong&gt;warn&lt;/strong&gt; than pass. A "warn" means the check detected something partial — a token file exists but uses bare hex instead of structured color, or reduced-motion is present but not tiered. The industry is in a half-adopted state: teams know they should have design tokens, motion standards, and accessibility gates, but most haven't finished the job.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where sites fail the most
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;Avg score&lt;/th&gt;
&lt;th&gt;Sites below 50&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Tokens&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;40.8&lt;/td&gt;
&lt;td&gt;11/30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Motion&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;52.5&lt;/td&gt;
&lt;td&gt;11/30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Takt&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;50.8&lt;/td&gt;
&lt;td&gt;3/30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Accessibility&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;58.4&lt;/td&gt;
&lt;td&gt;4/30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Interaction&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;60.0&lt;/td&gt;
&lt;td&gt;12/30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cadence&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;60.1&lt;/td&gt;
&lt;td&gt;3/30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Poise&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;75.0&lt;/td&gt;
&lt;td&gt;0/30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Identity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;83.3&lt;/td&gt;
&lt;td&gt;0/30&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Tokens (avg 40.8 — the worst dimension)
&lt;/h3&gt;

&lt;p&gt;11 of 30 sites score below 50 on token compliance. The common failures:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Bare hex colors&lt;/strong&gt; instead of structured tokens (&lt;code&gt;$type: color&lt;/code&gt; with colorSpace + components)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No &lt;code&gt;$schema&lt;/code&gt; pointer&lt;/strong&gt; — token files don't declare which spec they conform to&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Magic numbers&lt;/strong&gt; in spacing/radius instead of a named scale&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No dark-mode surface tokens&lt;/strong&gt; — sites that have dark mode but don't structure their surfaces as lightness-stepped tokens&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the W3C DTCG 2025.10 gap. The spec went stable in October 2025, and 84% of teams say they use design tokens — but most are using them informally, not in a conformant format.&lt;/p&gt;

&lt;h3&gt;
  
  
  Motion (avg 52.5 — second worst)
&lt;/h3&gt;

&lt;p&gt;11 of 30 sites score below 50 on motion. The common failures:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No reduced-motion path&lt;/strong&gt; — &lt;code&gt;prefers-reduced-motion&lt;/code&gt; is either absent or a kill switch that yanks all animation instead of tiering (Tier 1 remove / Tier 2 soften / Tier 3 keep)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No easing tokens&lt;/strong&gt; — sites use 15 different cubic-beziers instead of a 4-token easing scale&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Layout animation&lt;/strong&gt; — animating &lt;code&gt;width&lt;/code&gt;, &lt;code&gt;height&lt;/code&gt;, &lt;code&gt;top&lt;/code&gt;, &lt;code&gt;left&lt;/code&gt; instead of &lt;code&gt;transform&lt;/code&gt;/&lt;code&gt;opacity&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No duration scale&lt;/strong&gt; — every transition is a different magic-number duration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Apple's HIG is the reference here — they tier reduced-motion (completely remove, soften, or keep) instead of treating accessibility as a binary kill switch. Only 1 site in our sample does this correctly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Interaction (avg 60.0 — 12 sites below 50)
&lt;/h3&gt;

&lt;p&gt;12 of 30 sites score below 50 on interaction. This is the dimension with the most outright failures:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;:focus&lt;/code&gt; strips outline without replacement&lt;/strong&gt; — the most common accessibility failure pattern&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No &lt;code&gt;:focus-visible&lt;/code&gt;&lt;/strong&gt; — keyboard and mouse focus are treated identically&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No press-settle&lt;/strong&gt; — no &lt;code&gt;scale(0.97)&lt;/code&gt; or equivalent press feedback on interactive elements&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The top 5
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Rank&lt;/th&gt;
&lt;th&gt;Score&lt;/th&gt;
&lt;th&gt;Grade&lt;/th&gt;
&lt;th&gt;Site&lt;/th&gt;
&lt;th&gt;Notable&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;100.0&lt;/td&gt;
&lt;td&gt;A&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.designesy.org" rel="noopener noreferrer"&gt;Designesy&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Self-scored — transparency earns trust&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;77.7&lt;/td&gt;
&lt;td&gt;C&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apple.com" rel="noopener noreferrer"&gt;Apple&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Tiered reduced-motion reference&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;77.6&lt;/td&gt;
&lt;td&gt;C&lt;/td&gt;
&lt;td&gt;&lt;a href="https://primer.style" rel="noopener noreferrer"&gt;GitHub Primer&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;518 tokens — most in the sample&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;73.8&lt;/td&gt;
&lt;td&gt;C&lt;/td&gt;
&lt;td&gt;&lt;a href="https://zeroheight.com" rel="noopener noreferrer"&gt;zeroheight&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Design-system documentation tool&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;73.6&lt;/td&gt;
&lt;td&gt;C&lt;/td&gt;
&lt;td&gt;&lt;a href="https://vercel.com" rel="noopener noreferrer"&gt;Vercel&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Clean token + motion baseline&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;No site scored a B. The jump from C (top non-self score: 77.7) to A (100) is 22 points — that's the gap between "has tokens but uses bare hex" and "has structured DTCG-conformant tokens with a $schema pointer and colorSpace."&lt;/p&gt;

&lt;h2&gt;
  
  
  The bottom 5
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Rank&lt;/th&gt;
&lt;th&gt;Score&lt;/th&gt;
&lt;th&gt;Grade&lt;/th&gt;
&lt;th&gt;Site&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;26&lt;/td&gt;
&lt;td&gt;49.4&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;&lt;a href="https://spectrum.adobe.com" rel="noopener noreferrer"&gt;Adobe Spectrum&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Tokens exist but not DTCG-conformant; motion not tiered&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;27&lt;/td&gt;
&lt;td&gt;50.3&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;&lt;a href="https://geist.dev" rel="noopener noreferrer"&gt;Vercel Geist&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Surprising — Vercel's own design system scores lower than their marketing site&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;41.1&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;&lt;a href="https://pentagram.com" rel="noopener noreferrer"&gt;Pentagram&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Agency site — beautiful but zero token/motion structure&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;29&lt;/td&gt;
&lt;td&gt;41.1&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;&lt;a href="https://fwa.org" rel="noopener noreferrer"&gt;FWA&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Inspiration gallery — awards "good design" but fails the contract&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;30&lt;/td&gt;
&lt;td&gt;37.9&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;&lt;a href="https://cssdesignawards.com" rel="noopener noreferrer"&gt;CSS Design Awards&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Same irony as FWA&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The bottom 5 tells a story: &lt;strong&gt;the sites that award "good design" fail a deterministic design contract.&lt;/strong&gt; CSS Design Awards and FWA exist to celebrate design excellence, but they score 37.9 and 41.1 — because their own sites don't use structured tokens, tiered reduced-motion, or DTCG-conformant formatting.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Geist vs. Vercel split
&lt;/h2&gt;

&lt;p&gt;The most interesting finding: &lt;strong&gt;Vercel's marketing site (vercel.com) scores 73.6 (C) while Vercel's design system (geist.dev) scores 50.3 (F).&lt;/strong&gt; The marketing site outperforms the design system by 23 points. This means Vercel's marketing team is doing more design-system work than Vercel's design-system team — or that Geist's token format predates DTCG 2025.10 and hasn't been migrated.&lt;/p&gt;

&lt;p&gt;This pattern repeats: &lt;strong&gt;marketing sites score higher than the design systems they're built from.&lt;/strong&gt; Marketing teams optimize for visual polish. Design system teams optimize for API stability. The contract rewards the former.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this means
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Design tokens are half-adopted.&lt;/strong&gt; Everyone has them; few have them in a conformant format. The W3C DTCG 2025.10 spec is 10 months old and the ecosystem hasn't caught up.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Motion accessibility is the biggest gap.&lt;/strong&gt; 11/30 sites score below 50 on motion. The &lt;code&gt;prefers-reduced-motion&lt;/code&gt; kill-switch pattern is everywhere — but tiered reduced-motion (the Apple HIG approach) is almost nowhere.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;"Good design" is not "systematic design."&lt;/strong&gt; The sites that win design awards fail design contracts. Visual impression ≠ systemic rigor. A site can look stunning and still use bare hex, magic-number spacing, and no reduced-motion tier.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;No one has a B.&lt;/strong&gt; The gap between C and A is 22 points. There's no middle ground — you're either doing tokens informally (C/D) or you're doing them conformantly (A). The B tier is empty because the transition from "informal tokens" to "DTCG-conformant tokens" is a cliff, not a slope.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Try it yourself
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Score any URL in 5 seconds:&lt;/span&gt;
npx designesy-score@latest https://your-site.com

&lt;span class="c"&gt;# Or use the MCP server:&lt;/span&gt;
claude mcp add designesy &lt;span class="nt"&gt;--transport&lt;/span&gt; http https://www.designesy.org/api/mcp

&lt;span class="c"&gt;# See the full leaderboard:&lt;/span&gt;
open https://www.designesy.org/leaderboard
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The scoring engine is deterministic, open, and free. No API key, no auth. The &lt;a href="https://www.designesy.org/methodology" rel="noopener noreferrer"&gt;methodology is published&lt;/a&gt;, the &lt;a href="https://www.designesy.org/contracts/design-system" rel="noopener noreferrer"&gt;contract is public&lt;/a&gt;, and the &lt;a href="https://github.com/marketplace/actions/designesy-contract-check" rel="noopener noreferrer"&gt;GitHub Action&lt;/a&gt; gates your CI on the same 40 checks.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Designesy is a design-system contract verification engine. 40 deterministic checks, A–F grade, DTCG token validation, WCAG 2.2 AA accessibility, Lottie motion validation. &lt;a href="https://www.designesy.org" rel="noopener noreferrer"&gt;designesy.org&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>design</category>
      <category>a11y</category>
      <category>mcp</category>
    </item>
    <item>
      <title>The 23-check verification checklist we built for our design system</title>
      <dc:creator>LE-VAI</dc:creator>
      <pubDate>Tue, 21 Jul 2026 04:56:30 +0000</pubDate>
      <link>https://dev.to/levainbey/the-23-check-verification-checklist-we-built-for-our-design-system-52gf</link>
      <guid>https://dev.to/levainbey/the-23-check-verification-checklist-we-built-for-our-design-system-52gf</guid>
      <description>&lt;p&gt;A design system contract isn't a document. It's a testable standard.&lt;/p&gt;

&lt;p&gt;Most design systems are Figma files and Storybook pages — they tell you what the tokens &lt;em&gt;are&lt;/em&gt;, but not whether what you shipped actually &lt;em&gt;holds&lt;/em&gt;. We wanted to close that gap. So we built a verification engine that runs 23 automated checks against the live site, with provenance back to every contract token.&lt;/p&gt;

&lt;p&gt;This is the checklist, what each check does, and why we picked it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The premise
&lt;/h2&gt;

&lt;p&gt;The contract lives at &lt;a href="https://www.designesy.org/contracts/design-system" rel="noopener noreferrer"&gt;designesy.org/contracts/design-system&lt;/a&gt;. It's a public, machine-readable design system — W3C DTCG 2025.10 token format, with two custom token types we added: &lt;code&gt;$type: spring&lt;/code&gt; (physics-based motion) and &lt;code&gt;$type: sound&lt;/code&gt; (acoustic cues).&lt;/p&gt;

&lt;p&gt;The verification engine fetches the page HTML, extracts all CSS (inline + linked stylesheets), parses &lt;code&gt;:root&lt;/code&gt; custom properties, and runs 23 checks. Each check returns &lt;code&gt;PASS&lt;/code&gt;, &lt;code&gt;FAIL&lt;/code&gt;, &lt;code&gt;WARN&lt;/code&gt;, or &lt;code&gt;SKIP&lt;/code&gt; with a detail string that traces back to the contract token or rule it's verifying.&lt;/p&gt;

&lt;p&gt;Current score: &lt;strong&gt;100% (Grade A)&lt;/strong&gt; — 19 passed, 0 failed, 7 skipped (browser-only checks).&lt;/p&gt;

&lt;h2&gt;
  
  
  The 23 checks
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Tokens (1 check)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;v01 — Token values match the live site &lt;code&gt;:root&lt;/code&gt; foundation&lt;/strong&gt;&lt;br&gt;
Verifies that the custom properties in the live stylesheet match the values declared in the contract JSON. If the contract says &lt;code&gt;--signal: #0133CB&lt;/code&gt; and the site ships &lt;code&gt;--signal: #0133CC&lt;/code&gt;, this check fails. Nine tokens checked.&lt;/p&gt;

&lt;p&gt;This is the foundation. If the tokens don't match, nothing downstream is trustworthy.&lt;/p&gt;
&lt;h3&gt;
  
  
  Responsive (1 check)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;v02 — Routes render without horizontal overflow at 375px, 720px, 860px, 1080px+&lt;/strong&gt;&lt;br&gt;
Verifies that the layout doesn't break at four breakpoints. &lt;code&gt;SKIP&lt;/code&gt; in static analysis — requires a live browser viewport. We run this manually with Chrome DevTools device emulation.&lt;/p&gt;

&lt;p&gt;Horizontal overflow on mobile is the most common layout failure and the easiest to miss in development. This check exists because we've shipped it.&lt;/p&gt;
&lt;h3&gt;
  
  
  Interaction (1 check)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;v03 — Primary interactive elements show focus-visible rings&lt;/strong&gt;&lt;br&gt;
Parses the stylesheet for &lt;code&gt;:focus-visible&lt;/code&gt; rules. 31 rules present on the live site.&lt;/p&gt;

&lt;p&gt;Focus-visible is the keyboard user's cursor. If it's missing, keyboard navigation is invisible. This check fails if focus-visible is absent or overridden by &lt;code&gt;outline: none&lt;/code&gt; without a replacement.&lt;/p&gt;
&lt;h3&gt;
  
  
  Motion (5 checks)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;v05 — &lt;code&gt;prefers-reduced-motion&lt;/code&gt; disables entrance and wordmark breath&lt;/strong&gt;&lt;br&gt;
Verifies that &lt;code&gt;@media (prefers-reduced-motion: reduce)&lt;/code&gt; collapses non-essential animation. This is non-negotiable — animation that can't be reduced is an accessibility failure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;v11 — No &lt;code&gt;transition: all&lt;/code&gt; in the live stylesheet&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;transition: all&lt;/code&gt; is a performance anti-pattern — it transitions properties you didn't intend (like &lt;code&gt;width&lt;/code&gt;, &lt;code&gt;height&lt;/code&gt;, &lt;code&gt;padding&lt;/code&gt;) and causes layout jank. Every transition should name its specific properties. This check parses the stylesheet and fails if &lt;code&gt;transition: all&lt;/code&gt; appears anywhere.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;v12 — &lt;code&gt;will-change&lt;/code&gt; restricted to &lt;code&gt;transform&lt;/code&gt; and &lt;code&gt;opacity&lt;/code&gt; only&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;will-change&lt;/code&gt; is a hint to the browser about what's about to animate. Using it on properties other than &lt;code&gt;transform&lt;/code&gt; and &lt;code&gt;opacity&lt;/code&gt; wastes GPU memory and can cause more jank than it prevents. This check fails if &lt;code&gt;will-change&lt;/code&gt; is set to anything else.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;v23 — Duration tokens &lt;code&gt;--duration-quick&lt;/code&gt; through &lt;code&gt;--duration-slow&lt;/code&gt; present in &lt;code&gt;:root&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
Verifies that the five duration tokens (150ms, 250ms, 350ms, 400ms, 600ms) are all present as custom properties. Duration should be tokenized, not hard-coded — otherwise every animation drifts independently.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;v13 — Press scale 0.96 on cells, 0.985 on cards/rows — both above 0.95 floor&lt;/strong&gt;&lt;br&gt;
Parses every &lt;code&gt;:active&lt;/code&gt; scale transform in the stylesheet and verifies none goes below 0.95. Press scale below 0.95 reads as a glitch, not a press. We learned this from &lt;a href="https://www.designesy.org/labs/takt" rel="noopener noreferrer"&gt;Takt&lt;/a&gt; — the interface-feel lab.&lt;/p&gt;
&lt;h3&gt;
  
  
  Accessibility (2 checks)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;v06 — Contrast remains readable for ink, muted, and accent on paper&lt;/strong&gt;&lt;br&gt;
Verifies WCAG contrast ratios for the three text colors against the page background. Current values: ink on paper = 21:1, muted on paper = 8.03:1, muted-dim on paper = 5.10:1. All pass AA.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;v22 — Primary button text passes WCAG AA 4.5:1 contrast against &lt;code&gt;--signal&lt;/code&gt; fill&lt;/strong&gt;&lt;br&gt;
Verifies that the button label is readable against the brand accent fill. Current: ink on signal = 8.99:1. This check exists because brand colors are often chosen for aesthetics, not contrast — and button text is the most common failure point.&lt;/p&gt;
&lt;h3&gt;
  
  
  Identity (1 check)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;v07 — No public surface displays internal control-plane naming&lt;/strong&gt;&lt;br&gt;
Verifies that the page title, h1, and visible text don't contain internal naming. This is a brand-discipline check — internal vocabulary should never leak to the user.&lt;/p&gt;
&lt;h3&gt;
  
  
  Poise (3 checks)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;v04 — Sound toggle flips &lt;code&gt;aria-pressed&lt;/code&gt; and applies the audio preference&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;SKIP&lt;/code&gt; in static analysis — requires live DOM interaction. Verifies that the sound toggle is a proper toggle button with &lt;code&gt;aria-pressed&lt;/code&gt; state, not just a visual switch.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;v08 — Poise interaction rules match live &lt;code&gt;/labs/poise&lt;/code&gt; and &lt;code&gt;contract.interaction&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;SKIP&lt;/code&gt; — requires a page-specific check. Verifies that the interaction lab and the contract agree.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;v09 — Poise keyboard-path verification remains published and current&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;SKIP&lt;/code&gt; — requires a page-specific check. Verifies that the keyboard-path proof page is still live.&lt;/p&gt;
&lt;h3&gt;
  
  
  Takt (2 checks)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;v10 — Takt interface-feel rules match live CSS and &lt;code&gt;contract.takt&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;SKIP&lt;/code&gt; — requires a page-specific check. Verifies that the interface-feel lab and the contract agree.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;v13 — Press scale 0.96 on cells, 0.985 on cards/rows&lt;/strong&gt; (also listed under motion — it spans both categories because it's both a motion rule and a Takt rule)&lt;/p&gt;
&lt;h3&gt;
  
  
  Cadence (8 checks)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;v14 — Cadence typography rules match live CSS and &lt;code&gt;contract.cadence&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;SKIP&lt;/code&gt; — requires a page-specific check.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;v15 — Font smoothing: antialiased + grayscale on &lt;code&gt;:root&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
Verifies &lt;code&gt;-webkit-font-smoothing: antialiased&lt;/code&gt; and &lt;code&gt;-moz-osx-font-smoothing: grayscale&lt;/code&gt; are set on &lt;code&gt;:root&lt;/code&gt;. Without these, the browser uses subpixel rendering, which looks heavier and less crisp on modern displays.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;v16 — Rem-based scale: all text sizes in rem, root at 16px&lt;/strong&gt;&lt;br&gt;
Verifies that text sizes use &lt;code&gt;rem&lt;/code&gt;, not &lt;code&gt;px&lt;/code&gt;. Pixel-based font sizes break user zoom preferences. Root at 16px is the browser default — respecting it is the difference between "works for everyone" and "works for me."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;v17 — Line-height by role: headings 1.08, body 1.55&lt;/strong&gt;&lt;br&gt;
Verifies that headings and body text have different line-heights. A single global &lt;code&gt;line-height&lt;/code&gt; is a common mistake — headings need tight leading (1.05–1.1), body needs relaxed leading (1.5–1.6). Using one value for both makes either headings feel loose or body feel cramped.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;v18 — &lt;code&gt;text-wrap: balance&lt;/code&gt; + &lt;code&gt;pretty&lt;/code&gt; both present in live CSS&lt;/strong&gt;&lt;br&gt;
Verifies that headings use &lt;code&gt;text-wrap: balance&lt;/code&gt; (prevents orphaned words on the last line) and body uses &lt;code&gt;text-wrap: pretty&lt;/code&gt; (prevents orphans while preserving rhythm). Both are modern CSS features that improve typography without JavaScript.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;v19 — &lt;code&gt;tabular-nums&lt;/code&gt;: 8 instances across the live CSS&lt;/strong&gt;&lt;br&gt;
Verifies &lt;code&gt;font-variant-numeric: tabular-nums&lt;/code&gt; is used for numerical data. Tabular numbers have fixed widths — they align in columns and don't jitter when values change. Essential for stats, prices, and tables. Current: 17 instances.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;v20 — &lt;code&gt;::selection&lt;/code&gt; styled with &lt;code&gt;var(--signal)&lt;/code&gt; — not browser default&lt;/strong&gt;&lt;br&gt;
Verifies that text selection uses the brand accent, not the browser's default blue. Selection is a brand surface that most sites forget.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;v21 — Core Web Vitals plausible: LCP &amp;lt; 2.5s, INP &amp;lt; 200ms, CLS &amp;lt; 0.1&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;SKIP&lt;/code&gt; — requires a live browser performance trace. We run this with Chrome DevTools &lt;code&gt;performance_start_trace&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  Extended checks (3 checks, v0.3.0 resolved tensions)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;x01 — &lt;code&gt;font-synthesis: none&lt;/code&gt; set&lt;/strong&gt;&lt;br&gt;
Verifies that &lt;code&gt;font-synthesis: none&lt;/code&gt; is on &lt;code&gt;:root&lt;/code&gt;. Without it, the browser synthesizes fake bold and italic weights when the real ones aren't loaded — and they look terrible. This was an open tension we resolved in v0.3.0.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;x02 — &lt;code&gt;text-underline-position: from-font&lt;/code&gt; set&lt;/strong&gt;&lt;br&gt;
Verifies that underlines align to the font's metrics, not the browser's default. Prevents underlines from cutting through descenders on fonts with low underline positions. Resolved in v0.3.0.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;x03 — &lt;code&gt;text-decoration-skip-ink: auto&lt;/code&gt; set&lt;/strong&gt;&lt;br&gt;
Verifies that underlines skip descenders (the loops of g, j, p, q, y) for readability. Without &lt;code&gt;skip-ink&lt;/code&gt;, underlines cut straight through descenders and reduce legibility. Resolved in v0.3.0.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why verification, not just documentation
&lt;/h2&gt;

&lt;p&gt;A contract without verification is a wish. A contract with verification is a standard.&lt;/p&gt;

&lt;p&gt;The difference: if the contract says "contrast must pass WCAG AA" but there's no check, the rule drifts. Someone ships a new component with a slightly-off color, nobody notices, and six months later the contract says one thing and the site does another.&lt;/p&gt;

&lt;p&gt;Verification closes that loop. Every check is executable. Every check has provenance back to a token or rule. Every check runs against the live site, not a snapshot. If the site drifts, the check fails.&lt;/p&gt;

&lt;p&gt;This is the same principle as unit tests for code — but for design. We don't ship code without tests. We shouldn't ship design without verification.&lt;/p&gt;
&lt;h2&gt;
  
  
  The open tensions (9)
&lt;/h2&gt;

&lt;p&gt;We document them, not hide them. A design system that claims to be complete is lying. Here are the nine things we haven't resolved yet:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Light theme is not contracted — dark technical foundation is provisional&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--activation&lt;/code&gt; exists but has limited public surface usage&lt;/li&gt;
&lt;li&gt;Inter is named in the stack but not self-hosted; system fallback is intentional&lt;/li&gt;
&lt;li&gt;Shadow tokens exist; elevation language is still light-touch (borders lead)&lt;/li&gt;
&lt;li&gt;Human contract page and machine export remain dual sources until a single generator owns both&lt;/li&gt;
&lt;li&gt;Keyboard-path verification packets are published for Poise only — not every public route&lt;/li&gt;
&lt;li&gt;Inline-axis logical properties applied — block-axis and border-inline remain physical (Cadence partial migration)&lt;/li&gt;
&lt;li&gt;Block-axis logical properties (&lt;code&gt;margin-block-start/end&lt;/code&gt;) not yet migrated — only inline-axis done&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;border-left&lt;/code&gt; decorative accents not yet migrated to &lt;code&gt;border-inline-start&lt;/code&gt; — visual regression risk needs testing&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  Run it yourself
&lt;/h2&gt;

&lt;p&gt;The verification engine is available as an MCP tool:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @designesy/mcp designesy_score &lt;span class="nt"&gt;--url&lt;/span&gt; https://www.designesy.org/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can run it against any URL — it'll extract the CSS, parse the tokens, and run the same 23 checks. If your site uses a different token system, the checks that depend on Designesy-specific tokens will &lt;code&gt;SKIP&lt;/code&gt;, but the general checks (contrast, focus-visible, reduced-motion, font smoothing, rem scale, text-wrap, tabular-nums, &lt;code&gt;::selection&lt;/code&gt;, &lt;code&gt;transition: all&lt;/code&gt;, &lt;code&gt;will-change&lt;/code&gt;) will run against any site.&lt;/p&gt;

&lt;h2&gt;
  
  
  The contract
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live:&lt;/strong&gt; &lt;a href="https://www.designesy.org/contracts/design-system" rel="noopener noreferrer"&gt;designesy.org/contracts/design-system&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Machine export:&lt;/strong&gt; &lt;a href="https://www.designesy.org/contracts/design-system.json" rel="noopener noreferrer"&gt;designesy.org/contracts/design-system.json&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SKILL.md export (for AI coding agents):&lt;/strong&gt; &lt;a href="https://www.designesy.org/contracts/skill" rel="noopener noreferrer"&gt;designesy.org/contracts/skill&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Labs:&lt;/strong&gt; &lt;a href="https://www.designesy.org/labs/poise" rel="noopener noreferrer"&gt;Poise&lt;/a&gt; · &lt;a href="https://www.designesy.org/labs/takt" rel="noopener noreferrer"&gt;Takt&lt;/a&gt; · &lt;a href="https://www.designesy.org/labs/cadence" rel="noopener noreferrer"&gt;Cadence&lt;/a&gt; · &lt;a href="https://www.designesy.org/labs/acoustics" rel="noopener noreferrer"&gt;Acoustics&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Designesy is design intelligence infrastructure. The contract is public, machine-readable, and verified against the live site. We build against it.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>designsystems</category>
      <category>a11y</category>
      <category>css</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
