产品与设计
从零或需求模糊做新 UI 时,先产出 shape…
在开始新屏幕且需求不明确时,用澄清问题、内容清单、ASCII 布局、状态列表和开放问题形成 shape 规格,再进入编码。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
从零或需求模糊做新 UI 时,先产出 s特定
解决思路
- 先加载 `ui-craft` skill;如果该 skill 已安装,先读它的 `SKILL.md` 中的 Discovery + Anti-Slop + Craft Test,再应用本子技能。
- 在写代码前为 `$ARGUMENTS` 做 UI shape;产出 shape artifact,而不是 JSX,用低保真思考覆盖内容清单、布局区域、状态覆盖和开放问题。
- Step 1:在 shaping 前向用户提出 3-5 个澄清问题,不要猜测。至少问:主用户操作是什么?(一个动词,一个对象。)
- Step 1:问默认可见的数据是什么,哪些数据隐藏在点击或 tab 之后。
- Step 1:问成功状态长什么样——一个状态、重定向,还是 toast。
- Step 1:问主要用户是谁——首次使用者、高级用户,还是移动优先。
- Step 2:列出屏幕上会出现的每一条内容,并逐条标注优先级。
- Step 2:P0 = 首次绘制必须可见;删掉它,屏幕就失败。
- Step 2:P1 = 一次点击可达(tab、accordion、drawer)。
- Step 2:P2 = 设置级,很少访问。
- Step 2 示例:`P0 Headline (one line, the value prop)`;`P0 Primary CTA`;`P0 Hero chart / metric`;`P1 Secondary nav tabs`;`P1 Recent activity list`;`P2 Export / integrations menu`。
- Step 3:画 ASCII 低保真布局,只显示区域;不要具体文案、颜色、字号。
- Step 3:输出一个 desktop 变体和一个 mobile 变体,使用 box characters(如 `┌ ┐ └ ┘ │ ─ ┤ ├`)。
- Step 3:允许不对称,通常更好;不要强行全部居中。
- Step 4:枚举屏幕必须处理的状态;可参考 `references/state-design.md` 中的约定。
- Step 4:`idle`——默认状态,数据存在。
- Step 4:`loading`——骨架屏镜像最终布局,显示前延迟 200ms。
- Step 4:`empty`——首次运行或无数据;同时可作为 onboarding。
- Step 4:`error`——具体原因 + 恢复动作 + support ID。
- Step 4:`partial`——部分数据加载成功,部分失败(例如某个 widget 出错)。
- Step 4:`conflict`——用户编辑冲突(少见,但在协作界面中很关键)。
- Step 4:`offline`——写入排队,重连后协调。
- Step 4:`success`——主操作完成后的确认状态。
- Step 4:对每个状态标记 required / optional(说明原因)/ N/A。
- Step 5:列出开放问题;在得到回答前不要开始写代码。默认问题:强调色是品牌定义还是待选?(见 `SKILL.md` 的 Discovery。)
- Step 5:排版——使用现有 token,还是新建系统?(参考 `typography.md`。)
- Step 5:响应式断点——最低支持宽度是多少?
- Step 5:技术栈——只用 CSS,还是 Motion / GSAP / Three.js?(只有用户选择加入时才加载 `stack.md`。)
- Step 5:数据源——真实 API 已就绪,还是为 shape 使用 mock?
- Step 5:键盘 / a11y 要求——除 `accessibility.md` 的基线外还有别的要求吗?
- Knob awareness:当 `CRAFT_LEVEL ≥ 7` 时,额外增加 Motion shape——哪些元素进入、按什么顺序、用什么 stagger;从 `references/motion.md` 的 duration scale 中选择。
- Knob awareness:当 `CRAFT_LEVEL ≥ 7` 时,额外增加 Typography hierarchy plan——在写代码前定 display / headline / body / label 的字号和字重。
- Knob awareness:当 `CRAFT_LEVEL ≤ 4` 时,把 Step 4 缩减为仅 `idle / loading / error`,并跳过 motion shape。
- Step 6:打印完所有五个步骤后,询问是否将输出持久化为 spec section:`Write this shape to .ui-craft/spec.md as ## Surface: <name>? (Persists the composition choice, layout, and acceptance bar for the build phase.)`
- Step 6:如果用户确认,按 `../skills/ui-craft/references/spec.md` 模板格式化为 `## Surface: <name>` 章节,然后写入或追加到 `.ui-craft/spec.md`。用一行确认:`Written to .ui-craft/spec.md → ## Surface: <name>.`
- Step 6:如果用户拒绝,不要写任何文件;打印输出保留。注明:`spec.md not written — the pipeline continues without a persisted acceptance bar.`
- Step 6:当 `/shape` 单独运行时默认只打印;Step 6 只是询问,除非用户明确确认,否则不执行。
- 输出契约:产出单个 Markdown block,按顺序包含所有五个步骤;Step 6 是后续的可选询问。
- 输出契约:在此命令中不要写 JSX、CSS 或组件代码。
- 输出契约:结尾加上:`Ready to build? Review the shape, confirm the open questions, then run /ui-craft:audit (or use Build mode) once the code exists.`
- 下一步:运行 `/craft`——构建你刚画完线框的 surface(rung 1)。
适用边界 · 注意事项
- 已有明确设计稿、设计系统或组件规范,只需按图实现或做局部修改时,不需要先做 shape。
- 用户明确要求直接写代码,或不允许先澄清问题时,不适用。
- 非 UI/前端工作,或界面简单到无需内容清单/状态覆盖时,不适用。