Skip to main content
Contact
← WorkweableColor
Case study · Live product

I built accessible color tooling for Figma and VS Code—WCAG and APCA on real layers.

Shipped VS Code extension (900+ downloads), in-file Figma plugin with fixes and CSV export, and weable.pro for docs and colorStudio. Fiverr contrast audits use the same plugin output.

900+ VS Code downloads · live on weable.pro

900+
VS Code Marketplace downloads
WCAG + APCA
Dual contrast models

The problem

Accessibility still sits at the end of the color workflow. VS Code has plenty of pickers; almost none tell you whether `#888888` on `#212121` passes WCAG or how it reads under APCA.

In Figma, the native checker is web-only. You copy hex out, check elsewhere, paste back—slow, and the first thing teams skip when the deadline hits.

Legal conversations need WCAG 2.x. Perceptual quality needs APCA. Most tools pick one, or none, and almost none run on the canvas pairs that actually ship.

  • URL auditors miss Figma layers and design-system tokens
  • Color-only state and weak component contrast stay common failure modes
  • Monorepo deploy blocked shipping until an isolated weable-color-only build

My role & scope

I founded and built weableColor end to end—product, UX, core algorithms, Figma plugin, VS Code extension, weable.pro site, and launch docs. The proof is the live product, not a slide deck.

  • Published `@weable-tools/a11y-color-utils` v0.1.1 — contrast, APCA, palette fix, license hooks
  • Mission Control + Live Inspector on `selectionchange` — value on first open, not after Analyze
  • VS Code: DocumentColorProvider, hover diagnostics, quick fixes, CSS/Tailwind export
  • weable.pro on isolated Vercel build (51 → 16 pages, zero build errors)

Solution overview

One engine, three surfaces. The npm package powers VS Code, the Figma bundle, and colorStudio on weable.pro—a fix in Figma uses the same math as the extension nudging your pair toward AAA.

Docs and exports live on weable.pro; the plugin stays in-file. CSV, CSS variables, and Tailwind output match what I deliver on Fiverr contrast audits.

weableColor Figma plugin with Mission Control and canvas contrast scan
Figma, VS Code, and weable.pro share one engine—contrast on the canvas you already use.

How it works — WCAG + APCA

WCAG 2.x ratios are the compliance baseline. APCA (Lc) adds perceptual context when type size, weight, or background complexity changes. weableColor shows both—I report numbers, not legal sign-off.

  • WCAG: AA/AAA thresholds on real foreground/background pairs
  • APCA: Lc with Bronze-tier guidance — see the APCA guide on weable.pro
  • Live Inspector: suggested hex, not red/green badges only
  • CSV export for design reviews and Fiverr deliverables (same plugin output)
Live Inspector listing failing text and background pairs with WCAG ratio and suggested hex fix
Live Inspector — WCAG and APCA on layer pairs with suggested hex.

Figma plugin — Mission Control & Live Inspector

I designed for zero-click context: selection changes update the panel—page score, failing pairs, fixes without leaving the file. That beats the empty-room pattern: sparse UI, Analyze friction, no value on open.

  • Dynamic score and auto-scan on the current page
  • Layer failures with suggested hex and one-click apply
  • CVD simulation and in-plugin APCA
  • In-file scan, fix, and export—vs Figma’s web-only checker
Mission Control panel showing page contrast score and scan controls in Figma
Mission Control — page score on open; selection drives the panel.

Design & accessibility (SACA)

Every surface uses SACA—stable `saca-wc-*` BEM hooks, WCAG 2.1 AA+ from day one. This portfolio uses `saca-portfolio-*` with the same rules so handoff stays predictable.

  • Human-readable class names — no MUI hash selectors
  • Keyboard paths, focus rings, contrast on chrome—not only customer content
  • Marketplace copy: measure and report; never promise legal certification

Engineering highlights

Packaging was product work: tsup (CJS/ESM/types), vitest, semver, README. Isolated weable.pro deploy unblocked velocity—the focused tree cut scope and shipped clean.

  • Core: `calculateContrastRatio`, `checkContrast`, `calculateAPCA`, `generatePalette`, `deltaE`, `initLicense`
  • VS Code v0.0.2 published; early reactions validated native picker integration
  • License flow designed: Gumroad webhooks, Resend, Supabase (Pro staged)
  • ~18k lines of panel duplication removed in the broader program refactor

Shipped outcomes

weableColor is the first WeAble product shipped as a package: library, IDE extension, Figma plugin, and weable.pro. VS Code hit 900+ downloads before I leaned hard into Figma MVP—traction de-risked the bet.

  • Live: weable.pro, VS Code extension, colorStudio Phase 1
  • Figma: dynamic score, auto-scan, CSV, APCA, CVD, Mission Control fixes
  • Fiverr contrast audits use the same CSV export as the plugin
  • EU Accessibility Act timing documented as market context in launch docs
Export report view with failing contrast pairs ready for design review handoff
Export report — CSV aligned to developer handoff and Fiverr audit samples.

Competitive context

Figma’s flow sends you to the web. Generic pickers skip accessibility math. Stark set the bar for in-canvas contrast; my wedge is dual-metric depth (WCAG + APCA), dev-ready exports, and one engine across VS Code and Figma.

Try it · contact

Install from the VS Code Marketplace or read the Figma plugin docs on weable.pro. colorStudio runs in the browser on the same library.

I run Figma-first contrast audits—WCAG + APCA Lc, PDF summary, fix-ready CSV from weableColor. See /contact for packages ($45 / $95 / $195).

The APCA guide and WCAG vs APCA posts on weable.pro explain why I ship both metrics.

  • weable.pro/products/weable-color — product hub
  • /contact — contrast audit packages
  • weable.pro/resources/apca-guide — perceptual contrast primer

weableAccess (paused)

weableAccess is the consulting layer—Fiverr deliverables, design-system reviews, enterprise accessibility work. Same SACA discipline and CSV outputs as the plugin.

  • Active: weableColor surfaces + Fiverr contrast audits
  • Consulting brand launches with Figma Community publish
  • Same engine: plugin CSV matches audit deliverables

Roadmap

Figma Community publish, Pro licensing, and continued polish on Live Inspector and VS Code token workflows.

  • Figma Community listing
  • Live Inspector dual-metric refinements
  • Tailwind and token resolution in VS Code
  • Pro tiers on weable.pro

Reflection

Function before form got me live without dropping SACA baselines. Dynamic UX beat Analyze-button patterns. Packaging, deploy path, and marketplace copy are part of the product—over-claiming kills trust in accessibility faster than a missed swatch.

WCAG for compliance, APCA for perception—both in one panel is the moat. Next time: Figma Community in parallel with VS Code traction, not after checklist perfection.