Skip to content

v3.0.0 — THE BRAIN

Choose a tag to compare

@Laith0003 Laith0003 released this 28 May 17:54

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_brandreference_brands=[stripe] strict=True → 100% Stripe tokens
  • brand_anchorreference_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 --html

Read more


MIT licensed. No telemetry. No LLM in the engine. Local stats dashboard. Runs in 17 IDEs.