Get started

Release · May 26–29, 2026 · v0.6.27

What's new

This wasn't a patch week. We shipped a composable product platform — first-run onboarding with a live sidebar preview, a four-app switcher, tenant authoring, settings that finally split personal from workspace, Product Studio for builders, and AI guardrails so agents stop inventing off-brand hubs. Everything below is from the running reference app.

28
Package releases
5
Onboarding steps
4
Switcher apps
7
Hub view types
0
Toasts shipped

I · Compose a product

Onboarding is the first screen.

Builders no longer land in an empty shell. Add new product in the five-step wizard — pick Custom (or Prism / One), name it, set scope + persona, build starter nav — with the sidebar updating live on every choice. Re-pick without stale preview; type nav labels and icons infer themselves.

Add new product Live sidebar preview 3-card product picker 80-icon matcher Enter / Esc shortcuts Restart from Profile

II · Four apps, one switcher

Prism, One Schools, One Sites — and yours.

Exxat One is two switcher entries, not a sub-toggle. Custom products get suffix URL slugs (`/assessment/*`), their own theme surface, and isolated persistKey prefixes so Library filters never leak across apps. Switching hard-redirects to that product's dashboard.

defineProduct() API @exxatdesignux/product-framework tenant-products.json Add product CLI Custom nav active state

III · Settings grew up

Profile vs Organization — finally.

Personal theme, contrast, text size, and coach-mark resets live in Profile. Products, brand colours, default startup, hide/show, and Add product live in Organization. End users always see the product list; builders get authoring controls in dev.

Appearance card rebuilt

Brand tint mixes against neutral --card — Blue reads blue, not Prism pink bleed.

Wordmark editor aligned

Inline suffix input matches ExxatProductLogo baseline in Add product.

Logo cascade

Full wordmark → suffix-only → wrapped suffix at narrow sidebar widths.

Builder floor in prod

Authoring UI gated to import.meta.env.DEV — coordinators never see Add product in deploy.

IV · The hubs you ship against

Same patterns — product-scoped.

