oh-my-design-cli 1.6.0 → 1.6.2

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 (81) hide show
  1. package/AGENTS.md +1 -1
  2. package/README.ko.md +12 -0
  3. package/README.md +49 -0
  4. package/data/reference-fingerprints.json +957 -2
  5. package/dist/bin/oh-my-design.js +4 -3
  6. package/dist/bin/oh-my-design.js.map +1 -1
  7. package/dist/{install-skills-IETT2TBJ.js → install-skills-6QFSN5BN.js} +108 -42
  8. package/dist/install-skills-6QFSN5BN.js.map +1 -0
  9. package/package.json +9 -3
  10. package/scripts/postinstall.cjs +6 -6
  11. package/skills/claude-design/SKILL.md +385 -0
  12. package/skills/claude-design/references/claude-design-flow.md +425 -0
  13. package/skills/claude-design/references/codebase-analysis.md +373 -0
  14. package/skills/claude-design/scripts/analyze_codebase.py +1369 -0
  15. package/skills/claude-design/scripts/clickable_link.sh +48 -0
  16. package/skills/claude-design/scripts/collect_source.py +178 -0
  17. package/skills/claude-design/scripts/drive_claude_design.cjs +378 -0
  18. package/skills/claude-design/scripts/gather_references.py +437 -0
  19. package/web/references/91app/DESIGN.md +151 -0
  20. package/web/references/airtable/DESIGN.md +16 -2
  21. package/web/references/bithumb/DESIGN.md +170 -0
  22. package/web/references/bunjang/DESIGN.md +20 -1
  23. package/web/references/cakeresume/DESIGN.md +162 -0
  24. package/web/references/catchtable/DESIGN.md +19 -0
  25. package/web/references/classting/DESIGN.md +251 -0
  26. package/web/references/classum/DESIGN.md +19 -0
  27. package/web/references/coinone/DESIGN.md +218 -0
  28. package/web/references/dabang/DESIGN.md +19 -0
  29. package/web/references/devsisters/DESIGN.md +253 -0
  30. package/web/references/dji/DESIGN.md +0 -1
  31. package/web/references/drnow/DESIGN.md +331 -0
  32. package/web/references/fastcampus/DESIGN.md +19 -0
  33. package/web/references/flex/DESIGN.md +19 -0
  34. package/web/references/flo/DESIGN.md +306 -0
  35. package/web/references/fugle/DESIGN.md +250 -0
  36. package/web/references/gmarket/DESIGN.md +19 -0
  37. package/web/references/gogolook/DESIGN.md +131 -0
  38. package/web/references/grip/DESIGN.md +250 -0
  39. package/web/references/hahow/DESIGN.md +158 -0
  40. package/web/references/hogangnono/DESIGN.md +308 -0
  41. package/web/references/hyundaicard/DESIGN.md +177 -0
  42. package/web/references/inflearn/DESIGN.md +19 -0
  43. package/web/references/jkopay/DESIGN.md +249 -0
  44. package/web/references/jobkorea/DESIGN.md +310 -0
  45. package/web/references/kbank/DESIGN.md +18 -0
  46. package/web/references/kdan/DESIGN.md +160 -0
  47. package/web/references/kkbox/DESIGN.md +114 -0
  48. package/web/references/krafton/DESIGN.md +230 -0
  49. package/web/references/kream/DESIGN.md +18 -0
  50. package/web/references/laftel/DESIGN.md +253 -0
  51. package/web/references/lezhin/DESIGN.md +301 -0
  52. package/web/references/lunit/DESIGN.md +19 -0
  53. package/web/references/melon/DESIGN.md +153 -0
  54. package/web/references/momoshop/DESIGN.md +279 -0
  55. package/web/references/mustit/DESIGN.md +282 -0
  56. package/web/references/nhncloud/DESIGN.md +174 -0
  57. package/web/references/oliveyoung/DESIGN.md +19 -0
  58. package/web/references/payco/DESIGN.md +227 -0
  59. package/web/references/piccollage/DESIGN.md +277 -0
  60. package/web/references/rayark/DESIGN.md +132 -0
  61. package/web/references/riiid/DESIGN.md +228 -0
  62. package/web/references/sendbird/DESIGN.md +285 -0
  63. package/web/references/socar/DESIGN.md +18 -0
  64. package/web/references/toss-securities/DESIGN.md +19 -0
  65. package/web/references/trenbe/DESIGN.md +252 -0
  66. package/web/references/tving/DESIGN.md +18 -0
  67. package/web/references/upbit/DESIGN.md +19 -0
  68. package/web/references/upstage/DESIGN.md +18 -0
  69. package/web/references/velog/DESIGN.md +168 -0
  70. package/web/references/voicetube/DESIGN.md +227 -0
  71. package/web/references/wadiz/DESIGN.md +19 -0
  72. package/web/references/webflow/DESIGN.md +16 -2
  73. package/web/references/yeogiotte/DESIGN.md +19 -0
  74. package/data/architecture-proposals/2026-05-13-thin-install-fresh-fetch.md +0 -189
  75. package/data/issues/2026-05-13-multi-surface-schema-rfc.md +0 -67
  76. package/data/reference-audits/2026-05-13-kr10.md +0 -132
  77. package/data/reference-audits/2026-05-14-kr10.md +0 -72
  78. package/data/reference-audits/2026-05-15-kr10.md +0 -124
  79. package/data/research/2026-05-18-agent-landscape.md +0 -69
  80. package/data/research/2026-05-18-kr-style-presets.md +0 -572
  81. package/dist/install-skills-IETT2TBJ.js.map +0 -1
