@tienne/gestalt 0.98.0 → 0.100.0

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 (175) hide show
  1. package/CLAUDE.md +2 -1
  2. package/README.md +3 -2
  3. package/dist/package.json +2 -2
  4. package/dist/plugin/research-sources/amplitude/SOURCE.md +28 -0
  5. package/dist/plugin/research-sources/app-store-reviews/SOURCE.md +25 -0
  6. package/dist/plugin/research-sources/app-store-search/SOURCE.md +25 -0
  7. package/dist/plugin/research-sources/tech-blog-search/SOURCE.md +27 -0
  8. package/dist/plugin/research-sources/uibowl/SOURCE.md +26 -0
  9. package/dist/plugin/research-sources/web-search/SOURCE.md +24 -0
  10. package/dist/plugin/skills/_shared/proactive-routing.md +5 -0
  11. package/dist/plugin/skills/architecture/SKILL.md +1 -1
  12. package/dist/plugin/skills/market-scan/SKILL.md +61 -0
  13. package/dist/plugin/skills/research/SKILL.md +438 -0
  14. package/dist/plugin/skills/research/references/design.md +938 -0
  15. package/dist/plugin/skills/research/references/output-template.md +366 -0
  16. package/dist/plugin/skills/research/scripts/pii-vision.swift +327 -0
  17. package/dist/plugin/skills/research/scripts/slide-extract.mjs +223 -0
  18. package/dist/plugin/skills/reverse-plan/SKILL.md +52 -0
  19. package/dist/plugin/skills/screen-ref/SKILL.md +63 -0
  20. package/dist/plugin/skills/ux-research/SKILL.md +51 -0
  21. package/dist/src/architecture/validator.d.ts +17 -1
  22. package/dist/src/architecture/validator.d.ts.map +1 -1
  23. package/dist/src/architecture/validator.js +61 -45
  24. package/dist/src/architecture/validator.js.map +1 -1
  25. package/dist/src/core/config.d.ts +17 -0
  26. package/dist/src/core/config.d.ts.map +1 -1
  27. package/dist/src/core/config.js +4 -0
  28. package/dist/src/core/config.js.map +1 -1
  29. package/dist/src/core/source-location.d.ts +32 -0
  30. package/dist/src/core/source-location.d.ts.map +1 -0
  31. package/dist/src/core/source-location.js +87 -0
  32. package/dist/src/core/source-location.js.map +1 -0
  33. package/dist/src/execute/orchestrators/evolution.d.ts +3 -1
  34. package/dist/src/execute/orchestrators/evolution.d.ts.map +1 -1
  35. package/dist/src/execute/orchestrators/evolution.js +4 -2
  36. package/dist/src/execute/orchestrators/evolution.js.map +1 -1
  37. package/dist/src/execute/orchestrators/execution.d.ts +3 -1
  38. package/dist/src/execute/orchestrators/execution.d.ts.map +1 -1
  39. package/dist/src/execute/orchestrators/execution.js +4 -2
  40. package/dist/src/execute/orchestrators/execution.js.map +1 -1
  41. package/dist/src/execute/passthrough-engine.d.ts +2 -1
  42. package/dist/src/execute/passthrough-engine.d.ts.map +1 -1
  43. package/dist/src/execute/passthrough-engine.js +3 -3
  44. package/dist/src/execute/passthrough-engine.js.map +1 -1
  45. package/dist/src/execute/prompts.d.ts.map +1 -1
  46. package/dist/src/execute/prompts.js +20 -2
  47. package/dist/src/execute/prompts.js.map +1 -1
  48. package/dist/src/mcp/schemas.d.ts +93 -0
  49. package/dist/src/mcp/schemas.d.ts.map +1 -1
  50. package/dist/src/mcp/schemas.js +110 -0
  51. package/dist/src/mcp/schemas.js.map +1 -1
  52. package/dist/src/mcp/server.d.ts.map +1 -1
  53. package/dist/src/mcp/server.js +12 -2
  54. package/dist/src/mcp/server.js.map +1 -1
  55. package/dist/src/mcp/tools/execute/evaluate.js +1 -1
  56. package/dist/src/mcp/tools/execute/evaluate.js.map +1 -1
  57. package/dist/src/mcp/tools/research-passthrough.d.ts +21 -0
  58. package/dist/src/mcp/tools/research-passthrough.d.ts.map +1 -0
  59. package/dist/src/mcp/tools/research-passthrough.js +566 -0
  60. package/dist/src/mcp/tools/research-passthrough.js.map +1 -0
  61. package/dist/src/memory/project-memory-store.d.ts +7 -0
  62. package/dist/src/memory/project-memory-store.d.ts.map +1 -1
  63. package/dist/src/memory/project-memory-store.js +17 -0
  64. package/dist/src/memory/project-memory-store.js.map +1 -1
  65. package/dist/src/research/canvas-view.d.ts +5 -0
  66. package/dist/src/research/canvas-view.d.ts.map +1 -0
  67. package/dist/src/research/canvas-view.js +274 -0
  68. package/dist/src/research/canvas-view.js.map +1 -0
  69. package/dist/src/research/evidence.d.ts +145 -0
  70. package/dist/src/research/evidence.d.ts.map +1 -0
  71. package/dist/src/research/evidence.js +50 -0
  72. package/dist/src/research/evidence.js.map +1 -0
  73. package/dist/src/research/figma-plan.d.ts +80 -0
  74. package/dist/src/research/figma-plan.d.ts.map +1 -0
  75. package/dist/src/research/figma-plan.js +527 -0
  76. package/dist/src/research/figma-plan.js.map +1 -0
  77. package/dist/src/research/figma-script.d.ts +19 -0
  78. package/dist/src/research/figma-script.d.ts.map +1 -0
  79. package/dist/src/research/figma-script.js +363 -0
  80. package/dist/src/research/figma-script.js.map +1 -0
  81. package/dist/src/research/index.d.ts +8 -0
  82. package/dist/src/research/index.d.ts.map +1 -0
  83. package/dist/src/research/index.js +8 -0
  84. package/dist/src/research/index.js.map +1 -0
  85. package/dist/src/research/pii-core.d.ts +16 -0
  86. package/dist/src/research/pii-core.d.ts.map +1 -0
  87. package/dist/src/research/pii-core.js +345 -0
  88. package/dist/src/research/pii-core.js.map +1 -0
  89. package/dist/src/research/pii-dom.d.ts +13 -0
  90. package/dist/src/research/pii-dom.d.ts.map +1 -0
  91. package/dist/src/research/pii-dom.js +208 -0
  92. package/dist/src/research/pii-dom.js.map +1 -0
  93. package/dist/src/research/pii-image.d.ts +71 -0
  94. package/dist/src/research/pii-image.d.ts.map +1 -0
  95. package/dist/src/research/pii-image.js +163 -0
  96. package/dist/src/research/pii-image.js.map +1 -0
  97. package/dist/src/research/pii.d.ts +21 -0
  98. package/dist/src/research/pii.d.ts.map +1 -0
  99. package/dist/src/research/pii.js +47 -0
  100. package/dist/src/research/pii.js.map +1 -0
  101. package/dist/src/research/product-profile.d.ts +108 -0
  102. package/dist/src/research/product-profile.d.ts.map +1 -0
  103. package/dist/src/research/product-profile.js +104 -0
  104. package/dist/src/research/product-profile.js.map +1 -0
  105. package/dist/src/research/render-html.d.ts +203 -0
  106. package/dist/src/research/render-html.d.ts.map +1 -0
  107. package/dist/src/research/render-html.js +901 -0
  108. package/dist/src/research/render-html.js.map +1 -0
  109. package/dist/src/research/schema-base.d.ts +5 -0
  110. package/dist/src/research/schema-base.d.ts.map +1 -0
  111. package/dist/src/research/schema-base.js +10 -0
  112. package/dist/src/research/schema-base.js.map +1 -0
  113. package/dist/src/research/schema.d.ts +5142 -0
  114. package/dist/src/research/schema.d.ts.map +1 -0
  115. package/dist/src/research/schema.js +991 -0
  116. package/dist/src/research/schema.js.map +1 -0
  117. package/dist/src/research/source-create.d.ts +79 -0
  118. package/dist/src/research/source-create.d.ts.map +1 -0
  119. package/dist/src/research/source-create.js +226 -0
  120. package/dist/src/research/source-create.js.map +1 -0
  121. package/dist/src/research/source-registry.d.ts +29 -0
  122. package/dist/src/research/source-registry.d.ts.map +1 -0
  123. package/dist/src/research/source-registry.js +74 -0
  124. package/dist/src/research/source-registry.js.map +1 -0
  125. package/dist/src/research/source-schema.d.ts +158 -0
  126. package/dist/src/research/source-schema.d.ts.map +1 -0
  127. package/dist/src/research/source-schema.js +215 -0
  128. package/dist/src/research/source-schema.js.map +1 -0
  129. package/dist/src/research/source-status.d.ts +40 -0
  130. package/dist/src/research/source-status.d.ts.map +1 -0
  131. package/dist/src/research/source-status.js +109 -0
  132. package/dist/src/research/source-status.js.map +1 -0
  133. package/dist/src/research/store.d.ts +24 -0
  134. package/dist/src/research/store.d.ts.map +1 -0
  135. package/dist/src/research/store.js +60 -0
  136. package/dist/src/research/store.js.map +1 -0
  137. package/dist/src/research/target-view.d.ts +33 -0
  138. package/dist/src/research/target-view.d.ts.map +1 -0
  139. package/dist/src/research/target-view.js +133 -0
  140. package/dist/src/research/target-view.js.map +1 -0
  141. package/dist/src/research/target.d.ts +883 -0
  142. package/dist/src/research/target.d.ts.map +1 -0
  143. package/dist/src/research/target.js +323 -0
  144. package/dist/src/research/target.js.map +1 -0
  145. package/dist/src/research/video-transfer.d.ts +28 -0
  146. package/dist/src/research/video-transfer.d.ts.map +1 -0
  147. package/dist/src/research/video-transfer.js +100 -0
  148. package/dist/src/research/video-transfer.js.map +1 -0
  149. package/dist/src/spec/generator.d.ts.map +1 -1
  150. package/dist/src/spec/generator.js +3 -2
  151. package/dist/src/spec/generator.js.map +1 -1
  152. package/dist/src/spec/passthrough-generator.d.ts.map +1 -1
  153. package/dist/src/spec/passthrough-generator.js +6 -4
  154. package/dist/src/spec/passthrough-generator.js.map +1 -1
  155. package/package.json +2 -2
  156. package/plugin/.codex-plugin/plugin.json +1 -1
  157. package/plugin/.mcp.json +1 -1
  158. package/plugin/mcp.json +1 -1
  159. package/plugin/research-sources/amplitude/SOURCE.md +28 -0
  160. package/plugin/research-sources/app-store-reviews/SOURCE.md +25 -0
  161. package/plugin/research-sources/app-store-search/SOURCE.md +25 -0
  162. package/plugin/research-sources/tech-blog-search/SOURCE.md +27 -0
  163. package/plugin/research-sources/uibowl/SOURCE.md +26 -0
  164. package/plugin/research-sources/web-search/SOURCE.md +24 -0
  165. package/plugin/skills/_shared/proactive-routing.md +5 -0
  166. package/plugin/skills/architecture/SKILL.md +1 -1
  167. package/plugin/skills/market-scan/SKILL.md +61 -0
  168. package/plugin/skills/research/SKILL.md +438 -0
  169. package/plugin/skills/research/references/design.md +938 -0
  170. package/plugin/skills/research/references/output-template.md +366 -0
  171. package/plugin/skills/research/scripts/pii-vision.swift +327 -0
  172. package/plugin/skills/research/scripts/slide-extract.mjs +223 -0
  173. package/plugin/skills/reverse-plan/SKILL.md +52 -0
  174. package/plugin/skills/screen-ref/SKILL.md +63 -0
  175. package/plugin/skills/ux-research/SKILL.md +51 -0