Library now mounts under /prism/library/* (and custom roots). Secondary panel, seven view tabs, flat KPI band, collaboration header, and dashboard charts — unchanged IA, namespaced state. Starter scaffolds ship the real dashboard composition, not a marketing placeholder.

DataTable fills the canvas

Grid stretches when columns are narrow — no awkward empty gutter.

Sidebar labels wrap

SidebarNavLabel — long hub names break lines instead of truncating mid-word.

Secondary panel elevation

OKLCH brand tint per active product — not a flat grey rail.

SidebarDrillIn exported

Settings / Tokens category pickers ship from the package barrel.

V · AI that asks first

Agents post a brief — or they don't ship.

0.6.0 lifted the product framework and wired a Cursor brief-gate hook. By 0.6.12 it stops trapping consumer apps. Consumer repos now get exxat-product-context, domain-context skill, and 45 binding rules via sync-extras. The agent must declare Product / Scope / Persona before writing a hub.

exxat-senior-ux skill Brief-gate hook exxat-ui doctor exxat-ui upgrade Zero-warning scaffold

What this means in review

When a PM asks Cursor to "rebuild the courses page," the agent should pause, post a design brief, and map to ListPageTemplate + reference hub — not drop charcoal bg-primary buttons and a raw card grid. If it doesn't, the hook blocks the write.

VI · Feedback & polish

No toasts. Banners instead.

Sonner is gone from the package. Product feedback routes through LocalBanner, inline status, and dialogs — the pattern you already spec in hub flows. Plus HC polish on secondary panel, view tabs, and ToggleSwitch green "on" track.

Resize handles off tab order

WCAG 2.4.7 — no invisible column tab-stops in DataTable.

Dev reload storm fixed

Persisted-state no-op writes + builder sync no longer thrash Vite on every hub mount.

Onboarding blob fixed

Background gradient no longer clips at the wizard inset bottom.

Package half the size

Source maps dropped from npm tarball — faster installs for design partners.

VII · Day by day

The arc of the week.

May 26

0.6.0 — Platform lift

Product framework package, defineProduct(), brief-gate hook, multi-product routing docs, sync-extras postinstall.

May 26

0.6.3–0.6.7 — Install quality

Tailwind self-scan fixes unstyled scaffolds; zero-warning pnpm dev; consumer Cursor rules attach in Vite apps.

May 27

0.6.14 — Tenant persistence

Settings split begins; products survive reload via centralized store + dev sync.

May 28

0.6.16–0.6.18 — Builder authoring

Shipped catalog, add-product CLI, authoring roles, SidebarDrillIn export, reload-storm fixes.

May 29

0.6.20–0.6.27 — Onboarding + shell

Five-step wizard rebuild, Product Studio, first-visit redirect, real starter dashboard, product-framework boundary, no-toast, auto-upgrade on install.

VIII · The full inventory

More than fits one page.

28 semver bumps in four days. Below is everything UX-facing that landed — including the plumbing designers don't see until it breaks. If it's not here, it's in packages/ui/RELEASES.md from 0.6.0 through 0.6.27.

Platform & routing

  • @exxatdesignux/product-framework published
  • defineProduct() + registerProducts()
  • Four-app switcher (Prism, One Schools, One Sites, Custom)
  • URL-is-truth product adoption on direct visits
  • productPersistKey() — no cross-app filter leaks
  • Custom suffix slugs (/assessment/*)
  • Library under product roots + back-compat alias
  • First-visit → onboarding; then default dashboard
  • Custom nav active state at runtime
  • Empty default tenant catalog (no seeded Assessment)

Builder authoring

  • Product Studio — catalog sync, route roots, checklist
  • Add product CLI + shipped catalog import
  • tenant-products.json dev sync (no reload trap)
  • Builder mode on in dev; end-user mode in prod builds
  • Authoring hard floor — import.meta.env.DEV
  • Wordmark editor aligned with ExxatProductLogo
  • Logo cascade: full → suffix → wrap
  • Suffix clamped to 24 chars in registry
  • Appearance card — brand tint on neutral card
  • Restart onboarding from Profile settings

Onboarding wizard

  • 5 steps with live sidebar preview
  • 3-card picker — ring selection, no black fill
  • Built-ins lock wordmark + brand colour
  • Re-pick product without stale preview
  • 80-icon FA matcher from label text
  • Suggested nav rows (Library, Reports, …)
  • Enter / Esc workflow shortcuts
  • Leaner copy — no ALL CAPS eyebrows
  • BlobBackground clip fix at wizard bottom
  • Per-device completion flag

Shell & hubs

  • Real starter dashboard (KPI + charts, not marketing cards)
  • SidebarNavLabel — wrap, don't truncate
  • Secondary panel OKLCH brand elevation
  • SidebarDrillIn in package barrel
  • DataTable fills canvas when columns are narrow
  • Seven hub view types parity
  • Org settings product list for end users
  • Profile / Organization settings split
  • Product switcher with mark colours
  • HC polish on panel, tabs, ToggleSwitch

AI & consumer DX

  • Brief-gate hook — ask before design-critical writes
  • exxat-senior-ux + discovery protocol
  • 45 binding Cursor rules via sync-extras
  • 23 AI skills vendored to consumer apps
  • exxat-product-context rule
  • exxat-domain-context skill
  • exxat-ui upgrade — port shell files
  • exxat-ui doctor — drift detection
  • Postinstall auto-upgrade on fresh installs
  • Zero-warning pnpm dev on scaffold

Quality & packaging

  • Sonner removed — no-toast guardrail
  • Package tarball ~50% smaller (no source maps)
  • Tailwind self-scan — scaffolds styled on install
  • Persisted-state no-op write guard
  • Resize handles off tab order (WCAG 2.4.7)
  • next-themes + react-router-dom required peers
  • Consumer rules globs fixed for Vite apps
  • RELEASES.md renamed (no 120 KB in node_modules)
  • 198 tokens · 90 components in package
  • Builder onboarding handoff doc shipped