oh-my-design-cli 1.0.1 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/README.md +15 -18
  2. package/data/reference-fingerprints.json +337 -3
  3. package/data/reference-tags.md +15 -1
  4. package/dist/bin/oh-my-design.js +1 -1
  5. package/dist/{install-skills-GQPTQF5S.js → install-skills-MVXVXYAY.js} +4 -4
  6. package/dist/{install-skills-GQPTQF5S.js.map → install-skills-MVXVXYAY.js.map} +1 -1
  7. package/package.json +2 -2
  8. package/skills/omd-init/SKILL.md +1 -1
  9. package/web/AGENTS.md +5 -0
  10. package/{references → web/references}/airbnb/DESIGN.md +158 -19
  11. package/web/references/airtable/DESIGN.md +241 -0
  12. package/{references → web/references}/apple/DESIGN.md +131 -76
  13. package/web/references/baemin/DESIGN.md +470 -0
  14. package/{references → web/references}/bmw/DESIGN.md +138 -9
  15. package/{references → web/references}/cal/DESIGN.md +173 -17
  16. package/{references → web/references}/claude/DESIGN.md +11 -1
  17. package/{references → web/references}/clay/DESIGN.md +75 -0
  18. package/{references → web/references}/clickhouse/DESIGN.md +74 -0
  19. package/{references → web/references}/cohere/DESIGN.md +75 -0
  20. package/web/references/coinbase/DESIGN.md +205 -0
  21. package/{references → web/references}/composio/DESIGN.md +74 -0
  22. package/web/references/coupang/DESIGN.md +487 -0
  23. package/{references → web/references}/cursor/DESIGN.md +74 -0
  24. package/web/references/dcard/DESIGN.md +567 -0
  25. package/{references → web/references}/elevenlabs/DESIGN.md +91 -0
  26. package/{references → web/references}/expo/DESIGN.md +72 -0
  27. package/{references → web/references}/ferrari/DESIGN.md +72 -0
  28. package/{references → web/references}/figma/DESIGN.md +124 -48
  29. package/{references → web/references}/framer/DESIGN.md +143 -16
  30. package/web/references/freee/DESIGN.md +558 -0
  31. package/{references → web/references}/hashicorp/DESIGN.md +72 -0
  32. package/{references → web/references}/ibm/DESIGN.md +68 -0
  33. package/{references → web/references}/intercom/DESIGN.md +73 -0
  34. package/web/references/kakao/DESIGN.md +490 -0
  35. package/web/references/kakaobank/DESIGN.md +533 -0
  36. package/web/references/karrot/DESIGN.md +431 -0
  37. package/web/references/kraken/DESIGN.md +219 -0
  38. package/web/references/krds/DESIGN.md +982 -0
  39. package/web/references/kurly/DESIGN.md +574 -0
  40. package/{references → web/references}/lamborghini/DESIGN.md +74 -0
  41. package/{references → web/references}/line/DESIGN.md +84 -43
  42. package/{references → web/references}/linear.app/DESIGN.md +8 -1
  43. package/{references → web/references}/lovable/DESIGN.md +73 -0
  44. package/web/references/mercari/DESIGN.md +464 -0
  45. package/{references → web/references}/minimax/DESIGN.md +72 -0
  46. package/{references → web/references}/mintlify/DESIGN.md +72 -0
  47. package/web/references/miro/DESIGN.md +252 -0
  48. package/{references → web/references}/mistral.ai/DESIGN.md +72 -0
  49. package/{references → web/references}/mongodb/DESIGN.md +72 -0
  50. package/web/references/musinsa/DESIGN.md +536 -0
  51. package/web/references/naver/DESIGN.md +518 -0
  52. package/{references → web/references}/notion/DESIGN.md +9 -1
  53. package/web/references/nvidia/DESIGN.md +491 -0
  54. package/web/references/ohouse/DESIGN.md +570 -0
  55. package/{references → web/references}/ollama/DESIGN.md +72 -0
  56. package/{references → web/references}/opencode.ai/DESIGN.md +73 -0
  57. package/web/references/pinkoi/DESIGN.md +575 -0
  58. package/{references → web/references}/pinterest/DESIGN.md +73 -0
  59. package/{references → web/references}/posthog/DESIGN.md +172 -18
  60. package/web/references/qanda/DESIGN.md +459 -0
  61. package/{references → web/references}/raycast/DESIGN.md +169 -34
  62. package/{references → web/references}/renault/DESIGN.md +72 -0
  63. package/{references → web/references}/replicate/DESIGN.md +73 -0
  64. package/{references → web/references}/resend/DESIGN.md +73 -0
  65. package/{references → web/references}/revolut/DESIGN.md +74 -0
  66. package/web/references/ridi/DESIGN.md +517 -0
  67. package/{references → web/references}/runwayml/DESIGN.md +152 -24
  68. package/{references → web/references}/sanity/DESIGN.md +72 -0
  69. package/{references → web/references}/sentry/DESIGN.md +73 -0
  70. package/web/references/spacex/DESIGN.md +379 -0
  71. package/web/references/spotify/DESIGN.md +426 -0
  72. package/{references → web/references}/stripe/DESIGN.md +44 -1
  73. package/{references → web/references}/supabase/DESIGN.md +73 -0
  74. package/{references → web/references}/superhuman/DESIGN.md +159 -17
  75. package/{references → web/references}/tesla/DESIGN.md +170 -0
  76. package/{references → web/references}/together.ai/DESIGN.md +73 -0
  77. package/{references → web/references}/toss/DESIGN.md +304 -50
  78. package/{references → web/references}/uber/DESIGN.md +73 -0
  79. package/{references → web/references}/vercel/DESIGN.md +9 -1
  80. package/{references → web/references}/voltagent/DESIGN.md +73 -0
  81. package/{references → web/references}/warp/DESIGN.md +142 -15
  82. package/web/references/webflow/DESIGN.md +253 -0
  83. package/{references → web/references}/wise/DESIGN.md +84 -0
  84. package/{references → web/references}/x.ai/DESIGN.md +85 -0
  85. package/web/references/yanolja/DESIGN.md +448 -0
  86. package/web/references/yeogiotte/DESIGN.md +424 -0
  87. package/{references → web/references}/zapier/DESIGN.md +85 -0
  88. package/references/airtable/DESIGN.md +0 -107
  89. package/references/baemin/DESIGN.md +0 -260
  90. package/references/coinbase/DESIGN.md +0 -129
  91. package/references/dcard/DESIGN.md +0 -302
  92. package/references/freee/DESIGN.md +0 -308
  93. package/references/kakao/DESIGN.md +0 -261
  94. package/references/karrot/DESIGN.md +0 -252
  95. package/references/kraken/DESIGN.md +0 -146
  96. package/references/mercari/DESIGN.md +0 -294
  97. package/references/miro/DESIGN.md +0 -108
  98. package/references/nvidia/DESIGN.md +0 -308
  99. package/references/pinkoi/DESIGN.md +0 -309
  100. package/references/spacex/DESIGN.md +0 -205
  101. package/references/spotify/DESIGN.md +0 -246
  102. package/references/webflow/DESIGN.md +0 -109
