@openprd/cli 0.1.11 → 0.1.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/.openprd/changes/adaptive-project-framing/.openprd.yaml +2 -0
  2. package/.openprd/changes/adaptive-project-framing/design.md +47 -0
  3. package/.openprd/changes/adaptive-project-framing/proposal.md +35 -0
  4. package/.openprd/changes/adaptive-project-framing/specs/agent-requirements/spec.md +16 -0
  5. package/.openprd/changes/adaptive-project-framing/task-events.jsonl +20 -0
  6. package/.openprd/changes/adaptive-project-framing/tasks.md +340 -0
  7. package/.openprd/changes/docs-anti-pollution-and-design-direction-review/.openprd.yaml +2 -0
  8. package/.openprd/changes/docs-anti-pollution-and-design-direction-review/design.md +34 -0
  9. package/.openprd/changes/docs-anti-pollution-and-design-direction-review/proposal.md +23 -0
  10. package/.openprd/changes/docs-anti-pollution-and-design-direction-review/specs/agent-requirements/spec.md +16 -0
  11. package/.openprd/changes/docs-anti-pollution-and-design-direction-review/task-events.jsonl +14 -0
  12. package/.openprd/changes/docs-anti-pollution-and-design-direction-review/tasks.md +238 -0
  13. package/.openprd/changes/loop-isolated-worktree-commit/.openprd.yaml +2 -0
  14. package/.openprd/changes/loop-isolated-worktree-commit/design.md +53 -0
  15. package/.openprd/changes/loop-isolated-worktree-commit/proposal.md +38 -0
  16. package/.openprd/changes/loop-isolated-worktree-commit/specs/agent-requirements/spec.md +16 -0
  17. package/.openprd/changes/loop-isolated-worktree-commit/task-events.jsonl +22 -0
  18. package/.openprd/changes/loop-isolated-worktree-commit/tasks.md +357 -0
  19. package/.openprd/changes/openprd/.openprd.yaml +2 -0
  20. package/.openprd/changes/openprd/design.md +46 -0
  21. package/.openprd/changes/openprd/proposal.md +36 -0
  22. package/.openprd/changes/openprd/specs/agent-requirements/spec.md +16 -0
  23. package/.openprd/changes/openprd/task-events.jsonl +23 -0
  24. package/.openprd/changes/openprd/tasks.md +242 -0
  25. package/.openprd/changes/openprd-generated-change/.openprd.yaml +2 -0
  26. package/.openprd/changes/openprd-generated-change/design.md +50 -0
  27. package/.openprd/changes/openprd-generated-change/proposal.md +37 -0
  28. package/.openprd/changes/openprd-generated-change/specs/agent-requirements/spec.md +16 -0
  29. package/.openprd/changes/openprd-generated-change/task-events.jsonl +21 -0
  30. package/.openprd/changes/openprd-generated-change/tasks.md +357 -0
  31. package/.openprd/changes/pm-human-in-the-loop/.openprd.yaml +2 -0
  32. package/.openprd/changes/pm-human-in-the-loop/design.md +38 -0
  33. package/.openprd/changes/pm-human-in-the-loop/proposal.md +29 -0
  34. package/.openprd/changes/pm-human-in-the-loop/specs/agent-requirements/spec.md +16 -0
  35. package/.openprd/changes/pm-human-in-the-loop/task-events.jsonl +18 -0
  36. package/.openprd/changes/pm-human-in-the-loop/tasks.md +306 -0
  37. package/.openprd/changes/test-strategy-router/.openprd.yaml +2 -0
  38. package/.openprd/changes/test-strategy-router/design.md +65 -0
  39. package/.openprd/changes/test-strategy-router/proposal.md +45 -0
  40. package/.openprd/changes/test-strategy-router/specs/agent-requirements/spec.md +16 -0
  41. package/.openprd/changes/test-strategy-router/task-events.jsonl +1 -0
  42. package/.openprd/changes/test-strategy-router/tasks.md +132 -0
  43. package/.openprd/changes/verify-boundaries-and-historical-refresh/.openprd.yaml +2 -0
  44. package/.openprd/changes/verify-boundaries-and-historical-refresh/design.md +28 -0
  45. package/.openprd/changes/verify-boundaries-and-historical-refresh/proposal.md +23 -0
  46. package/.openprd/changes/verify-boundaries-and-historical-refresh/specs/agent-requirements/spec.md +16 -0
  47. package/.openprd/changes/verify-boundaries-and-historical-refresh/task-events.jsonl +11 -0
  48. package/.openprd/changes/verify-boundaries-and-historical-refresh/tasks.md +66 -0
  49. package/.openprd/changes/vibe-coding-dev-check/.openprd.yaml +2 -0
  50. package/.openprd/changes/vibe-coding-dev-check/design.md +37 -0
  51. package/.openprd/changes/vibe-coding-dev-check/proposal.md +28 -0
  52. package/.openprd/changes/vibe-coding-dev-check/specs/agent-requirements/spec.md +16 -0
  53. package/.openprd/changes/vibe-coding-dev-check/task-events.jsonl +18 -0
  54. package/.openprd/changes/vibe-coding-dev-check/tasks.md +306 -0
  55. package/.openprd/design/README.md +11 -6
  56. package/.openprd/design/README_EN.md +4 -1
  57. package/.openprd/design/active/asset-spec.md +6 -0
  58. package/.openprd/design/active/direction-plan.md +5 -5
  59. package/.openprd/design/active/selected-direction.md +2 -0
  60. package/.openprd/design/anti-slop.md +26 -1
  61. package/.openprd/design/assets/surface-presets.md +6 -0
  62. package/.openprd/design/checklists/ui-quality-gate.md +7 -0
  63. package/.openprd/design/lenses/frontend-lenses.md +28 -0
  64. package/.openprd/design/recipes/content-experience.md +8 -1
  65. package/.openprd/design/recipes/operational-tool.md +7 -0
  66. package/.openprd/design/recipes/product-launch.md +8 -1
  67. package/.openprd/design/templates/README.md +6 -3
  68. package/.openprd/design/templates/README_EN.md +6 -3
  69. package/.openprd/design/templates/ops-dashboard.html +8 -1
  70. package/.openprd/design/templates/product-launch.html +2 -1
  71. package/.openprd/design/themes/theme-catalog.json +23 -5
  72. package/.openprd/engagements/active/prd.md +137 -112
  73. package/.openprd/standards/config.json +7 -1
  74. package/AGENTS.md +13 -3
  75. package/README.md +127 -14
  76. package/README_EN.md +156 -13
  77. package/package.json +1 -1
  78. package/scripts/dev-check-wrapup-copy.mjs +46 -21
  79. package/skills/openprd-diagram-review/SKILL.md +27 -2
  80. package/skills/openprd-diagram-review/references/explanation-svg-patterns.md +131 -0
  81. package/skills/openprd-discovery-loop/SKILL.md +2 -2
  82. package/skills/openprd-frontend-design/SKILL.md +44 -20
  83. package/skills/openprd-frontend-design/references/design-asset-contract.md +6 -0
  84. package/skills/openprd-frontend-design/references/direction-engine.md +29 -4
  85. package/skills/openprd-harness/SKILL.md +22 -16
  86. package/skills/openprd-quality/SKILL.md +10 -8
  87. package/skills/openprd-requirement-intake/SKILL.md +2 -0
  88. package/skills/openprd-router/SKILL.md +2 -1
  89. package/skills/openprd-shared/SKILL.md +26 -16
  90. package/skills/openprd-standards/SKILL.md +4 -2
  91. package/src/agent-canonical-content.js +810 -0
  92. package/src/agent-integration.js +258 -777
  93. package/src/canvas-app-client-app.js +838 -0
  94. package/src/canvas-app-client-helpers.js +1138 -0
  95. package/src/canvas-app-styles.js +898 -0
  96. package/src/canvas-app.html.js +135 -0
  97. package/src/canvas-binding.js +414 -0
  98. package/src/canvas-codex-relay.js +430 -0
  99. package/src/canvas-i18n.js +282 -0
  100. package/src/canvas-scene.js +377 -0
  101. package/src/canvas-session-store.js +148 -0
  102. package/src/canvas-workspace.js +1264 -0
  103. package/src/cli/args.js +72 -4
  104. package/src/cli/basic-print.js +3 -0
  105. package/src/cli/canvas-print.js +106 -0
  106. package/src/cli/doctor-print.js +20 -0
  107. package/src/cli/print.js +2 -0
  108. package/src/cli/quality-commands.js +222 -0
  109. package/src/cli/quality-print.js +28 -2
  110. package/src/cli/run-print.js +5 -0
  111. package/src/cli/workflow-print.js +3 -0
  112. package/src/codex-app-server-relay.js +251 -0
  113. package/src/codex-hook-runner-template.mjs +978 -58
  114. package/src/design-starter-support.js +2 -2
  115. package/src/design-starter.js +39 -3
  116. package/src/dev-standards.js +125 -10
  117. package/src/diagram-core.js +6 -20
  118. package/src/discovery.js +2 -8
  119. package/src/docs-compact.js +125 -0
  120. package/src/execution-strategy.js +1 -1
  121. package/src/fleet.js +9 -3
  122. package/src/guide.js +227 -0
  123. package/src/html-artifacts.js +428 -7
  124. package/src/knowledge.js +45 -11
  125. package/src/language-policy.js +63 -3
  126. package/src/learning-review.js +1 -1
  127. package/src/loop.js +1 -1
  128. package/src/openprd.js +68 -131
  129. package/src/openspec/change-validate.js +2 -2
  130. package/src/openspec/constants.js +6 -7
  131. package/src/openspec/execute.js +2 -2
  132. package/src/openspec/generate.js +318 -102
  133. package/src/openspec/migration.js +168 -0
  134. package/src/openspec/paths.js +1 -22
  135. package/src/prd-core.js +1 -1
  136. package/src/quality-visual-review.js +257 -14
  137. package/src/quality.js +46 -8
  138. package/src/review-presentation.js +60 -0
  139. package/src/run-harness.js +41 -3
  140. package/src/session-evidence.js +363 -0
  141. package/src/standards.js +64 -0
  142. package/src/test-strategy.js +7 -4
  143. package/src/visual-compare-centering.js +622 -0
  144. package/src/visual-compare-core.js +1123 -0
  145. package/src/visual-compare.js +620 -698
  146. package/src/workspace-core.js +94 -4
  147. package/src/workspace-workflow.js +46 -1
