oh-my-design-cli 1.6.0 → 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.
- package/AGENTS.md +1 -1
- package/README.md +37 -0
- package/data/reference-fingerprints.json +380 -2
- package/dist/bin/oh-my-design.js +1 -1
- package/dist/{install-skills-IETT2TBJ.js → install-skills-UKEVE3KT.js} +11 -9
- package/dist/{install-skills-IETT2TBJ.js.map → install-skills-UKEVE3KT.js.map} +1 -1
- package/package.json +8 -3
- package/scripts/postinstall.cjs +6 -6
- package/web/references/91app/DESIGN.md +151 -0
- package/web/references/airtable/DESIGN.md +16 -2
- package/web/references/bithumb/DESIGN.md +170 -0
- package/web/references/bunjang/DESIGN.md +19 -0
- package/web/references/cakeresume/DESIGN.md +162 -0
- package/web/references/catchtable/DESIGN.md +19 -0
- package/web/references/classum/DESIGN.md +19 -0
- package/web/references/dabang/DESIGN.md +19 -0
- package/web/references/dji/DESIGN.md +0 -1
- package/web/references/fastcampus/DESIGN.md +19 -0
- package/web/references/flex/DESIGN.md +19 -0
- package/web/references/gmarket/DESIGN.md +19 -0
- package/web/references/gogolook/DESIGN.md +126 -0
- package/web/references/hahow/DESIGN.md +158 -0
- package/web/references/hyundaicard/DESIGN.md +172 -0
- package/web/references/inflearn/DESIGN.md +19 -0
- package/web/references/kbank/DESIGN.md +18 -0
- package/web/references/kdan/DESIGN.md +160 -0
- package/web/references/kkbox/DESIGN.md +114 -0
- package/web/references/kream/DESIGN.md +18 -0
- package/web/references/lunit/DESIGN.md +19 -0
- package/web/references/melon/DESIGN.md +153 -0
- package/web/references/nhncloud/DESIGN.md +174 -0
- package/web/references/oliveyoung/DESIGN.md +19 -0
- package/web/references/rayark/DESIGN.md +132 -0
- package/web/references/sendbird/DESIGN.md +285 -0
- package/web/references/socar/DESIGN.md +18 -0
- package/web/references/toss-securities/DESIGN.md +19 -0
- package/web/references/tving/DESIGN.md +18 -0
- package/web/references/upbit/DESIGN.md +19 -0
- package/web/references/upstage/DESIGN.md +18 -0
- package/web/references/velog/DESIGN.md +168 -0
- package/web/references/wadiz/DESIGN.md +19 -0
- package/web/references/webflow/DESIGN.md +16 -2
- package/web/references/yeogiotte/DESIGN.md +19 -0
- package/data/architecture-proposals/2026-05-13-thin-install-fresh-fetch.md +0 -189
- package/data/issues/2026-05-13-multi-surface-schema-rfc.md +0 -67
- package/data/reference-audits/2026-05-13-kr10.md +0 -132
- package/data/reference-audits/2026-05-14-kr10.md +0 -72
- package/data/reference-audits/2026-05-15-kr10.md +0 -124
- package/data/research/2026-05-18-agent-landscape.md +0 -69
- package/data/research/2026-05-18-kr-style-presets.md +0 -572
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: "velog"
|
|
3
|
+
name: "velog"
|
|
4
|
+
country: KR
|
|
5
|
+
category: developer-tools
|
|
6
|
+
homepage: "https://velog.io"
|
|
7
|
+
primary_color: "#12B886"
|
|
8
|
+
logo:
|
|
9
|
+
type: favicon
|
|
10
|
+
slug: "https://www.google.com/s2/favicons?domain=velog.io&sz=128"
|
|
11
|
+
verified: "2026-06-01"
|
|
12
|
+
omd: "0.1"
|
|
13
|
+
ds:
|
|
14
|
+
name: velog (open source)
|
|
15
|
+
url: "https://github.com/velog-io/velog"
|
|
16
|
+
type: system
|
|
17
|
+
description: velog's production frontend is fully open-source (MIT); its design tokens live in src/lib/styles (themes.ts + palette.ts), built on the Open Color palette.
|
|
18
|
+
---
|
|
19
|
+
# Design System Inspiration of velog
|
|
20
|
+
|
|
21
|
+
## 1. Visual Theme & Atmosphere
|
|
22
|
+
|
|
23
|
+
velog is a Korean developer-blogging platform built by velopert (Minjun Kim), and its surface is unmistakably reading-first: calm, minimal, and content-forward, with prose given room to breathe rather than competing with chrome. The palette is literally the Open Color system — a clean teal brand scale running from the near-white teal0 #F3FFFB up to the deep teal9 #087F5B, paired with a full neutral gray scale from gray0 #F8F9FA to gray9 #212529. The atmosphere is editorial and quiet: a soft gray page background (#F8F9FA) holds white content surfaces, dark near-black text (#212529) carries the writing, and the brand teal (#12B886) appears sparingly as the signal color for action. Nothing shouts; the teal is a confident accent reserved for the write button and primary moments rather than a wash across the page. The result feels engineered for long-form technical reading — high legibility, generous neutrality, and a single decisive brand hue that tells you exactly where to click.
|
|
24
|
+
|
|
25
|
+
## 2. Color Palette & Roles
|
|
26
|
+
velog's color system is the Open Color palette, surfaced through velog-client's `palette.ts` (raw scales) and `themes.ts` (semantic `themedPalette` tokens). The teal scale is the brand spine and the gray scale carries structure and text; red appears only for destructive intent.
|
|
27
|
+
|
|
28
|
+
**Brand / Teal scale**
|
|
29
|
+
- teal0: `#F3FFFB`
|
|
30
|
+
- teal1: `#C3FAE8`
|
|
31
|
+
- teal2: `#96F2D7`
|
|
32
|
+
- teal3: `#63E6BE`
|
|
33
|
+
- teal4: `#38D9A9`
|
|
34
|
+
- teal5: `#20C997` (themedPalette primary2)
|
|
35
|
+
- teal6: `#12B886` (BRAND / primary — themedPalette primary1)
|
|
36
|
+
- teal7: `#0CA678`
|
|
37
|
+
- teal8: `#099268`
|
|
38
|
+
- teal9: `#087F5B`
|
|
39
|
+
|
|
40
|
+
**Neutral / Gray scale**
|
|
41
|
+
- gray0: `#F8F9FA` (page background — bg_page1)
|
|
42
|
+
- gray1: `#F1F3F5`
|
|
43
|
+
- gray2: `#E9ECEF`
|
|
44
|
+
- gray3: `#DEE2E6`
|
|
45
|
+
- gray4: `#CED4DA`
|
|
46
|
+
- gray5: `#ADB5BD`
|
|
47
|
+
- gray6: `#868E96`
|
|
48
|
+
- gray7: `#495057`
|
|
49
|
+
- gray8: `#343A40`
|
|
50
|
+
- gray9: `#212529` (primary text — text1)
|
|
51
|
+
|
|
52
|
+
**Semantic roles (themedPalette)**
|
|
53
|
+
- Primary: `#12B886` (primary1)
|
|
54
|
+
- Primary alt: `#20C997` (primary2)
|
|
55
|
+
- Destructive: `#FF6B6B` (destructive1 / red5)
|
|
56
|
+
- Text: `#212529` (text1)
|
|
57
|
+
- Page background: `#F8F9FA` (bg_page1)
|
|
58
|
+
|
|
59
|
+
Role guidance: teal6 #12B886 is the single primary-action color (the write button); the gray scale does all structural and typographic work (page #F8F9FA, text #212529); red5 #FF6B6B is reserved strictly for destructive actions. The teal is an accent, not a fill — use it where action lives, not as background.
|
|
60
|
+
|
|
61
|
+
## 3. Typography Rules
|
|
62
|
+
velog uses a native system font stack rather than a custom typeface, which keeps the reading surface fast and OS-consistent. Body copy renders through the system UI stack (-apple-system / system-ui) at a 16px base. The primary text color is gray9 #212529 — a near-black that delivers strong contrast against the gray0 #F8F9FA page and white content surfaces without the harshness of pure #000.
|
|
63
|
+
|
|
64
|
+
- Font family: system stack (-apple-system / system-ui)
|
|
65
|
+
- Body size: 16px
|
|
66
|
+
- Primary text color: #212529 (gray9 / text1)
|
|
67
|
+
|
|
68
|
+
The intent is editorial neutrality: let the writer's content set the tone while the system font and a single dark text color hold legibility steady across platforms.
|
|
69
|
+
|
|
70
|
+
## 4. Component Stylings
|
|
71
|
+
|
|
72
|
+
### Login button (header)
|
|
73
|
+
|
|
74
|
+
**Default**
|
|
75
|
+
- Background: #212529
|
|
76
|
+
- Text: #FFFFFF
|
|
77
|
+
- Border: none
|
|
78
|
+
- Radius: 16px
|
|
79
|
+
- Height: 32px
|
|
80
|
+
- Font: 16px / 700
|
|
81
|
+
- Use: dark pill in the top-right of the header for sign-in / sign-up entry
|
|
82
|
+
|
|
83
|
+
### Write button (primary action)
|
|
84
|
+
|
|
85
|
+
**Default**
|
|
86
|
+
- Background: #12B886
|
|
87
|
+
- Text: #FFFFFF
|
|
88
|
+
- Border: none
|
|
89
|
+
- Use: the brand teal primary-action button (buttonColorMap) — the single decisive call-to-action for composing a post
|
|
90
|
+
|
|
91
|
+
### Header bar
|
|
92
|
+
|
|
93
|
+
**Default**
|
|
94
|
+
- Background: #FFFFFF
|
|
95
|
+
- Text: #212529
|
|
96
|
+
- Font: 16px (system stack)
|
|
97
|
+
- Use: top navigation surface sitting on the gray0 page, holding brand and the dark login pill
|
|
98
|
+
|
|
99
|
+
### Page surface
|
|
100
|
+
|
|
101
|
+
**Default**
|
|
102
|
+
- Background: #F8F9FA
|
|
103
|
+
- Text: #212529
|
|
104
|
+
- Font: 16px (system stack)
|
|
105
|
+
- Use: the soft-gray reading canvas (bg_page1) that frames white content blocks
|
|
106
|
+
|
|
107
|
+
## 5. Layout Principles
|
|
108
|
+
velog is structured as a reading surface first. A soft gray page background (gray0 #F8F9FA) acts as the canvas, white surfaces (the header #FFFFFF and content blocks) sit on top, and near-black text (#212529) carries the writing. The layout logic is qualitative and editorial: maximize legibility and whitespace, keep chrome minimal, and let long-form technical content lead. Action is concentrated rather than scattered — the dark login pill anchors the header's top-right, and the teal write button is the single bright signal in an otherwise neutral field.
|
|
109
|
+
|
|
110
|
+
## 6. Depth & Elevation
|
|
111
|
+
velog's depth language is restrained and flat — elevation comes from value contrast, not heavy shadow. The gray0 #F8F9FA page sits one step back from the white (#FFFFFF) header and content surfaces, so the layering reads through tone alone. The dark login pill (#212529, radius 16px) is the heaviest visual object in the header, gaining presence from its near-black fill and rounded form rather than from a drop shadow. The overall effect is calm and tactile-but-quiet: surfaces are distinguished by the gray-to-white step, and the teal accent provides the only chromatic lift.
|
|
112
|
+
|
|
113
|
+
## 7. Do's and Don'ts
|
|
114
|
+
|
|
115
|
+
### Do
|
|
116
|
+
- Reserve teal #12B886 for the primary action (the write button) — it is a signal, not a background wash.
|
|
117
|
+
- Use the gray scale for all structure and text: page #F8F9FA, surfaces #FFFFFF, text #212529.
|
|
118
|
+
- Keep the dark login pill at radius 16px and height 32px as documented.
|
|
119
|
+
- Default to the system font stack (-apple-system / system-ui) at 16px for body.
|
|
120
|
+
|
|
121
|
+
### Don't
|
|
122
|
+
- Use red — #FF6B6B (destructive1) is reserved strictly for destructive actions.
|
|
123
|
+
- Introduce pure black for text; the system's near-black is #212529.
|
|
124
|
+
- Spread teal across large fills; it loses its role as the single action color.
|
|
125
|
+
- Add heavy shadows — depth here is carried by the gray-to-white value step.
|
|
126
|
+
|
|
127
|
+
## 8. Responsive Behavior
|
|
128
|
+
The blob does not carry measured breakpoint, grid, or container values for velog, so responsive behavior is described qualitatively rather than with invented numbers. The surface is content-forward and reading-first, which favors a single legible column of prose that stays comfortable across viewport widths. The header holds the brand and the dark login pill (height 32px, radius 16px); the teal write button remains the primary action target at any size. Maintain the gray0 #F8F9FA page background and #FFFFFF surfaces across breakpoints so the editorial value contrast is preserved on both desktop and mobile.
|
|
129
|
+
|
|
130
|
+
## 9. Agent Prompt Guide
|
|
131
|
+
When generating UI in velog's style, instruct the agent: "Build a calm, reading-first developer-blog surface. Use a soft gray page background #F8F9FA (gray0) with white #FFFFFF surfaces and near-black text #212529 (gray9). Use the system font stack (-apple-system / system-ui) at 16px for body. Make teal #12B886 the single primary-action color — apply it only to the write/primary button, never as a large fill. Render the sign-in control as a dark pill: background #212529, white text, border-radius 16px, height 32px, font 16px/700. Reserve #FF6B6B strictly for destructive actions. Keep depth flat: layer surfaces by the gray-to-white value step rather than shadows. Lean on the Open Color teal scale (teal0 #F3FFFB through teal9 #087F5B) and gray scale (gray0 #F8F9FA through gray9 #212529) for any tints or states."
|
|
132
|
+
|
|
133
|
+
## 10. Voice & Tone
|
|
134
|
+
velog's voice is that of a quiet, capable tool that gets out of the writer's way. It is editorial and engineer-minded: plain, precise, and unhurried, trusting the developer's content to lead. There is no marketing flourish in the surface — the tone matches the visual restraint, favoring clarity over persuasion. The single teal accent is the closest thing to an exclamation point, and even that is reserved for the one moment that matters: writing.
|
|
135
|
+
|
|
136
|
+
## 11. Brand Narrative
|
|
137
|
+
velog was created by velopert (Minjun Kim) as a developer-blogging platform for the Korean developer community, and its character flows directly from that origin. The production frontend is fully open-source (MIT), and the design tokens live transparently in `src/lib/styles` — `themes.ts` and `palette.ts` — built on the Open Color palette. That openness is the narrative: velog is a tool by and for developers, where the teal brand and the gray reading surface aren't decoration but the legible, honest scaffolding around technical writing. The brand reads as calm, minimal, and content-forward — a place where the words come first and the interface is just the quiet teal-and-gray frame around them.
|
|
138
|
+
|
|
139
|
+
## 12. Principles
|
|
140
|
+
- Reading-first: legibility and whitespace before chrome; long-form content leads.
|
|
141
|
+
- One signal color: teal #12B886 marks action and nothing else.
|
|
142
|
+
- Neutral structure: the gray scale (#F8F9FA → #212529) carries page, surface, and text.
|
|
143
|
+
- Restraint in red: #FF6B6B is destructive-only.
|
|
144
|
+
- Open and honest: tokens are open-source, built on the Open Color palette.
|
|
145
|
+
- Flat depth: layer by value contrast, not shadow.
|
|
146
|
+
|
|
147
|
+
## 13. Personas
|
|
148
|
+
- The developer-writer: drafting long-form technical posts and wanting an editorial, distraction-free canvas. The system answers with a #F8F9FA reading surface, #212529 text, and a single teal write button as the clear next step.
|
|
149
|
+
- The developer-reader: scanning technical content for signal. The high-contrast near-black text on soft gray, the system font at 16px, and the minimal chrome keep attention on the writing.
|
|
150
|
+
|
|
151
|
+
## 14. States
|
|
152
|
+
- Default / primary action: teal #12B886 (primary1) — the write button.
|
|
153
|
+
- Primary alt / hover-tier tint: #20C997 (primary2 / teal5) is the documented secondary teal step for primary action.
|
|
154
|
+
- Destructive: #FF6B6B (destructive1 / red5), reserved for destructive actions only.
|
|
155
|
+
- Text (resting): #212529 (text1).
|
|
156
|
+
- Page (resting): #F8F9FA (bg_page1).
|
|
157
|
+
|
|
158
|
+
The blob does not carry measured per-state hover/pressed/focus values for individual components, so those interaction states are described by the available token roles rather than invented numbers; lean on the teal and gray scales (e.g., adjacent teal steps such as teal5 #20C997 and teal7 #0CA678) for tint progressions when a state shift is needed.
|
|
159
|
+
|
|
160
|
+
## 15. Motion & Easing
|
|
161
|
+
The blob does not carry measured duration, easing-curve, or transition values for velog, so motion is described qualitatively rather than with invented numbers. In keeping with the calm, reading-first character and flat depth, motion should be minimal and unobtrusive — gentle, quick transitions that never pull focus from the content. The teal accent is the one element worth a subtle emphasis on interaction; everything else should settle quietly so the reading surface stays still.
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
**Verified:** 2026-06-01
|
|
165
|
+
**Tier 1 sources:** https://velog.io (live DOM: page background #F8F9FA, header #FFFFFF, login pill #212529 / white / radius 16px / height 32px / 16px-700, system font 16px, brand teal #12B886 write button), https://github.com/velog-io/velog (open-source DS — tokens in src/lib/styles built on Open Color), https://github.com/velopert/velog-client (source files palette.ts + themes.ts giving the teal/gray/red scales and themedPalette semantic tokens)
|
|
166
|
+
**Tier 2 sources:** getdesign.md/velog — NOT LISTED. refero — not listed (dev-blog SaaS absent).
|
|
167
|
+
**Conflicts unresolved:** none
|
|
168
|
+
**Proof:** see .verification.md (## Proof block)
|
|
@@ -10,6 +10,25 @@ logo:
|
|
|
10
10
|
slug: "https://www.google.com/s2/favicons?domain=wadiz.kr&sz=256"
|
|
11
11
|
verified: "2026-05-14"
|
|
12
12
|
omd: "0.1"
|
|
13
|
+
|
|
14
|
+
## 16. Do's and Don'ts
|
|
15
|
+
|
|
16
|
+
### Do
|
|
17
|
+
- Reserve the brand mint #00c4c4 for interactive moments only — CTA fills, links, checkbox marks, focus outlines, progress fills, and the waffle loader — so mint always reads as a verb
|
|
18
|
+
- Default to 8px radius for buttons, cards, inputs, and modals (the 112-occurrence workhorse), reserving 16px for hero modals and the 16px 16px 0 0 bottom-sheet pattern and 50% for avatars and indicator dots
|
|
19
|
+
- Set body text in Pretendard at 15px / 400 and reserve 700 for funding amounts, percentages, headings, and maker names so the eye bounces between the two near-parity weights
|
|
20
|
+
- Use the Toss-family ink scale (#191f28 heading, #4e5968 muted, #6b7684 subtle, #8b95a1 placeholder) for all text instead of pure black
|
|
21
|
+
- Build funding-state chips from the LabelBadge system using solid / outlined / tint shapes across the mint, yellow #fcc500, blue #4672f9, and red #ff5959 hues (오픈중 = mint solid, 마감임박 = red solid, 인기 = yellow solid)
|
|
22
|
+
- Reach for the tint button (#e6fafa surface, #00c4c4 label, hover to #bef5f5 / #07abae) to carry marketing weight, letting it land before outlined buttons in the page rhythm
|
|
23
|
+
|
|
24
|
+
### Don't
|
|
25
|
+
- Use pure black #000 anywhere — #191f28 is the ink floor of the system
|
|
26
|
+
- Apply mint #00c4c4 onto campaign photography or thumbnails — mint colorizes the chrome that frames the image, with the waffle loader as the single exception
|
|
27
|
+
- Tint drop-shadows with the brand color — shadows stay blue-black (0 6px 6px -1px #0a16461a), never mint, never theatrical
|
|
28
|
+
- Put 12px or larger radius on functional buttons — that consumer-app idiom breaks Wadiz's 8px retail-catalog read
|
|
29
|
+
- Drop skeleton placeholders on the home grid — the thumbnail opacity 0 to 1 fade-in over 0.25s ease-in-out IS the loading state
|
|
30
|
+
- Reach for marketing superlatives like 최고, 최강, or 혁신적, or introduce a serif or 300-weight thin face — the funding-state vocabulary does the selling and Pretendard does the entire type job
|
|
31
|
+
|
|
13
32
|
---
|
|
14
33
|
|
|
15
34
|
# Design System Inspiration of Wadiz
|
|
@@ -165,8 +165,22 @@ Webflow's website is a visually rich, tool-forward platform that communicates "d
|
|
|
165
165
|
## 6. Depth: 5-layer cascading shadow system
|
|
166
166
|
|
|
167
167
|
## 7. Do's and Don'ts
|
|
168
|
-
|
|
169
|
-
|
|
168
|
+
|
|
169
|
+
### Do
|
|
170
|
+
- Set WF Visual Sans Variable as the type face, using weight 600 for headlines (e.g. the 80px / -0.8px Display Hero), 500 for buttons, and 400 for body
|
|
171
|
+
- Reserve Webflow Blue (#146ef5) for the primary CTA, links, and focus borders on a white (#ffffff) canvas with near-black (#080808) text
|
|
172
|
+
- Keep border-radius conservative and sharp on the 2px / 4px / 8px scale — 4px for buttons, inputs, and badges, 8px for standard cards
|
|
173
|
+
- Apply the signature translate(6px) horizontal nudge on button hover, timed with motion-fast (150ms)
|
|
174
|
+
- Deploy purple (#7a3dff), pink (#ed52cb), and green (#00d722) together as a SET for category coding and tier comparison — e.g. a 4px top-edge color bar on feature cards
|
|
175
|
+
- Build depth with the 5-layer cascading shadow stack rather than a single flat drop shadow
|
|
176
|
+
|
|
177
|
+
### Don't
|
|
178
|
+
- Round functional elements beyond 8px, or make them pill-shaped or fully square — radius stays moderate between geometric and rounded
|
|
179
|
+
- Use the secondary accents (purple #7a3dff, pink #ed52cb, green #00d722, etc.) on primary CTAs — those stay Webflow Blue #146ef5
|
|
180
|
+
- Use a single secondary accent in isolation; the purple/pink/green trio only reads correctly when used together as category coding
|
|
181
|
+
- Render the marketing surface in dark mode — keep it bright and airy on white (#ffffff)
|
|
182
|
+
- Substitute another typeface for WF Visual Sans Variable or drift off its 400/500/600 weights
|
|
183
|
+
- Write copy like "Revolutionary no-code" or aggressive Wix-comparison framing — both are forbidden under the agentic-web-platform voice
|
|
170
184
|
|
|
171
185
|
## 8. Responsive: 479px, 768px, 992px
|
|
172
186
|
|
|
@@ -429,6 +429,25 @@ Interpretive claims (editorial, not documented Yeogiotte brand statements):
|
|
|
429
429
|
- The KKR-vs-CVC clarification in §11 — KKR is widely confused in casual press; primary press citations confirm CVC.
|
|
430
430
|
-->
|
|
431
431
|
|
|
432
|
+
|
|
433
|
+
## 16. Do's and Don'ts
|
|
434
|
+
|
|
435
|
+
### Do
|
|
436
|
+
- Reserve Yeogiotte Blue `#1D8BFF` for primary CTAs (hero `검색`, login, `지도 보기`), filter-chip selected-state, and the `반짝특가` promo badge, targeting ≤2 blue elements per viewport in a primary flow
|
|
437
|
+
- Hold to the three-tier radius scale of 8px buttons, 12px cards, and 100px filter pills, with inline badges at the tight 3-6px range
|
|
438
|
+
- Set body and headings in Pretendard at `#222222` rather than pure black, and confine 700 weight to the listing name, final price, promo badges, and hero CTA while keeping location and distance meta at 400-500
|
|
439
|
+
- Render the promo-badge grammar by role: yellow `#FFC83B` rating chip, blue-tint `#E3F0FF`/`#1D8BFF` `반짝특가`, slate `#49627A` `회원가`, and red `#FFEDEA`/`#F94239` coupon-applied price
|
|
440
|
+
- Separate borderless `#ffffff` listing cards by whitespace gap and let the edge-to-edge room photo fill the 12px-radius card top, placing all badges and pricing in the metadata block below
|
|
441
|
+
- Keep hashtag filter chips in user-language Korean (`#감성숙소`, `#연인추천`, `#반려견`) on a single 32px-tall horizontal-scroll row with 1.5px `#E6E6E6` borders as the primary filter surface
|
|
442
|
+
|
|
443
|
+
### Don't
|
|
444
|
+
- Use `#1D8BFF` as a hero background, card fill, divider, or decorative accent, or let three blue surfaces compete on one screen instead of demoting to the `#E3F0FF` tint
|
|
445
|
+
- Style the `회원가` member-rate badge in brand blue, red, or yellow — keep it on slate `#49627A` so it reads as account utility, not a flash deal
|
|
446
|
+
- Reach for an off-system radius like 10px, 14px, or 20px on a button or card when the answer is one of 8px, 12px, or pill
|
|
447
|
+
- Place any promo or coupon badge on top of the room photo or tint the photo with a brand-color filter — badges live below the image and the destination must read true
|
|
448
|
+
- Translate hashtag chips into category-style labels like `Romantic Stays` or `Pet-Friendly`, add extra adjectives to `#감성숙소`, or collapse the filter-chip row behind a primary `Filters` modal
|
|
449
|
+
- Apply spring or overshoot easing to chrome and money surfaces, bold an entire listing card, or stack two same-color-family promo badges on one card
|
|
450
|
+
|
|
432
451
|
---
|
|
433
452
|
|
|
434
453
|
**Verified:** 2026-05-09
|
|
@@ -1,189 +0,0 @@
|
|
|
1
|
-
# Thin install + fresh fetch (WebFetch + MCP)
|
|
2
|
-
|
|
3
|
-
**Status**: proposed — not implemented
|
|
4
|
-
**Author context**: 2026-05-13 conversation, after KR-10 batch
|
|
5
|
-
**Motivation**: npm publish on every brand addition is high-friction and produces stale installs
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## Problem statement
|
|
10
|
-
|
|
11
|
-
Current `oh-my-design-cli` package bundles 88 brand DESIGN.md files (~12MB) and ships them via npm.
|
|
12
|
-
|
|
13
|
-
**Pain points observed**:
|
|
14
|
-
1. Every batch (10 brands) requires `npm publish` to reach end users
|
|
15
|
-
2. Users installed at count N keep seeing N brands forever, even after we add more
|
|
16
|
-
3. Skill descriptions historically baked the count (`"67개 ..."`) — required re-edit per batch, easy to forget (we forgot in the 78 release; observed again at 88)
|
|
17
|
-
4. Bundle grows linearly; cold install time scales
|
|
18
|
-
5. Single brand typo fix = minor version bump + publish
|
|
19
|
-
|
|
20
|
-
**Decided 2026-05-13**: skill descriptions are now **count-agnostic** ("실제 기업 레퍼런스" without a number). Won't regress this kind of bug again. But the fundamental delivery model still needs reform.
|
|
21
|
-
|
|
22
|
-
---
|
|
23
|
-
|
|
24
|
-
## Proposed architecture
|
|
25
|
-
|
|
26
|
-
Hybrid: **thin npm baseline + fresh fetch at runtime**.
|
|
27
|
-
|
|
28
|
-
```
|
|
29
|
-
npm package (thin, ~500KB)
|
|
30
|
-
├─ skills/ (routing logic, count-agnostic)
|
|
31
|
-
├─ data/reference-fingerprints.json (metadata only — id, category, primary, tone keywords)
|
|
32
|
-
├─ data/snapshot-date.txt ("baseline 2026-05-13")
|
|
33
|
-
├─ hooks/, agents/, bin/ (unchanged)
|
|
34
|
-
└─ (no DESIGN.md bundled — fetched at runtime)
|
|
35
|
-
|
|
36
|
-
Runtime (skill execution in user's agent)
|
|
37
|
-
1. Match brand via local fingerprints.json (offline-capable)
|
|
38
|
-
2. Fetch full DESIGN.md from:
|
|
39
|
-
- Primary: WebFetch https://oh-my-design.kr/api/references/<id>/design-md
|
|
40
|
-
- MCP path: omd_get_designmd(id) (if MCP server connected)
|
|
41
|
-
- Fallback: bundled (if shipped — optional Phase 3 decision)
|
|
42
|
-
3. Apply, write to project DESIGN.md
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
**Outcome**:
|
|
46
|
-
- New brand batch → `git push` web + git commit fingerprints; **no npm publish**
|
|
47
|
-
- Users see new brands on next skill call (no reinstall)
|
|
48
|
-
- npm publish frequency drops to "skill behavior changes" (<1/month)
|
|
49
|
-
- Marketing copy (READMEs) still updates count per batch — that's intentional
|
|
50
|
-
|
|
51
|
-
---
|
|
52
|
-
|
|
53
|
-
## Implementation phases
|
|
54
|
-
|
|
55
|
-
### Phase 1 — Backend HTTP endpoint (~1h)
|
|
56
|
-
|
|
57
|
-
`web/src/app/api/references/[id]/design-md/route.ts`:
|
|
58
|
-
```ts
|
|
59
|
-
import { readFileSync } from 'fs';
|
|
60
|
-
import { join } from 'path';
|
|
61
|
-
import { NextRequest, NextResponse } from 'next/server';
|
|
62
|
-
|
|
63
|
-
export async function GET(_req: NextRequest, { params }: { params: { id: string } }) {
|
|
64
|
-
try {
|
|
65
|
-
const md = readFileSync(join(process.cwd(), 'references', params.id, 'DESIGN.md'), 'utf-8');
|
|
66
|
-
return new NextResponse(md, {
|
|
67
|
-
headers: {
|
|
68
|
-
'Content-Type': 'text/markdown; charset=utf-8',
|
|
69
|
-
'Cache-Control': 'public, max-age=300, s-maxage=3600',
|
|
70
|
-
'Access-Control-Allow-Origin': '*',
|
|
71
|
-
'ETag': `"${md.length}-${md.slice(-32)}"`,
|
|
72
|
-
},
|
|
73
|
-
});
|
|
74
|
-
} catch {
|
|
75
|
-
return NextResponse.json({ error: 'not found' }, { status: 404 });
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
Smoke test: `curl https://oh-my-design.kr/api/references/kakaopay/design-md | head -20`
|
|
81
|
-
|
|
82
|
-
### Phase 2 — MCP server (~3h, parallel with Phase 1)
|
|
83
|
-
|
|
84
|
-
New package `oh-my-design-mcp` (separate npm package).
|
|
85
|
-
|
|
86
|
-
Tools exposed:
|
|
87
|
-
| Tool | Args | Returns |
|
|
88
|
-
|---|---|---|
|
|
89
|
-
| `omd_search_references` | `{ query, top_k? }` | top-N brand fingerprints (id, score, why) |
|
|
90
|
-
| `omd_get_designmd` | `{ id }` | full DESIGN.md markdown |
|
|
91
|
-
| `omd_list_categories` | — | category → ids map |
|
|
92
|
-
| `omd_get_snapshot_date` | — | "2026-05-13" (for staleness check) |
|
|
93
|
-
|
|
94
|
-
Resources exposed (MCP resources, browsable):
|
|
95
|
-
- `omd://references` — list all
|
|
96
|
-
- `omd://references/<id>` — single DESIGN.md
|
|
97
|
-
|
|
98
|
-
Server reads from same HTTP endpoint internally (single source of truth) OR direct disk if self-hosted.
|
|
99
|
-
|
|
100
|
-
Distribution: `npx -y oh-my-design-mcp` in MCP config:
|
|
101
|
-
```json
|
|
102
|
-
{
|
|
103
|
-
"mcpServers": {
|
|
104
|
-
"oh-my-design": { "command": "npx", "args": ["-y", "oh-my-design-mcp"] }
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
### Phase 3 — Skill updates (~1h)
|
|
110
|
-
|
|
111
|
-
`skills/omd-init/SKILL.md`, `skills/omd-harness/SKILL.md`:
|
|
112
|
-
|
|
113
|
-
```diff
|
|
114
|
-
- Phase 4: fetch reference DESIGN.md from .claude/data/references/<id>/DESIGN.md
|
|
115
|
-
+ Phase 4: fetch reference DESIGN.md (priority order):
|
|
116
|
-
+ a) If MCP `oh-my-design` connected: call omd_get_designmd(id)
|
|
117
|
-
+ b) Else WebFetch https://oh-my-design.kr/api/references/<id>/design-md
|
|
118
|
-
+ c) Else (offline): bundled .claude/data/references/<id>/DESIGN.md if present
|
|
119
|
-
+ d) Else: report "id not in catalog, network unavailable, no bundle"
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
Skill must also surface the snapshot date to the user when fetching offline:
|
|
123
|
-
> "오프라인 모드 — 2026-05-13 기준 카탈로그 사용 중. 최신 brand 보려면 인터넷 연결 후 재시도."
|
|
124
|
-
|
|
125
|
-
### Phase 4 — Bundle diet (~30m, optional)
|
|
126
|
-
|
|
127
|
-
`package.json`:
|
|
128
|
-
```diff
|
|
129
|
-
"files": [
|
|
130
|
-
"dist",
|
|
131
|
-
"skills/*",
|
|
132
|
-
"agents",
|
|
133
|
-
"data",
|
|
134
|
-
- "web/references/*/DESIGN.md",
|
|
135
|
-
+ "data/snapshot-date.txt",
|
|
136
|
-
".claude/hooks/*.cjs",
|
|
137
|
-
".claude/settings.json"
|
|
138
|
-
]
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
`scripts/postinstall.cjs`: stop copying DESIGN.md files into `.claude/data/references/`. Skills will fetch.
|
|
142
|
-
|
|
143
|
-
**Trade-off**: completely offline-broken if API down. Mitigation: optional flag `--bundle-references` for users who want offline guarantee.
|
|
144
|
-
|
|
145
|
-
### Phase 5 — `omd:batch-launch` SKILL update (~15m)
|
|
146
|
-
|
|
147
|
-
Phase 3 SYNC:
|
|
148
|
-
- Remove `npm publish` from suggested follow-ups
|
|
149
|
-
- Add note: "After git push, brand reaches users automatically via API"
|
|
150
|
-
- Marketing surfaces (README count, llms.txt count) still need batch sync since they're static
|
|
151
|
-
|
|
152
|
-
---
|
|
153
|
-
|
|
154
|
-
## Migration plan
|
|
155
|
-
|
|
156
|
-
1. **Phase 1 first** (backend endpoint) — non-breaking, just adds capability
|
|
157
|
-
2. **Phase 2 in parallel** (MCP) — non-breaking, separate package
|
|
158
|
-
3. **Phase 3** (skill update) — backward-compat: tries MCP → WebFetch → bundle, so old installs still work
|
|
159
|
-
4. **Phase 4 last** (bundle diet) — only after Phase 3 has shipped for 1-2 weeks and we confirm fetch reliability
|
|
160
|
-
5. **Phase 5** (omd:batch-launch update) — final cleanup after migration is stable
|
|
161
|
-
|
|
162
|
-
---
|
|
163
|
-
|
|
164
|
-
## Open questions
|
|
165
|
-
|
|
166
|
-
- **Authentication**: keep API public read? (Yes — DESIGN.md files are intended for public consumption, that's the product.)
|
|
167
|
-
- **Rate limit**: needed? (Probably basic per-IP at edge — Vercel/Cloudflare. Not critical for v1.)
|
|
168
|
-
- **Versioning of DESIGN.md content**: should the API return a `?version=YYYY-MM-DD` parameter so installs can pin? (Defer — KISS for v1.)
|
|
169
|
-
- **Caching**: should the skill cache fetched DESIGN.md locally per session? (Yes — agent runtime should cache the parsed result for the session.)
|
|
170
|
-
- **What about agent that has no WebFetch tool?** (Edge case. Codex CLI has it. Cursor has it via tool config. If a user's agent really has neither WebFetch nor MCP, they install the `--bundle-references` flag at install time.)
|
|
171
|
-
|
|
172
|
-
---
|
|
173
|
-
|
|
174
|
-
## When to do this
|
|
175
|
-
|
|
176
|
-
**Trigger**: next time the user mentions "10개 더" or any brand addition. Pause Phase 2 build, ship the architecture first, then resume.
|
|
177
|
-
|
|
178
|
-
**Or**: after 2 more batches (100, 110 brands), npm package bundle pain becomes hard to ignore — natural breakpoint.
|
|
179
|
-
|
|
180
|
-
**Not now**: this conversation closed with count-agnostic skill descriptions as the immediate fix. Architecture is tracked but not implemented yet.
|
|
181
|
-
|
|
182
|
-
---
|
|
183
|
-
|
|
184
|
-
## Reading list / inspirations
|
|
185
|
-
|
|
186
|
-
- Linear's hosted catalog approach (linear.app/docs API)
|
|
187
|
-
- Tailwind v4 CDN-first delivery model
|
|
188
|
-
- shadcn/ui's "components are not a package, they're snippets you copy" — opposite direction but instructive
|
|
189
|
-
- MCP spec: `https://modelcontextprotocol.io/`
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
# RFC: Multi-surface brand spec (deferred)
|
|
2
|
-
|
|
3
|
-
**Status**: deferred / not blocking
|
|
4
|
-
**Filed**: 2026-05-13
|
|
5
|
-
**Trigger**: Banksalad mismatch — canonical DESIGN.md captured "advisor app" idiom, but `banksalad.com` is a "marketing landing" idiom. Generated landing.html was schema-faithful but didn't resemble the actual brand homepage.
|
|
6
|
-
**Decision**: do NOT do this schema change now. Solve at the skill level first (see `data/issues/2026-05-13-multi-surface-schema-rfc.md` companion fix in commit history). Revisit only if skill-level fix proves insufficient after ~10 more brand additions or repeated user complaints about surface mismatch.
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## Problem
|
|
11
|
-
|
|
12
|
-
One brand can have visually distinct surfaces (marketing landing, in-app, docs, onboarding). The current `DESIGN.md`-per-brand schema implicitly picks ONE surface as canonical. Generators following the spec faithfully will mismatch when user requests a different surface.
|
|
13
|
-
|
|
14
|
-
## Why we're deferring the schema change
|
|
15
|
-
|
|
16
|
-
1. **Both prior-art systems we surveyed keep schema single**:
|
|
17
|
-
- Google Stitch treats variants/modes/devices as runtime workflows (sidebar items in their docs), not separate spec documents.
|
|
18
|
-
- getdesign.md allows N entries per brand with catalog-level tags, but actual catalog data shows 1 entry per brand in practice (e.g. Apple has 1 entry).
|
|
19
|
-
- W3C Design Tokens Community Group spec deliberately does NOT scope tokens by surface — leaves it to vendor `$extensions`.
|
|
20
|
-
2. **Authoring cost scales poorly**: 88 brands × N surfaces is real maintenance overhead for marginal cases. Only ~10-15% of brands appear to have visually distinct landing/app idioms.
|
|
21
|
-
3. **The Banksalad case is a generator priority bug, not a schema gap**. We already had `tokens.json#live_overrides` and screenshots — the generator just didn't weight them.
|
|
22
|
-
4. **Backward compatibility**: 88 published references would all need migration. High blast radius for unclear payoff.
|
|
23
|
-
|
|
24
|
-
## What might warrant revisiting
|
|
25
|
-
|
|
26
|
-
- ≥3 distinct user reports of "this brand's generated output doesn't look like the real brand"
|
|
27
|
-
- A new batch where ≥30% of brands exhibit landing-vs-app idiom split
|
|
28
|
-
- AI coding agents adopting a multi-surface convention (W3C tokens spec, Stitch, etc. adding `surface` as a first-class field)
|
|
29
|
-
|
|
30
|
-
## Sketch (if/when we do this)
|
|
31
|
-
|
|
32
|
-
Probable shape based on the survey:
|
|
33
|
-
|
|
34
|
-
- `web/references/<id>/DESIGN.md` stays — essence-leaning (voice, principles, motion philosophy, raw palette)
|
|
35
|
-
- Optional `surfaces/<surface>.md` overlay files — delta only, frontmatter `surface: marketing|product|docs|onboarding`, `extends: ../DESIGN.md`
|
|
36
|
-
- Generator reads essence + (one) overlay → composes
|
|
37
|
-
- Closed enum chosen for AI determinism (Spectrum/Carbon precedent — productive vs expressive moment)
|
|
38
|
-
- Only ~10-15% of brands need overlays — most stay single-doc
|
|
39
|
-
|
|
40
|
-
## What we're doing instead (now)
|
|
41
|
-
|
|
42
|
-
Skill-level fix shipping in v1.4.0 or similar:
|
|
43
|
-
|
|
44
|
-
1. `omd:reference-capture` writes `structure.json` recording observable composition cues (hero type, CTA shape, nav structure, ornament style) — facts, not copyrighted content.
|
|
45
|
-
2. `omd:apply` / `omd:harness` instructed to Read hero screenshots as images for visual grounding before composing.
|
|
46
|
-
3. Token-resolution priority order documented: `tokens.json#live_overrides` > canonical DESIGN.md > `delta_set`. Brand essence (voice, principles, motion philosophy) stays canonical-only.
|
|
47
|
-
4. `omd:harness` Step 4 master prompt includes a `surface_signal` field derived from task keywords (`랜딩`→marketing, `대시보드`→product, etc.). Master uses it to weight reference-capture artifacts vs canonical spec.
|
|
48
|
-
|
|
49
|
-
The skill-level fix achieves the same Banksalad-landing outcome without any schema or migration work.
|
|
50
|
-
|
|
51
|
-
## References (survey notes)
|
|
52
|
-
|
|
53
|
-
- Stitch docs at `stitch.withgoogle.com/docs/design-md/overview` — sidebar nav includes `Device Types`, `Design Modes`, `Generate design variations` as separate workflows
|
|
54
|
-
- getdesign.md catalog (`getdesign.md/apple`) — N-entries-per-brand with category tags at catalog level, but actual data has single entries
|
|
55
|
-
- W3C Design Tokens spec `tr.designtokens.org` — `$extensions` escape hatch, no surface primitive
|
|
56
|
-
- Material 3 (`m3.material.io`) — three-tier `ref/sys/comp` is vertical, not surface-horizontal
|
|
57
|
-
- Carbon (`carbondesignsystem.com`) — theme axis (`white/g10/g90/g100`) is the closest to surface, but it's a single coarse dimension
|
|
58
|
-
- Adobe Spectrum (`spectrum.adobe.com`) — `productive/expressive` moment is a 2-bucket idiom split; precedent for closed enum
|
|
59
|
-
- shadcn/ui (`ui.shadcn.com`) — explicitly refuses the surface problem by shipping unstyled primitives
|
|
60
|
-
|
|
61
|
-
---
|
|
62
|
-
|
|
63
|
-
## Linked actions
|
|
64
|
-
|
|
65
|
-
- [ ] Implement skill-level fix (4 items above) — target v1.4.0
|
|
66
|
-
- [ ] After 3 more batches, re-evaluate whether skill fix is sufficient
|
|
67
|
-
- [ ] If not, draft formal `omd: 0.2` schema following the surfaces/<name>.md sketch
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
# Batch Audit — 2026-05-13 / KR-10
|
|
2
|
-
|
|
3
|
-
**Theme**: Korean IT companies with publicly observable design system signal
|
|
4
|
-
**Brands added**: 10 (78 → 88)
|
|
5
|
-
**Skill**: `omd:batch-launch` (Phase 2 build pipeline = `omd:add-reference` CREATE)
|
|
6
|
-
**Verification date**: 2026-05-13
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## How the 10 were researched (pipeline applied to each)
|
|
11
|
-
|
|
12
|
-
Every brand went through the standard `omd:add-reference` CREATE 3-tier pipeline. Each `omd-batch-launch` subagent was constrained to:
|
|
13
|
-
|
|
14
|
-
1. **Tier 1 — Live inspect (required)**: playwright MCP `getComputedStyle` on hero CTA / nav / footer / input / cards across **≥1 surface** of the brand's production site. Where possible, also `curl` of the production CSS bundle (more authoritative than runtime sampling because it exposes the entire token system).
|
|
15
|
-
2. **Tier 2 — Cross-check (both attempted)**: `getdesign.md/<id>` + `styles.refero.design/?q=<brand>` (also `?q=<한글명>`). Either source success = OK; both empty = explicitly logged in §4 footer.
|
|
16
|
-
3. **Tier 3 — Reconcile + write**: 9 product sections (Stripe schema) + §10-15 philosophy (Toss §10-15 shape) + `_research.md` source map + `_promo.json` highlight + verified footer.
|
|
17
|
-
|
|
18
|
-
Every brand also has:
|
|
19
|
-
- `web/references/<id>/DESIGN.md` (the spec, frontmatter `omd: 0.1`)
|
|
20
|
-
- `web/references/<id>/_research.md` (Tier-by-Tier source list + dates + confidence per section)
|
|
21
|
-
- `web/references/<id>/_promo.json` (id, Korean name, logo URL, single "most striking" highlight for promo video)
|
|
22
|
-
- §4 footer with `**Verified:** 2026-05-13` + Tier 1 sources + Tier 2 status + Conflicts unresolved
|
|
23
|
-
|
|
24
|
-
---
|
|
25
|
-
|
|
26
|
-
## Systemic finding
|
|
27
|
-
|
|
28
|
-
**Tier 2 directories (`getdesign.md`, `styles.refero.design`) have weak Korean coverage**. All 10 brands returned **empty** on both 3rd-party indexes. This is not a brand-quality issue — it's a directory-bias issue (both are English-tooling-oriented). Documented per-brand in §4 footers.
|
|
29
|
-
|
|
30
|
-
**But brand-published DS / design narrative resources DO exist for most of the 10** — they were just not in those 3rd-party indexes. 7/10 have public DS-related surfaces that were used in Tier 1 reconcile:
|
|
31
|
-
|
|
32
|
-
| brand | brand-published DS surface | type | live (2026-05-13) |
|
|
33
|
-
|---|---|---|---|
|
|
34
|
-
| socar | `design.socar.kr` | docs hub | ✅ 200 |
|
|
35
|
-
| wanted | `montage.wanted.co.kr` + `wanted.co.kr/brandcenter` | full DS | ✅ 200 |
|
|
36
|
-
| remember | `dramancompany.github.io/remember-ui` | Storybook | ✅ 200 |
|
|
37
|
-
| banksalad | `github.com/banksalad` (org + styleguide repos) | source | ✅ 200 |
|
|
38
|
-
| zigzag | `brunch.co.kr/@zigzag/73` + `devblog.kakaostyle.com` | brand articles (ZDS) | ✅ 200 |
|
|
39
|
-
| gangnamunni | `blog.gangnamunni.com/post/welchis/` | DS architecture post | ✅ 200 |
|
|
40
|
-
| kakaopay | `story.kakaopay.com` | brand / design narrative | ✅ 200 |
|
|
41
|
-
| 29cm | — | — | ❌ no public DS |
|
|
42
|
-
| ably | — | — | ❌ no public DS |
|
|
43
|
-
| zigbang | — | — | ❌ no public DS |
|
|
44
|
-
|
|
45
|
-
→ For future Korean batches, weight Tier 1 (live inspect + **brand-owned tech blogs / brunch / medium / GitHub orgs**) more heavily. Tier 2 (3rd-party directories) is documentation discovery, not validation.
|
|
46
|
-
|
|
47
|
-
→ The 7 brand-published DS URLs are also registered in `web/src/lib/design-systems.ts` so they surface as DS buttons in Browse modal and Builder Step 3 preview header. The 3 brands without a public DS correctly return null and the DS button stays hidden.
|
|
48
|
-
|
|
49
|
-
---
|
|
50
|
-
|
|
51
|
-
## Per-brand audit
|
|
52
|
-
|
|
53
|
-
Confidence rubric:
|
|
54
|
-
- **High** — ≥2 Tier 1 surfaces OR production CSS bundle captured; no unresolved hex; ≥3 supporting brand-owned sources (blog/medium/brunch); §10-15 sourced
|
|
55
|
-
- **Medium** — 1 Tier 1 surface; some inferred values; brand-owned philosophy sources present
|
|
56
|
-
- **Low** — Tier 1 partially blocked; key tokens marked `(unverified live)` or `(illustrative)`; needs UPDATE pass
|
|
57
|
-
|
|
58
|
-
| # | id | confidence | Tier 1 depth | Tier 2 | Known gaps | Follow-up |
|
|
59
|
-
|---|----|------------|--------------|--------|------------|-----------|
|
|
60
|
-
| 1 | socar | **Medium** | 1 surface (home full); design.socar.kr partial (browser session contended) | empty (getdesign no record · refero no isolated set) | SOCAR Blue **exact hex unpublished** — brand-name-only reference. Brand fonts Sandoll Gothic Neo2 / Avenir (print) vs live Pretendard (web) — documented as intentional print-vs-web split. | UPDATE pass on `design.socar.kr` for canonical SOCAR Blue hex + Space Frame system tokens |
|
|
61
|
-
| 2 | gangnamunni | **High** | 3 (home live + production CSS bundle `d246c5b2edcb00b6.css` with full Cell token map + blog.gangnamunni.com Cell+Welchis architecture post) | empty | none material | — |
|
|
62
|
-
| 3 | kakaopay | **Medium** | 1 surface (home full live inspect); /payment/online second surface blocked by browser tab contention | empty (both verified empty) | none unresolved. KPDS = narrative-only on `story.kakaopay.com`, no public docs site. | UPDATE pass on /payment/online or /transfer for second surface verification |
|
|
63
|
-
| 4 | zigzag | **High** | 4 (home live + production CSS bundle 184KB with full ZDS canonical tokens via `--zds-color-*` vars + devblog.kakaostyle.com ZDS rearchitecture + brunch.co.kr/@zigzag/73 brand-owned) | empty | Two-pink architecture (`#fa6ee3` brand-anchor vs `#f55dd6` interactive primary) — documented as intentional role split | — |
|
|
64
|
-
| 5 | 29cm | **Medium** | 1 surface (home via isolated Playwright `browser_run_code_unsafe` workaround for session contention) | empty | PDP / checkout flows not inspected this pass | UPDATE pass on PDP + checkout (editorial product story modules) |
|
|
65
|
-
| 6 | ably | **Low** | 1 navigation only — live `evaluate` calls blocked by Playwright session contention; §4 token hexes flagged `(unverified live)` in footer | empty / inconclusive (refero JS-rendered, capture blocked) | §4 token values need live re-capture. Brand disambiguation note added (Ably Corp KR commerce ≠ ably.com realtime API). | **Priority**: full Phase U2 live inspect re-run on a clean Playwright session |
|
|
66
|
-
| 7 | banksalad | **High** | 5 (home live + 865KB production CSS bundle with `border-radius:2px` ×81 confirming system default + BPL tech blog + 2× GitHub orgs) | empty (both verified empty) | One nav exception documented (sign-in pill at 16px radius vs system 2px default) — already noted as exception, not conflict | — |
|
|
67
|
-
| 8 | zigbang | **Medium** | 2 (home full + /home/apt/map partial — map-overlay listing card tokens inferred due to second-pass contention) | empty | (a) **brand-orange exact hex unpublished** — `~#FF6600` flagged illustrative in §2 + footer; (b) map-overlay listing-card / price-chip tokens inferred | UPDATE pass on /home/apt/map for canonical orange hex + listing-card token verification |
|
|
68
|
-
| 9 | wanted | **High** | 8 sources (live DOM on `wdlist/518` 22 samples + brandcenter + Montage docs + wanted-sans GitHub + wanteddev org + wantedlab.com + WDS creation blog) | empty (refero blocked by session contention, getdesign verified empty) | none unresolved. `#14191E` (marketing) vs `#171719` (product) is documented two-surface split, not a conflict. | (optional) refero re-attempt on clean session |
|
|
69
|
-
| 10 | remember | **High** | 5 (career page primary live inspect + `dramancompany.github.io/remember-ui/` Storybook root + corp x2 + redirect) | empty (3rd-party empty + GitHub UI repo 404 — source private/deleted, Storybook deploy still live) | (a) filter-chip **selected/active** state not observed (only default captured); (b) error/warning semantic tokens inferred from KR fintech convention | UPDATE pass capturing filter chip selected/active + error/warning states |
|
|
70
|
-
|
|
71
|
-
---
|
|
72
|
-
|
|
73
|
-
## Confidence distribution
|
|
74
|
-
|
|
75
|
-
- **High** (5): gangnamunni, banksalad, wanted, zigzag, remember
|
|
76
|
-
- **Medium** (3): socar, 29cm, kakaopay
|
|
77
|
-
- **Low** (1): ably
|
|
78
|
-
- *(zigbang was kept at Medium even though 2 surfaces inspected, because of 2 unresolved illustrative tokens — orange hex + map overlay)*
|
|
79
|
-
|
|
80
|
-
**Aggregate**: 5/10 are publishable as-is. 3/10 are publishable with marked uncertainty. **2/10 (ably + zigbang) warrant a follow-up UPDATE pass before being cited in external blog posts or comparisons.**
|
|
81
|
-
|
|
82
|
-
---
|
|
83
|
-
|
|
84
|
-
## Known shared limitation — Playwright session contention
|
|
85
|
-
|
|
86
|
-
The Phase 2 build ran 10 subagents in parallel, all sharing the host Playwright MCP browser. Several agents reported that `browser_evaluate` calls landed on *other agents' tabs* (kakaopay/zigzag/banksalad/29cm appear in multiple reports as "the tab that hijacked my session"). Mitigations applied per agent:
|
|
87
|
-
|
|
88
|
-
- Fall back to direct `curl` of the production CSS bundle (banksalad, gangnamunni, zigzag) — actually higher signal than runtime sampling for these
|
|
89
|
-
- Use `browser_run_code_unsafe` in isolated newPage context (29cm)
|
|
90
|
-
- Document and explicitly flag affected surfaces in `_research.md` (ably, kakaopay, zigbang)
|
|
91
|
-
|
|
92
|
-
**Process fix for next batch**: serialize Playwright sessions per brand (run 1-2 in parallel, not 10), OR isolate to `--user-data-dir` per agent if available. Cost: longer wall-clock. Benefit: no contention, clean §4 token values for every brand.
|
|
93
|
-
|
|
94
|
-
---
|
|
95
|
-
|
|
96
|
-
## Promo highlight selection (auditable)
|
|
97
|
-
|
|
98
|
-
Each brand's `_promo.json` records a single "most striking" element — chosen by the build subagent and used in the promo MP4. Type distribution:
|
|
99
|
-
|
|
100
|
-
- **palette** (7): socar, gangnamunni, zigzag, ably, banksalad, zigbang, wanted
|
|
101
|
-
- **voice** (2): kakaopay, 29cm
|
|
102
|
-
- **cta** (1): remember
|
|
103
|
-
|
|
104
|
-
Justifications are written into each `_promo.json` (`label` field) and re-verified during Phase 4 composition build.
|
|
105
|
-
|
|
106
|
-
---
|
|
107
|
-
|
|
108
|
-
## Follow-up TODO (prioritized)
|
|
109
|
-
|
|
110
|
-
1. **ably** — full Phase U2 live inspect re-run (clean session). §4 tokens currently `(unverified live)`.
|
|
111
|
-
2. **zigbang** — UPDATE pass on `/home/apt/map` for canonical orange hex + map-overlay tokens.
|
|
112
|
-
3. **socar** — UPDATE pass on `design.socar.kr` for canonical SOCAR Blue hex + Space Frame token system.
|
|
113
|
-
4. **remember** — UPDATE pass capturing filter-chip selected/active + error/warning semantic tokens.
|
|
114
|
-
5. **29cm** — UPDATE pass on PDP + checkout flows.
|
|
115
|
-
6. **kakaopay** — UPDATE pass on a transactional second surface (e.g., /transfer).
|
|
116
|
-
7. **reader UI**: long variant headings overlap preview area (observed on 29cm §5). Fix in `web/src/components/reference-preview.tsx` (or equivalent).
|
|
117
|
-
8. **Process**: serialize Playwright sessions per build agent for future batches.
|
|
118
|
-
|
|
119
|
-
---
|
|
120
|
-
|
|
121
|
-
## Schema for this file (future batches use the same shape)
|
|
122
|
-
|
|
123
|
-
Required top-level sections (so they're greppable across batches in `data/reference-audits/`):
|
|
124
|
-
- `## How the 10 were researched`
|
|
125
|
-
- `## Systemic finding`
|
|
126
|
-
- `## Per-brand audit` (table with id, confidence, Tier 1 depth, Tier 2, Known gaps, Follow-up)
|
|
127
|
-
- `## Confidence distribution`
|
|
128
|
-
- `## Known shared limitation`
|
|
129
|
-
- `## Promo highlight selection`
|
|
130
|
-
- `## Follow-up TODO`
|
|
131
|
-
|
|
132
|
-
Filename: `data/reference-audits/<YYYY-MM-DD>-<batch-slug>.md`
|