package/README.md CHANGED
@@ -5,7 +5,7 @@
5
5
  <h1 align="center">oh-my-design</h1>
6
6
 
7
7
  <p align="center">
8
- <strong>One-command bootstrap for skill-driven design with your AI coding agent.</strong> 67 real company design systems. Zero AI calls in the install. Then you just talk to your agent.
8
+ <strong>One-command bootstrap for skill-driven design with your AI coding agent.</strong> 78 real company design systems. Zero AI calls in the install. Then you just talk to your agent.
9
9
  </p>
10
10
 
11
11
  <p align="center">
@@ -13,24 +13,23 @@
13
13
  <a href="https://www.npmjs.com/package/oh-my-design-cli"><img src="https://img.shields.io/npm/dm/oh-my-design-cli?style=flat-square&color=cb3837" alt="npm downloads" /></a>
14
14
  <a href="LICENSE"><img src="https://img.shields.io/github/license/kwakseongjae/oh-my-design?style=flat-square" alt="License" /></a>
15
15
  <a href="https://github.com/kwakseongjae/oh-my-design/stargazers"><img src="https://img.shields.io/github/stars/kwakseongjae/oh-my-design?style=social" alt="GitHub Stars" /></a>
16
- <img src="https://img.shields.io/badge/references-67-7c5cfc?style=flat-square" alt="67 References" />
16
+ <img src="https://img.shields.io/badge/references-78-7c5cfc?style=flat-square" alt="78 References" />
17
17
  <img src="https://img.shields.io/badge/CLI%20commands-1-blue?style=flat-square" alt="One CLI command" />
18
18
  </p>
19
19
 
20
20
  ---
21
21
 
22
- ## What is this?
22
+ ## What is oh-my-design?
23
23
 
24
24
  **oh-my-design (OmD)** turns your AI coding agent (Claude Code / Codex / OpenCode / Cursor) into a senior product designer with a working memory of your brand. You install once. After that, you just describe what you want — components, screens, copy, assets, charts — and the agent applies your project's design system, picks the right asset medium, and ships.
25
25
 
