oh-my-design-cli 1.5.1 → 1.6.1

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 (54) hide show
  1. package/AGENTS.md +2 -1
  2. package/README.ko.md +1 -1
  3. package/README.md +38 -1
  4. package/agents/omd-master.md +13 -1
  5. package/data/reference-fingerprints.json +380 -2
  6. package/dist/bin/oh-my-design.js +1 -1
  7. package/dist/{install-skills-IETT2TBJ.js → install-skills-UKEVE3KT.js} +11 -9
  8. package/dist/{install-skills-IETT2TBJ.js.map → install-skills-UKEVE3KT.js.map} +1 -1
  9. package/package.json +10 -4
  10. package/scripts/ctx-prime.cjs +266 -0
  11. package/scripts/postinstall.cjs +6 -6
  12. package/skills/omd-harness/SKILL.md +135 -7
  13. package/web/references/91app/DESIGN.md +151 -0
  14. package/web/references/airtable/DESIGN.md +16 -2
  15. package/web/references/bithumb/DESIGN.md +170 -0
  16. package/web/references/bunjang/DESIGN.md +19 -0
  17. package/web/references/cakeresume/DESIGN.md +162 -0
  18. package/web/references/catchtable/DESIGN.md +19 -0
  19. package/web/references/classum/DESIGN.md +19 -0
  20. package/web/references/dabang/DESIGN.md +19 -0
  21. package/web/references/dji/DESIGN.md +0 -1
  22. package/web/references/fastcampus/DESIGN.md +19 -0
  23. package/web/references/flex/DESIGN.md +19 -0
  24. package/web/references/gmarket/DESIGN.md +19 -0
  25. package/web/references/gogolook/DESIGN.md +126 -0
  26. package/web/references/hahow/DESIGN.md +158 -0
  27. package/web/references/hyundaicard/DESIGN.md +172 -0
  28. package/web/references/inflearn/DESIGN.md +19 -0
  29. package/web/references/kbank/DESIGN.md +18 -0
  30. package/web/references/kdan/DESIGN.md +160 -0
  31. package/web/references/kkbox/DESIGN.md +114 -0
  32. package/web/references/kream/DESIGN.md +18 -0
  33. package/web/references/lunit/DESIGN.md +19 -0
  34. package/web/references/melon/DESIGN.md +153 -0
  35. package/web/references/nhncloud/DESIGN.md +174 -0
  36. package/web/references/oliveyoung/DESIGN.md +19 -0
  37. package/web/references/rayark/DESIGN.md +132 -0
  38. package/web/references/sendbird/DESIGN.md +285 -0
  39. package/web/references/socar/DESIGN.md +18 -0
  40. package/web/references/toss-securities/DESIGN.md +19 -0
  41. package/web/references/tving/DESIGN.md +18 -0
  42. package/web/references/upbit/DESIGN.md +19 -0
  43. package/web/references/upstage/DESIGN.md +18 -0
  44. package/web/references/velog/DESIGN.md +168 -0
  45. package/web/references/wadiz/DESIGN.md +19 -0
  46. package/web/references/webflow/DESIGN.md +16 -2
  47. package/web/references/yeogiotte/DESIGN.md +19 -0
  48. package/data/architecture-proposals/2026-05-13-thin-install-fresh-fetch.md +0 -189
  49. package/data/issues/2026-05-13-multi-surface-schema-rfc.md +0 -67
  50. package/data/reference-audits/2026-05-13-kr10.md +0 -132
  51. package/data/reference-audits/2026-05-14-kr10.md +0 -72
  52. package/data/reference-audits/2026-05-15-kr10.md +0 -124
  53. package/data/research/2026-05-18-agent-landscape.md +0 -69
  54. package/data/research/2026-05-18-kr-style-presets.md +0 -572
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: omd:harness
3
- description: "화면 전체나 신규 surface를 처음부터 디자인할 때의 진입점 — Discovery→Wireframe→Components→Microcopy→Validation 파이프라인을 omd-master 오케스트레이터로 실행. '랜딩 처음부터', 'production-ready', 'wireframe to production', 「一からデザイン」, 「從頭設計」류의 요청에 트리거. 단일 컴포넌트 수정은 omd:apply."
3
+ description: "화면 전체나 신규 surface를 처음부터 디자인할 때의 진입점 — Discovery→Wireframe→Components→Microcopy→Validation 파이프라인을 omd-master 오케스트레이터로 실행. 트리거: '랜딩페이지', '랜딩 페이지', '랜딩 만들어줘', '홈 화면', '첫 화면', '프로토타입', '그럴싸한', '구색 갖춰', 'first screen', 'first impression', 'landing page', 'landing', 'prototype', 'MVP UI', 'home', 'production-ready', 'wireframe to production', '랜딩 처음부터', 'production-ready', '一からデザイン', '從頭設計'. 자연어 발화('그럴싸한 랜딩 만들어줘', 'MVP UI 잡아줘', '프로토타입이라도 구색 갖춰서')에도 자동 트리거. 단일 컴포넌트 수정은 omd:apply."
4
4
  ---
5
5
 
6
6
  # omd:harness — Design Harness Entry
@@ -23,18 +23,49 @@ CLI 의존 없음. 모든 부트스트랩은 Bash + Write 툴로 직접 실행
23
23
  shape: "[도메인] + [톤/스타일] + [핵심 화면]" — 예: "토스 스타일 가족용 식단 앱 메인 화면"
