Skip to content

feat(create): rebuild the /create panel as the Studio builder#296

Open
mehdibha wants to merge 2 commits into
mainfrom
claude/great-hamilton-6b6306
Open

feat(create): rebuild the /create panel as the Studio builder#296
mehdibha wants to merge 2 commits into
mainfrom
claude/great-hamilton-6b6306

Conversation

@mehdibha

@mehdibha mehdibha commented Jun 27, 2026

Copy link
Copy Markdown
Owner

Experiment — UI redesign of /create. Deletes the entire old left panel (the stacked CustomizerPanel and the ?lab prototype — ~2,990 lines) and rebuilds it from scratch as the Studio: a rail + inspector that serves both "a clean system in minutes" and "tweak every atom." The live preview pane is untouched.

The idea: one tool, two people

A rail (10 sections) + inspector, with a single Simple ⇄ Pro switch that hides/reveals the micro controls per section. Depth is always one click away — no drill-downs. Plus ⌘K search over every section and component, shuffle, undo, and a sticky export footer.

Requirements coverage

Ask How
Seed 1 color → full system Brand section: a hero picker generates 6 ramps × 11 steps + dark mode live; plus starters, vibes, import-from-hex, shuffle.
Decide how the color system is built Color model: 1 seed · 2 seeds · Full palette · Manual, + algorithm (OKLCH/Tailwind/Material/Contrast) + knobs.
Palettes or not as foundations "Expose palettes as foundations" switch — ramps become named, expandable foundation tokens, or stay hidden behind the semantic layer.
Tweak a specific component Components section: searchable, group-sorted → inspector with real params; opening one switches the live preview and shows its synced-style group.
Control anything All 10 sections + a live semantic-token remapper (below).
Portable output Existing export footer (shadcn CLI + Open in v0), preset baked into the URL.

Highlight: a genuinely-live semantic-token remapper

Repoint any of 12 semantic roles (Surfaces / Text & borders / Status) to a different palette + step, or a custom brand hex — and the preview updates instantly. Allowed palettes per role are derived from each token's authored scales pool in DEFAULT_SEMANTICS (Danger is locked to its own family; surfaces can tint toward the brand).

It's live because the preview's DesignSystemProvider writes every tokens entry via root.style.setProperty(...) — inline on :root — which outranks the emitted semantic stylesheet. Verified end-to-end: remapping Primary → Brand wrote --color-primary: var(--accent-500) on the preview :root, the computed value became exactly --accent-500, and the preview's primary buttons/selected date turned the brand color while text/cards stayed neutral. The override persists in the preset and the export command.

Live vs. preview-only (shown honestly)

Every control carries a status dot — filled = drives the preview, hollow = UI-only. Live: color seeds/algorithm/knobs, palettes-as-foundations, semantic remapper, contrast, chart colors, radius, density, cursor, per-component params, export. Preview-only (proposals surfaced for review, each needs a product decision + a preview consumer to go live): typography families/scale, icon library/stroke, border width, spacing scale, surface style family/shadow/glass, motion duration/easing, focus ring, default boot mode.

Files

  • New: www/src/modules/create/studio/** — shell (index.tsx), context, data, primitives, and sections/ (brand, color, components, foundations, semantic).
  • Modified: routes/_app/create.tsx (renders StudioPanel; search schema trimmed to preview/preset), styles.css (a CSS-safe studio-fade-in keyframe).
  • Deleted: customizer-panel.tsx + the whole panel/ lab dir.

Verification

pnpm typecheck ✅ · pnpm check ✅ (only 2 pre-existing warnings in unrelated files). Verified in-browser (light + dark): brand seeding/ramps, color model + algorithm + foundations toggle, Pro knobs + semantic remapper (turned preview teal) + contrast + chart colors, component browse → inspector → live preview switch, Motion control types, ⌘K, shuffle changing the system live. The custom-hex field renders and rides the same verified setToken channel (the headless harness couldn't simulate a real keyboard commit into react-aria's ColorField, so that one path is verified by construction, not by an automated click).

Notes

UI-only experiment per the brief: everything free was wired to real state; new axes are honest UI for product review. No registry source touched (no shadcn-schema impact); no build:registry outputs changed.


Note

Medium Risk
Large UI swap on a primary route with new navigation and URL schema changes (panel/lab removed), but preview/export/preset wiring is largely reused and registry sources are untouched.

Overview
Replaces the stacked CustomizerPanel and the entire ?lab panel-lab prototype (~3k lines under panel/) with a new Studio experience on /create. The live preview pane is unchanged.

The new left UI is a rail + inspector with ten sections (Brand, Color, Typography, Icons, Shape, Density, Surface, Motion, Components, Code), a Simple ⇄ Pro toggle that hides micro controls per section, ⌘K search over sections and tweakable components, and shared undo / shuffle plus a sticky export footer. Brand adds hero color picking, starters, vibes, and import-from-hex; Color adds color models, foundations toggle, and in Pro a live semantic-token remapper (palette step or custom hex on --color-*). Opening a component in Components switches the preview via ?preview=.

/create chrome: drops panel and lab from search params (keeps preview / preset), wraps the page in StudioShellProvider, renders BuilderTopBar instead of stacking the site header (routes/_app/route.tsx skips Header on /create). Adds a studio-fade-in CSS utility for section transitions.

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

Replace the stacked customizer + lab prototype with a from-scratch rail + inspector: brand quick-path (seed/import/starters/vibes/shuffle), full color system (model selector, algorithm + knobs, palettes-as-foundations, a live semantic-token remapper, contrast, chart colors), a per-component inspector that switches the preview, and every foundation axis. Adds a Simple/Pro persona switch, command-K search, undo, and a sticky export footer. Removes customizer-panel.tsx and the panel/ lab dir.
@changeset-bot

changeset-bot Bot commented Jun 27, 2026

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: 5284bde

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

@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 11:10pm

@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_2fba91f9-cbdc-4c4b-b047-9d1a6f2e9a72)

@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_d4846382-7f15-4fcb-a054-e7f171aee503)

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant