Proposal (parked): prototype-first design flow with Claude Design #12
rterakedis
started this conversation in
Ideas
Replies: 1 comment
|
I would argue these are Open questions for anyone using Leanwheel-Skills:
|
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Proposal: a prototype-first design flow for leanwheel (Claude Design era)
Status: assessment only — no skill, stub, or guide has been modified. Drafted 2026-08-01.
Origin: Project post-mortem — early SwiftUI mockups were built, then largely discarded once the
real data model (Core Data/CloudKit optionals, @fetchrequest reactivity, navigation state,
empty/error states) arrived. Durable outputs were the flow map and DESIGN.md; the prototype code
was not. The costly mistake was high fidelity arriving before information architecture had
hardened.
1. Verified capability baseline
Every capability claim below is sourced. Anything the docs don't establish is marked UNVERIFIED.
Claude Design (claude.ai surface, Anthropic Labs research preview)
Per Anthropic's announcement:
web-capture tool that grabs elements from a live site.
VentureBeat)
with shareable links ("organization-scoped sharing"); exports to Canva, PDF, PPTX, or
standalone HTML.
design files," then applies it to subsequent projects; multiple systems supported.
that you can pass to Claude Code with a single instruction." The bundle's format and contents
are UNVERIFIED — no public doc enumerates what's in it.
layout. A dedicated wireframe-fidelity mode is UNVERIFIED — low-fi appears to be prompt
discipline ("wireframe only, grayscale, no polish"), not a product switch.
enablement) — so the maintainer's Pro plan qualifies. Research-preview status matters for §6.
DesignSync (Claude Code side) — verified first-hand from the tool schema
The
DesignSynctool exists in Claude Code today; its schema was inspected directly while writingthis proposal (stronger evidence than blog posts). What it actually is:
Design project — incrementally, one component at a time, never as a wholesale replace," paired
with a
/design-syncskill.list_projects(filtered to design-system-type projects the user can write to),get_project,list_files,get_file(≤256 KiB/file).finalize_planlocks exact paths + a local source dir, thenwrite_files/delete_filesagainst that plan. Component preview cards via@dsCardmarkers.list_projectsreturns onlyPROJECT_TYPE_DESIGN_SYSTEMprojects; a flow prototype living in a regular design project hasno documented programmatic read path from Claude Code. The "handoff bundle" quoted above is
a separate, claude.ai-initiated mechanism whose receiving-side mechanics are UNVERIFIED.
Third-party writeups (skills-hub.ai,
aicatchup.com) describe the
two-way loop consistently with the schema: pull the design system into design work, push built
components back. Treat those as corroboration, not authority.
Correction to the candidate flow's framing: "Claude Code has a DesignSync tool on the
receiving side [of the handoff bundle]" is half-true. DesignSync receives/pushes design
systems (token + component libraries). Nothing verified today lets a leanwheel skill fetch a
clickable flow prototype and diff against it.
2. The candidate flow, restated against leanwheel's shape
/uxStep 4 Discovery (IA probe, protagonist walk) → EXPERIENCE.md flows/uxStep 5 "Visual aids" (static inline HTML mocks — no click-testing today)/uxStep 6 "Write spines"[OPEN]items/create-storyDesign Contract →/dev-story→/design-verifyTwo observations before the per-surface verdicts:
Leanwheel already has the human-driven-external-step pattern, and it's the right one. The
framework never pretends the agent can do what only the human can. Precedents: the epic-boundary
manual test pass (the boundary report instructs the human, waits, and
/harvest-findingslater harvests the artifact the human produced); the MODEL SWITCH GATE (hard stop, human
acts in the UI, types "ready");
/epic-flywheel's commit-authorization ask. The pattern isalways: instruct → pause → harvest a durable artifact. A Claude Design pass fits this exactly:
the skill tells the human what to prompt and what to bring back, pauses, then harvests the
findings into DESIGN.md/EXPERIENCE.md. What the skill must never do is narrate pretend-driving a
claude.ai surface it cannot touch.
Step 1 needs no new artifact. A separate
docs/ux/flows.mdwould create a second flowdocument competing with EXPERIENCE.md — the same two-concepts problem the repo already killed
twice (smoke-suite vs flow;
--screenvs--route)./uxDiscovery already doestext-first IA ("walk a named protagonist through a real session"; "IA closes when every stated
need has a surface"). The candidate's step 1 is a sequencing discipline inside /ux, not a file.
3. Per-surface assessment
3.1
/ux— INTEGRATE (the load-bearing change)This is where the entire candidate flow lands.
/uxStep 5 already renders static HTML mocks "ondemand" to help the user decide; Claude Design is the escalation of that same move — from
look at a layout to click through a flow — and it arrives before Step 6 writes the spines,
which is exactly where an existing project needed it.
Sketch of the delta (extend Step 5; current text: "Render inline HTML when it would help the
user decide… Keep mocks simple — layout and color intent, not pixel-perfect production UI"):
Plus, for the Apple preset only (candidate step 4):
Why this fits leanwheel:
/uxruns a handful of times per project (create + occasionalupdate/validate), so its per-line token cost is the cheapest of any skill in this proposal; the
step is offered, not mandatory (no ceremony — trivial IA skips it, matching the
stateful/simple scaling precedent in
/create-story); and it changes no artifact contract —DESIGN.md/EXPERIENCE.md remain the only things downstream skills read.
Recorded as a deliberate divergence in
.claude/skills/CLAUDE.mdunder the existing### uxentry (upstream BMAD has no equivalent; survives sync by the normal mechanism).
3.2
/next— REJECT (new state detection), with a narrow DEFERThe proposed state — "flows exist but untested / DESIGN.md missing" — decomposes into:
prd + UI surfaces + no DESIGN.md → /ux. Since theprototype pass lives inside
/ux(§3.1), this routing already delivers the user to it. Nochange needed.
/nextis deterministic by design — "existence checks +frontmatter greps only… never read planning-doc contents." "Untested" is not a file-presence
fact; detecting it would require either reading EXPERIENCE.md (breaks the zero-token rule) or a
new stamp (a third marker alongside
readiness-check/retro:, written by a human-driven stepthe agent can't observe completing). A marker that exists to route to an optional step fails
the "exactly one NEXT" discipline.
DEFER: if a future
/uxdivergence writes a cheap machine-readable line (e.g.prototype-tested: {date|skipped}in EXPERIENCE.md frontmatter), row 5 could grow a one-lineoptional branch at near-zero cost. Evidence bar: two or more real projects where the prototype
pass was skipped and that skip caused rework
/nextcould have prevented.3.3 Flywheels (
/epic-flywheel,/story-flywheel) — REJECTA existing project's "JTBD / convergence mapping precedes IA-touching epics" rule does not belong in the
flywheels, for three reasons:
/check-readinessCheck 9 blocks: UI stories with no EXPERIENCE.md surface coverage(blocker), unresolved
[OPEN]HIG items (blocker for affected stories), non-finaldesignstatus (warning), missing tokens (blocker). That is "do tested flows + DESIGN.md exist for
the screens this epic adds?" — enforced once per phase at planning time, where fixing it is
cheap, rather than re-litigated at every epic start.
zero-token shell check or a short recorded-block read. "Are these flows tested?" is a
judgment call. Putting a judgment gate at epic start would be the first non-deterministic gate
in the loop — and the epic-context-cache episode showed the gates that work are
[ -f … ]checks, not vibes.
CLAUDE.md — put there by exactly the mechanism leanwheel prescribes (
/retrospectiveQ7promotes conventions into project CLAUDE.md). A convention proven on one project graduates to
the framework when it recurs; one data point is a project rule, not a framework rule.
Small INTEGRATE adjacent to this (optional): one warning-grade clause appended to Check 9 —
"Flows for this epic's new surfaces were click-tested (prototype reference in EXPERIENCE.md) or
explicitly skipped — silent omission = warning." Two lines, warning not blocker, loaded only in
/check-readiness(1–2 runs per phase). This gives the maintainer the audit trail without gatinganything.
3.4
/design-verify— DEFERCould it verify against a Claude Design prototype or handoff bundle? Not today, honestly:
read files only from design-system-type projects. A flow prototype in a regular design
project is not listable or fetchable. The handoff bundle's contents are UNVERIFIED — there is
nothing documented for
/design-verifyto diff against./design-verifycompares rendered UI againstDESIGN.md tokens and EXPERIENCE.md states — the contract. Verifying against prototype pixels
makes the prototype a parallel contract, which is precisely the project lesson inverted:
prototypes are thinking tools; the spec of record is the spines. (The candidate flow's step 5
phrase "prototypes treated as SPEC" is resolved the same way: the prototype is spec-shaped
input to the spines, and a human-readable reference thereafter — see §3.5 — never the machine
contract.)
Evidence that would reopen this: Anthropic documents the handoff bundle format and it
contains machine-readable tokens/states (not just HTML); or DesignSync grows a read path to
prototype projects. Then the cheap move is a
### Design Contractprovenance line, not a newverification source.
One genuinely useful DesignSync fit worth naming (out of this proposal's scope): pushing a
leanwheel project's
docs/ux/components-built.mdinventory to a Claude Design design-systemproject, so future prototypes are built from the real components. That is what the tool is
actually for. DEFER until a real project wants it; it would be a new composable op, not a change
to existing skills.
3.5
/create-storyDesign Contract — INTEGRATE (two lines)If EXPERIENCE.md records a prototype link for a story's surfaces (§3.1 harvest step), the Design
Contract extraction should carry it:
Cost discipline:
/create-storyis the highest-multiplier skill in this proposal (runs once perstory, and its extracted contract is re-read by dev + review). Two lines in the skill, one line
in the emitted contract, and only when a prototype reference exists. The subordination clause is
the important part — it prevents a dev session or reviewer from treating prototype HTML as
authoritative over tokens.
3.6 Track differences and stubs — REJECT new stubs; guidance rides
/uxpresetsWhere Swift and web genuinely diverge:
sidebarAdaptable, Dynamic TypeThe right carrier for this divergence is the
/uxplatform presets, which is where everyother per-track design rule already lives (Apple preset HIG rules, SSG performance-budget rules).
Step 5c is the Swift-track guidance; the web track needs only one caution line in the web/SSG
presets: "Claude Design emits generic HTML/CSS — its markup is not Astro/Hugo template code and
its styles are not your token system; the handoff is a reference like any prototype, and Step 6's
DESIGN.md remains the contract." Direct HTML reuse is the web-track version of
fidelity-too-early: tempting because the medium matches, wrong because the durable artifact is
still the token system.
Why not
docs/setup/*stubs (refresh-swift/refresh-weboutputs): those files carryexternally-sourced platform facts on a research-refresh cycle (Baseline CSS, Swift
concurrency, HIG mechanics) — content
/refresh-*re-derives from gold-standard sources anddocs-syncDRIFT is forbidden to touch. "Prototype before IA hardens" is process, has noexternal source to refresh against, and would be the only process content in those files. It
belongs in the skill that runs the process. Also: stubs load into dev sessions
(
/dev-storystep 4 routing) — dev sessions never need prototyping guidance, so stub placementwould pay tokens at exactly the wrong time. REJECT; revisit only if a platform fact emerges
(e.g. Apple publishes prototype-to-SwiftUI tooling worth documenting — then it's refresh-swift
material by nature).
4. Constraint check
(
/ux,/check-readiness) except two lines in/create-story. Nothing added to flywheels,dev-story, code-review, or stubs — the per-story hot path stays flat. Estimates in §5b.
caution line) lives inside
/ux's existing preset blocks, matching how every currentper-track rule is carried.
[OPEN]-for-idiom items, existing prototype reference) and skippable in one line. No newcommands, no new required artifacts, no new markers.
in
.claude/skills/CLAUDE.md(### ux,### create-story,### check-readiness) — the samerecording mechanism every prior divergence uses. Upstream BMAD has no Claude Design equivalent
to collide with.
Labs preview; its mechanics may churn. Mitigation baked into the sketches: all
product-specific content sits in the human-facing instruction text of one optional step, and
no skill depends on any Claude Design mechanism programmatically (that's why §3.2 and §3.4 are
REJECT/DEFER). If the product changes, one step's prose changes; nothing structural does.
5. Shortlist, costs, open questions
5a. Ranked shortlist (if only these were made)
/uxStep 5b prototype pass + Step 5c Apple spikes (§3.1) — the whole project lessonlands here or nowhere: low-fi click-testing before spines are written, via the established
instruct → pause → harvest pattern. Everything else in this proposal is reinforcement.
/create-storyprototype-reference line (§3.5) — two lines that keep the prototypevisible to humans downstream while explicitly subordinating it to the token contract;
prevents the "prototype as second source of truth" failure mode from ever starting.
/check-readinessCheck 9 click-tested warning (§3.3) — the audit trail without a gate;makes a silent skip visible once per phase at near-zero cost.
5b. Estimated token cost per affected skill
/ux/create-story/check-readiness/next, flywheels,/design-verify, stubs*Rule of thumb ~13–15 tok/line of skill prose; loaded only when that skill is invoked.
5c. Open questions for the maintainer
gets clicked by someone who isn't the author. Solo, the honest question is whether
click-testing your own wireframes falsifies flows better than
/ux's protagonist walkalready does. If not, Step 5b's offer threshold should be stricter (multi-user flows only?).
resists staying low-fi (UNVERIFIED either way), does the anchoring guard need stronger
wording, or is "grayscale boxes, real copy" enough in practice? One project-successor trial
would answer this.
you'd rather not reference a Labs product by name in a shipped skill, Step 5b can be written
product-neutrally ("any clickable-prototype tool; currently Claude Design") at the cost of a
little vagueness.
composable op that publishes
components-built.md+ tokens to a design-system project solater prototypes use your real components? That's the verified, durable half of the two-way
loop — but it earns its place only when a real project runs the prototype pass twice.
/retrospective's Next Epic Readiness ask "did this epic'sUI surfaces exist in EXPERIENCE.md before dev, or were they improvised?" — the retro-side
mirror of Check 9. Left out of the shortlist because it's a second copy of an existing gate,
and the epic-context-cache episode taught that unowned retro checkboxes rot.
Sources
All reactions