@@ -5,6 +5,8 @@
5
5
  - lens: 待填写
6
6
  - theme: 待填写
7
7
  - layout: 待填写
8
+ - aesthetic: 待填写
9
+ - memory-point: 待填写
8
10
  - components:
9
11
  - 待填写
10
12
  - follow-up risks:
@@ -1,12 +1,31 @@
1
1
  # Anti-Slop
2
2
 
3
- ## 禁区
3
+ ## 目标
4
+
5
+ 这份文件不是“审美偏好清单”,而是拦住通用 AI 页面味的实现前自检。
6
+ 每次界面任务都要先有具体审美主张,再用字体、色彩、动效、构图和素材把它执行出来。
7
+
8
+ ## 禁区:通用 AI 味
4
9
 
5
10
  - 三版候选都只是浅色留白加点缀色
6
11
  - 内容型页面没有真实图,只用大面积占位块
7
12
  - 工具型页面做成营销站
8
13
  - 页面里出现多个互相冲突的圆角、阴影和边框体系
9
14
  - 不核实事实就写产品页
15
+ - 默认紫色/蓝紫渐变、玻璃卡、光晕背景、白底圆角卡片阵列,且没有品牌或参考图依据
16
+ - 默认使用 Inter、Roboto、Arial 或 system-ui 作为审美选择;除非它服务于系统一致性、可访问性或高密度扫描
17
+ - 三个方向共享同一个 hero、同一组卡片、同一个视觉重心,只换颜色、插图或按钮文案
18
+ - 落地页总是“左侧大标题 + 右侧插图/截图 + 下方三卡片”
19
+ - 用纹理、噪点、渐变、阴影或动效掩盖事实、素材、信息层级或任务路径缺失
20
+ - 页面只有一个颜色家族的深浅变化,没有清晰的主次色、功能色和情绪色分工
21
+ - 极简页面缺少精确排版、比例、边距和文本节奏;复杂页面缺少秩序、层级和可扫描路径
22
+ - 所有页面都像同一个安全模板,没有与用户、场景、内容和品牌相关的记忆点
23
+
24
+ ## 允许例外
25
+
26
+ - 用户、品牌规范、参考图或现有设计系统明确要求某种颜色、字体或布局时,以这些约束为准。
27
+ - 工具型、企业型、合规型界面可以保持克制,但必须通过密度、对齐、状态、表格、控件和信息结构体现设计质量。
28
+ - 中性字体可以用于正文和高密度 UI,但标题、数字、标签或关键模块仍应有明确角色分工。
10
29
 