24
24
  ```
25
25
 
26
- ## Step 1 — Subagent registration 사전체크 (CRITICAL)
26
+ ## Step 1 — Subagent registration 자동복구 (v1.6.0+)
27
27
 
28
- `omd-master` subagent가 이 세션에 dispatch 가능한지 verify. Agent tool의 사용 가능 subagent 목록에 `omd-master`가 있으면 진행. 없으면:
28
+ `omd-master` subagent가 이 세션에 dispatch 가능한지 verify. Agent tool의 사용 가능 subagent 목록에 `omd-master`가 있으면 Step 2로. **없으면 게이트로 막지 말고 자동복구**:
29
+
30
+ ### 1.1 — Agent 폴더 detect
31
+
32
+ 다음 폴더 중 가장 먼저 존재하는 것을 target:
33
+ - `.claude/agents/` (claude-code agent)
34
+ - `.codex/agents/` (codex-cli agent)
35
+ - `.agents/` (openhands / generic)
36
+
37
+ 없으면 `.claude/agents/`를 mkdir로 생성 (claude-code default).
38
+
39
+ ### 1.2 — 패키지 source 위치 확인 + 복구 Write
40
+
41
+ ```bash
42
+ OMD_DIR=$(npm root -g)/oh-my-design-cli
43
+ [ -d "$OMD_DIR" ] || OMD_DIR=$(npm root)/oh-my-design-cli # local fallback
44
+ SRC="$OMD_DIR/agents/omd-master.md"
45
+ TARGET=".claude/agents/omd-master.md" # (또는 detect한 폴더)
46
+ [ -f "$SRC" ] && cp "$SRC" "$TARGET" && echo "RECOVERED" || echo "SRC_MISSING"
47
+ ```
48
+
49
+ 성공 시 사용자에게 한 줄:
50
+
51
+ ```
52
+ omd-master subagent를 ${TARGET}에 복구했어요. /agents 한 번 실행하거나 다음 turn에서 자동으로 잡힙니다. 계속 진행할게요.
53
+ ```
54
+
55
+ ### 1.3 — 복구도 실패한 경우 (SRC_MISSING / cp 권한 실패)
56
+
57
+ 기존 안내 fallback:
29
58
 
30
59
  ```
