uxskill
Star on GitHub
v3.1.0 · THE BRAIN · LIVE MIT · no telemetry · no LLM

The brain that ships
design that
doesn’t look generated.

v3.1.0 is here. A 7-axis synthesizer turns any brief into a fresh design language. 160 brand specs become training data, not templates. New in 3.1: output is anchored to your brand with a fidelity hard floor, mobile-gated against horizontal scroll, and reaches for a derived wow moment. The recommender re-ranks from a local decisions ledger that learns from your work. Runs in Claude Code, Cursor, Windsurf and 14 more IDEs. Same brief always ships the same output. Offline. Deterministic. No LLM in the engine.

1,243
Structured entries
160
Brand DESIGN.md specs
152
Anti-pattern rules
17
IDE integrations
01 · The problem you ship every day

You vibe code in Claude Code or Cursor.
Your AI ships slop by default.

Ask the model to "build a fintech landing." You get the same five tells inside ten seconds. Purple-to-blue gradients. Three equal cards. Inter at display size. John Doe in the testimonial. Bouncing arrow CTA. Centered hero. 300ms ease-in-out on every transition. The output is technically correct and visually disposable.

The fingerprint
Five tells, ten seconds.
  • Purple → blue 135° gradient
  • Three equal cards in a row
  • "Lorem ipsum dolor sit amet"
  • "John Doe" / "Jane Doe" testimonial
  • Inter 96px hero, centered
Why it happens
The model improvises.

The assistant has read every design system on GitHub. It has no idea which one fits your brief. It defaults to the centroid — the average of every SaaS site it ever ingested. The result reads as generated within seconds. Your domain, your industry, your customers — none of it influences the output.

The cost
Trust erodes on first paint.

Investors flag it. Customers click away. Designers refuse to touch it. You ship faster but the shape of what you shipped is generic. A year of vibe coding leaves a portfolio that all looks the same. The velocity feels free until the brand bill comes due.

What if your AI assistant had a designer's brain wired up next to it — a brain that knew which design language fits your brief, refused the slop fingerprints before commit, and learned from every shipped output?

That's v3.1. Keep scrolling.

02 — The architecture

Brand specs are training data,
not templates.

The catalogue used to be a menu. Pick Stripe, get Stripe-flavored tokens. v3 turned that on its head: the 160 brand specs become vocabulary the engine distills from. Output is novel every call.

Before v3 · the catalogue picks

Recommender returns a brand specimen.

match_brand(brief) → stripe
You ship Stripe tokens. Or you fork them. Either way, the system has nothing new to say.

After v3 · the brain distills

Synthesizer compiles a fresh design language.

synthesize(brief) → novel tokens
Same brief, same output, every time. Different brief, different system. The catalogue is now the corpus.

03 — The 7 axes

Seven values.
One design language.

Briefs map deterministically to seven axis values. Axis values compile to palette, type, spacing, radius, and motion tokens. Same brief always yields the same output.

Warmth0.40
CoolWarm
compiles to --canvas, --ink
Contrast1.00
QuietLoud
compiles to scale ratio, weights
Density0.70
AiryDense
compiles to --s-1..--s-7
Geometry0.30
SharpSoft
compiles to --r-sm..--r-xl
Formality0.60
CasualFormal
compiles to tracking, line-height
Motion0.75
StillKinetic
compiles to --ease, --t-fast
Type personality0.80
NeutralHumanist
compiles to display, body pair
04 — The three modes

Three modes.
Auto-dispatched.

The synthesizer picks its own mode based on whether you anchored to a named brand. Strict for exact replication, anchor for guided variation, pure for infinity space.

Mode 01 · fastest
strict_brand

100% named brand · verbatim

Anchor on a named brand with strict=True. 100% Stripe tokens, no axis adaptation. Fastest path. For when you know exactly what you want and the brief is "give me Stripe."

reference_brands=["stripe"]
strict=True
Mode 02 · the sweet spot
brand_anchor

70% named · 30% axis adaptation