11
30
  ## 优先替代
12
31
 
@@ -14,3 +33,9 @@
14
33
  - 用 theme lock 代替边写边试色
15
34
  - 用 layout skeleton 代替从空白页硬搭
16
35
  - 用真实内容资产代替装饰性占位
36
+ - 用“用途 / 受众 / 气质 / 约束 / 记忆点”代替“现代、简洁、高级”
37
+ - 用有角色分工的标题字体、正文字体、数字字体和标签样式代替单一通用字体栈
38
+ - 用具体色彩角色代替默认紫色渐变:主动作色、情绪强调色、功能信息色、弱化背景色要各司其职
39
+ - 用一段有节制的入场、滚动或状态动效代替到处散落的 hover 小把戏
40
+ - 用不对称、密度变化、图文节奏、真实截图/图片和局部重点放大代替均匀卡片堆叠
41
+ - 用 `visual-compare` 检查实现是否保住气质、层级和记忆点,而不只是检查有没有摆对位置
@@ -9,13 +9,19 @@
9
9
  - 低强度网格
10
10
  - 真实摄影背景
11
11
  - 真实产品渲染图
12
+ - 与主题一致的细线、压纹、材质层或局部光感
13
+ - 只在关键区域出现的一次性动效背景
12
14
 
13
15
  ## 慎用
