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,227 @@
1
+ ---
2
+ id: voicetube
3
+ name: "VoiceTube"
4
+ country: TW
5
+ category: education
6
+ homepage: "https://tw.voicetube.com"
7
+ primary_color: "#7E3AAF"
8
+ logo:
9
+ type: favicon
10
+ slug: "https://www.google.com/s2/favicons?domain=tw.voicetube.com&sz=256"
11
+ verified: "2026-06-03"
12
+ omd: "0.1"
13
+ ---
14
+
15
+ # VoiceTube
16
+
17
+ Asia's largest video-based English learning platform, blending immersive YouTube content with AI-powered study tools under a dramatic dark-purple brand identity.
18
+
19
+ ## 1. Visual Theme & Atmosphere
20
+
21
+ VoiceTube presents a consistently dark, cinematic atmosphere built around a deep purple-to-near-black canvas. The body background is `#18131D` — a dark aubergine that evokes a premium streaming experience rather than a conventional classroom — while the navigation bar graduates from `#210040` to `#1D102B` as a horizontal gradient, anchoring every page in the brand's deepest signature hues. Primary call-to-action elements arrive as pill-shaped buttons bearing a vivid diagonal gradient from `#653AAF` to `#A73AAF`, injecting a pop of electric violet that reads immediately as the interactive signal layer. Secondary surfaces such as the sidebar and product grid use `#251633`, creating a subtle two-stop dark elevation system. The overall mood is energetic and night-mode-native: think streaming platform meets study app, where video thumbnail cards float on near-black panels, typography in soft white-gray (`#E3E3E3`) maintains clarity without harshness, and playful gradient accents ensure the interface never feels heavy or academic.
22
+
23
+ ## 2. Color Palette & Roles
24
+
25
+ - **Brand Purple 400 (Primary):** `#7E3AAF` — interactive accents, badge fills, focused input borders
26
+ - **Brand Purple 300 (Vibrant):** `#A73AAF` — gradient endpoint, hover highlights, accent text on dark
27
+ - **Button Gradient Start:** `#653AAF` — primary CTA gradient origin (135.73°)
28
+ - **Deep Purple 500:** `#210040` — navigation gradient start, deepest surface overlays
29
+ - **Dark Aubergine 800 (Background):** `#18131D` — body canvas, default page background
30
+ - **Surface 600:** `#251633` — sidebar background, secondary card surfaces
31
+ - **Nav Gradient End:** `#1D102B` — navigation bar right edge
32
+ - **Purple Tint 100:** `#E0D0EC` — light tag fill, subtle selected state
33
+ - **White:** `#FFFFFF` — primary text on gradient buttons
34
+ - **Gray 300 (Body Text):** `#E3E3E3` — body text on dark, outline button text and border
35
+ - **Gray 400 (Secondary):** `#B4B4B4` — secondary labels, disabled state text
36
+ - **Gray 500 (Muted):** `#9CA3AF` — placeholder text
37
+ - **Error:** `#ED4F55` — danger borders, validation messages
38
+ - **Success:** `#33991D` — correct answers, achievement indicators
39
+ - **Link/Info:** `#4283E4` — hyperlink color, informational icons
40
+
41
+ ## 3. Typography Rules
42
+
43
+ VoiceTube's global body font is a CJK-first stack: `-apple-system, BlinkMacSystemFont, PingFang TC, PingFang SC, Hiragino Sans, Hiragino Kaku Gothic ProN, Microsoft JhengHei, Microsoft YaHei, Meiryo, Segoe UI, Roboto, Helvetica Neue, Arial, sans-serif`. This stack ensures Mandarin and Japanese characters render optimally before falling back to Latin fonts. The base font weight is `400`, body text is set in `#E3E3E3` for comfortable contrast on dark backgrounds, and line-height defaults to `1.425` (the `vc-leading-base` token). The proprietary logomark typeface features 60° slanted stroke extensions that echo the play-button triangle — this angular DNA is brand-exclusive and not replicated in UI text. The type scale in use: `xs = 12px`, `sm = 14px`, `base/md = 16px`, `lg = 18px`, `xl = 20px`, `2xl = 24px`. Weight tokens span from `vc-font-light (300)` through `vc-font-normal (400)`, `vc-font-medium (500)`, `vc-font-semibold (600)`, `vc-font-bold (700)`, to `vc-font-black (900)`. Navigation labels and primary UI text use `500 (medium)`.
44
+
45
+ ## 4. Component Stylings
46
+
47
+ ### Primary CTA Button
48
+
49
+ **Gradient Filled**
50
+ - Background: `linear-gradient(135.73deg, #653AAF, #A73AAF 98.77%)`
51
+ - Text: `#FFFFFF`
52
+ - Radius: 9999px
53
+ - Height: 40px
54
+ - Padding: 0 20px
55
+ - Font: 16px / 500
56
+
57
+ ### Outline Button
58
+
59
+ **Ghost / Secondary**
60
+ - Background: `transparent`
61
+ - Text: `#E3E3E3`
62
+ - Border: 1px solid `#E3E3E3`
63
+ - Radius: 9999px
64
+ - Height: 40px
65
+ - Padding: 0 20px
66
+ - Font: 16px / 500
67
+
68
+ ### Navigation Bar
69
+
70
+ **Top Nav**
71
+ - Background: `linear-gradient(to right, #210040, #1D102B)`
72
+ - Text: `#E3E3E3`
73
+ - Height: 64px
74
+
75
+ ### Sidebar Nav Item
76
+
77
+ **Active / Hover**
78
+ - Background: `rgba(126, 58, 175, 0.2)`
79
+ - Text: `#E3E3E3`
80
+ - Padding: 12px 8px
81
+ - Font: 14px / 400
82
+ - Radius: 0px
83
+
84
+ ### Tag / Badge Chip
85
+
86
+ **Brand Tag**
87
+ - Background: `#7E3AAF`
88
+ - Text: `#E3E3E3`
89
+ - Radius: 4px
90
+ - Padding: 2.5px 12px
91
+ - Font: 14px / 400
92
+
93
+ ### Text Input
94
+
95
+ **Default State**
96
+ - Background: `transparent`
97
+ - Text: `#E3E3E3`
98
+ - Border: 1px solid `#E3E3E3`
99
+ - Radius: 4px
100
+
101
+ **Focus / Hover**
102
+ - Border: 1px solid `#7E3AAF`
103
+
104
+ **Disabled**
105
+ - Text: `#B4B4B4`
106
+
107
+ **Error**
108
+ - Border: 1px solid `#ED4F55`
109
+ - Text: `#ED4F55`
110
+
111
+ ---
112
+ **Verified:** 2026-06-03
113
+ **Tier 1 sources:** https://tw.voicetube.com (homepage HTML + CSS `/_next/static/css/8c750a42d09ad582.css`); https://tw.voicetube.com/branding (brand page — structure + JS chunk `page-7cb732e6cbfefad2.js`); https://tw.voicetube.com/about (brand narrative)
114
+ **Tier 2 sources:** getdesign.md/voicetube — NOT LISTED ("No designs found for 'voicetube'"). refero — no result found for VoiceTube.
115
+ **Conflicts unresolved:** none
116
+
117
+ ## 5. Layout Principles
118
+
119
+ VoiceTube uses a responsive two-column shell on desktop: a fixed 110px-wide sidebar navigation column paired with a fluid content area (`vc-grid-cols-[110px_1fr]`), which collapses to single-column on mobile (`lg:vc-grid-cols-1`). Content grids for video cards typically use 3–4 columns on large screens, scaling down through 2-column tablet to single-column mobile layouts. Horizontal container padding follows the Tailwind spacing scale (`p-4` = 16px, `p-5` = 20px, `p-6` = 24px). The overall max content width is not capped artificially narrow — VoiceTube leans into wide viewports for its video-first grid. Sticky positioning is used for the top navigation bar at `z-[800]`, ensuring it floats above all content as users scroll through dense video libraries.
120
+
121
+ ## 6. Depth & Elevation
122
+
123
+ VoiceTube's elevation model is purely dark-stack-based — layers are distinguished by background darkness rather than box-shadows. The four tiers in practice: **L0** `#18131D` (body canvas), **L1** `#1D102B–#210040` (navigation, modal backdrops), **L2** `#251633` (sidebar panels, card surfaces), **L3** `#2B2B2B` (dark-500 floating elements, tooltips). Genuine `box-shadow` usage is sparse; focus states use a thin `0 0.1px 0 0 #7E3AAF` outline-shadow rather than a spread shadow, keeping the UI graphically flat. Modal/overlay z-indices follow a defined stack: content at 100, sticky nav at 800, modals at 1200–1299, toasts/notifications at 1500–1600.
124
+
125
+ ## 7. Do's and Don'ts
126
+
127
+ ### Do
128
+ - Use the `linear-gradient(135.73deg, #653AAF, #A73AAF)` gradient as the primary CTA fill to maintain brand energy
129
+ - Apply `#7E3AAF` for interactive focus rings, active link states, and selected filters
130
+ - Use pill-shaped buttons (`border-radius: 9999px`) for all standalone CTA actions
131
+ - Keep body backgrounds in the `#18131D` to `#251633` range for dark-mode consistency
132
+ - Use `#E3E3E3` (gray-300) as the default text color on dark surfaces
133
+ - Prefer the CJK-inclusive font stack for any Mandarin or Japanese content
134
+ - Apply `ease-out` timing for all UI transitions at 150ms or 300ms
135
+
136
+ ### Don't
137
+ - Don't use high-saturation colors from outside the purple / teal / orange product palette without clear context
138
+ - Don't apply gradient buttons to destructive actions (delete, remove) — use plain `#ED4F55` borders instead
139
+ - Don't use light backgrounds (`#FFFFFF`, `#F3F3F3`) as page canvas — VoiceTube is dark-mode-native
140
+ - Don't mix border-radius: square corners would clash with the brand's pill-and-round language
141
+ - Don't stack multiple box-shadows — elevation is communicated through dark tone layering, not shadow spreads
142
+ - Don't reduce font weight below 400 for UI text at `14px` or smaller on dark surfaces
143
+
144
+ ## 8. Responsive Behavior
145
+
146
+ VoiceTube's breakpoint system uses Tailwind's `md` (768px) and `lg` (1024px) prefixes extensively. The pattern `md:vc-h-9 md:vc-text-sm` on buttons demonstrates size reduction at tablet widths: button height drops from 40px to 36px and font from 16px to 14px. The sidebar collapses at `lg:vc-hidden`. Video grids shift from a multi-column layout to a vertically stacked, horizontally scrollable carousel on mobile. Hero section typography is set in viewport-relative units (`4.167vw` headline on desktop, `6.4vw` on mobile), ensuring the brand message fills the screen at every size. Padding contracts gracefully: `p-6` on desktop drops to `p-4` on mobile throughout content areas.
147
+
148
+ ## 9. Agent Prompt Guide
149
+
150
+ When building VoiceTube-style UI:
151
+ - Dark canvas: body background `#18131D`, sidebar `#251633`, nav `linear-gradient(to right, #210040, #1D102B)`
152
+ - Primary button: `border-radius: 9999px`, `height: 40px`, `padding: 0 20px`, `background: linear-gradient(135.73deg, #653AAF, #A73AAF)`, `color: #FFFFFF`, `font-weight: 500`, `font-size: 16px`
153
+ - Outline button: same shape, `background: transparent`, `border: 1px solid #E3E3E3`, `color: #E3E3E3`
154
+ - Focus ring: `box-shadow: 0 0 0 1px #7E3AAF`
155
+ - Error state: `border-color: #ED4F55`, `color: #ED4F55`
156
+ - Disabled: `color: #B4B4B4`, `cursor: not-allowed`
157
+ - Transitions: `transition-duration: 150ms`, `transition-timing-function: ease-out`
158
+ - Font stack: `-apple-system, BlinkMacSystemFont, "PingFang TC", "PingFang SC", "Microsoft JhengHei", sans-serif`
159
+
160
+ ## 10. Voice & Tone
161
+
162
+ VoiceTube's copy voice is **energetic, inclusive, encouraging** — a friendly study partner who celebrates small wins without condescension.
163
+
164
+ | Dimension | Do | Don't |
165
+ |---|---|---|
166
+ | Register | Warm, conversational, direct | Academic, formal, passive |
167
+ | Pacing | Short punchy sentences | Long subordinate clause chains |
168
+ | CTA framing | "開始學習" / "免費加入" | "Please register to access content" |
169
+ | Achievement framing | "你做到了!" / "再接再厲" | "Your score was insufficient" |
170
+ | Error framing | "再試一次" (try again) | "An error has occurred" |
171
+
172
+ Voice samples (illustrative):
173
+ - *Illustrative — homepage headline register:* "連結世界、享受學習樂趣!" — Connect to the world, enjoy learning. No jargon, no friction, pure invitation.
174
+ - *Illustrative — product description:* "每天20分鐘跟著練習,即可獲得30天免費訂閱制" — Specific promise, specific time, specific reward. Numbers over adjectives.
175
+ - *Illustrative — branding tagline:* "Connect. Have fun!" — Two words each. The brand thinks in micro-copy that works across any language boundary.
176
+
177
+ ## 11. Brand Narrative
178
+
179
+ VoiceTube launched in 2013 when three co-founders — Zenn, Lai, and Tsai — were teaching themselves English after work using YouTube videos. What started as a personal workaround became a community: a place where millions of Mandarin speakers could learn the world's lingua franca through the authentic, conversational content they actually wanted to watch. The insight was simple but powerful — context-rich video beats rote drilling, and the best classroom is one you choose to enter.
180
+
181
+ From that origin story, VoiceTube built "Asia's largest online education platform," expanding from a curated video library into a full learning ecosystem: the core VoiceTube app for daily video-driven practice, Hero for AI-adaptive test preparation, Vclass for live celebrity-instructor courses, and Dictionary for deep vocabulary acquisition with dual-accent audio. The brand's name fuses "voice" (spoken language output, the hardest skill to acquire) with "tube" (YouTube's video-native learning environment), and the logo literalises this: a play triangle, the letter V, and a checkmark merged into a single mark whose 60°-angle typography echoes the geometry of the play button across every letterform.
182
+
183
+ Today, with over 5 million users and recognition including Facebook App of the Year 2016, VoiceTube positions itself not as a language-learning tool but as a social platform for human connection through English — summarised in its rallying cry: **"Connect. Have fun!"**
184
+
185
+ ## 12. Principles
186
+
187
+ 1. **Video-first learning.** Real language lives in authentic video, not curated sentences. Every feature exists to make video consumption study-worthy. *UI implication:* Video thumbnails are the primary content atom; card grids prioritize visual poster art with minimal text overlay.
188
+
189
+ 2. **Connection over completion.** Learning English is a means to connect with people and ideas worldwide, not a checkmark. *UI implication:* Social indicators (learner counts, challenge rankings) are surfaced prominently to reinforce the community dimension.
190
+
191
+ 3. **Guided, not gatekept.** The platform meets learners where they are and provides direction without testing walls. *UI implication:* Free content is broadly accessible; premium features are surfaced contextually via gentle gradient CTAs rather than locked-content banners.
192
+
193
+ 4. **Innovation in every layer.** From AI vocabulary recommendations to gamified pronunciation challenges, technology should make learning feel effortless. *UI implication:* AI-powered elements are woven into the core flow — word lookup inline, difficulty auto-adjustment, personalised ranking — rather than siloed as premium add-ons.
194
+
195
+ 5. **Diverse and compound identity.** The brand serves Mandarin, Japanese, and Vietnamese speakers, and the design must flex accordingly. *UI implication:* CJK-optimized font stacks, locale-aware copy, and multi-lingual navigation are non-negotiable baseline requirements.
196
+
197
+ ## 13. Personas
198
+
199
+ *Illustrative archetype — The Ambitious Professional:* A 28-year-old Taipei product manager who needs business English to advance her career. She has 20–30 minutes on her commute. She uses VoiceTube for daily video practice and Hero for TOEIC prep. She values progress indicators and streak mechanics that prove the time investment is working.
200
+
201
+ *Illustrative archetype — The Pop-Culture Learner:* A 19-year-old university student in Taichung who watches English-language YouTube unsubbed but misses nuance. He found VoiceTube through a gaming channel and now uses the dictionary for slang. He values content discovery and social sharing over structured curricula.
202
+
203
+ *Illustrative archetype — The Late-Stage Returner:* A 45-year-old parent in Kaohsiung who studied English in school, let it lapse, and now wants to rebuild for their child's international schooling applications. She learns through Vclass with established instructors. She values warmth, patience, and celebrity-instructor credibility over gamification.
204
+
205
+ *Illustrative archetype — The Japanese Exchange Student:* A 22-year-old from Osaka studying at NTU who uses VoiceTube's Japanese-locale version to practice English while picking up Mandarin via Taiwanese content. He values the multi-locale product suite and dual-accent dictionary features.
206
+
207
+ ## 14. States
208
+
209
+ - **Empty — no search results:** Dark panel with centered illustration and copy "找不到相關影片,試試其他關鍵字" — purple-tinted icon at low opacity against `#18131D`, no hard borders.
210
+ - **Loading — video grid:** Skeleton cards in `#251633` with subtle shimmer animation sweeping left-to-right in `#1D102B`, matching the existing dark elevation tier so the layout shift is imperceptible.
211
+ - **Error — form validation:** Input border shifts to `1px solid #ED4F55`, placeholder text and error label render in `#ED4F55`, the field label color also shifts to match.
212
+ - **Error — page/server:** Full-page dark overlay at `#18131D` with a centered 404/500 message in `#E3E3E3`, no gradient backgrounds — keeps the dark canvas consistent.
213
+ - **Success — quiz answer correct:** `#33991D` confirmation background at 10% opacity (`rgba(51, 153, 29, 0.1)`) with a full-opacity `#33991D` border and checkmark icon.
214
+ - **Skeleton — video card:** `#251633` block sized to thumbnail aspect-ratio with a `#1D102B` shimmer pulse at 0.8s ease-in-out; title line represented by two `#251633` rounded bars.
215
+ - **Disabled — button:** `opacity: 0.6`, `cursor: not-allowed`, text shifts to `#B4B4B4`, gradient or border color desaturates; no hover effect fires.
216
+
217
+ ## 15. Motion & Easing
218
+
219
+ VoiceTube uses a compact three-step duration scale anchored in Tailwind custom tokens:
220
+
221
+ | Token | Value | Use |
222
+ |---|---|---|
223
+ | `vc-duration-sm` | 86ms | Micro-interactions: hover color shifts, focus ring appearance |
224
+ | `vc-duration-md` | 150ms | Standard transitions: button state changes, border-color, background-color |
225
+ | `vc-duration-xl` | 300ms | Page-level: slide-in panels, carousel advances, modal entrance |
226
+
227
+ The default easing is `ease-out` (`vc-ease-base`) — elements decelerate into their resting position, conveying arrival and completion. `cubic-bezier(0.4, 0, 0.2, 1)` (`vc-ease-in-out`) appears on keyboard-focus indicators and bi-directional carousels where enter and exit need to be symmetrical. Carousel progress dots use a width-transition at `vc-duration-md / ease-out` (active dot expands from 10px to 30px). No spring/bounce physics — the brand is energetic through color and gradient, not through over-engineered motion.
@@ -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
- - Do: Use WF Visual Sans Variable at 500–600. Blue (#146ef5) for CTAs. 4px radius. translate(6px) hover.
169
- - Don't: Round beyond 8px for functional elements. Use secondary colors on primary CTAs.
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