@@ -0,0 +1,366 @@
1
+ # 리서치 결과물 양식
2
+
3
+ research 스킬이 내는 결과물의 순서와 섹션별 규칙을 정합니다. 단계 스킬(market-scan, screen-ref, ux-research, reverse-plan)은 이 양식에서 자기 섹션을 채웁니다. research는 섹션을 이어 붙인 뒤 판단과 검증 제안, 열린 질문으로 마무리합니다.
4
+
5
+ 기준으로 삼은 결과물은 다른 팀원이 만든 스킬이 프롬프트 한 번으로 낸 Figma 페이지입니다. 그 결과를 거꾸로 분석해 뽑았습니다. 원본 스킬을 받으면 이 문서를 거기에 맞춰 고칩니다. 아래 예시 문장은 전부 그 페이지에서 가져왔습니다.
6
+
7
+ ## 전체 순서
8
+
9
+ | 순서 | 섹션 | 채우는 곳 |
10
+ |---|---|---|
11
+ | 종합 | (번호 없음) | 코드가 모읍니다. 0번 앞에 붙고 모을 게 없으면 안 그립니다 |
12
+ | 0 | 전제 | research |
13
+ | 1 | 레퍼런스 선정 | market-scan |
14
+ | 2 | 시안 | 시안 생성 단계 (범위는 아래 2절 참고) |
15
+ | 3 | 비교표 | research |
16
+ | 4 | 와우 포인트와 페인 포인트 | ux-research |
17
+ | 5 | 레퍼런스가 그렇게 한 이유 | reverse-plan |
18
+ | 6 | 판단 | research |
19
+ | 7 | 검증 제안 | research |
20
+ | 8 | 열린 질문 | research. interview 입력으로 넘깁니다 |
21
+ | 9 | 영상 분석 (선택) | research. 영상을 본문에 합칠 때만 붙입니다 |
22
+
23
+ ## 관찰과 해석 나누기
24
+
25
+ 결과물 전체에 걸리는 규칙입니다. evidence-checker가 이 규칙으로 검사합니다.
26
+
27
+ - **관찰**은 화면에서 보이는 것과 숫자입니다. 표시를 붙이지 않는 대신 출처(캡처 경로나 URL)를 댈 수 있어야 합니다.
28
+ - **해석**은 추론, 효과 예측, 레퍼런스의 의도 추정입니다. 문장 끝에 `(해석)`을 붙입니다.
29
+ - 아직 정해지지 않은 정책에 기대는 주장은 조건을 괄호에 함께 적습니다. 예: `(한도 정책 확정 뒤, 해석)`
30
+ - 섹션 머리말에 근거의 한계를 한 문장으로 밝힙니다. 예: "전환 데이터가 없어 시안 화면과 레퍼런스 리서치를 근거로 한 해석이다."
31
+
32
+ "늘어난다", "줄어든다", "~할 수 있다", "~해서 ~했다"처럼 효과나 의도를 말하는 문장에 `(해석)`이 없으면 걸립니다.
33
+
34
+ ### 근거 상태
35
+
36
+ 비교표 칸과 와우, 페인 발견은 근거 상태(`basis`)를 하나씩 가집니다. 관찰과 해석 두 가지로는 "못 봐서 비워 둔 칸"과 "없다고 확인한 칸"이 구분되지 않아서 다섯 가지로 나눴습니다.
37
+
38
+ | 상태 | 뜻 | 반드시 붙는 것 |
39
+ |---|---|---|
40
+ | `observation` | 화면이나 영상에서 본 것 | 출처(`evidence`) 하나 이상 |
41
+ | `company-statement` | 회사가 직접 밝힌 것 | 출처 하나 이상 |
42
+ | `interpretation` | 우리 해석 | 문장 끝 `(해석)` |
43
+ | `unconfirmed` | 못 봐서 비워 둔 칸 | 이유(`note`) |
44
+ | `absent` | 없다고 확인한 것 | 확인한 방법(`note`) |
45
+
46
+ 출처는 문장 끝 괄호에 짧게 답니다. 캡처는 "(프레임 08)", 영상은 "(영상 109초)", 내부 자료는 "(PG 회신)"처럼 씁니다. 원본에서 가장 잘 된 점이 이 표기라서 그대로 가져왔습니다.
47
+
48
+ 못 본 칸은 비워 두지 않고 이유를 적습니다. "영상에 안 나옴", "수집한 화면에 없음(상세와 결제 화면은 수집하지 않음)"처럼 어디서 못 봤는지를 쓰면 다음 사람이 채울 수 있습니다. 칸에 "확인 못함" 칩이 이미 붙으니 글에서 같은 말을 되풀이하지 않습니다. 없는 기능도 결과입니다. "구좌 없음"을 한 칸으로 적어야 비교가 성립합니다.
49
+
50
+ ## 0. 전제
51
+
52
+ 리서치를 시작하기 전에 받아야 하는 입력입니다. **목표 지표가 없으면 research를 시작하지 않고 먼저 묻습니다.** 비교 기준이 전부 목표에서 나오기 때문입니다.
53
+
54
+ | 항목 | 예 |
55
+ |---|---|
56
+ | 목표 지표 | 앱 안 구매 건수와 거래액 |
57
+ | 붙는 흐름 | 상품 목록에서 상세로 가는 흐름 (모바일 상품권) |
58
+ | 규모 가정 | 브랜드는 10개 이상으로 늘어날 예정 |
59
+ | 구조 제약 | 상세에 금액 선택이 없다. 금액마다 상품이 따로인 기획서 구조 |
60
+ | 아직 안 온 입력 | 브랜드 목록은 서윤님이 공유 예정 |
61
+ | 근거의 한계 | 전환 데이터가 없다 |
62
+ | 기호 범례 | ◎ 강함, ○ 보통, △ 약함 |
63
+
64
+ ### 목표치 근거
65
+
66
+ 전제 표 아래에 목표치를 어디서 왔는지 같이 둡니다(`target`). 7절 가설의 기대 효과와 성공 기준이 여기서 나옵니다. 주 근거는 우리 데이터이고 시장 자료와 타사 사례는 견주는 데만 씁니다.
67
+
68
+ | 항목 | 예 |
69
+ |---|---|
70
+ | 목표 지표 | 구매 전환율: 구매 화면 진입 대비 결제 완료 |
71
+ | 화면 | 새로 만드는 화면 |
72
+ | 기준값 | 12% (최근 8주). 대신 쓴 퍼널: 기존 결제 퍼널 |
73
+ | 하루 진입 수 | 3,000명. 진입 화면 조회 수 × 배너 클릭률 |
74
+ | 주별 변동 | ±0.8%p |
75
+ | 목표 범위 | 보수 13%, 기대 15%, 도전 18% |
76
+ | 데이터 출처 | Amplitude 프로젝트 이름과 기간, 퍼널 단계 이벤트 |
77
+
78
+ - 기준값은 분석 도구의 저장된 차트를 먼저 보고 없으면 제품 프로필의 이벤트로 퍼널을 질의해서 뽑습니다. 못 구했으면 확인 못함과 이유를 적고 8절로 넘깁니다.
79
+ - 새 화면이면 비슷한 기존 퍼널을 빌려 쓰고 무엇을 빌렸는지 적습니다.
80
+ - 사업 계획이나 시장 자료에서 온 숫자는 계산 단계 표에 어디서 온 숫자인지(우리 데이터, 비슷한 퍼널, 사업 계획, 시장 자료, 타사 사례, 가정) 붙입니다.
81
+ - 표 아래에는 렌더가 계산한 값이 붙습니다. 가설을 다 성공하면 몇 %까지 가는지와 가설마다 군당 표본, 걸리는 일수입니다. 효과가 겹칠 수 있어서 합은 많이 잡은 값입니다.
82
+ - 가설별 표에는 기대 효과마다 근거(우리 지난 실험, 타사 사례, 시장 자료, 가정)가 붙습니다. 근거가 없으면 "근거 없음"으로 나옵니다.
83
+ - 가설을 다 성공해도 기대 목표에 못 닿으면 사용자와 대응(가설 추가, 효과 큰 가설로 교체, 목표 낮춤, 그대로 둠)을 골라 `shortfall`에 적습니다. 고른 대응과 처음 기대 목표가 표 위에 한 줄로 나옵니다.
84
+ - 프로젝트 키 같은 값은 적지 않습니다. 공유본에는 차트 링크도 빠집니다.
85
+
86
+ 붙는 흐름(`attachTo`)은 기능이 우리 서비스의 어느 흐름에 붙는지와 그 도메인입니다. 이름이 같은 기능이라도 붙는 흐름이 다르면 레퍼런스를 찾을 도메인과 기준값을 빌릴 퍼널이 달라집니다.
87
+
88
+ ## 1. 레퍼런스 선정
89
+
90
+ 경쟁사를 나열하지 않고 **같은 문제를 서로 다르게 푼 유형**을 고릅니다. 업종이 달라도 됩니다. 3~5개를 고릅니다. 한 유형에 두 곳을 묶어도 됩니다.
91
+
92
+ 이름은 `<기호>. <레퍼런스> 기준: <유형명>` 꼴로 붙입니다.
93
+
94
+ ```text
95
+ A. 서비스 A 기준: 순위 리스트와 브랜드 목록형
96
+ B. 서비스 B 기준: 혜택 가격형
97
+ C. 서비스 C, 서비스 D 기준: 일반 커머스 틀형
98
+ D. 서비스 E 기준: 탐색 확장형
99
+ ```
100
+
101
+ 제품 후보 표의 축 칸에는 0절 붙는 흐름의 도메인과 같은지(같은 도메인, 이웃 도메인, 다른 도메인)를 같이 적습니다. 다른 도메인 사례는 화면 패턴만 빌리고 수치는 참고만 합니다.
102
+
103
+ 원본에는 레퍼런스를 왜 골랐는지가 없습니다. 이 양식에서는 유형마다 "어떤 해법을 대표해서 골랐는지"를 한 줄씩 붙입니다.
104
+
105
+ ## 2. 시안
106
+
107
+ 레퍼런스 하나당 시안 하나를 만듭니다. **화면 범위는 모든 시안에 똑같이 맞춥니다.** 범위가 다르면 3절의 비교표가 성립하지 않습니다. 원본은 모든 시안을 홈 첫 화면, 홈 전체 스크롤, 상세 전체 스크롤로 맞췄고 브랜드 페이지는 시안 A에만 있습니다.
108
+
109
+ 시안마다 화면별로 두 목록을 붙입니다.
110
+
111
+ - **가져온 것**: 레퍼런스에서 빌린 구성
112
+ - **보완한 점**: 레퍼런스의 약점을 고친 곳
113
+
114
+ ```text
115
+ 상세에서 서비스 A에서 가져온 것
116
+ - 금액 선택 없이 상품 하나, 브랜드명 링크, 유효기간 행
117
+ - 접힌 아코디언
118
+ 보완한 점: 취소와 환불은 펼침(서비스 A의 접힌 유의사항 약점)
119
+ ```
120
+
121
+ 시안마다 어느 레퍼런스에서 무엇을 가져왔고 어느 페인을 푸는지 발견 id로 잇습니다(`adoptions`). 원본은 시안과 리서치가 번호로 이어지지 않아서 어느 와우나 페인을 푸는 시안인지 추적할 수 없었습니다. 이 연결선이 이 양식이 원본보다 더 가져가는 부분입니다. 채택하지 않은 시안은 이유를 함께 적습니다. 어느 시안도 풀지 않는 페인이 있으면 `validate`가 경고합니다. 우리 서비스의 어느 자리에 넣을지를 고르는 시안은 레퍼런스가 없을 수 있어서 `placement`에 자리를 적습니다. 레퍼런스도 자리도 없는 시안만 경고합니다. 자리가 하나라도 적혀 있으면 표에 자리 열이 생깁니다.
122
+
123
+ 시안에는 실데이터를 넣습니다(catalog-collect). 원본은 서비스 C의 실제 가격을 넣어서 할인율이 1~2%밖에 안 된다는 게 드러났습니다. 이 사실이 6절 판단과 8절 열린 질문까지 이어졌습니다. 가짜 숫자를 넣었으면 놓쳤을 부분입니다.
124
+
125
+ > research가 시안까지 그릴지는 아직 정하지 않았습니다. 시안 없이 끝나는 경우 3절 비교표의 열은 시안 대신 레퍼런스 화면이 됩니다.
126
+
127
+ ## 3. 비교표
128
+
129
+ 행은 기준, 열은 시안입니다.
130
+
131
+ **기준은 0절의 목표 지표에서 거꾸로 뽑습니다.** 원본은 구매 전환을 목표로 두고 사용자가 지나는 순서대로 기준을 세웠습니다.
132
+
133
+ | 구간 | 기준 |
134
+ |---|---|
135
+ | 노출 | 홈 첫 화면에 보이는 상품 수, 목록에서 혜택 노출 |
136
+ | 탐색 | 브랜드 10개 이상에서 원하는 걸 찾기 |
137
+ | 상세 | 상세 상단 정보, 금액이 다른 상품으로 가는 길, 상세 하단 이어보기 |
138
+ | 구매 | 구매 버튼까지 단계, 수량과 객단가 |
139
+ | 비용 | 구현 부담과 확장성 |
140
+ | 위험 | 남은 위험과 미확정 |
141
+
142
+ 행(구좌나 기준)마다 회색 한 줄 정의(`definition`)를 답니다. "구좌"가 무엇인지 모르는 사람도 읽을 수 있게 하려는 것입니다. 행 머리에는 패턴도 답니다. 레퍼런스가 모두 같으면 동일 패턴(`common`), 갈리면 서비스별 분기(`split`), 하나만 하면 단독 구현(`unique`)입니다.
143
+
144
+ 칸 하나는 기호와 근거 한 문장으로 씁니다. 근거는 숫자나 위치 같은 관찰로 대고 문장 끝에 출처를 답니다. 칸에는 캡처 썸네일(`captureIds`)을 붙일 수 있습니다. 근거 상태가 관찰이 아니면 배지가 붙습니다. 기준 행이어도 못 본 칸은 기호 없이 이유만 적습니다.
145
+
146
+ ```text
147
+ △ 3개. 인기 TOP 3 다음에 브랜드 목록이 와서 전체 상품 그리드는 스크롤해야 보임
148
+ ◎ 6개. 촘촘한 1열 행이라 가장 많음 (프레임 08)
149
+ ```
150
+
151
+ ```text
152
+ (확인 못함) 영상에 안 나옴. 이 구좌까지 스크롤하지 않았다
153
+ ```
154
+
155
+ - 구현 부담 행은 기호 대신 정도와 필요한 것을 씁니다. 예: "중간. 순위 산정 기준과 브랜드 로고 이미지가 필요"
156
+ - 위험 행은 기호 없이 남은 위험만 씁니다. 해석이 섞이면 `(해석)`을 붙입니다.
157
+
158
+ ## 4. 와우 포인트와 페인 포인트
159
+
160
+ 시안마다 2×2 칸을 채웁니다.
161
+
162
+ | | 와우 포인트 | 페인 포인트 |
163
+ |---|---|---|
164
+ | 사용자 관점 | | |
165
+ | 비즈니스 관점 | | |
166
+
167
+ 섹션 머리말에 관점을 정의합니다.
168
+
169
+ - 사용자 관점: 원하는 걸 빨리 찾는지, 구매까지 빠른지, 상품권 비교가 쉬운지
170
+ - 비즈니스 관점: 구매 전환, 이탈, 더 많이 팔 수 있는지
171
+
172
+ 칸마다 불릿 2개를 해요체로 씁니다. 비즈니스 관점 칸은 거의 다 효과 예측이라 대부분 `(해석)`이 붙습니다.
173
+
174
+ 2×2 표와 별도로 발견을 한 줄씩 적습니다(`findings`). 발견마다 레퍼런스, 종류(와우, 페인, 인사이트, 디자인), 관점(사용자, 비즈니스), 근거 상태를 답니다. 와우와 페인이 하나도 없는 레퍼런스는 조사가 덜 된 것이라 `validate`가 경고합니다.
175
+
176
+ 발견의 `slot`을 3번 비교표의 기준 이름과 똑같이 적으면 그 구좌 칸 안에도 와우와 페인이 붙습니다. 구좌 격자 한 칸에서 기호와 근거와 와우, 페인을 함께 읽게 하려는 것입니다. 이름이 조금이라도 다르면 칸에 안 붙고 `validate`가 알려줍니다.
177
+
178
+ 페인은 조작 횟수나 수치를 `concrete`에 적습니다. "번거로워요"만으로는 시안이 풀었는지 확인할 수 없기 때문입니다.
179
+
180
+ ```text
181
+ 상품 20개를 비교하려면 상세를 19번 오가야 해요 (프레임 14)
182
+ ```
183
+
184
+ ```text
185
+ 비즈니스 관점 / 와우 포인트
186
+ • 상세 최하단 다른 상품권이 떠나려던 사용자를 다른 상품으로 돌려요. 서비스 C의 와우 포인트예요 (해석)
187
+ 비즈니스 관점 / 페인 포인트
188
+ • 최하단까지 내려오는 사용자가 적으면 이어보기 효과가 작아요 (해석)
189
+ ```
190
+
191
+ ## 5. 레퍼런스가 그렇게 한 이유
192
+
193
+ 역기획에서 제일 중요한 섹션입니다. 화면 구성을 뽑는 데서 멈추지 않습니다. 레퍼런스의 본업에서 그 화면이 나온 이유를 찾은 뒤 우리 과제에 맞는지까지 씁니다. 레퍼런스마다 아래 순서를 따릅니다.
194
+
195
+ 1. 본업이나 제품 방향. 서비스가 어떻게 돈을 버는지(수익 모델)도 여기에 적습니다
196
+ 2. 그래서 이런 화면을 만들었다
197
+ 3. 우리 과제와 다른 점
198
+ 4. 가져올 것과 안 가져올 것
199
+
200
+ ```text
201
+ 서비스 E는 여러 판매자의 상품을 모아 보여주는 게 본업이라 필터와 비교 탐색을 먼저 보여 준다.
202
+ 우리는 브랜드 10개 이상이라 브랜드 전체 버튼 같은 탐색은 일부 맞고,
203
+ 판매자를 거르는 필터까지는 필요 없다 (해석)
204
+ ```
205
+
206
+ 이 섹션은 전부 해석입니다. 원본은 비교표 11번째 행에 넣었는데, 이 양식에서는 reverse-plan이 채우도록 섹션으로 뺍니다.
207
+
208
+ ### 화면 흐름
209
+
210
+ 화면 단위로 역기획을 할 때는 5절 끝에 화면 흐름(`flow`)을 붙입니다. 표는 아래 순서로 나옵니다.
211
+
212
+ | 표 | 내용 |
213
+ |---|---|
214
+ | 화면 전이 | 출발 화면, 사용자 행동(탭, 스와이프, 드래그, 스크롤, 길게 누름, 입력), 도착 화면, 분기 조건, 근거 |
215
+ | 번호 마커 명세 | 화면마다 번호, 요소, "트리거 탭 시 → 결과", 개수 상한이나 조건 |
216
+ | 화면 주석 | 화면에 걸린 발견. 페인은 BAD, 해석은 INSIGHT, 디자인 의도는 Design으로 나옵니다 |
217
+ | 시도 기록 | 무엇을 찾으려 했고 찾았는지, 못 찾았는지, 너무 많아 못 골랐는지 |
218
+ | 사용자 유형 | 사람이 입력한 인터뷰 유형. 없으면 "인터뷰 없음" 한 줄 |
219
+
220
+ 같은 화면으로 되돌아오는 전이는 `loop`로 표시하고 반복 비용을 `note`에 적습니다. "상품 20개를 비교하려면 상세를 19번 오간다"처럼 횟수가 드러나야 합니다. 하위 팝업의 마커 번호는 "3-1" 꼴로 쓰고 한 화면 안에서 번호가 겹치면 스키마가 거절합니다.
221
+
222
+ ```text
223
+ 상품 목록 → 상세 탭: 상품 카드 탭 (조건: 로그인 상태)
224
+ 상세 → 상품 목록 탭: 뒤로 가기 (반복) 상품 20개를 비교하려면 19번 되풀이한다
225
+ ```
226
+
227
+ ## 6. 판단
228
+
229
+ 시안 하나를 고르지 않아도 됩니다. 화면 영역별로 결론을 냅니다. 시안끼리 섞는 조합을 제안할 수 있습니다. 섹션 제목에 `(해석)`을 붙입니다.
230
+
231
+ 영역마다 결론 한 줄과 근거 문단을 씁니다. 결론 한 줄은 얼마나 확정됐는지가 드러나게 씁니다.
232
+
233
+ | 확정 정도 | 결론 줄 예 |
234
+ |---|---|
235
+ | 유력 | 홈은 C의 리스트 틀이나 D의 칩과 브랜드 전체 버튼 조합이 유력하다 |
236
+ | 시험 | 상세 최하단 이어보기는 이탈을 구매로 되돌릴 후보라 다른 안에도 붙여 본다 |
237
+ | 보류 | 수량 영역은 한도 정책이 확정된 뒤에 정한다 |
238
+ | 제외 | 선물 분기는 이번 과제 범위에서 뺀다. 구매 단계를 하나 늘리기 때문이다 |
239
+
240
+ 영역이 여럿이면 구매 전환에 가까운 순서로 우선순위(`rank`)를 매깁니다. 다음에 할 일(`todo`)과 근거 출처도 함께 답니다. 가져갈 것과 피할 것은 영역마다 한 줄씩 나눠 적으면 읽는 사람이 바로 고를 수 있습니다.
241
+
242
+ 보류할 때는 무엇이 정해지면 결정할 수 있는지를 함께 씁니다. 제외는 원본의 "그 외" 칸이 하던 일로, 범위에서 뺀 것과 그 이유를 적습니다.
243
+
244
+ ## 7. 검증 제안
245
+
246
+ 가설마다 아래를 씁니다.
247
+
248
+ - 가설: "X하면 Y가 늘어난다"와 비교할 시안
249
+ - 볼 지표: 0절의 목표 지표에서 고릅니다
250
+ - 나눠 볼 조건
251
+ - 성공 기준(`successCriteria`): 어떤 값이 나오면 맞았다고 볼지. 이게 없으면 결과가 나와도 가설을 판정할 수 없어서 `validate`가 경고합니다
252
+ - 표본(`sample`)과 기간(`period`): 누구를 얼마 동안 볼지. 정하지 못했으면 비워 둡니다. 숫자를 지어서 채우지 않습니다
253
+ - 기대 효과(`expectedLiftPp`): 성공하면 목표 지표가 몇 %p 오를지. 0절 목표 범위까지 가설들로 채워지는지 이 값으로 봅니다
254
+ - 기대 효과 근거(`liftBasis`): 그 %p가 어디서 왔는지. 우리 지난 실험, 타사 사례, 시장 자료 순으로 찾고 못 찾으면 가정이라고 적고 이유를 남깁니다. 가정이면 `validate`가 경고합니다
255
+ - 볼 이벤트(`events`): 이 가설을 재는 분석 이벤트. 아직 없는 이벤트면 7절 아래 "심어야 할 이벤트" 표에 나옵니다
256
+ - 근거 사례(`metricCaseIds`): 목표치를 견줄 때 본 타사 지표 사례
257
+
258
+ 가설 위에는 타사 지표 사례(`metricCases`)를 표로 둡니다. 회사, 지표, 분모, 값, 바꾼 것, 시점을 적습니다. 분모가 없는 비율 사례는 우리 지표와 견줄 수 없어서 `validate`가 경고합니다. 공개 사례는 드물어서 우리 데이터로 기준값을 채웠으면 비워 둬도 됩니다. 기준값도 사례도 없을 때만 확인 못함으로 남기고 어디까지 찾아봤는지 적습니다.
259
+
260
+ 새 화면처럼 잴 이벤트가 아직 없으면 가설 아래에 "심어야 할 이벤트" 표를 둡니다. 이벤트 이름, 퍼널 단계, 상태(없음, 심기로 함), 메모를 적습니다. 화면을 만들 때 같이 심어야 가설을 판정할 수 있습니다.
261
+
262
+ ```text
263
+ 가설 1. 목록의 할인율을 크게 보이면 상세 진입이 늘어난다 (B 대 A, C, D)
264
+ 목록에서 상세 진입률과 지면별 구매 건수를 본다. 할인 폭이 작은 상품과 큰 상품을 나눠 본다.
265
+ ```
266
+
267
+ 아직 의미가 없는 지표는 조건을 붙여 둡니다. 예: "건당 구매 금액은 수량 한도가 확정된 뒤에 의미가 있다."
268
+
269
+ ## 8. 열린 질문
270
+
271
+ 받는 사람(예: PM)을 제목에 적습니다. 머리말에는 이 섹션이 무엇인지 밝힙니다. 예: "시안과 비교 작업에서 근거가 없어 임시로 둔 것들이다. 답에 따라 시안이 바뀌는 곳을 함께 적었다."
272
+
273
+ 항목마다 세 가지를 씁니다.
274
+
275
+ 1. 질문
276
+ 2. 지금은 어떻게 임시로 뒀는지
277
+ 3. 답에 따라 바뀌는 시안이나 화면
278
+
279
+ ```text
280
+ 3. 실제 할인 폭
281
+ 목업은 서비스 C의 가격(1~2%)이다. 실제 할인 폭에 따라 시안 B처럼 할인율을 크게 강조할 가치가 달라진다.
282
+ ```
283
+
284
+ 질문마다 누가 확인해야 풀리는지(`owner`)를 답니다.
285
+
286
+ | 확인 주체 | 뜻 |
287
+ |---|---|
288
+ | `immediate` | 지금 바로 정할 수 있음 |
289
+ | `data` | 데이터를 확인한 뒤에 정함 |
290
+ | `other-team` | 다른 직군의 답이 필요함 |
291
+
292
+ 도구는 내부 실적, PG 회신, 인터뷰 결과를 만들지 못합니다. 이런 자리는 `data`나 `other-team`으로 두고 사람이 채웁니다.
293
+
294
+ 이 섹션은 interview에 그대로 넘길 수 있는 모양이어야 합니다. 3번 항목(답에 따라 바뀌는 곳)이 빠진 질문은 우선순위를 매길 수 없어서 걸립니다.
295
+
296
+ ## 9. 영상 분석 (선택)
297
+
298
+ 영상을 본문에 합칠 때만 8번 뒤에 붙입니다. 영상이 주된 자료이면 본문 대신 영상 분석 문서(`video-analysis`)를 따로 만듭니다. 그 문서는 0번 전제, 1번 레퍼런스 선정, "2. 영상 분석"만 씁니다. 두 모양의 차이와 오가는 방법은 `design.md`의 8.5절에 있습니다.
299
+
300
+ 표는 영상 목록 하나와 묶음별 표로 이뤄집니다. 묶음 순서는 제품별 흐름, 구좌별, 유형별, 종합이고 발견이 없는 묶음은 건너뜁니다.
301
+
302
+ - 영상 목록: 제품, 영상 제목과 주소, 종류, 출처(공개 영상이나 직접 녹화), 길이.
303
+ - 묶음별 표: 영상, 주제, 내용, 근거, 프레임.
304
+ - 내용 앞에 방향성이나 관례, 상시나 분기나 단독을 `[방향성] [상시]`처럼 붙입니다.
305
+ - 근거 칸에는 관찰, 회사 발언, 해석 중 하나와 영상 시각을 `관찰 (영상 12.5초)`로 적습니다. 관찰과 회사 발언은 시각이 꼭 있어야 합니다.
306
+ - 프레임 칸에는 1번 섹션 캡처의 이름을 적습니다. 이미지는 1번에만 실립니다.
307
+
308
+ ```text
309
+ 제품별 흐름 | 홈에서 상품권까지 | 홈 두 번째 구좌에서 상품권 목록으로 들어간다. | 관찰 (영상 12.5초) | 홈 구좌 진입
310
+ ```
311
+
312
+ ## 종합
313
+
314
+ 0번 앞에 코드가 모은 표 네 개를 붙입니다. 새로 쓰는 문장이 없고 비교표 기호와 판단 순위와 발견에서 옮겨 올 뿐이라 LLM이 따로 채울 칸은 없습니다.
315
+
316
+ | 표 | 모으는 곳 |
317
+ |---|---|
318
+ | 기준별 점수 | 비교표 기호. ◎ 2점, ○ 1점, △ 0점으로 합산하고 가중치는 없습니다 |
319
+ | 우선순위 | 순위(`rank`)가 있는 판단을 순위 순으로 |
320
+ | 가져올 와우 | 본 것이나 회사가 말한 와우 발견 전부 |
321
+ | 피할 페인 | 본 것이나 회사가 말한 페인 발견 전부 |
322
+
323
+ 우리 서비스(`own-service`)가 있으면 표 둘이 더 붙습니다. 우리 서비스 캡처에서 나온 와우는 지킬 우리 와우, 페인은 고칠 우리 페인에 모이고 가져올 와우와 피할 페인에는 들어가지 않습니다.
324
+
325
+ | 표 | 모으는 곳 |
326
+ |---|---|
327
+ | 지킬 우리 와우 | 우리 서비스 캡처에 걸린 와우 발견 |
328
+ | 고칠 우리 페인 | 우리 서비스 캡처에 걸린 페인 발견 |
329
+
330
+ 점수는 칸 수 대비 비율로 보입니다. 기호가 없는 칸(못 본 칸)은 점수에서 빼고 개수만 따로 적습니다. 못 봤다고 점수가 깎이지는 않습니다. 합계는 제품끼리 비교하는 참고값이고 판단은 6번에서 합니다.
331
+
332
+ ## 문체
333
+
334
+ - 섹션 본문은 평서체(~다)로 씁니다.
335
+ - 와우 포인트와 페인 포인트 불릿은 해요체로 씁니다.
336
+ - 기호(◎○△)는 비교표에서만 씁니다.
337
+ - 출처는 문장 끝 괄호에 "(프레임 08)"처럼 짧게 답니다.
338
+
339
+ ## 원본과 다르게 가져가는 점
340
+
341
+ | 원본 | 이 양식 | 이유 |
342
+ |---|---|---|
343
+ | 레퍼런스 선정 이유 없음 | 유형마다 한 줄 추가 | 왜 이 레퍼런스인지 읽는 사람이 확인할 수 없어서 |
344
+ | 관찰에 출처 연결 없음 | 캡처 경로나 URL을 댈 수 있어야 함 | evidence-checker가 관찰을 검사할 근거가 필요해서 |
345
+ | "이유"가 비교표의 한 행 | 별도 섹션 | reverse-plan이 단독으로 채우고 단독으로 쓰일 수 있게 |
346
+ | 근거 등급은 말투로만 드러남 | 근거 상태 다섯 가지를 필드로 구분 | 못 본 칸과 없는 칸을 기계가 구분하고 경고할 수 있게 |
347
+ | 시안과 리서치가 번호로 이어지지 않음 | `adoptions`로 시안과 발견을 연결 | 어느 페인을 푸는 시안인지 추적하려고 |
348
+ | 열린 질문에 확인 주체가 없음 | 질문마다 `owner` | 데이터와 다른 직군 확인을 앞에 두려고 |
349
+ | 와우와 페인이 구좌 표와 따로 있음 | 격자 칸 안에도 붙이고 종합에 모음 | 구좌 하나에서 기호와 근거와 와우, 페인을 같이 읽게 하려고 |
350
+ | 종합 리포트를 손으로 씀 | 기호와 순위와 발견에서 코드가 모음 | 새 주장이 안 섞이고 LLM이 채울 칸이 늘지 않게 |
351
+ | 우리 서비스와 비교가 없음 | `own-service` 열과 지킬, 고칠 표 | 경쟁사에서 뭘 가져올지가 아니라 우리가 뭘 지키고 고칠지까지 한 문서에서 보려고 |
352
+ | 화면 사이 이동이 그림으로만 있음 | `flow`의 전이와 마커 표 | 화면 흐름도 검사하고 이어 쓸 수 있게 |
353
+
354
+ ## 평가
355
+
356
+ 같은 과제(외식 상품권, 구매 전환 목표)로 research를 돌려 원본 페이지와 나란히 놓고 봅니다.
357
+
358
+ - 비교 기준이 목표 지표에서 나왔는가
359
+ - 효과나 의도를 말하는 문장에 `(해석)`이 빠진 곳은 없는가
360
+ - 레퍼런스가 서로 다른 해법 유형인가
361
+ - 5절이 본업에서 출발해 우리 과제 적합까지 이어지는가
362
+ - 열린 질문마다 답에 따라 바뀌는 곳이 적혀 있는가
363
+ - 못 본 칸에 이유가 있고 관찰 칸마다 출처가 있는가
364
+ - 페인에 조작 횟수나 수치가 있는가
365
+ - 시안이 푸는 페인으로 거슬러 올라갈 수 있는가
366
+ - 원본의 시장조사(구좌 격자), 시안(강점과 약점), 마이페이지 비교, 역기획 문서 네 가지와 나란히 놓았을 때 빠진 칸이 무엇인가