14
16
 
15
17
  - 大面积渐变主导整个页面
16
18
  - 纯装饰型发光块
17
19
  - 和主题无关的氛围图
20
+ - 默认紫色/蓝紫渐变和玻璃拟态背景
21
+ - 每个卡片都叠阴影、模糊和噪点
18
22
 
19
23
  ## 默认原则
20
24
 
21
25
  - 资产服务于内容,不要盖过内容。
26
+ - 表面风格要服务审美主张:温暖页面优先纸感和软边线,发布页优先主视觉和证明材料,工具页优先边界、对齐和状态。
27
+ - 没有真实素材时先承认缺口,不要用漂亮背景假装内容已经成立。
@@ -2,10 +2,13 @@
2
2
 
3
3
  ## P0
4
4
 
5
+ - 已写清本次审美主张:用途、受众、气质端点、约束和用户会记住的一件事
5
6
  - 关键事实已核实,或明确标注 `待确认`
6
7
  - 主题已锁定,不存在临时发明的颜色体系
8
+ - 字体、色彩、动效、表面/背景和构图选择能服务同一个审美主张
7
9
  - 真实图片是否必需已经判断
8
10
  - 大界面任务若无参考方向,已完成 3 个异源方向
11
+ - 已用 `anti-slop.md` 排除默认紫白渐变、通用字体栈、白底卡片堆叠和无语境装饰
9
12
 
10
13
  ## P1
11
14
 
@@ -14,9 +17,13 @@
14
17
  - 按钮、卡片、表格、表单大小关系自然
15
18
  - 长文本没有挤爆容器
16
19
  - 局部视觉语言没有突然换轨
20
+ - 字体角色清楚:标题、正文、标签、数字或代码不混成一套无差别样式
21
+ - 主色、强调色、功能色和弱化背景色有分工,不是一种颜色深浅铺满全页
22
+ - 动效有一两个关键时刻,而不是散乱堆满 hover 或完全没有状态反馈
17
23
 
