Skip to content

feat(create): rebuild the builder as an adaptive Studio#284

Open
mehdibha wants to merge 3 commits into
mainfrom
claude/nifty-wu-d32c29
Open

feat(create): rebuild the builder as an adaptive Studio#284
mehdibha wants to merge 3 commits into
mainfrom
claude/nifty-wu-d32c29

Conversation

@mehdibha

@mehdibha mehdibha commented Jun 27, 2026

Copy link
Copy Markdown
Owner

Experiment — UI-first. A from-scratch redesign of the /create builder. Real axes drive the live preview; new/aspirational axes are polished UI that goes live the moment a component consumes them.

What changed

Removes the old left panel entirely — the 288px drill-down customizer-panel.tsx, the whole panel/ ?lab exploration, and the panel/lab search params — and replaces it with Studio (www/src/modules/create/studio/): one living surface that sharpens as you lean in.

The right-side live preview, export, and code-options modules are kept and reused.

The experience

  • Shell — a left column beside the live preview; below lg they collapse to one switchable pane (both kept mounted, so the iframe never reloads). Fixes the old "15px preview sliver" mobile break.
  • Header — live brand swatch (edit the accent from anywhere), editable system name, ⌘K, a Quick/Studio depth toggle, and wired Re-roll / Undo / Redo / Reset (the old Shuffle/Undo were dead buttons).
  • Rail — a thin icon spine of nine chapters, replacing the drill-down stack.
  • Inspector — renders the active chapter; fine controls reveal/hide along the depth toggle.
  • ⌘K command palette — search over chapters, presets, components, and actions, indexed from the same data the panel renders.

One surface, two postures

Quick shows only macros (the few decisions that re-skin everything); Studio reveals the micros in place. Lowering depth never discards values (they live in the ?preset= URL).

Covers the brief

  • One color → full system — seed a color, the engine generates accent ramp + neutral + status live.
  • Decide how color is built — Guided vs Advanced: algorithm (de-jargoned labels), neutral temperature, vibrancy, full engine knobs + WCAG readout, dark strategy.
  • Palettes-as-foundations — an explicit optional switch surfacing the raw scales.
  • Tweak any component — group-first index; editing a synced group fans out to all members in one undo step; opening a component switches the preview to it (fixes the config↔preview decoupling).
  • Control anything — plus new axes: Material style family (Flat/Soft/Elevated/Glass), Motion, typographic rhythm, border/spacing/focus, icon weight, cursors.

Each control wears a live dot (drives the preview) vs a hollow one (UI, not yet wired). UI-only axes write --ds-* vars, so they go live when a component reads them — no rewiring.

Bugs found & fixed (by driving it in-browser)

  1. Inspector blanked on chapter switchAnimatePresence mode="wait" stalled the incoming chapter on the outgoing exit; replaced with a keyed remount.
  2. Entrance could strand content invisible — an opacity:0 enter, frozen, pins the panel blank. Now a transform-only CSS keyframe whose resting state is always visible.

Verification

Live at 1440×900 and 390×844, dark mode. No console errors · pnpm typecheck 0 errors · pnpm check format clean. Verified: all nine chapters mount/switch; write path control→URL→postMessage→preview; undo/redo; mobile full-width pane; ⌘K (34 entries); synced-group fan-out; depth reveal.

How the design was chosen

A multi-agent design workflow generated five independent visions, an adversarial judge panel scored them, and a synthesis merged the best into the buildable spec. Full write-up: docs/research/2026-06-27-create-studio-redesign.md.

Notes / not in this PR

  • Wiring the UI-only product axes (Material/Motion/Typography fonts/…) to real preview consumers + publisher is a follow-up — and a product decision to confirm first per CLAUDE.md.
  • Deferred: the auto/manual pin model, live semantic-token re-pointing, import-a-brand, natural-language intent bar, click-the-canvas-to-inspect.

Note

Medium Risk
Large UX swap on the primary builder route with many controls only partially wired to preview consumers; preset URL and undo history behavior must stay correct across the new chapters.

Overview
Replaces the entire /create left-panel stack — drill-down customizer-panel, the ?lab panel/ prototype, and panel/lab URL params — with a new Studio module that is always rendered from the create route.

Studio is a rail + inspector layout beside the reused preview iframe: nine chapters (brand through interaction), a dedicated top bar (brand swatch, name, ⌘K, Quick/Studio depth, working undo/redo/reroll/reset), compact export footer, and mobile Customize/Preview toggle with both panes kept mounted. Design edits still flow through ?preset= via useDesignSystem; builder-only UI state lives in StudioProvider.

New product surface includes one-seed brand generation, presets, command palette, synced component-group edits with preview coupling, live vs UI-only live dots, and many --ds-* token axes (material, motion, typography, etc.). CodeOptionsDialog gains an optional custom trigger for the compact export bar. Chapter switching uses keyed remount + transform-only .studio-enter CSS instead of AnimatePresence to avoid blank inspector panels.

Adds experiment documentation at docs/research/2026-06-27-create-studio-redesign.md.

Reviewed by Cursor Bugbot for commit c80d188. Bugbot is set up for automated code reviews on this repo. Configure here.

Replace the drill-down customizer panel (and the ?lab exploration) with a
single adaptive surface: an icon-rail of nine chapters, an inspector that
reveals fine controls along a Quick/Studio depth toggle, a live brand swatch,
wired undo/redo + re-roll, a schema-derived command palette, and a mobile
layout that drops the old 15px preview sliver.

New axes (Material style family, Motion, typographic rhythm, border/spacing/
focus, icon weight) write namespaced --ds-* vars so they go live the moment a
component consumes them; each control wears a live/UI honesty dot. Synced
component groups fan one edit across all members in a single undo step, and
opening a component now switches the preview to it.

Chapter transitions use a transform-only CSS keyframe whose resting state is
always visible, so the panel can never be stranded blank.
@changeset-bot

changeset-bot Bot commented Jun 27, 2026

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: c80d188

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@github-actions github-actions Bot added documentation Improvements or additions to documentation area: www labels Jun 27, 2026
@cursor

cursor Bot commented Jun 27, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_97c8b679-cf63-47c5-9bf3-12fb2f15bc90)

@vercel

vercel Bot commented Jun 27, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
dotui Ready Ready Preview, Comment Jun 27, 2026 10:51pm

Reclaim ~50px of vertical space for the inspector. The footer drops the
multi-line URL box for a single-line, truncated, copyable install command plus
a compact action row (code-style icon · deeplink · share). The header collapses
from three rows to two and drops its theme toggle — the global site header
already owns it, so it only cost a row. Search becomes a compact ⌘K chip; the
code-style dialog gains a 'trigger' prop and the command palette a 'compact' one.
@cursor

cursor Bot commented Jun 27, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_4c9fc8ac-ede8-4d35-a450-4bd88e5d62e0)

@cursor

cursor Bot commented Jun 27, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_c7343793-09d5-41fc-9320-63ce0544b678)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: www documentation Improvements or additions to documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant