I built a tool that stops AI from coding the same generic UI every time (offline, open source)
If you've shipped front-end with Claude, Cursor, or Copilot, you know the look. Purple gradient, three equal cards, Inter blown up huge, a "John Doe" testimonial, 300ms on everything. The tools don't choose it. They default into it, because the average of everything they trained on is generic.
I'm a designer, and undoing the same five mistakes by hand stopped scaling. So I built ux-skill.
It sits between you and your AI tool and swaps improvising for constraints:
You describe the project in a forced brief.
It builds a real design system: type, color, layout, motion.
It generates the code against that system.
It lints the result against 152 rules and blocks the generic version before it ships.
The part people argue with: it never calls an LLM. Pure Python, offline, deterministic. Same brief in, same system out. A model improvising is what makes the slop, so I took the model out of the decision and wrote the taste down as rules you can read and switch off.
There's a real before/after in the repo: a skip-hire site, generic template versus a branded, designed page from the same brief.
Free, MIT, runs in Claude Code, Cursor, Windsurf, and 14 more IDEs.
pip install uxskill
github.com/Laith0003/ux-skill
Happy to go deep on the rule set or the synthesizer. The part I'm least sure about is whether 152 rules is too blunt for real taste. Where do you think a deterministic checker breaks down?
Replies