@@ -0,0 +1,252 @@
1
+ ---
2
+ id: trenbe
3
+ name: "Trenbe"
4
+ country: KR
5
+ category: ecommerce
6
+ homepage: "https://www.trenbe.com"
7
+ primary_color: "#7620F6"
8
+ logo:
9
+ type: favicon
10
+ slug: "https://www.google.com/s2/favicons?domain=trenbe.com&sz=256"
11
+ verified: "2026-06-03"
12
+ omd: "0.1"
13
+ ---
14
+
15
+ # Trenbe
16
+
17
+ Global No.1 luxury shopping platform from Korea, combining tech-driven authentication and real-time global price scanning with a purple-accented monochrome design language.
18
+
19
+ ## 1. Visual Theme & Atmosphere
20
+
21
+ Trenbe's interface balances the accessibility of mass-market ecommerce with the calm restraint expected of a luxury goods destination. The canvas is predominantly white with a warm near-black text system and deliberate use of Trenbe's signature vivid purple (#7620F6) as the sole accent color, signaling trust, exclusivity, and forward-facing technology. Product photography is given maximum breathing room within a tight typographic grid; decorative ornamentation is avoided in favor of clean rule lines and generous whitespace. On marketing surfaces the purple can appear in gradients and saturated CTAs, while within the shopping UI it is reserved for interactive states, labels, and primary links — preventing visual noise against high-resolution luxury imagery. The result feels simultaneously confident and approachable: global in aspiration, Korean in precision.
22
+
23
+ ## 2. Color Palette & Roles
24
+
25
+ - **Purple (Primary):** `#7620F6` — brand primary; maps to `--primary` and `--purple` across all Trenbe sub-domains; used for interactive labels, uiPrimary text, hover states on marketing CTAs
26
+ - **Purple 500 (UI Primary):** `#7351EC` — semantic `uiPrimary` / `textPrimary` token in app DS v4; active focus rings, highlight text
27
+ - **Black:** `#000000` — primary action button background (btn-primary, btn-black); high-emphasis foreground
28
+ - **White:** `#FFFFFF` — page canvas, card backgrounds, field01 input surface; theme-color meta
29
+ - **Gray 1000 (text01):** `#2F2E2B` — body text, headings, highest-contrast foreground
30
+ - **Gray 900 (text02):** `#4F4E4B` — secondary body text, descriptions
31
+ - **Gray 800 (text03):** `#6F6E6B` — tertiary text, subheadings
32
+ - **Gray 400 (border):** `#CFCECB` — hairline dividers, card borders
33
+ - **Gray 100 (surface):** `#F7F6F5` — page background, input field02 fill
34
+ - **Red 500 (Secondary):** `#EC5151` — semantic `uiSecondary` / `textSecondary`; sale badges, error states, price emphasis
35
+ - **Green 500 (Success):** `#1EB789` — success states, confirmation labels
36
+ - **Yellow 500 (Caution):** `#FFAB1E` — caution / promotional badges
37
+
38
+ ## 3. Typography Rules
39
+
40
+ - **Primary font:** Pretendard (weights 100–900 loaded via subset WOFF2), fallback: "Apple SD Gothic Neo", "Helvetica Neue", sans-serif
41
+ - **Feature settings:** `"ss03"`, `"cv01"` enabled on mobile — applied via `@media (max-width: 768px)` on `#app`
42
+ - **Type scale (v4 rem-based, base 10px root):**
43
+ - overline: 1.0rem / line-height 1.8rem
44
+ - caption: 1.2rem / 2.0rem
45
+ - body: 1.4rem / 2.2rem
46
+ - headline: 1.6rem / 2.4rem
47
+ - title: 1.8rem / 2.6rem
48
+ - display03: 2.0rem / 2.8rem
49
+ - display02: 2.4rem / 3.2rem
50
+ - display01: 3.2rem / 4.2rem
51
+ - **Legacy CSS (global fallback):** body font-size 13px, line-height 1.2, color `#444444`
52
+ - **Weight usage:** 400 for body, 500 for subheadings, 700 for CTAs and prices, 600 for section titles
53
+
54
+ ## 4. Component Stylings
55
+
56
+ ### Buttons
57
+
58
+ **Primary (Black CTA)**
59
+ - Background: `#000000`
60
+ - Text: `#FFFFFF`
61
+ - Border: 1px solid `#000000`
62
+ - Radius: 2px
63
+ - Padding: 6px 12px
64
+ - Font: 13px / 400
65
+
66
+ **Default (Ghost)**
67
+ - Background: `#FFFFFF`
68
+ - Text: `#000000`
69
+ - Border: 1px solid `#88888E`
70
+ - Radius: 2px
71
+ - Padding: 6px 12px
72
+ - Font: 13px / 400
73
+
74
+ **Disabled**
75
+ - Background: `#FFFFFF`
76
+ - Text: `#AFAEAB`
77
+ - Border: 1px solid `#CFCECB`
78
+ - Radius: 2px
79
+
80
+ **Marketing CTA (Brand Purple)**
81
+ - Background: `#7618F1`
82
+ - Text: `#FFFFFF`
83
+ - Border: none
84
+ - Radius: 4px
85
+ - Height: 55px
86
+ - Font: 18px / 600
87
+
88
+ ### Form Fields
89
+
90
+ **Default Input**
91
+ - Background: `#FFFFFF`
92
+ - Text: `#555555`
93
+ - Border: 1px solid `#CCCCCC`
94
+ - Radius: 0px
95
+ - Height: 29px
96
+ - Padding: 6px 12px
97
+ - Font: 13px / 400
98
+
99
+ **Focus Input**
100
+ - Background: `#FFFFFF`
101
+ - Text: `#555555`
102
+ - Border: 1px solid `#66AFE9`
103
+
104
+ ### Badges / Labels
105
+
106
+ **Primary Badge (Black)**
107
+ - Background: `#000000`
108
+ - Text: `#FFFFFF`
109
+ - Radius: 0px
110
+ - Padding: 0.2em 0.6em 0.3em
111
+
112
+ **Sale / Accent Badge (Red)**
113
+ - Background: `#EC5151`
114
+ - Text: `#FFFFFF`
115
+ - Radius: 4px
116
+
117
+ ---
118
+ **Verified:** 2026-06-03
119
+ **Tier 1 sources:** https://www.trenbe.com (HTML + theme-color meta), https://assets.trenbe.com/20260602.151834.7400ea3/main.696cafc00c26f4e3cdcd.js (embedded CSS + design token object), https://www.trenbecorp.com (corp CSS: common.css + main.css), https://trenbe.github.io (tech blog CSS: --primary: #7620F6), https://assets.trenbe.com/font/pretendard/pretendard-subset.css (confirmed Pretendard font)
120
+ **Tier 2 sources:** getdesign.md/trenbe — NOT LISTED (no data). refero — no result for Trenbe.
121
+ **Conflicts unresolved:** Two purple primary values co-exist in the codebase: #7620F6 (older token, used on tech blog and trenbecorp.com as `--primary`) and #7351EC (newer v4 DS token `purple500` / `uiPrimary`). The tech blog and corporate site both use #7620F6 as `--primary`, which is treated as the canonical brand primary here. The v4 DS purple500 (#7351EC) is the current interactive UI token in the product app.
122
+
123
+ ## 5. Layout Principles
124
+
125
+ - Single-column mobile-first grid; horizontal padding: 20px mobile, 41px tablet, 48px desktop
126
+ - Vertical rhythm follows spacing token scale (0.2rem–6.4rem in 8-step increments)
127
+ - Product grid: 2-column on mobile, 3–4 column on tablet/desktop, with consistent gutter matching horizontal padding
128
+ - Maximum content width: 1200px (pc breakpoint), centered with auto margins
129
+ - Cards have 8px radius (main borderRadius token), hairline 1px `#CFCECB` borders
130
+ - zIndex layers: header 1399, modal 1500, ProductCard 1
131
+
132
+ ## 6. Depth & Elevation
133
+
134
+ - Minimal shadow philosophy: UI avoids drop-shadows on cards; separation achieved via border `#CFCECB` and background-color contrast (`#F7F6F5` vs `#FFFFFF`)
135
+ - Modals use `rgba(0,0,0,0.5)` scrim backdrop (alpha50 token = `#2F2E2B80`)
136
+ - Sticky header separates with a subtle bottom border, no shadow
137
+ - Drawers and bottom sheets slide in with `0.325s ease-out` without elevation shadow
138
+
139
+ ## 7. Do's and Don'ts
140
+
141
+ ### Do
142
+ - Use `#7620F6` (or `#7351EC` in v4 DS contexts) exclusively as the brand accent; do not introduce other accent hues
143
+ - Keep primary CTAs black (#000) on white surfaces inside the product UI to respect luxury product photography
144
+ - Reserve the purple CTA only for high-emphasis marketing surfaces (landing pages, onboarding)
145
+ - Use Pretendard for all Korean and Latin text; ensure feature settings `"ss03"` `"cv01"` are active on mobile
146
+ - Apply 8px radius to product cards; 4px to chips, badges, and secondary UI elements
147
+ - Use red (#EC5151) exclusively for sale prices, error states, and count-down labels
148
+ - Respect the 20px mobile / 48px desktop horizontal padding consistently
149
+
150
+ ### Don't
151
+ - Don't use the purple as a button background inside the main shopping UI — the primary action is always black
152
+ - Don't add gradients or decorative patterns behind product images
153
+ - Don't reduce line-height below 1.5× for body text; the Pretendard variable-weight range demands adequate leading
154
+ - Don't mix the legacy 13px/1.2 line-height scale with the v4 rem scale in new components
155
+ - Don't use border-radius above 8px for cards or 4px for chips in the current DS
156
+
157
+ ## 8. Responsive Behavior
158
+
159
+ - **Mobile (≤480px):** 20px horizontal padding; 2-column product grid; bottom navigation bar replaces desktop header links; font sizes follow v4 rem scale with `font-feature-settings: "ss03","cv01"`
160
+ - **Tablet mini (480–768px):** 41px horizontal padding; 3-column grid; header retains logo + search; secondary nav collapsed
161
+ - **Tablet big (768–1024px):** full desktop header; 3–4 column grid; xPadding 41px
162
+ - **Desktop (1024–1200px):** 48px horizontal padding; max-content 1200px; full navigation visible
163
+ - **Large desktop (≥1200px):** content remains capped at 1200px; outer gutters expand
164
+
165
+ ## 9. Agent Prompt Guide
166
+
167
+ When generating Trenbe UI:
168
+ - Use white (`#FFFFFF`) canvas with warm near-black body text (`#2F2E2B`)
169
+ - Primary interactive element: black button (bg `#000`, text `#fff`, radius 2px)
170
+ - Use Pretendard font; specify weights 400 / 500 / 700
171
+ - Accent color: `#7620F6` for labels, links, and focus indicators only
172
+ - Red (`#EC5151`) for price reductions and error messages
173
+ - Green (`#1EB789`) for success confirmations
174
+ - Card containers: white bg, 1px `#CFCECB` border, 8px radius
175
+ - Do not add gradients, shadows, or decorative flourishes behind product images
176
+ - Layout: 20px mobile gutter, 48px desktop gutter, max-width 1200px
177
+
178
+ ## 10. Voice & Tone
179
+
180
+ **Three defining adjectives:** Trustworthy, Direct, Savvy
181
+
182
+ | Do | Don't |
183
+ |----|-------|
184
+ | Use clear, benefit-forward language: "verified by our experts" | Use vague luxury clichés: "elevate your lifestyle" |
185
+ | Be specific about tech advantages: "AI price matching across 10M items" | Use jargon: "synergize your fashion portfolio" |
186
+ | Acknowledge the user's desire directly: "가지고 싶은 것, 가지고 싶을 때" (what you want, when you want it) | Be passive or hedged: "you might consider exploring..." |
187
+ | Frame authentication as protection, not gatekeeping | Shame or intimidate around budget |
188
+
189
+ **Voice samples (illustrative):**
190
+ - "전세계 명품을 한 눈에. 최저가 스캐너로 가장 빠르게." — All the world's luxury, at a glance. Fastest with our lowest-price scanner. *(illustrative tone sample)*
191
+ - "가지고 싶은 것, 가지고 싶을 때, 가질 수 있도록." — What you want, when you want it, yours to have. *(illustrative brand line)*
192
+ - "300% 보상 정책으로 안심하고 쇼핑하세요." — Shop with peace of mind backed by our 300% compensation policy. *(illustrative trust copy)*
193
+
194
+ ## 11. Brand Narrative
195
+
196
+ Trenbe was founded in November 2016 in Seoul, South Korea, by CEO Park Kyung-hoon with a clear thesis: luxury shopping online did not have to mean counterfeit risk, opaque pricing, or limited selection. The name "Trenbe" blends "trend" and "be," signaling the brand's aspiration for customers to inhabit the trends they love rather than merely observe them. From the start, the company invested in physical infrastructure — overseas offices and fulfillment centers in the UK, US, France, Germany, Italy, and Japan — so that its platform could offer direct buying, direct inspection, and direct shipping rather than relying on third-party resellers.
197
+
198
+ The company describes itself as a "luxury tech-commerce" business rather than a simple marketplace. Its proprietary Trenbot AI scans roughly 10 million products in real time across global department stores, brand official sites, and outlets to surface the lowest available price. The Korean Authentic Center, initially an in-house inspection team of over 40 expert authenticators, was later spun off as an independent subsidiary to reinforce the credibility of Trenbe's authentication signal. In 2022 Trenbe raised a KRW 35 billion Series D round, and the platform's MAU reached 4.5 million by late 2020. By Q1 2026 the pre-owned luxury segment contributed to its first operating profit of KRW 300 million.
199
+
200
+ Trenbe's corporate manifesto — "We change the rules. We change the commerce." — anchors its design and product philosophy. The purple accent in its design system represents this disruption: vivid and technologically forward in a category traditionally expressed through ivory and gold. Yet the dominant use of black-and-white in the shopping UI maintains the respectful restraint that luxury buyers expect when their attention is focused on the products themselves.
201
+
202
+ ## 12. Principles
203
+
204
+ 1. **Trust through transparency** — Every price displayed shows where it came from. Every product that passes through Trenbe's fulfillment is inspected and logged. *UI implication:* Inspection status, price history, and authentication certificates appear prominently on product detail pages without requiring the user to dig for them.
205
+
206
+ 2. **Desire, not delay** — The user's intent is to acquire something desirable; friction between intent and checkout must be minimized. *UI implication:* Add-to-cart and purchase flows are surfaced within one thumb's reach on mobile; payment providers including Naver Pay, Apple Pay, and card-based installments are pre-integrated.
207
+
208
+ 3. **Global reach, local precision** — Trenbe operates in seven countries but the experience is built for Korean consumers first, then localized. *UI implication:* Korean-language copy is the primary string; KRW pricing is canonical; Pretendard is loaded as a subset for performance at Korean character density.
209
+
210
+ 4. **Technology as service, not spectacle** — AI and automation power the platform but should never make the user feel surveilled or overwhelmed. *UI implication:* Trenbot recommendations are labeled clearly as price comparisons, not "personalization magic"; data-driven badges use factual language ("15% below market average").
211
+
212
+ 5. **Authenticity as table stakes** — Counterfeit risk is the sector's defining anxiety. Trenbe's response is operational, not just copywritten. *UI implication:* Authentic guarantee badges and Korean Authentic Center certification marks appear at the same visual weight as the price; they are never buried in footers.
213
+
214
+ ## 13. Personas
215
+
216
+ *Illustrative Persona A — The Aspirational Accumulator:* A 28-year-old woman in Seoul in her first management-level role. She buys one statement luxury piece per quarter as a self-reward. She comparison-shops obsessively before committing. She trusts Trenbe's price scanner because she has verified its results against department-store prices herself. Her primary device is iPhone; she browses during commute and completes purchases at home.
217
+
218
+ *Illustrative Persona B — The Resale Strategist:* A 35-year-old man who buys luxury goods both to enjoy and to trade. He uses the Shuffle exchange feature to upgrade without net spend. He values the authentication certificate because it protects the resale value of his items. He reads the tech blog and trusts the brand's engineering transparency.
219
+
220
+ *Illustrative Persona C — The Gifting Professional:* A 40-year-old professional who buys 3–5 luxury gifts per year for clients and family. She needs fast, reliable delivery and gift-wrap options. She cares deeply about authenticity guarantees because a counterfeit gift would be a professional embarrassment. The 300% compensation policy is the feature that converted her.
221
+
222
+ *Illustrative Persona D — The Global Shopper:* A Korean expat in London who relies on Trenbe's UK office logistics to ship authenticated pieces home to family at prices competitive with local boutiques. She reads prices in KRW and filters by brand country of origin.
223
+
224
+ ## 14. States
225
+
226
+ - **Empty:** Category page with no matching items shows a centered purple icon + "검색 결과가 없어요" (No results found) in gray900 text with a suggestion to broaden the filter — no full-bleed illustration, no decorative artwork
227
+ - **Loading (skeleton):** Product cards show a gray100 (#F7F6F5) block for the image area and two gray200 (#EFEEEB) lines for title/price; animated with a left-to-right shimmer using linear gradient
228
+ - **Error — Network:** Full-page or modal overlay on a white background with a neutral icon, headline in gray1000, sub-copy in gray800, and a black "다시 시도" (Retry) CTA button
229
+ - **Error — Validation:** Inline beneath form fields; border turns red (#EC5151), helper text appears in red500 at 1.2rem (12px), field label does not change color
230
+ - **Success:** Green (#1EB789) inline confirmation text or toast; checkmark icon at 24px; auto-dismisses after 3s with 0.2s ease-in-out fade-out
231
+ - **Skeleton (product detail):** Hero image area dims to gray200, product title and price lines show as gray100 bars; below-fold specs show 3-line skeleton
232
+ - **Disabled:** Button opacity 0.65; text color switches to #AFAEAB (gray600/textDisabled); cursor changes to not-allowed; no background color change
233
+
234
+ ## 15. Motion & Easing
235
+
236
+ **Duration scale:**
237
+ - Micro: 150ms — border-color focus transitions (`ease-in-out`)
238
+ - Short: 200ms — hover state color changes, icon rotations (`ease-in-out`)
239
+ - Medium: 240ms — drawer bottom position animations (`ease`)
240
+ - Standard: 325ms — modal entrance/exit, overlay opacity (`ease-out`)
241
+ - Long: 400ms — page-level slide carousels (`linear`)
242
+
243
+ **Primary easing functions:**
244
+ - `ease-in-out` — default for interactive state changes (border, background-color)
245
+ - `ease-out` — modal fade-in and slide-up (enters fast, settles gently)
246
+ - `linear` — carousel swipe momentum, progress bars
247
+
248
+ **Rules:**
249
+ - All transitions are applied via CSS `transition` properties; no JavaScript-driven animation for routine UI state changes
250
+ - Skeleton shimmer uses a CSS linear-gradient animation at 1.5s infinite linear (AOS library handles scroll-triggered reveals)
251
+ - Carousel interactions use Swiper.js inertia; drag velocity maps naturally without artificial easing override
252
+ - Reduced-motion: no explicit `prefers-reduced-motion` override is in the current CSS; agents generating new components must add it
@@ -257,3 +257,21 @@ Consistent with the systemic Korean-coverage gap.
257
257
  ---
258
258
 
259
259
  *Captured via `omd:add-reference` (CREATE mode) on 2026-05-15. See `assets/_reference/` for tokens.json, structure.json, fonts.json, .live-inspect-proof.json, screenshots/, LICENSE-NOTE.md, attribution.md.*
260
+
261
+ ## 16. Do's and Don'ts
262
+
263
+ ### Do
264
+ - Lock the canvas to pure black (#000000) at the document root and build depth through surface contrast (#000 → #2E2E2E → rgba(15,15,15,0.74)) since box-shadow renders 0 0 #0000 across all product chrome
265
+ - Reserve the brand red #FF153C strictly for CTAs, brand marks, and live-status accents — keeping it to a handful of background nodes the way the doc samples only twelve red backgrounds across 3,000 nodes
266
+ - Drive content-area-aware chrome from the six --color-cate-* tokens (home #FF1F45, live #FF584A, clip #FD8163, VOD #387DFF, movie #7D57FC, ad #FCC800) so color carries product taxonomy
267
+ - Apply the top-corners-only radius (16.5292px 16.5292px 0 0) to poster cards so the image bleeds flush to the bottom metadata edge
268
+ - Set Pretendard as the exclusive typeface and hold weights to the binary 400 body / 700 heading-and-CTA scale, with no 500/600 intermediates
269
+ - Build primary CTAs as #FF153C background, #FFFFFF label, Pretendard 18.6px/700 with generous 19.6292px 62px padding so 4-syllable Korean labels never wrap
270
+
271
+ ### Don't
272
+ - Spread #FF153C across large background areas or decorative fills — it is a CTA, brand-mark, and live-status accent only, never an ambient surface color
273
+ - Apply the locked dark canvas to non-video products, since #000 earns its energy from poster art and video frames a SaaS dashboard or marketplace cannot supply
274
+ - Adopt the six --color-cate-* taxonomy hues for a product with fewer than six genuine content surface paradigms, which only produces visual noise
275
+ - Reproduce #FF153C verbatim as it is a CJ ENM brand color — shift it within the #E0142E–#FF2A4D range with WCAG contrast checks on dark surface if you want a TVING-like scarlet
276
+ - Substitute a system font for Pretendard, whose optical sizing differs meaningfully from Apple SD Gothic Neo at the 12–18px display range
277
+ - Apply the top-corners-only radius to text cards or import the live geometry tokens (e.g. --kbo-player-width: calc(100vw - 31.25rem)) as-is, since both are calibrated to TVING's poster bleed and specific sidebar
@@ -271,6 +271,25 @@ The "why now" thesis encoded in the surface: in a market famous for speculative
271
271
  3. Modal enter from `translateY(8px) opacity:0` → identity over 200ms ease-out. Exit reverses, 250ms.
272
272
  4. Row-print blink: tint fades in 150ms then holds for 800ms before easing out 400ms. The 800ms hold is what makes a moving market legible.
273
273
 
274
+
275
+ ## 16. Do's and Don'ts
276
+
277
+ ### Do
278
+ - Lead with tables, not cards — make the data the hero and the chrome the frame, with row heights of 45px on tradable lists and 30px on column headers
279
+ - Encode direction in the Korean convention: red `#DD3C44` for 상승 (up) and blue `#1375EC` for 하락 (down), and invert to green-up/red-down only when porting to US/EU markets
280
+ - Communicate row direction with an 8% alpha tint (`rgba(221,60,68,0.08)` rise / `rgba(19,117,236,0.08)` fall) so the hue supports rather than overpowers the numeral
281
+ - Keep buttons flat and tight — 4px radius, no border, white text, scaling the blue by stakes: `#0062DF` for nav CTAs, `#003597` for the 44px hero CTA
282
+ - Label CTAs as nouns or noun-phrases (로그인, 회원가입, 거래소 둘러보기, 직접입력) and split sentence-final forms by surface — `~합니다` on notices, `~해요` on product modules
283
+ - Hold motion to the duration scale (100ms hover / 150ms row blink / 200ms nav / 250ms modal out) and animate only a price cell's background tint, never its typography
284
+
285
+ ### Don't
286
+ - Wrap a price or numeral in a decorative card container — table primitives outrank card primitives on trading surfaces
287
+ - Spread the accent blues (`#1375EC` / `#003597`) across large background areas; the page stays light on `#E9ECF1` with white panels and color used structurally
288
+ - Add page transitions, parallax, scroll-jacking, or spring easing — the exchange surface is already in constant micro-motion from updating numbers
289
+ - Sell with imperatives or exclamation (지금 시작하세요!, 쉽고 빠르게!) or lead with brand voice on a trading screen; keep persuasive copy to marketing surfaces only
290
+ - Use emoji, exclamation marks, or a startup-slang tone on price surfaces — the register stays composed and procedural
291
+ - Treat English as a translation layer — ship the Korean stack first with EN as a sibling KO/EN segment, and don't prune the Korean fallback chain to legacy families like Dotum / 돋움
292
+
274
293
  ---
275
294
 
276
295
  **OmD provenance:** Created 2026-05-14 via `omd:add-reference` CREATE pipeline. Tier 1 = live CDP inspect (2 surfaces, 121 raw samples). Tier 2 = both indexes attempted, both empty (documented). Tier 1 official DS = negative (documented). IP guardrails: brand assets reference-only; voice fresh characterization; no verbatim taglines. See `_research.md` for full source map.
@@ -212,3 +212,21 @@ These are reasoned inferences from the surface IA and proof bands, not user rese
212
212
  6. Motion tokens and component-state coverage incomplete — UPDATE pass recommended on a product detail page (e.g. `/products/solar-pro-3`) and Documentation surface.
213
213
 
214
214
  **IP guardrails confirmed**: brand assets reference-only (logos / Espeak face not redistributed); no verbatim Upstage marketing copy quoted; §10 voice samples are fresh OmD-derived shape-only alternatives; KR business-information block reproduced as factual disclosure, not promotion.
215
+
216
+ ## 16. Do's and Don'ts
217
+
218
+ ### Do
219
+ - Reserve interactive violet #5B52FF as the only chromatic gesture that does work — links, CTAs, and secondary-button text, the way it appears across its 55 sampled occurrences
220
+ - Anchor the brand on the plum canvas #3C043B (the '--colors--grey-background' hero) paired with violet primary, staying on the violet-plum axis instead of any cobalt default
221
+ - Build vertical rhythm from surface-color flips band to band (plum hero to white product band to dark industry grid to near-black footer #191722), not from drop shadows or a numeric spacing ladder
222
+ - Keep type to the three-family, three-job system: Geist for ~93% of body and headings, Espeak only on the hero H1 at 57.6px/600, and a monospace mid-sentence swap for the rotating industry word
223
+ - Encode the binary radius literally — 0px for sections, cards, hero, and footer; 8px ('--style--radius-8px') only for pressable controls and content chips
224
+ - Set body copy in Geist gray #70757F (the dominant 428-element text color) at 18px/400, the way most paragraph text ships
225
+
226
+ ### Don't
227
+ - Spread the Solar yellow-green #D2FF95 broadly — keep it as a single-use accent adjacent to the Solar product narrative, never a default button surface or section background
228
+ - Introduce a fourth type family beyond Geist, Espeak, and the monospace swap, which would break the rotating-word gesture
229
+ - Soften the binary geometry with 4px, 12px, or 16px middle radii, which erases the layout-versus-pressable distinction
230
+ - Import drop-shadow card chrome like 'box-shadow: 0 8px 24px rgba(0,0,0,0.08)' — Upstage ships effectively zero elevation and builds depth from surface contrast and #EEEEEE hairlines
231
+ - Default to a corporate blue primary, the enterprise-AI cliche Upstage consciously avoids in favor of the violet-plum axis
232
+ - Center-align the hero or signal the rotating industry word with color or weight — keep it left-aligned with the typographic monospace shift as the variable-slot cue
@@ -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)