uxskill
Star on GitHub
Language
English 简体中文 繁體中文 日本語 한국어 हिन्दी Bahasa Indonesia Tiếng Việt ไทย العربية Español Français Deutsch Português Русский Türkçe Italiano
`pip install uxskill` Star on GitHub
3.1
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.

pip install uxskill
See it work
1,243
Structured entries
160
Brand DESIGN.md specs
152
Anti-pattern rules
17
IDE integrations
How it works

A 7-axis synthesizer turns a brief into a fresh design language.

I
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.

II
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.

Warmth 0.40
Cool Warm
compiles to `--canvas, --ink`
Contrast 1.00
Quiet Loud
compiles to `scale ratio, weights`
Density 0.70
Airy Dense
compiles to `--s-1..--s-7`
Geometry 0.30
Sharp Soft
compiles to `--r-sm..--r-xl`
Formality 0.60
Casual Formal
compiles to `tracking, line-height`
Motion 0.75
Still Kinetic
compiles to `--ease, --t-fast`
Type personality 0.80
Neutral Humanist
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
warmth 0.40 contrast 1.00 density 0.70 geometry 0.30 formality 0.60 motion 0.75 type_personality 0.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.

III
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.

09 — The catalogue

## 1,243 entries.
Browse the corpus.

160
Brand DESIGN.md specs

Apple, Stripe, Linear, Vercel, Ferrari, Anthropic. Full palettes, typography, voice. JSON for queries, prose for context.

Browse brands ·
152
Anti-pattern rules

Deterministic regex. Sub-50ms scan on 10K lines. Catches placeholder text, default Tailwind palettes, A11y skips, marketing buzzwords.

Browse rules ·
3.0
Read the launch post

The full architecture writeup. Why brand specs became training data. Why the synthesizer is deterministic. Why the ledger closes the loop.

Read the launch ·

## 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