26
- `DESIGN.md` is the brand spec ([Google Stitch](https://stitch.withgoogle.com/docs/design-md/overview/) tokens + the OmD v0.1 brand-philosophy layer: Voice / Narrative / Principles / Personas / States / Motion). 67 real-company DESIGN.md files ship in this package. Pick one, customize through conversation, ship.
26
+ `DESIGN.md` is the brand spec ([Google Stitch](https://stitch.withgoogle.com/docs/design-md/overview/) tokens + the brand-philosophy layer: Voice / Narrative / Principles / Personas / States / Motion). 78 real-company DESIGN.md files ship in this package. Pick one, customize through conversation, ship.
27
27
 
28
28
  **No API keys. No external infra. Everything runs inside your existing CLI session.**
29
29
 
30
30
  ## Install
31
31
 
32
32
  ```bash
33
- cd my-project
34
33
  npx oh-my-design-cli install-skills
35
34
  ```
36
35
 
@@ -38,12 +37,12 @@ Then restart your agent (Cmd+Q in Claude Code, then relaunch) so the new skills
38
37
 
39
38
  That is the only CLI command you will run. Everything else is natural language to your agent.
40
39
 
41
- ## How you use it
40
+ ## How to use omd with your AI
42
41
 
43
42
  Open Claude Code (or Codex / OpenCode) in your project. Just talk:
44
43
 
45
44
  > "Set up the design system for a calm B2B fintech dashboard."
46
- > Agent picks a reference from 67 (likely Linear or Stripe), proposes a hybrid DESIGN.md, asks for confirmation, writes the file plus shims.
45
+ > Agent picks a reference from 78 (likely Linear or Stripe), proposes a hybrid DESIGN.md, asks for confirmation, writes the file plus shims.
47
46
 
48
47
  > "Make the empty-state for the search results page."
49
48
  > Agent reads DESIGN.md, builds the component with brand tokens, picks an inline SVG illustration matching the voice, drops in microcopy that follows the §10 voice rules.
@@ -60,7 +59,7 @@ Open Claude Code (or Codex / OpenCode) in your project. Just talk:
60
59
  > "We never use uppercase CTAs."
61
60
  > Agent silently appends to `.omd/preferences.md`. Next time anyone makes a CTA, that rule applies. Later you can say "fold preferences into DESIGN.md" and the agent merges by scope.
62
61
 
63
- ## What gets installed
62
+ ## What's in the install
64
63
 
65
64
  | Path | Owner | Purpose |
66
65
  |---|---|---|
@@ -68,10 +67,10 @@ Open Claude Code (or Codex / OpenCode) in your project. Just talk:
68
67
  | `.codex/skills/omd-*/SKILL.md` | install-skills | Codex skill bundle |
69
68
  | `.opencode/agents/omd-*.md` | install-skills | OpenCode agent bundle |
70
69
  | `.claude/agents/omd-*.md` | install-skills | 11 canonical sub-agents (master + 10 specialists) |
71
- | `.claude/data/*` | install-skills | 67-reference fingerprints, vocabulary, opt-out corpus |
70
+ | `.claude/data/*` | install-skills | 78-reference fingerprints, vocabulary, opt-out corpus |
72
71
  | `.claude/hooks/*.cjs` | install-skills | UserPromptSubmit / SessionStart / PostToolUse hooks |
73
72
  | `.claude/skills/skill-rules.json` | install-skills | Skill activation rules |
74
- | `references/*/DESIGN.md` | bundled | 67 real design systems |
73
+ | `references/*/DESIGN.md` | bundled | 78 real design systems |
75
74
  | `DESIGN.md` | your agent (after init flow) | Your project's authoritative brand spec |
76
75
  | `CLAUDE.md` / `AGENTS.md` / `.cursor/rules/omd-design.mdc` | omd-sync skill | Pointers so every agent reads DESIGN.md |
77
76
  | `.omd/preferences.md` | omd-remember skill | Append-only design correction log |
@@ -82,7 +81,7 @@ Open Claude Code (or Codex / OpenCode) in your project. Just talk:
82
81
  Skills (loaded into your agent's context based on prompt triggers):
83
82
 
84
83
  - **omd:apply** — DESIGN.md as authoritative context for every UI task. Routes complex requests (assets, charts, full screens, a11y audit) to specialized sub-agents.
85
- - **omd:init** — Bootstrap DESIGN.md from a reference + project description. 67 references, hybrid variation that preserves the reference voice while shifting only user-named axes.
84
+ - **omd:init** — Bootstrap DESIGN.md from a reference + project description. 78 references, hybrid variation that preserves the reference voice while shifting only user-named axes.
86
85
  - **omd:harness** — `/omd-harness <task>` to run the 10-phase design pipeline with checkpoints. Spawns sub-agents in parallel.
87
86
  - **omd:remember** — Captures user corrections to `.omd/preferences.md` automatically when the agent detects them.
88
87
  - **omd:learn** — Folds pending corrections back into DESIGN.md by scope.
@@ -102,18 +101,16 @@ Sub-agents — 1 orchestrator + 10 specialists (invoked by the master or directl
102
101
  - **omd-persona-tester** — Adversarial 4-persona walkthrough (V/J/F/S). sonnet.
103
102
  - **omd-critic** — Root-cause analysis when the user iterates. opus.
104
103
 
105
- ## What 1.0.0 is not
104
+ ## What it is not
106
105
 
107
106
  - It is not a collection of CLI commands. There is one bootstrap command. Everything else is skill prose.
108
- - It is not an SDK. The `dist/index.js` programmatic API is gone. If you need the matching algorithm or shim format, look at the skill markdown directly.
107
+ - It is not an SDK. If you need the matching algorithm or shim format, look at the skill markdown directly.
109
108
  - It does not generate emojis as icons. Asset agent prefers inline SVG (Lucide-matched or custom).
110
109
 
111
- If you were on 0.1.x: see [MIGRATION.md](MIGRATION.md). All your old CLI commands are now spoken to your agent.
110
+ ## Changelog
112
111
 
113
- ## Status
114
-
115
- `v1.0.0` — first skill-first release. Surface area collapsed by ~92% versus 0.1.x. Stable for the install bootstrap; the harness is improving every release as the agent prose tightens.
112
+ See [CHANGELOG.md](CHANGELOG.md) for release history. Migrating from 0.1.x: see [MIGRATION.md](MIGRATION.md).
116
113
 
117
114
  ## License
118
115
 
119
- MIT. References belong to their respective companies — they are reproduced for educational reference.
116
+ MIT — see [LICENSE](LICENSE). References belong to their respective companies; reproduced for educational reference.
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schema_version": 1,
3
- "generated_at": "2026-04-27T10:09:52.199Z",
3
+ "generated_at": "2026-05-11T08:39:03Z",
4
4
  "generator": "oh-my-design parallel agent extraction (Claude Code Agent tool, no API key)",
5
- "count": 67,
5
+ "count": 78,
6
6
  "items": [
7
7
  {
8
8
  "id": "airbnb",
@@ -285,6 +285,37 @@
285
285
  "has_personas": false,
286
286
  "category_raw": "developer-tools"
287
287
  },
288
+ {
289
+ "id": "coupang",
290
+ "primary_color_hex": "#E94B22",
291
+ "category": "E-commerce",
292
+ "visual_theme": "Hyper-efficient Korean discount warehouse: clean white canvas, near-black text, and the warm rocket-exhaust Coupang Red carrying CTAs, price emphasis, and the 로켓배송 badge. Information-dense product grids fit 4-5 cards per row with sharp 0-4px corners and tabular price stacks.",
293
+ "voice_fingerprint": {
294
+ "register": "minimal-utility",
295
+ "sentence_length": "short",
296
+ "metaphor_density": "none",
297
+ "vocabulary_register": "korean-dominant"
298
+ },
299
+ "tone_keywords": [
300
+ "direct",
301
+ "transactional",
302
+ "deal-driven",
303
+ "results-first",
304
+ "utility",
305
+ "dense"
306
+ ],
307
+ "antipatterns": [
308
+ "불편을 드려 죄송합니다",
309
+ "데이터가 없습니다",
310
+ "오류가 발생했습니다",
311
+ "놀라운",
312
+ "혁신적인",
313
+ "amazing deals"
314
+ ],
315
+ "signature_motion": "Add-to-cart fly performs a brief 8% scaled translate of the thumbnail toward the cart icon with a +1 badge increment — confirms without blocking.",
316
+ "has_personas": true,
317
+ "category_raw": "e-commerce mass market"
318
+ },
288
319
  {
289
320
  "id": "cursor",
290
321
  "primary_color_hex": "#26251e",
@@ -548,6 +579,37 @@
548
579
  "has_personas": false,
549
580
  "category_raw": "messaging / consumer super-app"
550
581
  },
582
+ {
583
+ "id": "kakaobank",
584
+ "primary_color_hex": "#FFE300",
585
+ "category": "Fintech",
586
+ "visual_theme": "Banking-formal restraint with character flavoring: near-monochrome white canvas with KakaoBank Yellow reserved for the symbol, app icon, debit card faces, and primary CTAs. The corporate site is almost black on white; yellow earns its space only where trust is already established.",
587
+ "voice_fingerprint": {
588
+ "register": "minimal-utility",
589
+ "sentence_length": "short",
590
+ "metaphor_density": "none",
591
+ "vocabulary_register": "korean-dominant"
592
+ },
593
+ "tone_keywords": [
594
+ "friendly",
595
+ "plain-spoken",
596
+ "warm",
597
+ "formal-when-needed",
598
+ "personal",
599
+ "trustworthy"
600
+ ],
601
+ "antipatterns": [
602
+ "불편을 드려 죄송합니다",
603
+ "데이터가 없습니다",
604
+ "오류가 발생했습니다",
605
+ "혁신적인",
606
+ "업계 최초",
607
+ "사기 주의!"
608
+ ],
609
+ "signature_motion": "Transfer-success check icon scales 0.6 → 1.0 with a controlled spring — the brand's '끝났어요' signature, the one licensed overshoot.",
610
+ "has_personas": true,
611
+ "category_raw": "internet-only bank"
612
+ },
551
613
  {
552
614
  "id": "karrot",
553
615
  "primary_color_hex": "#ff6600",
@@ -589,6 +651,68 @@
589
651
  "has_personas": false,
590
652
  "category_raw": "fintech / crypto exchange"
591
653
  },
654
+ {
655
+ "id": "krds",
656
+ "primary_color_hex": "#256EF4",
657
+ "category": "Government",
658
+ "visual_theme": "Public service utility, not marketing brand: pure white canvas with near-black body text and Government Blue functioning as the singular action color — never decoration. Thin gray borders and 8px corners carry separation; visual weight is consistently subdued and accessibility (KWCAG 2.1 AA) is enforced at the token layer.",
659
+ "voice_fingerprint": {
660
+ "register": "civic-formal",
661
+ "sentence_length": "short",
662
+ "metaphor_density": "none",
663
+ "vocabulary_register": "korean-dominant"
664
+ },
665
+ "tone_keywords": [
666
+ "polite",
667
+ "predictable",
668
+ "accessible",
669
+ "clear",
670
+ "neutral",
671
+ "civic"
672
+ ],
673
+ "antipatterns": [
674
+ "혁신적인",
675
+ "차세대",
676
+ "최고의",
677
+ "데이터가 없습니다",
678
+ "오류가 발생했습니다",
679
+ "고객님께서는 ~해 주시기 바랍니다"
680
+ ],
681
+ "signature_motion": "Menu/dropdown opens with a 400ms ease-in-out opacity + translateY(-4px → 0) — no spring, no overshoot, all transitions resolve under 400ms.",
682
+ "has_personas": true,
683
+ "category_raw": "government / public service design system"
684
+ },
685
+ {
686
+ "id": "kurly",
687
+ "primary_color_hex": "#5F0080",
688
+ "category": "E-commerce",
689
+ "visual_theme": "Curator's grocer: a quiet white-and-cream gallery wall where the only saturated thing is one deep editorial Kurly Purple. Photography-forward product grids on cream/white with restrained chrome and a single premium aubergine repeated just often enough that the eye learns to associate it with 'Kurly promised this.'",
690
+ "voice_fingerprint": {
691
+ "register": "editorial-warm",
692
+ "sentence_length": "short",
693
+ "metaphor_density": "sparse",
694
+ "vocabulary_register": "korean-dominant"
695
+ },
696
+ "tone_keywords": [
697
+ "calm",
698
+ "curated",
699
+ "operational",
700
+ "warm",
701
+ "restrained",
702
+ "editorial"
703
+ ],
704
+ "antipatterns": [
705
+ "대박",
706
+ "미친 가격",
707
+ "초특가",
708
+ "쇼킹",
709
+ "Mind-blowing deals",
710
+ "혁신적인"
711
+ ],
712
+ "signature_motion": "Product card hover-lift raises shadow without any scale change — restraint over carnival, photography stays the same size.",
713
+ "has_personas": true,
714
+ "category_raw": "premium grocery / dawn delivery"
715
+ },
592
716
  {
593
717
  "id": "lamborghini",
594
718
  "primary_color_hex": "#FFC000",
@@ -816,6 +940,64 @@
816
940
  "has_personas": false,
817
941
  "category_raw": "developer database"
818
942
  },
943
+ {
944
+ "id": "musinsa",
945
+ "primary_color_hex": "#000000",
946
+ "category": "E-commerce",
947
+ "visual_theme": "Editorial street-fashion magazine cut to grid: monochrome black-and-white discipline on pure white with a single saturated sale red used scarcely, hairline #eeeeee borders, and dense 13-14px Pretendard type with tight negative tracking. Photographs are the only thing on screen permitted to carry color.",
948
+ "voice_fingerprint": {
949
+ "register": "editorial-warm",
950
+ "sentence_length": "short",
951
+ "metaphor_density": "none",
952
+ "vocabulary_register": "mixed"
953
+ },
954
+ "tone_keywords": [
955
+ "editorial",
956
+ "compact",
957
+ "declarative",
958
+ "monochrome",
959
+ "magazine"
960
+ ],
961
+ "antipatterns": [
962
+ "놀라운 할인",
963
+ "최저가 보장!!!",
964
+ "대박 세일",
965
+ "amazing deals",
966
+ "must-have"
967
+ ],
968
+ "signature_motion": "Product card tap dims image to 92% opacity on press without scaling — preserving the magazine print metaphor.",
969
+ "has_personas": true,
970
+ "category_raw": "fashion e-commerce"
971
+ },
972
+ {
973
+ "id": "naver",
974
+ "primary_color_hex": "#03C75A",
975
+ "category": "Consumer",
976
+ "visual_theme": "Korean newsstand at 7am: dense, utilitarian, search-first portal on pure white with achromatic gray text and a single decisive Naver Green accent — the iconic 녹색창 search-bar frame. Information-dense over the fold with native Korean fonts and the green reserved as brand mark, search frame, and primary CTA.",
977
+ "voice_fingerprint": {
978
+ "register": "minimal-utility",
979
+ "sentence_length": "short",
980
+ "metaphor_density": "none",
981
+ "vocabulary_register": "korean-dominant"
982
+ },
983
+ "tone_keywords": [
984
+ "pragmatic",
985
+ "neutral",
986
+ "factual",
987
+ "clinical",
988
+ "utility"
989
+ ],
990
+ "antipatterns": [
991
+ "오류가 발생했습니다",
992
+ "잠시만 기다려 주세요",
993
+ "죄송합니다만",
994
+ "혁신적인",
995
+ "최고의"
996
+ ],
997
+ "signature_motion": "Search autocomplete reveals suggestions below the input as a flat 150ms fade — invisible motion, never noticed by the user.",
998
+ "has_personas": true,
999
+ "category_raw": "portal / search"
1000
+ },
819
1001
  {
820
1002
  "id": "notion",
821
1003
  "primary_color_hex": "#0075de",
@@ -865,6 +1047,37 @@
865
1047
  "has_personas": false,
866
1048
  "category_raw": "enterprise hardware"
867
1049
  },
1050
+ {
1051
+ "id": "ohouse",
1052
+ "primary_color_hex": "#35C5F0",
1053
+ "category": "Consumer",
1054
+ "visual_theme": "Photo-album-meets-shopping-cart: warm-neutral canvas (white, off-white, soft fill) with a single clean Ohouse Blue accent — the open-window blue of a sunlit room. Two co-equal card archetypes (UGC photo card and product card) anchor every surface so real Korean homes carry the brand and chrome recedes.",
1055
+ "voice_fingerprint": {
1056
+ "register": "editorial-warm",
1057
+ "sentence_length": "short",
1058
+ "metaphor_density": "sparse",
1059
+ "vocabulary_register": "korean-dominant"
1060
+ },
1061
+ "tone_keywords": [
1062
+ "warm",
1063
+ "observational",
1064
+ "sensory",
1065
+ "spatial",
1066
+ "aspirational",
1067
+ "calm"
1068
+ ],
1069
+ "antipatterns": [
1070
+ "불편을 드려 죄송합니다",
1071
+ "데이터가 없습니다",
1072
+ "혁신적인",
1073
+ "프리미엄",
1074
+ "revolutionary",
1075
+ "premium lifestyle solution"
1076
+ ],
1077
+ "signature_motion": "Bookmark save flashes #E8F7FD behind the icon while it fills to Ohouse Blue solid — a quiet confirmation, not a celebration.",
1078
+ "has_personas": true,
1079
+ "category_raw": "interior content-to-commerce"
1080
+ },
868
1081
  {
869
1082
  "id": "ollama",
870
1083
  "primary_color_hex": "#000000",
@@ -970,6 +1183,37 @@
970
1183
  "has_personas": false,
971
1184
  "category_raw": "technical"
972
1185
  },
1186
+ {
1187
+ "id": "qanda",
1188
+ "primary_color_hex": "#FF5500",
1189
+ "category": "Consumer",
1190
+ "visual_theme": "Clean study desk lit by a single warm lamp: near-white canvas with charcoal text and a saturated QANDA Orange used as the energy mark — the highlighter pen on a math worksheet. Mobile-first edutech minimalism with the camera/image-upload affordance centered on every question surface.",
1191
+ "voice_fingerprint": {
1192
+ "register": "editorial-warm",
1193
+ "sentence_length": "short",
1194
+ "metaphor_density": "sparse",
1195
+ "vocabulary_register": "mixed"
1196
+ },
1197
+ "tone_keywords": [
1198
+ "warm",
1199
+ "encouraging",
1200
+ "low-pressure",
1201
+ "calm",
1202
+ "reassuring",
1203
+ "tutor-like"
1204
+ ],
1205
+ "antipatterns": [
1206
+ "오류가 발생했습니다",
1207
+ "데이터가 없습니다",
1208
+ "혁신적인",
1209
+ "세계 최초",
1210
+ "Unlock premium features",
1211
+ "next-generation AI"
1212
+ ],
1213
+ "signature_motion": "Step-by-step solution reveal fades each numbered step in with an 8px upward translate at 80ms intervals, ending with a soft green checkmark scale-spring.",
1214
+ "has_personas": true,
1215
+ "category_raw": "edutech / AI math solver"
1216
+ },
973
1217
  {
974
1218
  "id": "raycast",
975
1219
  "primary_color_hex": "#FF6363",
@@ -1072,6 +1316,37 @@
1072
1316
  "has_personas": false,
1073
1317
  "category_raw": "enterprise"
1074
1318
  },
1319
+ {
1320
+ "id": "ridi",
1321
+ "primary_color_hex": "#3D3D3D",
1322
+ "category": "Consumer",
1323
+ "visual_theme": "Long-form reading room dressed as a storefront: near-pure white canvas with a deep charcoal foreground and no saturated brand color — the iconic BookCard with multi-layer soft shadows is the brand. Two-typeface system (Pretendard Std for chrome, proprietary RIDIBatang for reading) and editorial near-monochrome restraint.",
1324
+ "voice_fingerprint": {
1325
+ "register": "editorial-warm",
1326
+ "sentence_length": "medium",
1327
+ "metaphor_density": "sparse",
1328
+ "vocabulary_register": "korean-dominant"
1329
+ },
1330
+ "tone_keywords": [
1331
+ "calm",
1332
+ "literate",
1333
+ "editorial",
1334
+ "low-pressure",
1335
+ "bookish",
1336
+ "respectful"
1337
+ ],
1338
+ "antipatterns": [
1339
+ "데이터가 없습니다",
1340
+ "오류가 발생했습니다",
1341
+ "놀라운",
1342
+ "최고의",
1343
+ "amazing",
1344
+ "Oops! Something went wrong"
1345
+ ],
1346
+ "signature_motion": "BookCard hover-lift translates y:-2px and escalates a two-layer shadow from soft to standard — covers float on paper, not glass.",
1347
+ "has_personas": true,
1348
+ "category_raw": "e-book / web novel"
1349
+ },
1075
1350
  {
1076
1351
  "id": "runwayml",
1077
1352
  "primary_color_hex": "#000000",
@@ -1470,6 +1745,65 @@
1470
1745
  "has_personas": false,
1471
1746
  "category_raw": "ai-platform"
1472
1747
  },
1748
+ {
1749
+ "id": "yanolja",
1750
+ "primary_color_hex": "#F54B1E",
1751
+ "category": "Travel",
1752
+ "visual_theme": "Korean weekend getaway: clean white canvas with warm near-black headings and the unmistakable Yanolja Orange — a coral-red-orange sunset hue calibrated to feel like a vacation poster. Image-dominant lodging cards with prominent discount percentages, 8px standard radius, and a discount-first information hierarchy.",
1753
+ "voice_fingerprint": {
1754
+ "register": "playful-irreverent",
1755
+ "sentence_length": "short",
1756
+ "metaphor_density": "sparse",
1757
+ "vocabulary_register": "korean-dominant"
1758
+ },
1759
+ "tone_keywords": [
1760
+ "friendly",
1761
+ "casual",
1762
+ "energetic",
1763
+ "playful",
1764
+ "conversational",
1765
+ "leisure"
1766
+ ],
1767
+ "antipatterns": [
1768
+ "불편을 드려 죄송합니다",
1769
+ "오류가 발생했습니다",
1770
+ "데이터가 없습니다",
1771
+ "혁신적인 여행",
1772
+ "차별화된 서비스",
1773
+ "-습니다 in consumer copy"
1774
+ ],
1775
+ "signature_motion": "Discount-badge first-paint scales 0.85 → 1.0 with a soft spring so the coral percentage reads before the price.",
1776
+ "has_personas": true,
1777
+ "category_raw": "travel / lodging super-app"
1778
+ },
1779
+ {
1780
+ "id": "yeogiotte",
1781
+ "primary_color_hex": "#1D8BFF",
1782
+ "category": "Travel",
1783
+ "visual_theme": "Hospitality-grade Korean lodging booking surface: clean white canvas with a single confident Yeogiotte Blue accent and photography-as-brand listing cards. Cleaner and quieter than competing super-apps, with three-tier radii (8px buttons / 12px cards / 100px filter pills) and badge-driven promo grammar.",
1784
+ "voice_fingerprint": {
1785
+ "register": "minimal-utility",
1786
+ "sentence_length": "short",
1787
+ "metaphor_density": "none",
1788
+ "vocabulary_register": "korean-dominant"
1789
+ },
1790
+ "tone_keywords": [
1791
+ "plain",
1792
+ "polite",
1793
+ "hospitable",
1794
+ "confident",
1795
+ "factual"
1796
+ ],
1797
+ "antipatterns": [
1798
+ "불편을 드려 죄송합니다",
1799
+ "데이터가 없습니다",
1800
+ "오류가 발생했습니다",
1801
+ "stacked promo badges"
1802
+ ],
1803
+ "signature_motion": "Filter-chip selection fills #1D8BFF with no geometry change over motion-fast/ease-standard — fast and committed, never bouncy.",
1804
+ "has_personas": true,
1805
+ "category_raw": "travel / lodging booking"
1806
+ },
1473
1807
  {
1474
1808
  "id": "zapier",
1475
1809
  "primary_color_hex": "#ff4f00",
@@ -1492,4 +1826,4 @@
1492
1826
  "category_raw": "saas-tool"
1493
1827
  }
1494
1828
  ]
1495
- }
1829
+ }
@@ -80,6 +80,17 @@ Use this table to match user descriptions to reference candidates. Pick 3-6 refe
80
80
  | wise | #9fe870 | Fintech | bold, fresh, optimistic, nature-inspired, lime, green |
81
81
  | x.ai | #ffffff | AI | brutalist, dark, minimal, terminal, engineering, restrained |
82
82
  | zapier | #ff4f00 | Productivity | warm, approachable, professional, organic, energetic, orange |
83
+ | coupang | #E94B22 | E-commerce | direct, transactional, deal-driven, results-first, utility, dense |
84
+ | kakaobank | #FFE300 | Fintech | friendly, plain-spoken, warm, formal-when-needed, personal, trustworthy |
85
+ | krds | #256EF4 | Government | polite, predictable, accessible, clear, neutral, civic |
86
+ | kurly | #5F0080 | E-commerce | calm, curated, operational, warm, restrained, editorial |
87
+ | musinsa | #000000 | E-commerce | editorial, compact, declarative, monochrome, magazine |
88
+ | naver | #03C75A | Consumer | pragmatic, neutral, factual, clinical, utility |
89
+ | ohouse | #35C5F0 | Consumer | warm, observational, sensory, spatial, aspirational, calm |
90
+ | qanda | #FF5500 | Consumer | warm, encouraging, low-pressure, calm, reassuring, tutor-like |
91
+ | ridi | #3D3D3D | Consumer | calm, literate, editorial, low-pressure, bookish, respectful |
92
+ | yanolja | #F54B1E | Travel | friendly, casual, energetic, playful, conversational, leisure |
93
+ | yeogiotte | #1D8BFF | Travel | plain, polite, hospitable, confident, factual |
83
94
 
84
95
  ## Shortcut Mappings
85
96
 
@@ -95,7 +106,10 @@ Common user descriptions → recommended references:
95
106
  - "크리에이티브, 디자인" → figma, framer, clay, replicate, miro
96
107
  - "럭셔리, 프리미엄" → apple, stripe, superhuman, ferrari, resend
97
108
  - "AI, LLM 서비스" → claude, cohere, mistral.ai, together.ai, x.ai
98
- - "한국 서비스" → toss, karrot, baemin, kakao
109
+ - "한국 서비스" → toss, karrot, baemin, kakao, naver, kakaobank, ohouse, ridi, qanda
110
+ - "한국 이커머스" → coupang, musinsa, kurly
111
+ - "한국 여행" → yeogiotte, yanolja
112
+ - "공공, 행정, 정부" → krds
99
113
  - "대만 서비스" → pinkoi, dcard
100
114
  - "일본 서비스" → line, mercari, freee
101
115
  - "아시아 커머스, 디자이너 마켓" → pinkoi, airbnb, karrot, pinterest
@@ -26,7 +26,7 @@ var program = new Command();
26
26
  program.name("oh-my-design").description("Bootstrap oh-my-design skills + agents into your project. After install, talk to your agent in natural language \u2014 no other CLI commands.").version(readPackageVersion()).showSuggestionAfterError(true).showHelpAfterError(true);
27
27
  program.command("install-skills").description("Install omd skill files + canonical agents into agent directories (.claude/, .codex/, .opencode/)").option("--dir <path>", "Project root (defaults to cwd)").option("--agent <name...>", "Restrict to specific agents (claude-code | codex | opencode)").option("--force", "Overwrite existing files even without the omd marker").action(
28
28
  async (opts) => {
29
- const { runInstallSkills } = await import("../install-skills-GQPTQF5S.js");
29
+ const { runInstallSkills } = await import("../install-skills-MVXVXYAY.js");
30
30
  const validAgents = ["claude-code", "codex", "opencode"];
31
31
  const agents = opts.agent ? opts.agent.filter(
32
32
  (a) => validAgents.includes(a)
@@ -398,11 +398,11 @@ async function runInstallSkills(opts = {}) {
398
398
  "",
399
399
  ` ${pc.dim('"\uD1A0\uC2A4 \uC2A4\uD0C0\uC77C \uAC00\uC871 \uC2DD\uB2E8 \uACF5\uC720 \uC571 \uBA54\uC778 \uD654\uBA74 \uB514\uC790\uC778\uD574\uC918"')}`,
400
400
  ` ${pc.dim('"Linear-clone B2B SaaS dashboard \uB9CC\uB4E4\uACE0 \uC2F6\uC5B4"')}`,
401
- ` ${pc.dim('"\uC774 \uCE74\uB4DC \uC880 \uB354 \uC138\uB828\uB418\uAC8C"')} ${pc.dim("# \uC791\uC5C5 \uC911 \uC790\uC5F0\uC5B4 \u2014 \uC790\uB3D9 hook \uB77C\uC6B0\uD305")}`,
401
+ ` ${pc.dim('"\uC774 \uCE74\uB4DC \uC880 \uB354 \uC138\uB828\uB418\uAC8C"')} ${pc.dim("# \uC791\uC5C5 \uC911 \uC790\uC5F0\uC5B4 \u2014 \uC790\uB3D9 \uB77C\uC6B0\uD305")}`,
402
402
  "",
403
- `${pc.bold("Hook\uC774 \uC790\uB3D9\uC73C\uB85C \uB77C\uC6B0\uD305")} ${pc.dim("\u2014 \uB514\uC790\uC778 \uC758\uB3C4 \uAC10\uC9C0\uD574\uC11C \uD558\uB124\uC2A4/\uC2A4\uD0AC \uD638\uCD9C. \uC2AC\uB798\uC2DC \uBA85\uB839 \uC548 \uCCD0\uB3C4 \uB428.")}`,
403
+ `${pc.bold("Claude\uAC00 description \uB9E4\uCE6D\uC73C\uB85C \uC790\uB3D9 \uB77C\uC6B0\uD305")} ${pc.dim("\u2014 \uC2AC\uB798\uC2DC \uBA85\uB839 \uC548 \uCCD0\uB3C4 \uB428. Hook\uC740 DESIGN.md \uBD80\uC7AC \uC2DC omd:init \uC548\uB0B4\uB9CC.")}`,
404
404
  "",
405
- `${pc.dim("Power user shortcut: ")}${pc.cyan("/omd-harness <task>")} ${pc.dim("\u2014 hook \uC6B0\uD68C, \uC989\uC2DC \uC9C4\uC785.")}`,
405
+ `${pc.dim("Power user shortcut: ")}${pc.cyan("/omd-harness <task>")} ${pc.dim("\u2014 \uC989\uC2DC \uC9C4\uC785.")}`,
406
406
  "",
407
407
  `${pc.yellow("\u26A0 Already-running Claude Code session?")} ${pc.dim("Run `/agents` inside the session to reload \u2014 or quit (Cmd+Q on macOS) and relaunch. Without reload, hooks/agents do not load.")}`
408
408
  ].join("\n");
@@ -417,4 +417,4 @@ async function runInstallSkills(opts = {}) {
417
417
  export {
418
418
  runInstallSkills
419
419
  };
420
- //# sourceMappingURL=install-skills-GQPTQF5S.js.map
420
+ //# sourceMappingURL=install-skills-MVXVXYAY.js.map