Anchor on a named brand, then bend it toward the brief's axis values using four sibling brands as additional vocabulary. The variation that still smells like Stripe but feels like yours.

reference_brands=["stripe"]
tone=["warm","editorial"]
Mode 03 · infinity space
pure_synthesis

0% named · 100% axes

No brand named. The synthesizer picks 8 axis-matching exemplars from the catalogue and distills them into a novel design language. No single brand copied; their shared vocabulary harvested.

industry="developer-tools"
tone=["bold","editorial"]
05 — The intelligence loop

The brain learns
from itself.

Every call writes to .ux/decisions.jsonl. The recommender re-ranks future candidates by your past wins in the same industry plus UI-type bucket. Cold-start safe. Local only.

brief
axes
exemplars
vocabulary
tokens
output
lint score
ledger
re-rank

The intelligence loop is now closed. Only decisions with lint_score ≥ 80 and user_accepted = true count toward future re-ranking. Your install gets sharper for the work you actually ship.

06 — The dogfood

This page was synthesized
by v3.1 itself.

We ran the synthesizer on a brief that describes this page. The tokens it emitted power what you are reading right now. The brain ships its own marketing.

The brief
industry      = "developer-tools"
tone          = ["bold", "editorial",
                 "kinetic", "humanist"]
audience      = ["vibe-coder", "ai-builder"]
must_have     = ["dark-mode"]
forbidden     = ["playful", "rounded"]
Mode dispatched

pure_synthesis

The 7 axis values
warmth0.40 contrast1.00 density0.70 geometry0.30 formality0.60 motion0.75 type_personality0.80
Source exemplars (8)

audi, bentley, bmw, bmw-m, bugatti,
ferrari, lamborghini, mclaren

Synthesized palette
#424448 canvas
#c0c2c6 ink
#987d86 primary
#9a9ca0 body
Synthesized type pair

Bricolage Grotesque

Inter for body. Both ship via Google Fonts. The display face here on this page is exactly what came out of the synthesizer.

JetBrains Mono · for code · ratio 1.333

Mini-component — rendered in the synthesized palette as the brain emitted it
Card title 07

This card uses the literal token values from the synthesize() call: canvas #424448, ink #c0c2c6, body #9a9ca0, primary #987d86. Radius 7px. Spacing scale 4-8-12-20-32-52-84.

View token output

These are the actual tokens that powered this page. The brain ships its own marketing. The brief and output are in the HTML source as a comment at the top of the file.

07 — Why this is the floor

Three properties.
No competitor has all three.

01
Offline.

Runs on a plane. No API key. No vendor lock-in. The 1,243 entries, 152 rules, 160 brand specs, and the synthesizer all live inside the Python wheel. Air-gapped repos can ship it.

02
Deterministic.

Same brief always produces the same tokens. Every sort has an explicit tiebreaker. Reproducible across machines, file systems, Python versions. Diffing two synth runs is meaningful.

03
Self-learning.

Every call writes to .ux/decisions.jsonl. The recommender re-ranks future candidates from your past wins. No telemetry. Your install gets sharper for your work, not aggregate slop.

08 — For vibe coders

If you ship by feel,
the brain is your floor.

You prompt an assistant. It returns code. The CSS is generic. The hierarchy is flat. The palette is the default Tailwind ten. You ship anyway, because the alternative is hand-tuning a thousand tokens.

uxskill sits between you and the assistant. The brief becomes a synthesized design language before code is written. The linter catches the slop before commit. The ledger remembers what worked. You stay vibe; the floor stays high.

A maker at a screen, four in the morning. The session writes the JSX. The shape gets earned.

Install in 60 seconds.

Pick the runtime that fits where you live. The Python wheel is the engine; the npm wrapper invokes it from Node hosts; the Claude marketplace installs the slash commands and sub-agents directly.

$ pip install uxskill
$ npx uxskill init
$ claude plugin install uxskill

Open source · MIT · No telemetry · No LLM · Star on GitHub