18
24
  ## P2
19
25
 
20
26
  - 屏幕第一眼能知道页面是干什么的
21
27
  - 未改区域没有明显视觉漂移
22
28
  - 需要时已准备 `visual-prepare` 或 `visual-compare` 证据
29
+ - 视觉证据能看出选定方向的气质和记忆点,而不只是结构摆放正确
@@ -1,31 +1,59 @@
1
1
  # Frontend Lenses
2
2
 
3
+ 选 lens 时不要只选任务类型,还要补一句审美主张和一个记忆点。lens 是判断角度,不是固定皮肤;同一个 lens 可以有极简、温暖、工业、编辑或沉浸等不同气质。
4
+
3
5
  ## `editorial-contrast`
4
6
 
5
7
  - 适合内容型页面、品牌故事、专题页、馆藏导览、展览解说
6
8
  - 核心特征:排版节奏感强,图文切换明确,留白与密度并存
7
9
  - 常见风险:做成只有“杂志感”但没有任务完成路径
10
+ - 记忆点示例:有辨识度的标题字体、章节节奏、真实图片与文字之间的停顿
8
11
 
9
12
  ## `product-launch`
10
13
 
11
14
  - 适合发布页、产品介绍页、关键功能亮点页
12
15
  - 核心特征:主视觉强、卖点集中、规格与证明材料清晰
13
16
  - 常见风险:只顾氛围,不给关键事实和证据
17
+ - 记忆点示例:一个强主视觉、一个清楚承诺、一个可验证的产品状态或数据
14
18
 
15
19
  ## `operational-density`
16
20
 
17
21
  - 适合后台、工具页、控制台、SaaS、CRM、配置页
18
22
  - 核心特征:扫描效率高、信息密度稳、交互路径短
19
23
  - 常见风险:密度高但没有层级,最后变成挤
24
+ - 记忆点示例:稳定工具感、清楚状态、可反复使用的列表/表格/筛选结构
20
25
 
21
26
  ## `immersive-showcase`
22
27
 
23
28
  - 适合旅游、地点、内容探索、案例展示
24
29
  - 核心特征:真实图片主导,叙事路径顺滑,视觉情绪明显
25
30
  - 常见风险:图片很好看,但信息组织太弱
31
+ - 记忆点示例:首屏真实场景、沉浸式媒体层级、少量强信号文字
26
32
 
27
33
  ## `catalog-clarity`
28
34
 
29
35
  - 适合资料库、资源库、商品库、内容浏览
30
36
  - 核心特征:卡片和列表关系清晰,可筛选、可比较、可快速回看
31
37
  - 常见风险:所有区块看起来一样重
38
+ - 记忆点示例:清楚分类、可比较的信息单位、用户能快速回到上一次浏览位置
39
+
40
+ ## `warm-invitation`
41
+
42
+ - 适合欢迎页、报名/预约、内容社区、轻量 onboarding、需要可信但不冷冰冰的工具页
43
+ - 核心特征:纸感中性色、温暖主动作色、克制圆角、柔和边线、标题有编辑气质
44
+ - 常见风险:过度装饰后变成可爱风、仪式感太重而影响操作效率
45
+ - 记忆点示例:像一份认真邀请函和清楚 briefing 的结合,温暖但不松散
46
+
47
+ ## `crafted-luxury`
48
+
49
+ - 适合高客单价产品、精品品牌、作品集、商业介绍和需要信任感的专业服务
50
+ - 核心特征:低噪声留白、精确比例、少量高对比重点、材质和排版胜过大面积装饰
51
+ - 常见风险:只剩空和大字,没有信息密度和行动路径
52
+ - 记忆点示例:一个精确比例的首屏、一个高质感细节、一个被克制放大的关键承诺
53
+
54
+ ## `playful-system`
55
+
56
+ - 适合教育、儿童/青少年、创意工具、轻娱乐产品和可探索的互动界面
57
+ - 核心特征:形状、状态、动效和微文案更有性格,但仍保持路径清楚
58
+ - 常见风险:玩具感压过任务,或颜色太多导致信息不可扫
59
+ - 记忆点示例:一个有趣状态反馈或可探索组件,而不是到处撒装饰
@@ -3,9 +3,15 @@
3
3
  ## 默认组合
