v3.0.0 — THE BRAIN
v3.0.0 — THE BRAIN
The biggest architectural shift in ux-skill's history. Brand specs went from "templates the recommender picks from" to training data the engine learns from. Output is novel every call. The system has eyes on its own history. Self-learning. Fully offline. No LLM ever called.
We named this The Brain because that's what got built: a constrained generative design compiler with a closed feedback loop.
What's new
7-axis synthesizer
Briefs map deterministically to 7 continuous axis values (warmth, contrast, density, geometry, formality, motion, type_personality). Axis values compile to fresh palette + type + spacing + radius + motion tokens. Same brief always yields the same output.
Three auto-dispatched modes
- strict_brand —
reference_brands=[stripe] strict=True→ 100% Stripe tokens - brand_anchor —
reference_brands=[stripe]→ 70% Stripe + 30% axis-adapted - pure_synthesis — no brand named → infinity space, 8 axis-matching exemplars distilled
Axis interaction matrix
Explicit conflict resolution between competing axes. Dense + corporate → 4px (Bloomberg). Airy + corporate → 12px (luxury). Soft + playful → 18px radius. Sharp + corporate → 2px radius. Documented, tested.
Decoupled tone evaluator
score_tone_match now compares synth output to the brief's RAW tags, not against axes pre-derived by the same function. Independent ground truth instead of self-grading.
Decisions ledger as learning substrate
.ux/decisions.jsonl is no longer just a log. The recommender now re-ranks candidates by past wins in the same (industry, ui_type) bucket. Cold-start safe. Only counts decisions with lint_score >= 80 AND user_accepted = true. The intelligence loop is now closed.
/ux-evolve auto-loop
Lint → polish → re-lint until score ≥ 90 or plateau or 5 rounds. Quality gate at 65 — below that, refuses to ship unless --force. 6 idempotent polish passes.
Layout primitives — responsive by construction
7 primitives all use auto-fit minmax(min(N, 100%), 1fr) + container queries. Zero size-based @media queries. Broken layouts cannot be emitted.
Typography computation
Modular scale ratio picked from contrast (1.200 / 1.250 / 1.333). 9-step ladder. Weight curves from type_personality + contrast. Tracking + line-heights from formality + density.
Stats dashboard
uxskill stats --html writes .ux/stats.html — local single-file dashboard showing what your install has learned. No telemetry. No global aggregate.
3 new MCP tools (15 → 18)
ux_synthesize, ux_decisions_query, ux_decisions_stats
Determinism hardened
Every sort in the synthesizer pipeline now has explicit tie-breakers (alphabetical on brand id). Reproducible across machines, filesystems, Python versions.
What got KEPT
- All 22 slash commands + 1 new (
/ux-evolve) = 23 commands - All 11 data manifests, 1,182 entries
- All 160 brand DESIGN specs (role changed, count didn't)
- All 145 anti-pattern rules
- 17-IDE installer
- 17-locale homepage + README set
What got REJECTED (and why)
- "Burn the catalogue for infinite space" — kept all 1,182 entries
- "LLM-judged subjective aesthetic axes" — went deterministic
- "Multi-candidate genetic mutation" — single artifact + polish loop
- "Rename commands to generate:ui / mutate:ui" — kept all 22, added 1
Numbers
| Metric | Count |
|---|---|
| Slash commands | 23 |
| MCP tools | 18 |
| Structured entries | 1,182 |
| Anti-pattern rules | 145 |
| Brand DESIGN specs | 160 |
| IDEs supported | 17 |
| Localized homepages/READMEs | 17 |
| Tests passing | 223 |
| LLM calls in engine | 0 |
| Telemetry events | 0 |
Install
pip install uxskill
uxskill init
uxskill synthesize --industry fintech-payments --tone bold
uxskill stats --htmlRead more
- Full launch blog post
- Brand specs are training data, not templates
- A deterministic design engine that learns offline
- What closed-loop actually means
- The 7 axes explained
- v3 vs UI/UX Pro Max — honest scorecard
- Wiki: v3-The-Brain
- Full CHANGELOG
MIT licensed. No telemetry. No LLM in the engine. Local stats dashboard. Runs in 17 IDEs.