31
- omd-master subagent 세션에 등록되어 있지 않아요. Claude Code는 세션 시작 시점에만 .claude/agents/*.md를 로드합니다 — install-skills를 세션 띄운 후에 돌렸으면 이 케이스.
60
+ omd-master subagent 자동복구가 실패했어요 (패키지 source 누락 또는 권한 문제).
32
61
 
33
62
  해결 (가장 빠른 순서):
34
- 1. 현재 세션에서 /agents 실행 Claude Code가 .claude/agents/*.md 강제 재스캔. omd-* 8개가 목록에 나타나면 /omd-harness 재호출.
35
- 2. 안 되면: Claude Code 앱 완전 종료 (Cmd+Q / 터미널 자체 quit) 터미널 claude 재실행 /omd-harness <task> 재호출.
63
+ 1. `npx oh-my-design-cli@latest install-skills --all` 재실행 /omd-harness 재호출
64
+ 2. /agents 실행 omd-* 목록 확인 보이면 Claude Code 재시작
36
65
  ```
37
66
 
67
+ 복구 성공 시에도 main agent가 같은 turn에 master를 dispatch 못하는 경우가 있으니, Step 4 spawn 시 한 번 더 verify해서 실패하면 사용자에게 "다음 turn에서 자동 재발동" 안내 후 Step 2-3 산출물(ctx-prime.json + 페르소나 답)만 보존하고 종료.
68
+
38
69
  ## Step 2 — Run 디렉토리 부트스트랩 (인라인 Bash)
39
70
 
40
71
  이전엔 `omd harness "<task>" --internal` CLI를 호출했지만 1.0.0부터는 스킬이 직접 한다. 결정론적 hard verify gate:
@@ -118,7 +149,104 @@ test -d "${RUN_DIR}" && test -f "${RUN_DIR}/task.md" && echo "OK" || echo "FAIL"
118
149
  하네스 부트스트랩이 실패했어요 (run dir or task.md 누락). 디스크 권한·경로 문제일 수 있어요. 다시 시도하거나 .omd/ 디렉토리를 정리해주세요.
119
150
  ```
120
151
 
121
- 이 gate를 통과해야만 Step 3로.
152
+ 이 gate를 통과해야만 Step 2.5로.
153
+
154
+ ## Step 2.5 — CTX-PRIME — 코드베이스 자동 분석 (v1.6.0+)
155
+
156
+ reference를 고르라고 사용자에게 묻기 전에 **먼저 레포를 본다**. 사용자가 듣고 싶은 첫 문장은 "이 레포 분석했어요 — Next.js 14 + 토스 블루 + 4개 surface" 같은 *진단*이지 "어느 레퍼런스 골라드릴까요?"가 아니다.
157
+
158
+ ### 2.5.1 — ctx-prime helper 실행
159
+
160
+ ```bash
161
+ OMD_DIR=$(npm root -g)/oh-my-design-cli
162
+ [ -d "$OMD_DIR" ] || OMD_DIR=$(npm root)/oh-my-design-cli
163
+ HELPER="$OMD_DIR/scripts/ctx-prime.cjs"
164
+ [ -f "$HELPER" ] || { echo "CTX_PRIME_MISSING"; exit 0; }
165
+
166
+ node "$HELPER" "$(pwd)" "${RUN_DIR}"
167
+ ```
168
+
169
+ 성공 시 `${RUN_DIR}/ctx-prime.json` 생성. ~12-50ms (typical repo).
170
+
171
+ `CTX_PRIME_MISSING` (구버전 CLI) → Step 3로 직진 (legacy path).
172
+
173
+ ### 2.5.2 — ctx-prime.json Read + 사용자 picker 게이트
174
+
175
+ Read 툴로 `${RUN_DIR}/ctx-prime.json` 로드. 다음 필드만 사용자에게 한 줄로 brief:
176
+
177
+ - `stack.framework`, `stack.kind`, `brand_signal.dominant_color_hex`
178
+ - `surface_inventory.length` (몇 개 surface 발견)
179
+ - `brand_signal.language` (ko / en / ja)
180
+
181
+ **AskUserQuestion 1개**를 다음 shape로:
182
+
183
+ ```
184
+ question: "이 레포 분석했어요 — {framework} + {dominant_color_hex} 베이스 + {N}개 surface ({language} 카피). 이번 작업의 1차 타깃 페르소나는?"
185
+ header: "Audience"
186
+ options: ctx-prime.audience_hypothesis 상위 3개 → label/description 매핑
187
+ - audience_hypothesis[0]: label + "(추천)", description = evidence
188
+ - audience_hypothesis[1]: label, description = evidence
189
+ - audience_hypothesis[2]: label, description = evidence (없으면 생략)
190
+ ```
191
+
192
+ (AskUserQuestion이 자동 "Other" 추가하므로 자유 입력 페르소나도 가능.)
193
+
194
+ 사용자 답을 `ctx-prime.json`에 `confirmed_audience` 필드로 merge (Edit 또는 Write):
195
+
196
+ ```jsonc
197
+ {
198
+ // ... 기존 필드 ...
199
+ "confirmed_audience": "외부 트래픽 — SEO/conversion 우선, 톤 일탈 허용"
200
+ }
201
+ ```
202
+
203
+ ### 2.5.3 — Interview-lite (2-4 picker 묶음)
204
+
205
+ 페르소나 확정 직후 **AskUserQuestion 1번 더, 최대 4개 question 묶음**. ctx-prime 결과를 활용해 picker option을 동적 구성:
206
+
207
+ **Question 1 — exit_scope:**
208
+ - "단일 화면만 (한 surface 깊이)"
209
+ - "풀 랜딩 (hero + features + CTA + footer)" — 추천 (대부분의 경우)
210
+ - "다중 surface (랜딩 + product preview + docs)"
211
+
212
+ **Question 2 — wow moment:**
213
+ - ctx-prime.wow_moment_candidates 상위 3개 + "Other"
214
+
215
+ **Question 3 — primary CTA:**
216
+ - "Sign-up / Get started" — 추천 if audience=외부
217
+ - "Book demo / Contact sales"
218
+ - "GitHub star / View source"
219
+ - "View docs / Read more"
220
+
221
+ **Question 4 — visual grounding:**
222
+ - "Live reference capture (느림, 정확)" — 추천 if exit_scope=풀랜딩
223
+ - "Catalog-only (빠름, generic)"
224
+
225
+ 답을 `${RUN_DIR}/handoff/.handoff.json`에 prefilled_slots로 적재:
226
+
227
+ ```bash
228
+ mkdir -p "${RUN_DIR}/handoff"
229
+ cat > "${RUN_DIR}/handoff/.handoff.json" <<EOF
230
+ {
231
+ "state": "PROPOSE_PLAN",
232
+ "prefilled_slots": {
233
+ "audience": "<confirmed_audience>",
234
+ "exit_scope": "<answer 1>",
235
+ "wow_moment": "<answer 2>",
236
+ "cta_primary": "<answer 3>",
237
+ "visual_grounding": "<answer 4>"
238
+ },
239
+ "ctx_prime_ref": "ctx-prime.json",
240
+ "created_at": "$(date -u +%Y-%m-%dT%H:%M:%SZ)"
241
+ }
242
+ EOF
243
+ ```
244
+
245
+ 이 시점부터 master는 SLOT_GATE를 건너뛰고 PROPOSE_PLAN으로 직행한다 (master INTAKE 분기 참고).
246
+
247
+ ### 2.5.4 — Backward compatibility
248
+
249
+ `ctx-prime.json` 누락 또는 사용자가 picker에서 "Other → 알아서 골라줘" 답하면 Step 3 (reference picker) 그대로 진행. `prefilled_slots` 없으면 master는 legacy SLOT_GATE 흐름.
122
250
 
123
251
  ## Step 3 — DESIGN.md 존재 확인 + reference 의미 매칭
124
252
 
@@ -0,0 +1,151 @@
1
+ ---
2
+ id: "91app"
3
+ name: "91APP"
4
+ country: TW
5
+ category: ecommerce
6
+ homepage: "https://www.91app.com"
7
+ primary_color: "#061C3D"
8
+ logo:
9
+ type: favicon
10
+ slug: "https://www.google.com/s2/favicons?domain=91app.com&sz=128"
11
+ verified: "2026-06-01"
12
+ omd: "0.1"
13
+ ---
14
+ # Design System Inspiration of 91APP
15
+
16
+ ## 1. Visual Theme & Atmosphere
17
+
18
+ 91APP carries the composure of retail infrastructure built to be trusted at scale — the brand of Taiwan's leading omnichannel OMO (online-merge-offline) commerce SaaS. Its identity rests on a deep structural navy (#061C3D) that anchors text, headings, and the primary call-to-action, giving every screen the gravity of a B2B platform that merchants stake their storefronts on. Against a clean white ground (#FFFFFF), that navy reads as steady and engineered rather than playful. A coral-red accent (#E85040) provides the single point of energy — the action color reserved for moments that should feel decisive. Traditional-Chinese Noto Sans TC sets the type with neutral, legible clarity suited to a Taiwanese merchant audience. The overall atmosphere is one of confident retail infrastructure: orderly, generously rounded at the touch points, and quietly serious.
19
+
20
+ ## 2. Color Palette & Roles
21
+
22
+ The palette is disciplined and role-driven, with navy as the dominant structural color and coral as the lone action accent.
23
+
24
+ | Token | Value | Role |
25
+ |-------|-------|------|
26
+ | Structural navy | #061C3D | Body text, headings, primary button background |
27
+ | Action coral | #E85040 | Coral CTA background — the action accent |
28
+ | Red emphasis | #CB200E | Emphasis text, highlight callouts |
29
+ | Neutral fill | #F7F6FB | Neutral / secondary button fill |
30
+ | Ground | #FFFFFF | Page background, text on filled buttons |
31
+
32
+ Navy (#061C3D, rgb 6,28,61) does the heavy lifting: it is the text color, the heading color, and the fill of the primary button — chosen as the brand's primary color precisely because it carries so much of the interface. Coral (#E85040, rgb 232,80,64) is the deliberate counterpoint, an action accent that should stay rare to keep its decisiveness. Red emphasis (#CB200E) is a hotter red reserved for emphasis text. The neutral fill (#F7F6FB) gives secondary surfaces a soft, near-white lift off the pure-white ground.
33
+
34
+ ## 3. Typography Rules
35
+
36
+ Type is set in Noto Sans TC (Traditional Chinese), with Helvetica as the fallback — a neutral, highly legible pairing appropriate for a Taiwanese merchant audience. Body copy runs at 16px. Hero headings step up to 44px at weight 700 in structural navy (#061C3D), giving the top of the page clear authority without ornament. The hierarchy is straightforward: large bold navy headings over calm 16px body, letting the content of a commerce platform stay scannable.
37
+
38
+ - Body: 16px, Noto Sans TC / Helvetica
39
+ - Hero heading: 44px / 700, #061C3D, Noto Sans TC
40
+
41
+ ## 4. Component Stylings
42
+
43
+ ### Primary Button
44
+
45
+ **Default (navy)**
46
+ - Background: #061C3D
47
+ - Text: #FFFFFF
48
+ - Border: none
49
+ - Radius: 16px
50
+ - Height: 48px
51
+ - Font: 16px / 600
52
+ - Use: Primary call-to-action — the dominant navy action on white ground
53
+
54
+ ### Coral CTA Button
55
+
56
+ **Default (coral accent)**
57
+ - Background: #E85040
58
+ - Text: #FFFFFF
59
+ - Border: none
60
+ - Radius: 16px
61
+ - Height: 40px
62
+ - Font: 16px / 500
63
+ - Use: The single energetic action accent — reserve for decisive, attention-drawing moments
64
+
65
+ ### Neutral Button
66
+
67
+ **Default (secondary)**
68
+ - Background: #F7F6FB
69
+ - Text: #061C3D
70
+ - Border: none
71
+ - Radius: 3px
72
+ - Height: 48px
73
+ - Font: 16px / 600
74
+ - Use: Secondary / neutral action on a soft near-white fill
75
+
76
+ ### Hero Heading
77
+
78
+ **Default**
79
+ - Background: transparent
80
+ - Text: #061C3D
81
+ - Border: none
82
+ - Font: 44px / 700
83
+ - Use: Top-of-page heading in Noto Sans TC carrying brand authority
84
+
85
+ ## 5. Layout Principles
86
+
87
+ The layout reads as clean retail infrastructure: a white ground (#FFFFFF) gives content room to breathe, navy structure organizes the hierarchy, and the coral accent is placed sparingly so the eye knows exactly where the action is. Generously rounded primary buttons (16px radius) sit as confident, tappable anchors. Secondary surfaces use the neutral fill (#F7F6FB) to separate without hard borders, keeping the page calm and uncluttered. The composition favors order and legibility over decoration — the look of a platform whose job is to make merchants feel secure.
88
+
89
+ ## 6. Depth & Elevation
90
+
91
+ Depth is handled with restraint. Rather than heavy shadows, separation comes from color and fill: the neutral #F7F6FB surfaces lift gently off the pure-white ground, and the saturated navy and coral buttons stand forward through contrast alone. The generous 16px corner radius on primary actions softens the interface and signals approachability, while the tighter 3px radius on the neutral button reads as a more utilitarian, grounded surface. The overall sense of elevation is flat and modern, leaning on contrast and rounding instead of literal shadow stacking.
92
+
93
+ ## 7. Do's and Don'ts
94
+
95
+ ### Do
96
+ - Use navy #061C3D as the structural backbone — text, headings, and the primary button.
97
+ - Keep coral #E85040 rare, reserved for the single most important action.
98
+ - Set type in Noto Sans TC with Helvetica fallback; body at 16px.
99
+ - Give primary actions the generous 16px radius for an approachable, tappable feel.
100
+ - Lift secondary surfaces with the soft #F7F6FB neutral fill instead of hard borders.
101
+
102
+ ### Don't
103
+ - Spread coral #E85040 across many elements — it loses its decisive force.
104
+ - Put navy text on navy fill or otherwise compromise the navy/white contrast.
105
+ - Mix the red emphasis #CB200E into general body copy; keep it for emphasis.
106
+ - Invent ornament or heavy shadows — the brand reads engineered and calm.
107
+
108
+ ## 8. Responsive Behavior
109
+
110
+ The brand's button system is sized for touch and scale: a 48px-tall primary button and 48px neutral button give comfortable tap targets, while the 40px coral CTA reads as a slightly more compact accent. With a 16px body size and large 44px hero headings, the hierarchy holds up from desktop down to mobile merchant views. The white ground and soft neutral fills keep content legible across viewport sizes without relying on layout-specific decoration. (Specific breakpoint values are not provided in the source; size and contrast carry the responsive behavior.)
111
+
112
+ ## 9. Agent Prompt Guide
113
+
114
+ When generating UI in the 91APP style, instruct the agent: build on a white ground (#FFFFFF) with deep navy (#061C3D) as the structural color for body text, headings, and the primary button. Make the primary button navy with white text, 16px radius, 48px height, 16px/600 type. Reserve a single coral (#E85040) action accent — white text, 16px radius, 40px height, 16px/500 — for the most decisive call-to-action only. For secondary actions, use the neutral fill #F7F6FB with navy text, 3px radius, 48px height, 16px/600. Set hero headings at 44px/700 in navy. Use Noto Sans TC (Helvetica fallback), 16px body. Keep the feel calm, engineered, and trustworthy — retail infrastructure, not decoration. Use red emphasis #CB200E only for emphasized text.
115
+
116
+ ## 10. Voice & Tone
117
+
118
+ The voice is that of trustworthy retail infrastructure — confident, clear, and B2B-grade. It speaks to merchants who are betting their storefronts on the platform, so it favors steadiness and competence over hype. Like the navy-dominant palette, the tone is structural and dependable, with energy reserved for the moments that matter. It is professional Traditional-Chinese-first, addressing a Taiwanese commerce audience directly and practically.
119
+
120
+ ## 11. Brand Narrative
121
+
122
+ 91APP is Taiwan's leading omnichannel retail-commerce SaaS, built around OMO — online-merge-offline. Its visual identity tells that story: a deep-navy structural brand conveys the reliability of infrastructure merchants depend on, while a coral-red action accent on a clean white ground signals the decisive moments of commerce. The Traditional-Chinese Noto Sans typography and generously rounded primary buttons round out a brand that reads as confident, approachable retail infrastructure — serious where it counts, welcoming at the point of action.
123
+
124
+ ## 12. Principles
125
+
126
+ - Structure first: navy carries text, headings, and the primary action — the brand's backbone.
127
+ - One point of energy: coral is the lone action accent, kept rare to stay decisive.
128
+ - Clarity over ornament: white ground, legible 16px Noto Sans TC, no unnecessary decoration.
129
+ - Approachable touch points: generous 16px rounding on primary actions invites interaction.
130
+ - Trust through restraint: soft neutral fills and flat depth keep the platform calm and credible.
131
+
132
+ ## 13. Personas
133
+
134
+ - **The Taiwanese merchant** — runs an omnichannel store and needs a platform that feels dependable; reassured by the navy structural brand and clear, legible interface.
135
+ - **The operations lead** — manages day-to-day commerce flows and values the unambiguous hierarchy where coral marks exactly where to act.
136
+ - **The decision-maker evaluating SaaS** — reads the engineered, confident aesthetic as a signal of trustworthy retail infrastructure worth staking a business on.
137
+
138
+ ## 14. States
139
+
140
+ State styling is expressed through the documented button variants. The primary navy button (#061C3D background, white text, 16px radius, 48px height, 16px/600) is the default decisive action. The coral CTA (#E85040 background, white text, 16px radius, 40px height, 16px/500) marks the single high-energy action state. The neutral button (#F7F6FB fill, navy text, 3px radius, 48px height, 16px/600) covers the calm secondary state. Red emphasis (#CB200E) signals an emphasized or highlighted text state. (Hover, pressed, focus, and disabled values are not provided in the source; derive them by darkening or lightening these base colors while preserving the navy/coral roles.)
141
+
142
+ ## 15. Motion & Easing
143
+
144
+ Specific motion and easing values are not provided in the source. In keeping with the brand's engineered, trustworthy character, any motion should be restrained and purposeful — calm transitions that reinforce stability rather than draw attention to themselves, with the coral action accent reserved for the moments worth animating.
145
+
146
+ ---
147
+ **Verified:** 2026-06-01
148
+ **Tier 1 sources:** https://www.91app.com (live DOM — body text, primary/coral/neutral buttons, hero heading, all hex/px values), https://91app.tech (brand-owned regional engineering/tech source), https://github.com/91APP (brand-owned regional org)
149
+ **Tier 2 sources:** getdesign.md/91app — NOT LISTED. refero — not listed. Note: navy #061C3D is structural/dominant; coral #E85040 is the action accent (brand-color choice: navy chosen as primary as it carries text+headings+primary button).
150
+ **Conflicts unresolved:** none
151
+ **Proof:** see .verification.md (## Proof block)
@@ -154,8 +154,22 @@ Airtable's website is a clean, enterprise-friendly platform that communicates "s
154
154
  - Soft ambient: `rgba(15,48,106,0.05) 0px 0px 20px`
155
155
 
156
156
  ## 7. Do's and Don'ts
157
- ### Do: Use Airtable Blue for CTAs, Haas with positive tracking, 12px radius buttons
158
- ### Don't: Skip positive letter-spacing, use heavy shadows
157
+
158
+ ### Do
159
+ - Use Airtable Blue (`#1b61c9`) only for CTAs and links, set on a white (`#ffffff`) canvas with Deep Navy (`#181d26`) text
160
+ - Set the Haas / Haas Groot Disp font system with positive letter-spacing on body and small text (0.08px–0.28px) — it is Airtable's typographic signature
161
+ - Apply the radius scale by component size: 12px buttons, 16px standard cards, 24px sections, 32px large containers
162
+ - Lift primary buttons with the signature blue-tinted multi-layer shadow (`rgba(45,127,249,0.28) 0px 1px 3px`) so elevation ties back to the brand color
163
+ - Reserve color for user data and keep chrome neutral, signaling 'live work' with the spotlight surface (`rgba(249,252,255,0.97)`) plus subtle `#e0e2e6` borders
164
+ - Name theme variables with the semantic `--theme_*` convention (e.g. `--theme_success-text` for `#006400`) to match Airtable's internal tokens
165
+
166
+ ### Don't
167
+ - Skip the positive letter-spacing on body and caption text — it is what gives Airtable its Swiss-precision feel
168
+ - Lean on heavy gray backgrounds or dark drop shadows for depth instead of the spotlight surface and the soft ambient `rgba(15,48,106,0.05) 0px 0px 20px` glow
169
+ - Spread Airtable Blue (`#1b61c9`) across chrome or large backgrounds — color belongs to user data, not the UI frame
170
+ - Reach for the deliberately sharp 2px radius outside its cookie-consent context where buttons and cards use 12px and up
171
+ - Add bouncy spring motion or exceed the 150–400ms timing tokens, and respect `prefers-reduced-motion` by dropping the spotlight fade-in
172
+ - Use forbidden voice like 'revolutionary database', 'no-code magic', or emoji in product chrome
159
173
 
160
174
  ## 8. Responsive Behavior
161
175
  Breakpoints: 425–1664px (23 breakpoints)
@@ -0,0 +1,170 @@
1
+ ---
2
+ id: bithumb
3
+ name: "Bithumb"
4
+ country: KR
5
+ category: fintech
6
+ homepage: "https://www.bithumb.com"
7
+ primary_color: "#1C2028"
8
+ logo:
9
+ type: favicon
10
+ slug: "https://www.google.com/s2/favicons?domain=bithumb.com&sz=128"
11
+ verified: "2026-06-01"
12
+ omd: "0.1"
13
+ ---
14
+
15
+ # Design System Inspiration of Bithumb
16
+
17
+ ## 1. Visual Theme & Atmosphere
18
+
19
+ Bithumb wears the aesthetic of money taken seriously: a dark, premium, data-dense trading surface built on a near-black structural base of #1C2028, warmed in carefully chosen places by a bronze/brown accent (#543E35) that signals a deliberate, recent rebrand. As Korea's No.1 crypto-asset exchange, the interface earns trust not through decoration but through density — packed grids of numbers, tight controls, and micro-labels that never waste a pixel. The palette is restrained and structural, letting the trading colors do the emotional work: red (#E15241) reads as price up and blue (#4880EE) as price down, following the Korea-market convention rather than the Western one. Everything is signed by the proprietary 'Bithumb Trading Sans' typeface, a brand-owned voice that lends the dense data UI a consistent, money-grade tone. The result feels less like a consumer app and more like a professional terminal: composed, serious, and engineered for people moving real value. Bronze against near-black is the whole mood — warmth held in tension with a structural, almost industrial calm.
20
+
21
+ ## 2. Color Palette & Roles
22
+
23
+ - **Structural near-black** `#1C2028` — the primary structural color; used for the signup button surface and active filter chips. The anchor of the entire dark UI.
24
+ - **Warm bronze/brown** `#543E35` — the rebrand accent; carries the exchange CTA surface, the single warmest gesture in the chrome.
25
+ - **Brown text** `#4F3327` — used as the text color on outline CTAs, echoing the bronze accent in type.
26
+ - **Neutral border** `#B6ABA1` — the 1px border on outline CTAs; a warm, low-contrast separator.
27
+ - **Trading red (price up)** `#E15241` — Korea convention: rising prices. An emotional, directional color, not a structural one.
28
+ - **Trading blue (price down)** `#4880EE` — Korea convention: falling prices. The counterpart to trading red.
29
+ - **Muted gray** `#707882` — inactive chip text and secondary labels.
30
+ - **Muted gray** `#93989E` — secondary/tertiary muted text.
31
+ - **Off-white surface text** `#F8F9FA` — text on the bronze exchange CTA.
32
+ - **Pure white** `#FFFFFF` — text on the structural near-black signup button and active chips.
33
+
34
+ Roles in short: #1C2028 is structure, #543E35 is the warm call-to-action, #E15241 / #4880EE are reserved exclusively for directional trading signal, and the grays (#707882, #93989E) plus the neutral border #B6ABA1 carry everything quiet.
35
+
36
+ ## 3. Typography Rules
37
+
38
+ The system is set in the proprietary **'Bithumb Trading Sans'** typeface — brand-owned, and a core part of the rebrand's signature. This is a dense data UI, so the type scale stays tight and functional:
39
+
40
+ - **Body:** 14px — the workhorse for readable content in a packed layout.
41
+ - **Controls:** 13px — buttons, chips, and interactive labels sit one step down from body.
42
+ - **Micro-labels:** 12px — the smallest tier, for dense data annotations that must coexist with numbers.
43
+
44
+ Weights observed in components run from 500 (medium, on CTAs and the signup button) up to 600 (semibold, on active filter chips), giving emphasis without resorting to a large size jump. The discipline is clear: hold the scale narrow, let weight and color — not size — create hierarchy in a money-grade, data-first interface.
45
+
46
+ ## 4. Component Stylings
47
+
48
+ ### Primary Button
49
+
50
+ **Signup (structural)**
51
+ - Background: #1C2028
52
+ - Text: #FFFFFF
53
+ - Border: none
54
+ - Radius: 4px
55
+ - Height: 32px
56
+ - Font: 13px / 500
57
+ - Use: account signup / primary structural action in the top chrome
58
+
59
+ ### Exchange CTA
60
+
61
+ **Filled (bronze)**
62
+ - Background: #543E35
63
+ - Text: #F8F9FA
64
+ - Border: none
65
+ - Radius: 4px
66
+ - Height: 56px
67
+ - Font: 18px / 500
68
+ - Use: the primary exchange call-to-action — the single warmest, most prominent action
69
+
70
+ **Outline**
71
+ - Background: transparent
72
+ - Text: #4F3327
73
+ - Border: 1px solid #B6ABA1
74
+ - Radius: 4px
75
+ - Height: 56px
76
+ - Use: secondary action paired alongside the filled bronze CTA
77
+
78
+ ### Filter Chip
79
+
80
+ **Active**
81
+ - Background: #1C2028
82
+ - Text: #FFFFFF
83
+ - Border: none
84
+ - Radius: 8px
85
+ - Height: 36px
86
+ - Font: 13px / 600
87
+ - Use: the currently selected filter in a chip row
88
+
89
+ **Inactive**
90
+ - Background: transparent
91
+ - Text: #707882
92
+ - Border: 1px solid rgba(28,32,40,0.1)
93
+ - Radius: 8px
94
+ - Use: unselected filter options in the same chip row
95
+
96
+ ## 5. Layout Principles
97
+
98
+ Bithumb's layout philosophy is density done deliberately: a data-dense trading aesthetic where information packs tightly and controls sit compact (13px control type, 12px micro-labels). The structural near-black base (#1C2028) frames the content rather than competing with it, so dense grids of numbers and chips can coexist without visual fatigue. Two radius scales signal two layout intents — 4px on buttons and CTAs for crisp, terminal-like edges, and 8px on filter chips for a slightly softer, more tappable control row. Control heights are tiered to importance: 32px for the compact signup button, 36px for filter chips, and a generous 56px for the primary exchange CTAs that deserve weight. The overall principle is restraint in surface and richness in data — let the structure recede so the numbers and the directional trading colors lead.
99
+
100
+ ## 6. Depth & Elevation
101
+
102
+ The aesthetic is structural and flat rather than shadow-heavy: depth comes primarily from color layering against the near-black #1C2028 base and from borders, not from elevation. The outline CTA uses a 1px solid #B6ABA1 border, and inactive chips use a 1px solid rgba(28,32,40,0.1) border — these thin strokes do the separating work that shadows would in a lighter UI. Filled surfaces (the bronze #543E35 CTA, the structural #1C2028 signup button and active chips) establish foreground purely through contrast and warmth against the dark ground. No specific shadow blur, spread, or elevation token was captured in the inspection, so elevation should be treated qualitatively: lean on contrast and 1px borders, not drop shadows.
103
+
104
+ ## 7. Do's and Don'ts
105
+
106
+ ### Do
107
+ - Use #1C2028 as the structural anchor for primary surfaces and active states.
108
+ - Reserve #543E35 bronze for the single most important call-to-action.
109
+ - Keep red (#E15241) strictly for price-up and blue (#4880EE) strictly for price-down — Korea convention, never swapped.
110
+ - Hold the type scale tight (14 / 13 / 12px) and use weight (500–600), not size, for emphasis.
111
+ - Use 4px radius on buttons/CTAs and 8px on filter chips, consistently.
112
+
113
+ ### Don't
114
+ - Apply the Western convention (green-up / red-down) — Bithumb's market reads red as up.
115
+ - Substitute a generic font; the proprietary 'Bithumb Trading Sans' is part of the brand signature.
116
+ - Dilute the bronze accent by spreading #543E35 across many surfaces — its power is its scarcity.
117
+ - Introduce heavy drop shadows; depth here is structural (color + 1px borders).
118
+ - Loosen the data density into airy spacing — the money-grade seriousness depends on it.
119
+
120
+ ## 8. Responsive Behavior
121
+
122
+ No discrete breakpoint pixel values or responsive grid tokens were captured in the live inspection, so responsive behavior is described qualitatively. The system is built around compact, fixed-height controls — a 32px signup button, 36px filter chips, 56px exchange CTAs — which translate cleanly to touch targets, with the 56px CTAs comfortably finger-sized and the 36px chips reading as a scrollable control row. The dense data orientation (13px controls, 12px micro-labels) implies that on narrower viewports the trading grids would reflow into stacked, scrollable panels rather than shrinking type below the legibility floor. Treat the chip row as horizontally scrollable on small screens, and keep the bronze CTA full-width and prominent where space contracts. Until real breakpoints are measured, preserve the height tiers and radius scales rather than inventing new ones.
123
+
124
+ ## 9. Agent Prompt Guide
125
+
126
+ When generating UI in Bithumb's style, prompt for: a dark, data-dense trading interface on a structural near-black base (#1C2028); a single warm bronze (#543E35) primary CTA; directional trading colors used only for price signal (red #E15241 = up, blue #4880EE = down, Korea convention); the proprietary 'Bithumb Trading Sans' (or a tight, neutral sans as stand-in); a compressed type scale (body 14px, controls 13px, micro-labels 12px) with emphasis via weight 500–600. Specify radii explicitly: 4px on buttons and CTAs, 8px on filter chips. Specify heights: 32px signup button, 36px chips, 56px exchange CTAs. Ask for structural depth — color layering and 1px borders (#B6ABA1 for outlines, rgba(28,32,40,0.1) for inactive chips) — not drop shadows. The brief in one line: "serious, dense, money-grade — near-black structure, one bronze accent, directional trading color, nothing decorative."
127
+
128
+ ## 10. Voice & Tone
129
+
130
+ Bithumb's voice is serious, dense, and money-grade — the register of a professional trading floor, not a playful consumer app. It communicates with precision and economy, trusting the user to handle real numbers and real risk. Microcopy should be direct and unembellished, prioritizing clarity of state (price up / price down, active / inactive) over personality. The tone is confident and composed: it conveys that this is Korea's No.1 exchange without saying so loudly, letting the density and discipline of the interface make the claim.
131
+
132
+ ## 11. Brand Narrative
133
+
134
+ Bithumb is Korea's No.1 crypto-asset exchange, and its recent rebrand tells the story of an institution maturing into a premium, professional identity. The visual narrative pairs a near-black structural base with a deliberate bronze/brown accent (#543E35) — warmth introduced into an otherwise austere, money-grade environment, signaling both gravity and craft. The proprietary 'Bithumb Trading Sans' typeface makes the brand literally speak in its own voice, a mark of an organization investing in a coherent, owned identity. Korea-convention trading colors (red up, blue down) root the brand firmly in its home market and its users' expectations. The throughline: seriousness about money, expressed as density, restraint, and a single warm accent that makes the dark feel intentional rather than cold.
135
+
136
+ ## 12. Principles
137
+
138
+ - **Density with discipline** — pack information tightly, but keep the scale and palette restrained so it never reads as cluttered.
139
+ - **One warm accent** — let bronze (#543E35) carry the primary action; scarcity is what gives it power.
140
+ - **Color is signal** — reserve red/blue strictly for directional price meaning; structure stays in near-black and gray.
141
+ - **Owned voice** — the proprietary 'Bithumb Trading Sans' is non-negotiable to the identity.
142
+ - **Structural depth** — separate with contrast and 1px borders, not shadows.
143
+ - **Money-grade seriousness** — every choice should reinforce trust and gravity, not delight.
144
+
145
+ ## 13. Personas
146
+
147
+ - **The active trader** — moves real value, expects a dense terminal where price-up (#E15241) and price-down (#4880EE) read instantly. Values speed, precision, and zero ambiguity over decoration.
148
+ - **The serious newcomer** — drawn by Bithumb's No.1 standing; needs the prominent bronze exchange CTA (#543E35, 56px) and clear signup path (#1C2028 button) to feel guided without the interface feeling consumer-soft.
149
+ - **The Korea-market user** — reads red as up and blue as down by convention; any deviation would break trust instantly. The directional colors are designed for exactly this reader.
150
+
151
+ ## 14. States
152
+
153
+ - **Active (filter chip):** background #1C2028, text #FFFFFF, radius 8px, height 36px, font 13px/600 — high-contrast, structural, clearly selected.
154
+ - **Inactive (filter chip):** background transparent, text #707882 (muted gray), border 1px solid rgba(28,32,40,0.1), radius 8px — recessive and quiet against the dark ground.
155
+ - **Primary action (exchange CTA):** background #543E35, text #F8F9FA, radius 4px, height 56px, font 18px/500 — the warmest, most prominent state.
156
+ - **Secondary action (outline CTA):** background transparent, text #4F3327, border 1px solid #B6ABA1, radius 4px, height 56px — paired but subordinate to the filled bronze.
157
+ - **Price up:** trading red #E15241 (Korea convention).
158
+ - **Price down:** trading blue #4880EE (Korea convention).
159
+ - Hover, pressed, focus, and disabled states were not captured in the live inspection; treat them qualitatively (likely subtle contrast shifts against #1C2028) rather than inventing values.
160
+
161
+ ## 15. Motion & Easing
162
+
163
+ No motion durations, easing curves, or transition tokens were captured in the live inspection. In keeping with the brand's serious, money-grade, data-dense character, motion should be treated qualitatively: minimal, fast, and functional — the kind of restrained transition appropriate to a professional trading terminal, where responsiveness and clarity matter more than expressive animation. State changes (chip active/inactive, CTA press) should feel immediate and composed. Until real timing values are measured, do not invent durations or curves; default to crisp, low-key transitions that respect the density of the interface.
164
+
165
+ ---
166
+ **Verified:** 2026-06-01
167
+ **Tier 1 sources:** https://www.bithumb.com (live primary site, brand-owned), https://apidocs.bithumb.com (official API docs, brand-owned), https://www.bithumbcorp.com (corporate site, brand-owned), https://github.com/bithumb (official GitHub org, brand-owned)
168
+ **Tier 2 sources:** getdesign.md/bithumb — NOT LISTED. refero — not listed. Note: primary_color #1C2028 is the measured dominant structural color (brand logotype orange not present in the rendered web chrome); the rebrand pairs near-black with a bronze accent #543E35.
169
+ **Conflicts unresolved:** none
170
+ **Proof:** see .verification.md (## Proof block)
@@ -262,6 +262,25 @@ Do NOT use this reference for:
262
262
  - Editorial commerce where the photo deserves a 4:5 or 1:1 art-directed frame
263
263
  - B2B SaaS where information density and table-rendering trump scrollable feeds
264
264
 
265
+
266
+ ## 13. Do's and Don'ts
267
+
268
+ ### Do
269
+ - Reserve Bunjang Red (#d80c18, --color-primary) for the single highest-intent CTA per surface — the only place red appears
270
+ - Build the product card on the 81:100 portrait thumbnail (--bun-ui-aspect-ratio-vertical: 81 / 100) with a 6px radius and #f6f6f6 placeholder bg
271
+ - Signal depth with 1px #e5e5e5 (gray-100) borders and #f6f6f6 (gray-50) tints instead of elevation
272
+ - Set all UI text in Pretendard Variable using only the 400/500/700 weights, letting 16px/700 price outweigh 14px/500 gray-600 (#666) titles
273
+ - Color-code service chips by their dedicated ladders — indigo --color-safe-* for 안전결제, warm-amber --color-care-* for 감정완료, info-blue --color-blue-* for 내폰시세
274
+ - Outline the heart (찜) button with a 10% black inner glow so its white stroke stays legible on any seller photo, flipping to solid --color-red-500 when tapped
275
+
276
+ ### Don't
277
+ - Spend red (#d80c18) on secondary or tertiary actions — it drains the single primary it is meant to mark
278
+ - Use square or square-ish thumbnails that break the 81:100 vertical convention and make phones and sneakers look stunted
279
+ - Add box-shadow to any card or button — no sampled element carries elevation, and it contradicts the borders-and-tints depth language
280
+ - Mix in Noto Sans KR, Apple SD Gothic Neo, or any display face — Pretendard Variable carries 100% of UI text
281
+ - Manufacture urgency with copy like '마지막 1개!' or '지금 바로!' — the platform's listing depth is the urgency, and only price typography earns emphasis
282
+ - Reuse partner login colors (kakao #fae100, naver #03cf5d, etc.) or interrupt with a modal where a z-index 1500 snackbar would do
283
+
265
284
  ---
266
285
 
267
286
  ## Verification footer