4
4
 
5
5
  - lens: `editorial-contrast` 或 `immersive-showcase`
6
- - theme: `quiet-sand` 或 `warm-editorial`
6
+ - theme: `quiet-sand`、`warm-editorial` 或 `warm-invitation`
7
7
  - layout: `editorial-rail` 或 `story-map`
8
8
 
9
+ ## 审美重点
10
+
11
+ - 用标题字体、图文节奏、章节停顿和真实图片建立记忆点。
12
+ - 可以温暖、编辑、沉浸或展陈,但不能只是浅色留白加一组内容卡片。
13
+ - 动效以轻 reveal、媒体切换、章节进入为主,不要把每张卡都做成独立表演。
14
+
9
15
  ## 必做前置
10
16
 
11
17
  - `image-preflight.md`
@@ -24,3 +30,4 @@
24
30
  - 没有真实图时是否及时降级,而不是硬做灰块页面
25
31
  - 图文节奏是否成立
26
32
  - 读者是否知道下一步看哪里
33
+ - 有没有避开通用 SaaS hero、紫白渐变和无语境装饰
@@ -6,6 +6,12 @@
6
6
  - theme: `tool-neutral`
7
7
  - layout: `ops-density-grid` 或 `settings-split`
8
8
 
9
+ ## 审美重点
10
+
11
+ - 工具型页面的审美来自扫描效率、状态清晰、控件秩序和稳定密度,不来自营销式大标题。
12
+ - 可以克制,但不能无设计:字体层级、表格节奏、筛选路径、状态色和边框体系必须清楚。
13
+ - 不要把后台做成落地页,不要用发光渐变、玻璃卡或过大 hero 抢掉工作路径。
14
+
9
15
  ## 必做前置
10
16
 
11
17
  - 先决定关键任务路径和主操作
@@ -23,3 +29,4 @@
23
29
  - 是否方便扫描
24
30
  - 主操作是否靠近用户决策点
25
31
  - 文本和控件是否出现无意义放大
32
+ - 是否用密度、对齐和状态体现专业感,而不是只换一个中性配色
@@ -3,9 +3,15 @@
3
3
  ## 默认组合
4
4
 
5
5
  - lens: `product-launch`
6
- - theme: `deep-launch` 或 `warm-editorial`
6
+ - theme: `deep-launch`、`warm-editorial` 或 `warm-invitation`
7
7
  - layout: `product-spec-runway`
8
8
 
9
+ ## 审美重点
10
+
11
+ - 先决定发布气质:强势发布、温暖邀请、编辑解释、专业证据或沉浸展示。
12
+ - 首屏必须有一个可记住的产品状态、真实界面、具体承诺或关键证据。
13
+ - 不要默认做成紫色渐变、白底三卡片和泛泛功能 bullet;发布页的装饰必须服务证明和行动。
14
+
9
15
  ## 必做前置
10
16
 
11
17
  - `facts-sheet.md`
@@ -24,3 +30,4 @@
24
30
  - 首屏是否一眼知道是什么产品
25
31
  - 规格和卖点有没有混成一锅
26
32
  - 证明材料是否真实且位置合理
33
+ - 字体、色彩、动效和主视觉是否共同服务同一个发布气质
@@ -5,9 +5,10 @@
5
5
  ## 使用顺序
6
6
 
7
7
  1. 先补 `active/` 下的事实、素材、图片前置和方向合同
8
- 2. 再从这里挑最近的一份模板
9
- 3. 运行 `openprd design-starter . --starter <starter-id> --out index.html`
10
- 4. 再按选中的 `lens + theme + layout + component set` 改写内容和样式
8
+ 2. 再写清本页用途、受众、气质端点、约束和记忆点
9
+ 3. 再从这里挑最近的一份模板
10
+ 4. 运行 `openprd design-starter . --starter <starter-id> --out index.html`
11
+ 5. 再按选中的 `lens + theme + layout + component set + 审美主张` 改写内容和样式
11
12
 
12
13
  ## 模板清单
13
14
 
@@ -32,5 +33,7 @@
32
33
  - 跑完 `design-starter` 后先改生成入口文件里的 `[占位]` 文案和标题,再细化样式,不要回头整页重读模板源码
33
34
  - 跑完 `design-starter` 后,下一步默认就是一次补丁,同时改入口文件和必要的 active design artifacts;直接在生成的入口文件上改。禁止删除 starter 生成的入口文件后另起新稿
34
35
  - 先改结构和文案,再细化装饰
36
+ - 细化样式前先用 `anti-slop.md` 检查:不要默认紫白渐变、通用字体、白底卡片堆叠或同一种安全模板
37
+ - 模板字体、色彩和动效只是起步点;如果它们不服务当前审美主张,要在 Patch Mode 中改掉
35
38
  - 模板只是骨架,不能把示例文案原样交付
36
39
  - 如果模板默认组合已经够用,不要继续把所有 catalog 文件都重读一遍再决定
@@ -5,9 +5,10 @@ These templates are not final deliverables. They are the first runnable skeleton
5
5
  ## Order
6
6
 
7
7
  1. Fill the task-specific contracts under `active/`
8
- 2. Pick the closest starter template here
9
- 3. Run `openprd design-starter . --starter <starter-id> --out index.html`
10
- 4. Then adapt it using the selected `lens + theme + layout + component set`
8
+ 2. Write the page purpose, audience, aesthetic tone, constraints, and one memorable point
9
+ 3. Pick the closest starter template here
10
+ 4. Run `openprd design-starter . --starter <starter-id> --out index.html`
11
+ 5. Then adapt it using the selected `lens + theme + layout + component set + aesthetic intent`
11
12
 
12
13
  ## Included Starters
13
14
 
@@ -29,3 +30,5 @@ These templates are not final deliverables. They are the first runnable skeleton
29
30
  - After `design-starter`, replace the generated placeholder copy and title in the entry file before rereading the whole template
30
31
  - After `design-starter`, the default next move is one patch that updates both the entry file and the active design contracts; edit the generated entry file in place instead of deleting and recreating it
31
32
  - Start with structure and copy before decoration
33
+ - Before styling, check `anti-slop.md`: avoid default purple gradients, generic font stacks, white-card grids, and one-size-fits-all templates
34
+ - Starter typography, color, and motion are starting points; change them in Patch Mode when they do not serve the selected aesthetic intent
@@ -21,7 +21,7 @@
21
21
  * { box-sizing: border-box; }
22
22
  body {
23
23
  margin: 0;
24
- font-family: "Inter", "PingFang SC", sans-serif;
24
+ font-family: "Aptos", "Avenir Next", "Noto Sans SC", "PingFang SC", sans-serif;
25
25
  background: linear-gradient(180deg, #f6f8fb 0%, var(--bg) 100%);
26
26
  color: var(--ink);
27
27
  }
@@ -54,6 +54,7 @@
54
54
  .brand {
55
55
  font-size: 18px;
56
56
  font-weight: 700;
57
+ font-family: "Aptos Display", "Avenir Next", "Noto Sans SC", "PingFang SC", sans-serif;
57
58
  }
58
59
 
59
60
  .nav,
@@ -95,6 +96,12 @@
95
96
 
96
97
  h1, h2, h3, p { margin: 0; }
97
98
 
99
+ h1,
100
+ h2,
101
+ h3 {
102
+ font-family: "Aptos Display", "Avenir Next", "Noto Sans SC", "PingFang SC", sans-serif;
103
+ }
104
+
98
105
  .topbar p,
99
106
  .panel p {
100
107
  color: var(--muted);
@@ -21,7 +21,7 @@
21
21
  * { box-sizing: border-box; }
22
22
  body {
23
23
  margin: 0;
24
- font-family: "Inter", "PingFang SC", sans-serif;
24
+ font-family: "Avenir Next", "Noto Sans SC", "PingFang SC", sans-serif;
25
25
  background:
26
26
  radial-gradient(circle at top center, rgba(124, 224, 195, 0.16), transparent 28%),
27
27
  linear-gradient(180deg, #091018 0%, var(--bg) 100%);
@@ -64,6 +64,7 @@
64
64
 
65
65
  h1 {
66
66
  margin-top: 18px;
67
+ font-family: "DIN Condensed", "Avenir Next Condensed", "Noto Sans SC", "PingFang SC", sans-serif;
67
68
  font-size: clamp(40px, 6vw, 70px);
68
69
  line-height: 0.96;
69
70
  letter-spacing: 0;
@@ -5,7 +5,7 @@
5
5
  "id": "quiet-sand",
6
6
  "useFor": ["editorial-contrast", "catalog-clarity"],
7
7
  "summary": "Warm neutral editorial theme with restrained contrast.",
8
- "bodyFont": "\"Inter\", \"PingFang SC\", sans-serif",
8
+ "bodyFont": "\"Avenir Next\", \"Noto Sans SC\", \"PingFang SC\", sans-serif",
9
9
  "headlineFont": "\"Iowan Old Style\", \"Noto Serif SC\", \"Songti SC\", serif",
10
10
  "surfacePreset": "paper-grid",
11
11
  "tokens": {
@@ -23,8 +23,8 @@
23
23
  "id": "deep-launch",
24
24
  "useFor": ["product-launch", "immersive-showcase"],
25
25
  "summary": "Dark, cinematic launch theme with controlled highlight color.",
26
- "bodyFont": "\"Inter\", \"PingFang SC\", sans-serif",
27
- "headlineFont": "\"Inter\", \"PingFang SC\", sans-serif",
26
+ "bodyFont": "\"Avenir Next\", \"Noto Sans SC\", \"PingFang SC\", sans-serif",
27
+ "headlineFont": "\"DIN Condensed\", \"Avenir Next Condensed\", \"Noto Sans SC\", \"PingFang SC\", sans-serif",
28
28
  "surfacePreset": "dark-mesh",
29
29
  "tokens": {
30
30
  "background": "#0D1117",
@@ -55,12 +55,30 @@
55
55
  "shadow": "0 10px 24px rgba(27,23,20,0.07)"
56
56
  }
57
57
  },
58
+ {
59
+ "id": "warm-invitation",
60
+ "useFor": ["warm-invitation", "editorial-contrast", "product-launch"],
61
+ "summary": "Welcoming paper-neutral theme with terracotta action color, brass support accents, serif-led headings, and soft-line surfaces.",
62
+ "bodyFont": "\"Noto Sans SC\", \"Avenir Next\", \"PingFang SC\", sans-serif",
63
+ "headlineFont": "\"Noto Serif SC\", \"Iowan Old Style\", \"Songti SC\", serif",
64
+ "surfacePreset": "paper-grid",
65
+ "tokens": {
66
+ "background": "#F7F5F2",
67
+ "surface": "#FFFDFB",
68
+ "text": "#2C2C2C",
69
+ "muted": "#6F6A63",
70
+ "accent": "#CC7D5E",
71
+ "border": "#E6E2DC",
72
+ "radius": "20px",
73
+ "shadow": "0 14px 34px rgba(44,44,44,0.08)"
74
+ }
75
+ },
58
76
  {
59
77
  "id": "tool-neutral",
60
78
  "useFor": ["operational-density", "catalog-clarity"],
61
79
  "summary": "Quiet operational theme for work-focused interfaces.",
62
- "bodyFont": "\"Avenir Next\", \"PingFang SC\", sans-serif",
63
- "headlineFont": "\"Inter\", \"PingFang SC\", sans-serif",
80
+ "bodyFont": "\"Aptos\", \"Avenir Next\", \"Noto Sans SC\", \"PingFang SC\", sans-serif",
81
+ "headlineFont": "\"Aptos Display\", \"Avenir Next\", \"Noto Sans SC\", \"PingFang SC\", sans-serif",
64
82
  "surfacePreset": "workbench-grid",
65
83
  "tokens": {
66
84
  "background": "#F4F6F8",