oh-my-design-cli 1.3.9 → 1.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ja.md +8 -8
- package/README.ko.md +7 -7
- package/README.md +50 -16
- package/README.zh-TW.md +8 -8
- package/agents/omd-asset-curator.md +2 -7
- package/agents/omd-codex-image.md +49 -0
- package/agents/omd-designer-review.md +38 -0
- package/agents/omd-final-qa.md +40 -0
- package/agents/omd-kr-writer.md +35 -0
- package/agents/omd-locale-adapter.md +32 -0
- package/agents/omd-master.md +3 -13
- package/agents/omd-orchestrator.md +34 -0
- package/data/reference-audits/2026-05-14-kr10.md +72 -0
- package/data/reference-audits/2026-05-15-kr10.md +124 -0
- package/data/reference-fingerprints.json +1409 -254
- package/data/research/2026-05-18-agent-landscape.md +69 -0
- package/data/research/2026-05-18-kr-style-presets.md +572 -0
- package/dist/bin/oh-my-design.js +6 -3
- package/dist/bin/oh-my-design.js.map +1 -1
- package/dist/{install-skills-MVXVXYAY.js → install-skills-IETT2TBJ.js} +91 -8
- package/dist/install-skills-IETT2TBJ.js.map +1 -0
- package/package.json +7 -1
- package/skills/omd-apply/SKILL.md +0 -1
- package/skills/omd-codex-image/SKILL.md +162 -0
- package/skills/omd-designer-review/SKILL.md +146 -0
- package/skills/omd-final-qa/SKILL.md +153 -0
- package/skills/omd-kr-writer/SKILL.md +229 -0
- package/skills/omd-locale-adapter/SKILL.md +124 -0
- package/skills/omd-orchestrator/SKILL.md +124 -0
- package/web/references/17live/DESIGN.md +424 -0
- package/web/references/29cm/DESIGN.md +11 -2
- package/web/references/ably/DESIGN.md +12 -2
- package/web/references/airbnb/DESIGN.md +17 -2
- package/web/references/airtable/DESIGN.md +20 -0
- package/web/references/alipay/DESIGN.md +456 -0
- package/web/references/appier/DESIGN.md +420 -0
- package/web/references/apple/DESIGN.md +17 -2
- package/web/references/baemin/DESIGN.md +11 -2
- package/web/references/banksalad/DESIGN.md +17 -2
- package/web/references/bilibili/DESIGN.md +426 -0
- package/web/references/bmw/DESIGN.md +14 -0
- package/web/references/bunjang/DESIGN.md +308 -0
- package/web/references/cal/DESIGN.md +14 -0
- package/web/references/catchtable/DESIGN.md +262 -0
- package/web/references/channeltalk/DESIGN.md +374 -0
- package/web/references/class101/DESIGN.md +433 -0
- package/web/references/classum/DESIGN.md +217 -0
- package/web/references/claude/DESIGN.md +11 -2
- package/web/references/clay/DESIGN.md +19 -0
- package/web/references/clickhouse/DESIGN.md +19 -0
- package/web/references/cohere/DESIGN.md +20 -0
- package/web/references/coinbase/DESIGN.md +14 -0
- package/web/references/composio/DESIGN.md +14 -0
- package/web/references/cookpad/DESIGN.md +357 -0
- package/web/references/coupang/DESIGN.md +17 -2
- package/web/references/cursor/DESIGN.md +20 -0
- package/web/references/dabang/DESIGN.md +210 -0
- package/web/references/dcard/DESIGN.md +11 -2
- package/web/references/dji/DESIGN.md +416 -0
- package/web/references/elevenlabs/DESIGN.md +20 -0
- package/web/references/expo/DESIGN.md +20 -0
- package/web/references/fastcampus/DESIGN.md +460 -0
- package/web/references/ferrari/DESIGN.md +14 -0
- package/web/references/figma/DESIGN.md +17 -2
- package/web/references/flex/DESIGN.md +309 -0
- package/web/references/framer/DESIGN.md +20 -0
- package/web/references/freee/DESIGN.md +16 -2
- package/web/references/gangnamunni/DESIGN.md +18 -2
- package/web/references/gmarket/DESIGN.md +464 -0
- package/web/references/gogoro/DESIGN.md +403 -0
- package/web/references/hashicorp/DESIGN.md +19 -0
- package/web/references/ibm/DESIGN.md +20 -0
- package/web/references/ichef/DESIGN.md +411 -0
- package/web/references/inflearn/DESIGN.md +396 -0
- package/web/references/intercom/DESIGN.md +14 -0
- package/web/references/jumpit/DESIGN.md +366 -0
- package/web/references/kakao/DESIGN.md +14 -0
- package/web/references/kakaobank/DESIGN.md +17 -2
- package/web/references/kakaopay/DESIGN.md +17 -2
- package/web/references/kakaot/DESIGN.md +454 -0
- package/web/references/karrot/DESIGN.md +16 -2
- package/web/references/kbank/DESIGN.md +195 -0
- package/web/references/kkday/DESIGN.md +423 -0
- package/web/references/kraken/DESIGN.md +14 -0
- package/web/references/krds/DESIGN.md +17 -2
- package/web/references/kream/DESIGN.md +382 -0
- package/web/references/kurly/DESIGN.md +11 -2
- package/web/references/lamborghini/DESIGN.md +14 -0
- package/web/references/line/DESIGN.md +17 -2
- package/web/references/linear.app/DESIGN.md +17 -2
- package/web/references/lovable/DESIGN.md +14 -0
- package/web/references/lunit/DESIGN.md +249 -0
- package/web/references/meituan/DESIGN.md +424 -0
- package/web/references/mercari/DESIGN.md +11 -2
- package/web/references/millie/DESIGN.md +533 -0
- package/web/references/minimax/DESIGN.md +14 -0
- package/web/references/mintlify/DESIGN.md +14 -0
- package/web/references/miro/DESIGN.md +20 -0
- package/web/references/mistral.ai/DESIGN.md +20 -0
- package/web/references/money-forward/DESIGN.md +401 -0
- package/web/references/mongodb/DESIGN.md +19 -0
- package/web/references/musinsa/DESIGN.md +11 -2
- package/web/references/myrealtrip/DESIGN.md +445 -0
- package/web/references/naver/DESIGN.md +17 -2
- package/web/references/naverwebtoon/DESIGN.md +429 -0
- package/web/references/note/DESIGN.md +318 -0
- package/web/references/notion/DESIGN.md +11 -2
- package/web/references/nvidia/DESIGN.md +11 -2
- package/web/references/ohouse/DESIGN.md +11 -2
- package/web/references/oliveyoung/DESIGN.md +342 -0
- package/web/references/ollama/DESIGN.md +14 -0
- package/web/references/opencode.ai/DESIGN.md +20 -0
- package/web/references/pinkoi/DESIGN.md +11 -2
- package/web/references/pinterest/DESIGN.md +19 -0
- package/web/references/posthog/DESIGN.md +20 -0
- package/web/references/publy/DESIGN.md +511 -0
- package/web/references/qanda/DESIGN.md +11 -2
- package/web/references/raycast/DESIGN.md +19 -0
- package/web/references/remember/DESIGN.md +17 -2
- package/web/references/renault/DESIGN.md +14 -0
- package/web/references/replicate/DESIGN.md +14 -0
- package/web/references/resend/DESIGN.md +20 -0
- package/web/references/revolut/DESIGN.md +14 -0
- package/web/references/ridi/DESIGN.md +11 -2
- package/web/references/runwayml/DESIGN.md +14 -0
- package/web/references/sanity/DESIGN.md +20 -0
- package/web/references/sentry/DESIGN.md +14 -0
- package/web/references/smarthr/DESIGN.md +404 -0
- package/web/references/smartnews/DESIGN.md +331 -0
- package/web/references/socar/DESIGN.md +17 -2
- package/web/references/spacex/DESIGN.md +11 -2
- package/web/references/spoon/DESIGN.md +446 -0
- package/web/references/spotify/DESIGN.md +14 -0
- package/web/references/stripe/DESIGN.md +11 -2
- package/web/references/supabase/DESIGN.md +20 -0
- package/web/references/superhuman/DESIGN.md +20 -0
- package/web/references/tada/DESIGN.md +528 -0
- package/web/references/tesla/DESIGN.md +11 -2
- package/web/references/together.ai/DESIGN.md +20 -0
- package/web/references/toss/DESIGN.md +16 -2
- package/web/references/toss-securities/DESIGN.md +193 -0
- package/web/references/tossbank/DESIGN.md +519 -0
- package/web/references/triple/DESIGN.md +434 -0
- package/web/references/tumblbug/DESIGN.md +530 -0
- package/web/references/tving/DESIGN.md +259 -0
- package/web/references/uber/DESIGN.md +19 -0
- package/web/references/upbit/DESIGN.md +276 -0
- package/web/references/upstage/DESIGN.md +214 -0
- package/web/references/vercel/DESIGN.md +17 -2
- package/web/references/voltagent/DESIGN.md +14 -0
- package/web/references/wadiz/DESIGN.md +344 -0
- package/web/references/wanted/DESIGN.md +16 -2
- package/web/references/warp/DESIGN.md +14 -0
- package/web/references/watcha/DESIGN.md +425 -0
- package/web/references/wavve/DESIGN.md +438 -0
- package/web/references/wconcept/DESIGN.md +511 -0
- package/web/references/webflow/DESIGN.md +14 -0
- package/web/references/wise/DESIGN.md +19 -0
- package/web/references/x.ai/DESIGN.md +14 -0
- package/web/references/xiaohongshu/DESIGN.md +423 -0
- package/web/references/yanolja/DESIGN.md +17 -2
- package/web/references/yeogiotte/DESIGN.md +18 -2
- package/web/references/yogiyo/DESIGN.md +465 -0
- package/web/references/zapier/DESIGN.md +20 -0
- package/web/references/zigbang/DESIGN.md +12 -2
- package/web/references/zigzag/DESIGN.md +17 -2
- package/agents/omd-3d-blender.md +0 -269
- package/dist/install-skills-MVXVXYAY.js.map +0 -1
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: bunjang
|
|
3
|
+
name: Bunjang
|
|
4
|
+
display_name_kr: 번개장터
|
|
5
|
+
country: KR
|
|
6
|
+
category: ecommerce
|
|
7
|
+
homepage: "https://m.bunjang.co.kr"
|
|
8
|
+
primary_color: "#d80c18"
|
|
9
|
+
logo:
|
|
10
|
+
type: favicon
|
|
11
|
+
slug: "https://www.google.com/s2/favicons?domain=bunjang.co.kr&sz=256"
|
|
12
|
+
verified: "2026-05-14"
|
|
13
|
+
omd: "0.1"
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# Design System Inspiration of Bunjang (번개장터)
|
|
17
|
+
|
|
18
|
+
## 1. Visual Theme & Atmosphere
|
|
19
|
+
|
|
20
|
+
Bunjang is what happens when Korea's first generation of mobile flea-market sellers — high-school sneakerheads, K-pop merch traders, used-iPhone flippers — grow up and demand an interface that respects their hustle. The home screen is a near-monochrome canvas: pure white (`#ffffff`) underneath, near-black text (`#191919`), and a single accent — **Bunjang Red** (`#d80c18`) — used so sparingly that when it appears, it lands. There is no gradient sweep, no shadow ladder, no marketing flourish. Depth is signaled by 1px gray-100 (`#e5e5e5`) borders and the occasional gray-50 (`#f6f6f6`) tint behind the footer or as a placeholder for an image that hasn't loaded yet. The aesthetic is **trader-tool sober** — adjacent to Karrot's warm-orange neighborliness, but Bunjang is less "친근한 동네 이웃" and more "거래 정확하게 끝내자."
|
|
21
|
+
|
|
22
|
+
The atomic unit is the **portrait product card** — a 81:100 vertical thumbnail (the brand has formalized this with `--bun-ui-aspect-ratio-vertical: 81 / 100`), price in 16px/700, title in 14px/500 gray-600, a single meta row in 12px/500 gray-300 ("19시간 전 · 지역 · 찜 N"), and a top-right heart button outlined against the photo with a 10% inner glow so it stays legible no matter what photo the seller uploaded. Cards stack 2-up on mobile, 4-up on desktop, and they go on, and on, and on — because Bunjang's defining promise is that *the next listing you scroll to could be exactly the thing you've been searching for at the price you've been waiting for.*
|
|
23
|
+
|
|
24
|
+
Pretendard Variable carries 100% of UI text. There is no display face, no custom logotype anywhere outside the rounded-square app icon. The brand voice rides entirely on Pretendard's weight axis — 400 for body, 500 for secondary, 700 for price. The "Bun UI" internal design system (private; CSS custom-property prefix `--bun-ui-*` visible in production) provides the radius, aspect-ratio, z-index, and safe-area tokens; the rest is `--color-*` semantic ladders.
|
|
25
|
+
|
|
26
|
+
**Key Characteristics:**
|
|
27
|
+
- **Bunjang Red** (`#d80c18`) as a *scarcity asset* — exclusively reserved for the single highest-intent CTA on a surface (e.g. "앱 다운로드", "번개장터 앱으로 시작하기")
|
|
28
|
+
- 81:100 portrait thumbnail as the canonical product photo (phones, sneakers, K-pop goods photograph taller than they are wide)
|
|
29
|
+
- Pretendard Variable as the only typeface — three weights (400/500/700), no italics
|
|
30
|
+
- No box-shadow anywhere in sampled production code — depth is borders + tints, not elevation
|
|
31
|
+
- Two-tier card economics: basic card vs. service-tagged card (`안전결제` escrow chip, `감정완료` luxury-auth chip, `내폰시세` price-verified chip)
|
|
32
|
+
- Mobile-first at 390px baseline — `m.bunjang.co.kr` is the canonical web surface; desktop is a courtesy
|
|
33
|
+
- Korean text dominates; the system stack handles incidental Latin (prices use Hindu-Arabic numerals + "원" suffix)
|
|
34
|
+
- Bottom of the home page is always an app-install rail — web is a discovery funnel, the app is the trade venue
|
|
35
|
+
|
|
36
|
+
## 2. Color Palette & Roles
|
|
37
|
+
|
|
38
|
+
All colors below were extracted from production `:root` CSS custom properties (`getComputedStyle(document.documentElement)`) on 2026-05-14. Token names preserve Bunjang's own naming.
|
|
39
|
+
|
|
40
|
+
### Primary
|
|
41
|
+
- **Bunjang Red** (`#d80c18`) — `--color-primary` / `--color-red-500`. The single brand accent. Used on `_variant-primary` buttons only. Pressed-state would darken toward `#c00b15` (interpolated; not directly observed in computed styles since no hover state was captured).
|
|
42
|
+
- **Pure White** (`#ffffff`) — `--color-white`. Page background, card surface, primary CTA text color.
|
|
43
|
+
- **Gray-900** (`#191919`) — `--color-gray-900`. Primary text. Used on body, all headings, prices.
|
|
44
|
+
|
|
45
|
+
### Neutral Scale
|
|
46
|
+
The gray ladder is unusually granular — 11 stops. This is the spine of Bunjang's depth system.
|
|
47
|
+
- `--color-gray-900` `#191919` — primary text
|
|
48
|
+
- `--color-gray-800` `#333333` — strong secondary text
|
|
49
|
+
- `--color-gray-700` `#4c4c4c` — secondary button text
|
|
50
|
+
- `--color-gray-600` `#666666` — product card title, footer text
|
|
51
|
+
- `--color-gray-500` `#7f7f7f` — tertiary text
|
|
52
|
+
- `--color-gray-400` `#8c8c8c` — icon-only buttons, banner-close ×
|
|
53
|
+
- `--color-gray-300` `#999999` — meta / timestamp / "19시간 전"
|
|
54
|
+
- `--color-gray-200` `#b2b2b2` — disabled-ish placeholder text
|
|
55
|
+
- `--color-gray-150` `#cccccc` — strong dividers
|
|
56
|
+
- `--color-gray-100` `#e5e5e5` — secondary button border, light dividers
|
|
57
|
+
- `--color-gray-70` `#f0f0f0` — subtle row hover / pressed bg
|
|
58
|
+
- `--color-gray-50` `#f6f6f6` — footer surface, image placeholder bg (also aliased as `--color-gray`)
|
|
59
|
+
- `--color-gray-10` `#fafafa` — barely-tinted section divider
|
|
60
|
+
|
|
61
|
+
### Semantic Tiers (4-stop ladders)
|
|
62
|
+
- **Red** — `--color-red-{50: #fdf3f3, 100: #fbe7e8, 400: #f5c2c5, 500: #d80c18}` — error / destructive / primary share the 500
|
|
63
|
+
- **Green** — `--color-green-{50: #edf9f7, 100: #dbf2ee, 400: #a6dfd5, 500: #00a587}` — success / available / verified-OK (note: a teal-leaning green, not a Korean-marketplace stoplight green)
|
|
64
|
+
- **Blue** — `--color-blue-{50: #ebf5ff, 100: #d9ebff, 400: #b3d7ff, 500: #027aff}` — informational link / verified info (e.g. `내폰시세` price-check confirmed)
|
|
65
|
+
- **Yellow** — `--color-yellow-{50: #fffbed, 100: #fff6db, 400: #ffeaa6, 500: #ffc200}` — warning / highlight
|
|
66
|
+
|
|
67
|
+
### Specialty Tiers (Bunjang's distinctive contribution)
|
|
68
|
+
These two ladders don't appear in generic DS palettes — they map to Bunjang's escrow + luxury-authentication services.
|
|
69
|
+
- **Care** — `--color-care-{50: #FDF4E2, 100: #F8ECD3, 300: #F6E5C3, 500: #FFE1A6}` — warm amber / cream, used on the `감정완료` (authentication-complete) badge family for luxury items (watches, bags, K-pop signed goods). It's the color of "this thing is worth careful handling."
|
|
70
|
+
- **Safe** — `--color-safe-{50: #EFF2FE, 100: #E1E7FE, 300: #7775E3, 400: #6458E2, 500: #5558A8}` — a cool indigo / blue-violet ladder used on `안전결제` (escrow) chips. Distinct from informational blue — it specifically signals "Bunjang holds the money until both parties confirm."
|
|
71
|
+
|
|
72
|
+
### Partner Brand Colors (social login only)
|
|
73
|
+
- `--color-brand-kakao` `#fae100` + `--color-brand-kakao-2` `#3c1e1e` (KakaoTalk yellow + dark text)
|
|
74
|
+
- `--color-brand-naver` `#03cf5d`
|
|
75
|
+
- `--color-brand-facebook` `#1877f2` (+ gradient variant `#00B2FF → #006AFF`)
|
|
76
|
+
- `--color-brand-twitter` `#1da1f2`
|
|
77
|
+
- `--color-brand-line` `#00b900`
|
|
78
|
+
- `--color-brand-band` `#21c531`
|
|
79
|
+
- `--color-brand-apple` `#000000`
|
|
80
|
+
|
|
81
|
+
These are NOT brand-extension colors — they are partner-correct fills for federated login buttons only. Never reuse them in Bunjang chrome.
|
|
82
|
+
|
|
83
|
+
## 3. Typography
|
|
84
|
+
|
|
85
|
+
One family. Three weights. No exceptions.
|
|
86
|
+
|
|
87
|
+
- **Family:** Pretendard Variable, fallback `sans-serif`. Self-hosted from a Bunjang CDN. Verified across 211/211 sampled DOM nodes — there is no second typeface anywhere in the production tree.
|
|
88
|
+
- **Weights:** 400 (regular), 500 (medium), 700 (bold). No 600 stop observed; the visual hierarchy jumps directly from 500 to 700, which is why prices feel as urgent as they do — they're not just "a little heavier," they're *significantly* heavier.
|
|
89
|
+
|
|
90
|
+
### Observed scale (mobile)
|
|
91
|
+
| Size | Weight | Role | Color |
|
|
92
|
+
|---|---|---|---|
|
|
93
|
+
| 20px | 700 | Section title ("오늘의 추천 아이템") | gray-900 |
|
|
94
|
+
| 18px | 700 | Subsection title / large emphasis | gray-900 |
|
|
95
|
+
| 16px | 400 | Default body, CTA label | gray-900 / white-on-red |
|
|
96
|
+
| 16px | 700 | **Price** | gray-900 |
|
|
97
|
+
| 15px | 500 | Search input value + placeholder | gray-900 |
|
|
98
|
+
| 14px | 500 | Product card title | gray-600 (`#666`) |
|
|
99
|
+
| 13px | 700 | Compact emphasized chip | varies |
|
|
100
|
+
| 12px | 500 | Meta / timestamp / region | gray-300 (`#999`) |
|
|
101
|
+
|
|
102
|
+
Line-height is `normal` (browser default) for almost every node — Bunjang relies on padding and explicit gap, not line-height, for vertical rhythm. The single exception observed: the search input forces `line-height: 18px` to align caret height across browsers.
|
|
103
|
+
|
|
104
|
+
Letter-spacing is `normal` everywhere. Hangul stems are never tightened.
|
|
105
|
+
|
|
106
|
+
## 4. Iconography & Imagery
|
|
107
|
+
|
|
108
|
+
- **Logo:** A 100×100 rounded-square app icon (radius 22px) with a stylized lightning-bolt mark inside a gradient field. The web wordmark sits next to it in Pretendard 700. The logo icon SVG is served from `https://static.bunjang.co.kr/web/ui/logo-icon.svg`.
|
|
109
|
+
- **System icons:** Inline SVG, 20×20 default, fill via `path[fill]` attribute (not CSS) — fill `#191919` for foreground, `#8c8c8c` for muted (close ×, secondary nav).
|
|
110
|
+
- **Heart (찜) button:** outlined SVG with a 10% black-fill inner shape underneath, so the white outline reads against any thumbnail. Tapped state: solid red fill (`--color-red-500`).
|
|
111
|
+
- **Product thumbnails:** `loading="lazy"`, served from `media.bunjang.co.kr` with a `?crop=` parameter (e.g. `media.bunjang.co.kr/product/{id}_1_{ts}_w1200.jpg?crop=0`). Aspect ratio forced to 81/100 via inline `--aspectRatioVar__1nf1jaf0: var(--bun-ui-aspect-ratio-vertical)`.
|
|
112
|
+
- **Photo aesthetic:** seller-uploaded, unedited, often well-lit-but-amateur. The platform does not impose a photography style — Bunjang's identity comes from *containing* heterogeneous photos consistently, not from prescribing what they look like.
|
|
113
|
+
- **No illustrations** observed in the home-page surface. No mascot. No empty-state cartoons in sampled nodes.
|
|
114
|
+
|
|
115
|
+
## 5. Spacing, Radius & Elevation
|
|
116
|
+
|
|
117
|
+
### Radius
|
|
118
|
+
- `4px` — small chip / banner CTA (XS variant: "앱 다운로드")
|
|
119
|
+
- `6px` — primary CTA, secondary CTA, thumbnail container (`--radiusVar__1j9duj80: 6px`)
|
|
120
|
+
- `20px` — soft large chip
|
|
121
|
+
- `999px` — circular icon button, pill counter chip, heart button hit area
|
|
122
|
+
- Token: `--bun-ui-radius-pill: 999px`
|
|
123
|
+
|
|
124
|
+
### Spacing
|
|
125
|
+
Bunjang does not expose a numeric spacing scale via CSS variable. Observed padding patterns:
|
|
126
|
+
- CTA button padding: `12px 20px` (medium), `8px 12px` (XS), `16px 20px` (XL/full-width)
|
|
127
|
+
- Footer padding: `20px 132px 40px` desktop, tighter on mobile
|
|
128
|
+
- Section vertical rhythm: ~24-32px between sections
|
|
129
|
+
- Card grid gap: ~12-16px
|
|
130
|
+
|
|
131
|
+
### Elevation
|
|
132
|
+
**There is no box-shadow on any sampled element.** Depth comes from:
|
|
133
|
+
1. A 1px solid `#e5e5e5` border (secondary buttons, dividers)
|
|
134
|
+
2. A `#f6f6f6` background tint (footer surface, image placeholders)
|
|
135
|
+
3. A 10% black inner-fill on overlay icons (heart button against bright thumbnails)
|
|
136
|
+
4. A `rgba(0,0,0,0.3)` semi-transparent bubble for overlay chips (carousel counter "1 / 10")
|
|
137
|
+
|
|
138
|
+
This is a deliberate choice. Bunjang treats every surface as a *transparent ledger* — you can see what's there, you can see how it's edged, but nothing floats. The product is the photograph; the chrome shouldn't compete for elevation.
|
|
139
|
+
|
|
140
|
+
## 6. Layout & Grid
|
|
141
|
+
|
|
142
|
+
- Page max-width tokens: `--layout-width-xsmall: 480px` / `--layout-width-small: 640px` / `--layout-width-large: 1240px` / `--layout-width-full: 100vw`
|
|
143
|
+
- Canonical viewport: **390px mobile** (m.bunjang.co.kr is mobile-first; desktop centers content within 1240px with generous side gutters)
|
|
144
|
+
- Drawer width: `--drawer-width: 480px` (used for category drawer, filter sheet)
|
|
145
|
+
- Product grid: 2-col mobile / 4-col desktop, card gap ~12-16px
|
|
146
|
+
- iOS safe-area: `--bun-ui-sat`, `--bun-ui-sab`, `--bun-ui-sal`, `--bun-ui-sar` (top/bottom/left/right inset variables; populate at runtime on iPhone)
|
|
147
|
+
|
|
148
|
+
## 7. z-index Tokens
|
|
149
|
+
|
|
150
|
+
Bunjang ships explicit named z-index tokens — a sign of an internal DS that's gone through stacking-context disputes:
|
|
151
|
+
- `--z-index-sticky: 100`
|
|
152
|
+
- `--z-index-footer: 100`
|
|
153
|
+
- `--z-index-header: 200`
|
|
154
|
+
- `--z-index-widget: 500`
|
|
155
|
+
- `--z-index-drawer-dim: 900`
|
|
156
|
+
- `--z-index-drawer: 1000`
|
|
157
|
+
- `--z-index-popup-dim: 1100`
|
|
158
|
+
- `--z-index-popup: 1200`
|
|
159
|
+
- `--z-index-snackbar: 1500`
|
|
160
|
+
|
|
161
|
+
Snackbar (transient toast) sits on top of everything — confirms Bunjang's preference for transient, non-blocking feedback over modal interruption.
|
|
162
|
+
|
|
163
|
+
## 8. Components — atomic anatomy
|
|
164
|
+
|
|
165
|
+
### Button (Bun UI `_button_1cw4e_1`)
|
|
166
|
+
Three variants × four sizes observed in class names: `_variant-{normal|primary|…}` × `_size-{XS|M|XL}` × `_full`.
|
|
167
|
+
|
|
168
|
+
| variant | bg | text | border | radius | size XS pad | size M pad | size XL pad |
|
|
169
|
+
|---|---|---|---|---|---|---|---|
|
|
170
|
+
| primary | `#d80c18` | `#ffffff` | none | 4-6px | `8 12` | — | `16 20` |
|
|
171
|
+
| normal (secondary) | `#ffffff` | `#4c4c4c` | `1px solid #e5e5e5` | 6px | — | `12 20` | — |
|
|
172
|
+
|
|
173
|
+
### Search input (Bun UI `_input_au7f1_17`)
|
|
174
|
+
- Pretendard Variable, 15px / 500 / `#191919`
|
|
175
|
+
- Line-height: 18px (explicit override for caret alignment)
|
|
176
|
+
- Transparent background — the rounded pill container behind it carries the visual chrome
|
|
177
|
+
- Placeholder: "검색" (or contextual)
|
|
178
|
+
|
|
179
|
+
### Product Card (Bun UI `_container_15rjm_1`)
|
|
180
|
+
```
|
|
181
|
+
┌─────────────────┐ ← Thumbnail
|
|
182
|
+
│ │ aspect-ratio: 81 / 100
|
|
183
|
+
│ [img] ♡│ border-radius: 6px
|
|
184
|
+
│ │ bg #f6f6f6 (placeholder)
|
|
185
|
+
│ │ heart absolute top-right, 40×40 hit
|
|
186
|
+
└─────────────────┘ SVG fill=none stroke=#fff + 10% black inner glow
|
|
187
|
+
600,000원 ← Price: 16px / 700 / #191919
|
|
188
|
+
맥북에어 m1 2020... ← Title: 14px / 500 / #666 (1-2 lines)
|
|
189
|
+
19시간 전 · 강남 · 찜2 ← Meta: 12px / 500 / #999
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
Card variants add a single small chip (4-6px radius) above the title row:
|
|
193
|
+
- `안전결제` — `--color-safe-*` ladder, indigo
|
|
194
|
+
- `감정완료` — `--color-care-*` ladder, warm amber
|
|
195
|
+
- `내폰시세` — `--color-blue-*` ladder, info blue
|
|
196
|
+
|
|
197
|
+
### Header
|
|
198
|
+
- Hamburger (left) — 20×20 icon button
|
|
199
|
+
- Logo wordmark (clickable, /)
|
|
200
|
+
- Search input (center, flex-grow)
|
|
201
|
+
- Right cluster: notification bell, wishlist heart, login button or avatar
|
|
202
|
+
- Sticky at z-index 200
|
|
203
|
+
|
|
204
|
+
### App-Download Top Banner
|
|
205
|
+
- Sticky above header at z-index 100 (footer/sticky tier)
|
|
206
|
+
- Logo icon 32×32 + body copy + primary CTA chip + close ×
|
|
207
|
+
- Dismissible (close × on right)
|
|
208
|
+
|
|
209
|
+
## 9. Microcopy & Voice (analysis-only — do not transplant phrases verbatim)
|
|
210
|
+
|
|
211
|
+
Bunjang's voice on the home surface is **direct, fast, lower-case-energy even when written in Korean.** Sentences default to plain `~해요/세요` register without exclamation marks. The brand does NOT shout.
|
|
212
|
+
|
|
213
|
+
Observed patterns:
|
|
214
|
+
- CTAs use verbs over nouns: "앱 다운로드" not "앱 다운로드 페이지로"
|
|
215
|
+
- App-install nudges acknowledge the user's autonomy: the banner copy frames the app as a *better* path, not the only path
|
|
216
|
+
- Product cards never editorialize the listing — no "🔥 인기!" "마지막 1개!" — the only emphasis comes from typography weight on the price
|
|
217
|
+
- Time stamps are conversational ("19시간 전") not absolute ("2026-05-13 22:14")
|
|
218
|
+
- Region is abbreviated to the smallest disambiguating unit ("강남" not "서울특별시 강남구")
|
|
219
|
+
|
|
220
|
+
**Voice principles when you write Bunjang-tier copy:**
|
|
221
|
+
1. **Verb-first, present-tense.** Push the next action; don't describe the current state.
|
|
222
|
+
2. **No urgency manufacturing.** Bunjang trusts that scarcity is already real — there are 6 million listings and the user knows it.
|
|
223
|
+
3. **Specificity over enthusiasm.** "오늘 19시간 전 등록" beats "방금 막!"
|
|
224
|
+
4. **The price is the headline.** Never write a marketing line above a price; let the price be loud and let the title be quiet.
|
|
225
|
+
5. **Respect the trader.** Both buyer and seller are users — never copy that flatters one side at the other's expense.
|
|
226
|
+
|
|
227
|
+
## 10. Patterns & Anti-Patterns
|
|
228
|
+
|
|
229
|
+
### Patterns this DS encodes
|
|
230
|
+
- **Restraint of red.** A single hex (`#d80c18`) marks one action per surface. Red is a finite resource; spending it on everything makes it worth nothing.
|
|
231
|
+
- **Portrait product photography.** 81:100 is non-negotiable — designers crop, not photographers re-shoot.
|
|
232
|
+
- **Borders, not shadows.** Every depth signal is a 1px gray-100 line or a gray-50 fill.
|
|
233
|
+
- **Typography as hierarchy.** No need for color emphasis on the price when 16px/700 vs. 14px/500 already does the work.
|
|
234
|
+
- **Service tiers are colorways.** Safe = indigo; Care = warm amber; Verified = info blue. Each chip teaches the user the brand's product taxonomy without copy.
|
|
235
|
+
|
|
236
|
+
### Anti-patterns to refuse
|
|
237
|
+
- ❌ Red used for secondary or tertiary actions (drains the primary).
|
|
238
|
+
- ❌ Square or square-ish thumbnails on product cards (breaks the 81:100 vertical convention and makes phones / sneakers look stunted).
|
|
239
|
+
- ❌ Box-shadow on cards or buttons (introduces an elevation language the rest of the system rejects).
|
|
240
|
+
- ❌ Mixing Noto Sans KR, Apple SD Gothic Neo, or a display face — Pretendard Variable is the contract.
|
|
241
|
+
- ❌ Heart icon without the 10% black inner glow — it disappears on bright photos.
|
|
242
|
+
- ❌ Manufactured urgency copy ("마지막 1개!", "지금 바로!"). The platform's depth IS the urgency.
|
|
243
|
+
- ❌ Modal interruptions where a snackbar would do (z-index 1500 is meant for non-blocking confirmation, not consent gates).
|
|
244
|
+
|
|
245
|
+
## 11. Brand Voice Summary
|
|
246
|
+
|
|
247
|
+
If Karrot is your warm neighbor who'll meet you at the playground after work, Bunjang is the high-volume trader at the next desk who already has the link, the price, and the timestamp — and who will absolutely close the deal before lunch. Both serve the same market; they serve it from completely different temperaments.
|
|
248
|
+
|
|
249
|
+
Bunjang's interface earns trust by being *unsentimental about its job*. White canvas, monochrome type, one red button. The promise is not warmth — it's **velocity and price discovery**. Six million listings, sort by lowest, scroll until you find it. The internal DS (`bun-ui`) is the rails; the marketplace is the freight.
|
|
250
|
+
|
|
251
|
+
## 12. When to draw inspiration from Bunjang
|
|
252
|
+
|
|
253
|
+
Use this reference for:
|
|
254
|
+
- C2C / P2P marketplaces where listing volume is the value proposition
|
|
255
|
+
- Surfaces where the user's primary mode is **scanning many similar items** (resale, classifieds, vertical commerce)
|
|
256
|
+
- Brands that need to feel **trustworthy without being formal** — escrow / payments / verification services that prove credibility through small color-coded chips rather than long copy
|
|
257
|
+
- Mobile-first Korean (or East-Asian) audiences who expect Pretendard-grade type rendering and won't accept laggy infinite scroll
|
|
258
|
+
- Products where **one CTA per surface** is the right discipline (vs. dashboards with five competing primaries)
|
|
259
|
+
|
|
260
|
+
Do NOT use this reference for:
|
|
261
|
+
- Premium / luxury brands where shadows, gradients, and curated photography are the value
|
|
262
|
+
- Editorial commerce where the photo deserves a 4:5 or 1:1 art-directed frame
|
|
263
|
+
- B2B SaaS where information density and table-rendering trump scrollable feeds
|
|
264
|
+
|
|
265
|
+
---
|
|
266
|
+
|
|
267
|
+
## Verification footer
|
|
268
|
+
|
|
269
|
+
**Verified:** 2026-05-14
|
|
270
|
+
**Verifier:** omd:add-reference live capture
|
|
271
|
+
**URL:** https://m.bunjang.co.kr/
|
|
272
|
+
|
|
273
|
+
### Tier 1 — Live inspection (PASS)
|
|
274
|
+
- Chrome DevTools Protocol over `:9222` (websocket, `suppress_origin=True` to bypass `--remote-allow-origins` block)
|
|
275
|
+
- Two viewport captures: desktop 1280×713 dpr=2 + mobile-emulated 390×844 dpr=3 (iPhone UA)
|
|
276
|
+
- 73 CSS custom properties extracted from `:root` via `getComputedStyle(document.documentElement)`
|
|
277
|
+
- 211 DOM nodes sampled across header / nav / cards / buttons / footer / price / heart / meta
|
|
278
|
+
- 9 raw_samples preserved in `assets/_reference/.live-inspect-proof.json`
|
|
279
|
+
- Logo SVG archived in `assets/_reference/logo-icon.svg`
|
|
280
|
+
|
|
281
|
+
### Tier 1 — Official published DS (NEGATIVE — documented)
|
|
282
|
+
Attempted lookups (all 2026-05-14):
|
|
283
|
+
- `https://design.bunjang.co.kr/` → DNS no-resolve (000)
|
|
284
|
+
- `https://bun-ui.bunjang.co.kr/` → DNS no-resolve (000)
|
|
285
|
+
- `https://tech.bunjang.co.kr/` → DNS no-resolve (000)
|
|
286
|
+
- `https://brand.bunjang.co.kr/` → DNS no-resolve (000)
|
|
287
|
+
- `https://company.bunjang.co.kr/` → DNS no-resolve (000)
|
|
288
|
+
- `https://blog.bunjang.co.kr/` → DNS no-resolve (000)
|
|
289
|
+
- `https://medium.com/bunjang-tech/` → 404
|
|
290
|
+
- `https://github.com/bunjang` → 200 but **org has no public repos / members / packages**
|
|
291
|
+
- `https://www.npmjs.com/package/@bunjang/bun-ui` → 403 (package does not exist on public npm)
|
|
292
|
+
|
|
293
|
+
**Conclusion:** Bunjang operates a real, mature internal design system branded **"Bun UI"** (proven by `--bun-ui-*` CSS-variable prefix, vanilla-extract class-name patterns `Box__7nn0kn17`, `Flex__wsrgth3`, `Typography_typography__1wr8iu13`, and explicit z-index/radius/aspect-ratio token families). However, as of the verification date there is **no public Storybook, no public npm package, no published documentation site, and no public GitHub presence**. The DS exists; the public artifacts do not.
|
|
294
|
+
|
|
295
|
+
### Tier 2 — 3rd-party indexes (NEGATIVE)
|
|
296
|
+
- `https://getdesign.md/bunjang` → "No designs found for 'bunjang'"
|
|
297
|
+
- `https://styles.refero.design/?q=bunjang` → no entry
|
|
298
|
+
|
|
299
|
+
Consistent with the KR-10 systemic finding (2026-05-13 audit): English-tooling-oriented DS directories have weak Korean coverage.
|
|
300
|
+
|
|
301
|
+
### Tier 3 — Reconciliation
|
|
302
|
+
This DESIGN.md reconciles Tier 1 live capture as the sole authoritative source. Token names, hex values, type scale, radius scale, z-index scale, aspect-ratio tokens, and semantic palette ladders are all taken verbatim from production CSS custom properties. Component anatomy and microcopy patterns are observed from rendered DOM and live text, then re-described in our own analytical voice — **no taglines or copy are transplanted verbatim**. Brand red, gray ladder, and Bun UI primitives are documented as a *reference* for downstream design work, not for re-use of brand assets.
|
|
303
|
+
|
|
304
|
+
### IP / asset guardrails
|
|
305
|
+
- Logo SVG is archived in `assets/_reference/` for verification of capture fidelity only — **not for downstream use** in derivative products
|
|
306
|
+
- No taglines, no marketing copy, no product-listing text is reproduced verbatim
|
|
307
|
+
- Brand color names ("Bunjang Red"), service-feature names ("안전결제", "감정완료", "내폰시세") are used descriptively for accurate documentation — they are not appropriated as product names
|
|
308
|
+
- Voice analysis in §9 describes patterns observed in production; the practical guidance is original interpretation
|
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: cal
|
|
3
|
+
name: Cal.com
|
|
4
|
+
country: US
|
|
5
|
+
category: productivity
|
|
6
|
+
homepage: "https://cal.com"
|
|
7
|
+
primary_color: "#111827"
|
|
8
|
+
logo:
|
|
9
|
+
type: simpleicons
|
|
10
|
+
slug: caldotcom
|
|
11
|
+
verified: "2026-05-15"
|
|
12
|
+
omd: "0.1"
|
|
13
|
+
---
|
|
14
|
+
|
|
1
15
|
# Design System Inspiration of Cal.com
|
|
2
16
|
|
|
3
17
|
## 1. Visual Theme & Atmosphere
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: catchtable
|
|
3
|
+
name: CatchTable
|
|
4
|
+
country: KR
|
|
5
|
+
category: consumer-tech
|
|
6
|
+
homepage: "https://www.catchtable.co.kr"
|
|
7
|
+
primary_color: "#ff3d00"
|
|
8
|
+
logo:
|
|
9
|
+
type: favicon
|
|
10
|
+
slug: "https://www.google.com/s2/favicons?domain=catchtable.co.kr&sz=256"
|
|
11
|
+
verified: "2026-05-15"
|
|
12
|
+
omd: "0.1"
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Design System Inspiration of CatchTable (캐치테이블)
|
|
16
|
+
|
|
17
|
+
## 1. Visual Theme & Atmosphere
|
|
18
|
+
|
|
19
|
+
CatchTable is Korea's premier restaurant-reservation platform — a service that lets diners book hotel buffets, sushi omakase, and hanwoo tasting menus with the same calm as flipping through a magazine. The atmosphere on the home surface is **editorial restraint**: a white canvas (`#FFFFFF`), deep black ink (`#000000` for body, `#222222` for titles), zero ambient shadow, and a hard-square chrome that lets food photography do the speaking. Where a delivery app would flood the screen with red CTAs and stamp-shaped discount stickers, CatchTable shows you photographs and titles — the brand orange `#FF3D00` appears exactly where you place your finger, and almost nowhere else.
|
|
20
|
+
|
|
21
|
+
This isn't accidental minimalism — it's a vanilla-extract token system with **145 `:root` design tokens** discovered live (the namespace is `_11bicz7*`, a hashed identifier, so the system has no semantic names exposed publicly — only values). The token sheet defines a five-tier shadow ladder, a 33-color palette across brand / ink / surface / support-cool / semantic / overlay, a 10-step type scale that all share a **150% line-height contract**, and a radius family that defaults to `0px` on 92% of elements and softens only for rasterised thumbnails (`4px`), interactive controls (`8px`), and the primary CTA pill (`12px`). The discipline is the design.
|
|
22
|
+
|
|
23
|
+
Typographically the system is Pretendard-only — no display font, no brand-display moment, no signage-typography flex. Pretendard 400 carries roughly 91% of all rendered text, with 700 reserved for section titles (`음식종류별 BEST`, `캐치 매거진`) and price emphasis. The home flow opens with a search field on `#F5F5F5` fill, a location chip row, a 25-slide Swiper hero, a "어디로 가시나요?" neighbourhood-discovery row, a horizontally scrolling "음식종류별 BEST" pillar, and an editorial "캐치 매거진" magazine module before reaching a five-tab bottom nav (홈 / 저장 / 내 주변 / 마이다이닝 / MY). The overall impression is **taste-maker, not utility** — the brand wants to feel closer to a Michelin guide than to OpenTable.
|
|
24
|
+
|
|
25
|
+
**Key Characteristics:**
|
|
26
|
+
- Single accent `#FF3D00` (CatchTable Orange) deployed sparingly — single-CTA discipline, not flooded brand color
|
|
27
|
+
- Hard-square chrome (`0px` radius on 92% of elements) — sharpness amplifies food photography
|
|
28
|
+
- Pretendard-only stack, no display font; 150% line-height applied uniformly to all ~35 typography slots
|
|
29
|
+
- White-canvas + black-ink editorial restraint — depth lives in borders and surface tints, not shadows
|
|
30
|
+
- Five-tier shadow ladder defined in tokens but rarely fired on the home surface
|
|
31
|
+
- Mobile-first WebView shell with `status-bar-top` reservation — desktop is a porthole
|
|
32
|
+
- 5-tab bottom nav as the global IA spine; 마이다이닝 is the reservation-history / loyalty hub
|
|
33
|
+
- Editorial 캐치 매거진 module signals taste-maker positioning, not transactional booking
|
|
34
|
+
|
|
35
|
+
## 2. Color Palette & Roles
|
|
36
|
+
|
|
37
|
+
### Primary
|
|
38
|
+
|
|
39
|
+
- **CatchTable Orange** (`#FF3D00`): Brand primary. Used **exclusively** on the primary CTA pill (`12px` radius, `#FFF` text, 14px/500). In a 3000-element scan of the home surface, this color appears just 4 times in text/icon contexts and once as a background fill — scarcity is the discipline.
|
|
40
|
+
- **Pure White** (`#FFFFFF`): Page canvas, card surfaces. Clean, photograph-amplifying.
|
|
41
|
+
- **Title Black** (`#222222`): Section sub-titles, restaurant names, neighbourhood chip labels.
|
|
42
|
+
- **Pure Black** (`#000000`): Body text default, link text, nav labels. Maximum contrast.
|
|
43
|
+
|
|
44
|
+
### Brand support
|
|
45
|
+
|
|
46
|
+
- **Orange Soft** (`#FA8D6B`): Soft variant for pressed states and warm accents.
|
|
47
|
+
- **Orange Pressed** (`#FC9086`): Active-press / hover-state surface.
|
|
48
|
+
- **Orange Tint Warm** (`#FDF0EC`): Banner/notice surface fill.
|
|
49
|
+
- **Orange Tint Pale** (`#FCF3F2`): Subtle alert surface fill.
|
|
50
|
+
|
|
51
|
+
### Ink ladder (text & icon)
|
|
52
|
+
|
|
53
|
+
- **Body Default** (`#000000`): Default body text — used everywhere by default.
|
|
54
|
+
- **Title** (`#222222`): Section sub-titles, list-item titles.
|
|
55
|
+
- **Body Strong** (`#424242`): Tab-bar labels at rest.
|
|
56
|
+
- **Body Muted** (`#666666`): Footer policy links, secondary descriptions.
|
|
57
|
+
- **Tertiary** (`#5F5F5F`): Chip-button text (e.g. 현재 위치로).
|
|
58
|
+
- **Placeholder** (`#9E9E9E`): Search-input placeholder.
|
|
59
|
+
- **Disabled** (`#B5B5B5`): Disabled controls.
|
|
60
|
+
- **Icon Default** (`#8F8F8F`): Footer regulatory text, icon default.
|
|
61
|
+
- **Icon Subtle** (`#AAAAAA`): Decorative icons.
|
|
62
|
+
|
|
63
|
+
### Surface
|
|
64
|
+
|
|
65
|
+
- **Canvas** (`#FFFFFF`): Page background.
|
|
66
|
+
- **Subdued** (`#F9F9F9`): Footer block fill.
|
|
67
|
+
- **Muted** (`#F5F5F5`): Search-input fill, chip rest state.
|
|
68
|
+
- **Cool** (`#F2F5F7`): Optional cool-tinted surface.
|
|
69
|
+
- **Cool Alt** (`#F0F4FA`): Info-tint surface paired with `#186ADE`.
|
|
70
|
+
|
|
71
|
+
### Borders
|
|
72
|
+
|
|
73
|
+
- **Hairline Alpha** (`#00000014`): Default hairline divider (8% black).
|
|
74
|
+
- **Border Default** (`#E4E4E4`): Standard card and input border.
|
|
75
|
+
- **Border Cool** (`#DCE3E8`): Cool-themed surface border.
|
|
76
|
+
|
|
77
|
+
### Support cool-ink (rare; used in editorial / magazine module)
|
|
78
|
+
|
|
79
|
+
- **Cool Ink Deep** (`#1C2B36`), **Mid** (`#3E5463`), **Soft** (`#7A909E`), **Light** (`#9FB1BD`).
|
|
80
|
+
|
|
81
|
+
### Semantic
|
|
82
|
+
|
|
83
|
+
- **Info** (`#186ADE`) / **Info Soft** (`#75B1FF`) / **Info Tint** (`#F0F4FA`)
|
|
84
|
+
- **Success** (`#43C478`) / **Success Strong** (`#077D55`) / **Success Tint** (`#EBF7ED`)
|
|
85
|
+
- **Danger** (`#D91F11`): Distinct from brand orange — semantic red is darker, redder. Don't confuse.
|
|
86
|
+
- **Warning** (`#F5C518`)
|
|
87
|
+
- **Premium Purple** (`#8F49DE`): Reserved for premium-tier badges (e.g. members-only restaurants).
|
|
88
|
+
|
|
89
|
+
### Overlay
|
|
90
|
+
|
|
91
|
+
- **Counter Dim** (`rgba(20,24,29,0.74)`): Swiper slide-counter pill.
|
|
92
|
+
- **Scrim 70/60** (`rgba(0,0,0,0.7)`, `rgba(0,0,0,0.6)`): Modal/sheet backdrops.
|
|
93
|
+
|
|
94
|
+
## 3. Typography Rules
|
|
95
|
+
|
|
96
|
+
### Font Family
|
|
97
|
+
|
|
98
|
+
- **Primary**: `Pretendard, -apple-system, system-ui, Roboto, "Helvetica Neue", "Segoe UI", "Apple SD Gothic Neo", "Noto Sans KR", sans-serif`
|
|
99
|
+
- **No brand display font.** No headline accent. Pretendard alone carries the entire system. This is a deliberate restraint — the photography is the brand.
|
|
100
|
+
|
|
101
|
+
### Hierarchy
|
|
102
|
+
|
|
103
|
+
| Role | Size | Weight | Line Height | Notes |
|
|
104
|
+
|------|------|--------|-------------|-------|
|
|
105
|
+
| Section Title | 20px | 700 | 150% | `음식종류별 BEST`, `캐치 매거진`, search hero label `어디로 가시나요?` |
|
|
106
|
+
| Big Section | 18px | 700 | 150% | Larger card titles |
|
|
107
|
+
| Card Title | 16px | 600 | 150% | Restaurant card titles in list / detail surfaces |
|
|
108
|
+
| Body Default | 14px | 400 | 150% | **Dominant** — 900 of 1149 sampled elements; nav labels, list items, body |
|
|
109
|
+
| Tab Label | 14px | 400 | 150% | Bottom-tab labels |
|
|
110
|
+
| Chip Label | 14px | 500 | 150% | Geo chips, filter chips |
|
|
111
|
+
| Search Input | 13px | 500 | 150% | Placeholder color `#9E9E9E` |
|
|
112
|
+
| Neighbourhood Chip | 13px | 500 | 150% | `청담`, `압구정·로데오` style |
|
|
113
|
+
| Caption | 12px | 400 | 150% | Timestamps, secondary meta |
|
|
114
|
+
| Footer Body | 11px | 400 | 150% | Regulatory disclosure text |
|
|
115
|
+
| Policy Link | 11px | 500 | 150% | Footer `서비스 이용약관` row |
|
|
116
|
+
| Micro Meta | 10px | 500 | 150% | Slide counter `2 / 25`, bottom-tab compact mode |
|
|
117
|
+
|
|
118
|
+
### Principles
|
|
119
|
+
|
|
120
|
+
- **150% line-height is a system-wide contract.** Every typography token across ~35 distinct slots ships `line-height: 150%`. Don't break this — vertical rhythm depends on it.
|
|
121
|
+
- **400 dominates, 700 punctuates.** Weight distribution observed: 400 = 91%, 500 = 5%, 700 = 2%, 450 = 2%, 600 = <1%. The "weight rhythm" is binary — body or title, almost nothing in between.
|
|
122
|
+
- **No tracking adjustments observed** — `letter-spacing: normal` is universal.
|
|
123
|
+
- **Micro text below WCAG body floor**: 10–11px appears on slide counters and legal disclosures. For ports to Latin-script translations, elevate these to ≥12px.
|
|
124
|
+
|
|
125
|
+
## 4. Radius & Shape
|
|
126
|
+
|
|
127
|
+
The geometry is **hard-square by default**:
|
|
128
|
+
|
|
129
|
+
| Use | Radius | Frequency |
|
|
130
|
+
|---|---|---|
|
|
131
|
+
| Default chrome (canvas, sections, list rows, dividers, search input) | `0px` | 1063 of 1149 sampled elements (92%) |
|
|
132
|
+
| Photo thumbnail (rasterised, inside Swiper) | `4px` (also `4.05px` legacy) | 40 |
|
|
133
|
+
| Interactive control (button, card pill, filter pill) | `8px` | 29 |
|
|
134
|
+
| Avatar / circular icon | `50%` | 13 |
|
|
135
|
+
| **Primary CTA pill** | `12px` | 3 |
|
|
136
|
+
| Pill-full (rare, special-case) | `999px` | 1 |
|
|
137
|
+
|
|
138
|
+
The visual signature is the **absence** of softening on the chrome. Sharp corners frame food photography the way a magazine frames a photograph. When porting: do **not** apply a global `border-radius: 8px` reset — you will lose the brand entirely.
|
|
139
|
+
|
|
140
|
+
## 5. Elevation
|
|
141
|
+
|
|
142
|
+
Five-tier shadow ladder defined in `:root`, but used sparingly on the home surface (only 2 distinct shadows fired across 3000+ elements observed). Depth is mostly carried by **borders + surface tints**.
|
|
143
|
+
|
|
144
|
+
| Tier | Token | Recipe |
|
|
145
|
+
|---|---|---|
|
|
146
|
+
| xs | `--shadow-xs` | `0 1px 2px rgba(0,0,0,.12), 0 0 1px rgba(0,0,0,.08), 0 0 1px rgba(0,0,0,.08)` |
|
|
147
|
+
| sm | `--shadow-sm` | `0 2px 8px rgba(0,0,0,.12), 0 1px 4px rgba(0,0,0,.08), 0 0 1px rgba(0,0,0,.08)` |
|
|
148
|
+
| drop | `--shadow-drop` | `0 2px 12px rgba(0,0,0,.12)` |
|
|
149
|
+
| md | `--shadow-md` | `0 6px 12px rgba(0,0,0,.12), 0 4px 8px rgba(0,0,0,.08), 0 0 4px rgba(0,0,0,.08)` |
|
|
150
|
+
| lg / modal | `--shadow-lg` | `0 16px 20px rgba(0,0,0,.12), 0 8px 16px rgba(0,0,0,.08), 0 0 8px rgba(0,0,0,.08)` |
|
|
151
|
+
|
|
152
|
+
Reserve elevation for: floating action buttons over photography, bottom sheets, sticky search bars on scroll, modal surfaces. Don't fire on cards-at-rest — borders or hairline alpha (`#00000014`) handle separation.
|
|
153
|
+
|
|
154
|
+
## 6. Spacing & Layout
|
|
155
|
+
|
|
156
|
+
Observed spacing scale (px): **4 / 8 / 12 / 16 / 20 / 24 / 32 / 45 / 60**.
|
|
157
|
+
|
|
158
|
+
- **Mobile-first**: WebView shell with `status-bar-top` and `status-bar-padding-top` classes — the design target is the in-app surface, not desktop.
|
|
159
|
+
- **Section paddings**: `pb-45` and `mb-16` legacy utility classes — 45px bottom-of-section, 16px between modules.
|
|
160
|
+
- **Horizontal scrolling lists** dominate discovery — `음식종류별 BEST` is a swipe-row of best-of pills, not a vertical grid.
|
|
161
|
+
- **Bottom tab bar** owns the lowest 56–60px of the viewport.
|
|
162
|
+
|
|
163
|
+
## 7. Iconography & Photography
|
|
164
|
+
|
|
165
|
+
- **Photography-first**. The home flow is dominated by 4:3 and landscape food photography. Tile thumbnails carry a subtle `4px` radius — the only soft-corner surface in the system.
|
|
166
|
+
- **Icons are line-style**, rendered as inline SVG; default stroke color `#8F8F8F` (icon-default), darkening to `#000` on active states.
|
|
167
|
+
- **No illustration system observed** on the home surface. Magazine articles inside 캐치 매거진 carry editorial photography rather than custom illustration.
|
|
168
|
+
|
|
169
|
+
## 8. Component Patterns
|
|
170
|
+
|
|
171
|
+
- **Primary CTA pill**: `#FF3D00` fill, `#FFF` text, 14px/500 Pretendard, `12px` radius, ~44px tall — only one variant observed. Single-color, single-shape, single-CTA discipline.
|
|
172
|
+
- **Search input**: `#F5F5F5` fill, sharp `0px` corners, 13px/500 placeholder `#9E9E9E`, inline search icon left.
|
|
173
|
+
- **Chip / pill row**: 13–14px/500 ink, no fill at rest, no border at rest — separation by spacing alone (chips at `청담`, `압구정·로데오`, etc.).
|
|
174
|
+
- **Geo-toggle button** (현재 위치로): 14px/500, ink `#5F5F5F`, leading geo icon — text-style action button.
|
|
175
|
+
- **Best-of horizontal pill** (호텔 뷔페, 스시 오마카세): Image-led tile + 14px/400 ink label below — no card chrome, just photo + name.
|
|
176
|
+
- **Bottom tab bar**: 5 tabs (홈 / 저장 / 내 주변 / 마이다이닝 / MY), icon-over-label, 14px/400 ink default; active state inferred (not captured live this pass — flagged).
|
|
177
|
+
- **Swiper hero**: 25-slide carousel with counter pill (`2 / 25 / 전체`) on `rgba(20,24,29,0.74)` overlay.
|
|
178
|
+
- **Footer disclosure block**: `#F9F9F9` surface, 14px/400 corporate info, 11px/500 policy links separated by `|` pipe glyphs, 11px/400 regulatory disclaimer.
|
|
179
|
+
|
|
180
|
+
## 9. Accessibility & Locale
|
|
181
|
+
|
|
182
|
+
- **WCAG contrast** — `#000` on `#FFF` body is 21:1 (max); `#222`/`#FFF` titles are 16.1:1; `#FF3D00`/`#FFF` CTA pill is **3.7:1** — **fails AA for normal text but passes AA for large text (18pt+/14pt bold equivalent)**. Since the CTA pill ships 14px/500 (below the bold threshold), this sits at the **borderline AA fail** for body. The system as shipped accepts the trade-off; ports must either bold the CTA label or darken the orange to `#E63600` (≈4.6:1) for strict AA.
|
|
183
|
+
- **Micro text below body floor**: 10–11px slide counters and footer disclaimers are below WCAG body recommendations. Ports to Latin scripts (where stroke widths increase) should elevate to ≥12px.
|
|
184
|
+
- **No landmark elements observed in initial capture** — `<main>` is present but no `<aside>` / explicit `role` annotations on the bottom tab bar. A11y debt; flag for ports.
|
|
185
|
+
- **Locale convention**: Korean restaurant-reservation flows assume KR mobile carriers, KakaoTalk-style identity, and 24h reservation windows. The 마이다이닝 (My Dining) IA spine is loyalty-flavoured, not transaction-flavoured — ports should consider whether the destination market expects a "Reservations" history rather than a "Dining" hub.
|
|
186
|
+
|
|
187
|
+
## 10. Voice & Microcopy
|
|
188
|
+
|
|
189
|
+
**Voice shape** (analyst characterisation — not verbatim CatchTable copy): **curatorial-warm, gerund-light, second-person-implied**. The on-surface copy treats the user as a diner choosing a story, not a customer completing a transaction.
|
|
190
|
+
|
|
191
|
+
Don'ts:
|
|
192
|
+
- Don't write "Book now." The brand's invitation is softer.
|
|
193
|
+
- Don't write "X% off" stickers across photography. The system is photograph-respectful.
|
|
194
|
+
- Don't write urgency timers. Magazine, not flash sale.
|
|
195
|
+
|
|
196
|
+
Voice samples (fresh OmD-original characterisations, **not** lifted from CatchTable copy — three options to triangulate the shape):
|
|
197
|
+
|
|
198
|
+
1. *"오늘의 자리, 천천히 골라보세요."* — invitation framing, soft imperative.
|
|
199
|
+
2. *"이번 주말, 어디서 드실래요?"* — question framing, peer-to-peer warmth.
|
|
200
|
+
3. *"미식의 시작, 한 자리에서."* — slogan-shape, factual + warm.
|
|
201
|
+
|
|
202
|
+
**IP guardrail**: The title-tag phrase "즐거운 미식 생활의 시작" is quoted **once** in §11 as a factual brand-narrative reference and is **not** adopted as headline copy in any sample above. The gerund-lite, curatorial register is documented as a *shape*, not reproduced.
|
|
203
|
+
|
|
204
|
+
## 11. Brand Narrative (factual provenance)
|
|
205
|
+
|
|
206
|
+
CatchTable is operated by **주식회사 와드** (WAD Inc.), founded by **용태순** (Yong Tae-soon, current 대표/CEO). Headquartered in **Bundang, Gyeonggi-do** (corporate disclosure observed on the home footer, 2026-05-15). The service positions itself as a premium-leaning restaurant-reservation platform with editorial inflection — the 캐치 매거진 module on the home surface signals that the brand treats discovery as guidebook-style curation, not a transactional booking listing. Title-tag positioning observed on the home surface: "캐치테이블 | 즐거운 미식 생활의 시작" (factual evidence of curatorial-warm positioning, **not** adopted as design copy).
|
|
207
|
+
|
|
208
|
+
**FILL IN** (verification deferred — Crunchbase / DART access needed): founding year, total funding raised, employee headcount, investor list, monthly active users, reservation volume. These are reported in Korean trade press but were not verified at OmD attribution fidelity in this pass.
|
|
209
|
+
|
|
210
|
+
## 12. Personas (illustrative — for portable design briefs only)
|
|
211
|
+
|
|
212
|
+
> Personas are illustrative sketches derived from observable IA decisions (e.g. 마이다이닝 hub, 호텔 뷔페 / 스시 오마카세 / 한우 오마카세 best-of pillars). They are **not** based on internal CatchTable research and should be treated as analyst-inferred FILL-IN placeholders.
|
|
213
|
+
|
|
214
|
+
- **The Anniversary Planner** — 30s couple in Seoul; books quarterly for birthdays / anniversaries; values curation over price; uses 저장 (Save) before deciding.
|
|
215
|
+
- **The Omakase Regular** — 40s professional; books monthly; uses 마이다이닝 as a memory aid (where did I go, what did I eat); cares about repeat-discount tiers.
|
|
216
|
+
- **The Out-of-Town Visitor** — late 20s traveller in town for 2 days; uses 내 주변 + 캐치 매거진 to discover; books 24–48h ahead; one-shot user (low return).
|
|
217
|
+
|
|
218
|
+
## 13. Anti-Patterns
|
|
219
|
+
|
|
220
|
+
Things CatchTable's design **avoids** — and which a port must avoid to keep the inspiration:
|
|
221
|
+
|
|
222
|
+
- ❌ Flooding the surface with brand orange. Orange is a single-CTA color, not a section-fill color.
|
|
223
|
+
- ❌ Softening every corner. 92% of chrome is `0px` radius — sharpness is the brand.
|
|
224
|
+
- ❌ Adding a display / brand-typography font. Pretendard alone is the entire system.
|
|
225
|
+
- ❌ Firing shadows on cards at rest. Depth = borders + hairline alpha.
|
|
226
|
+
- ❌ "Book now" urgency rhetoric or countdown timers. Voice is curatorial, not transactional.
|
|
227
|
+
- ❌ Discount stickers stamped on food photography. Photography is sovereign.
|
|
228
|
+
- ❌ Breaking the 150% line-height contract. Every text slot ships 150% — don't compress.
|
|
229
|
+
- ❌ Treating desktop as the primary canvas. Design ships to mobile WebView; desktop is a porthole.
|
|
230
|
+
|
|
231
|
+
## 14. Motion (partially captured — flagged)
|
|
232
|
+
|
|
233
|
+
Motion tokens were **not** captured in this CDP pass — only entry-fade on Swiper transitions was visibly inferred. The home Swiper uses a default Swiper.js horizontal slide (cubic-ease, ~300ms). Detailed motion tokens (durations, easings, FAB rise, sheet present, tab-switch) require a follow-up UPDATE pass with interaction-triggered capture. **Flagged**.
|
|
234
|
+
|
|
235
|
+
## 15. Footer / Verification
|
|
236
|
+
|
|
237
|
+
- **DS surfaces probed and result**:
|
|
238
|
+
- `design.catchtable.co.kr` → DNS no-resolve (000)
|
|
239
|
+
- `tech.catchtable.co.kr` → DNS no-resolve (000)
|
|
240
|
+
- `www.catchtable.co.kr/brand` → 302 redirect (no brand portal)
|
|
241
|
+
- `github.com/catchtable` → 200 but only 3 public repos (`prerender-java`, `claude-hud`, `brand-review-tool`); **no design-system / Storybook / tokens repo**
|
|
242
|
+
- `getdesign.md/catchtable` → "No designs found for 'catchtable'"
|
|
243
|
+
- `styles.refero.design/?q=catchtable` → no result cards
|
|
244
|
+
- **Result**: **Tier 1 official DS = authoritative NEGATIVE.** The system lives in production code as a vanilla-extract token sheet — captured here directly via CDP (145 `:root` vars on `app.catchtable.co.kr/`).
|
|
245
|
+
|
|
246
|
+
- **Live capture method**: Chrome DevTools Protocol over `localhost:9222`, `websocket-client` with `suppress_origin=True`, `Runtime.evaluate` against `document.documentElement` for full `:root` custom-property enumeration plus a 3000-element `getComputedStyle` frequency analysis. Browser: Chrome/148.0.7778.97. Captured `2026-05-15T07:10Z`.
|
|
247
|
+
|
|
248
|
+
- **Surfaces inspected**: `https://app.catchtable.co.kr/` (35 element samples, 145 `:root` vars, 3000-element frequency table) + `https://app.catchtable.co.kr/ct/shop/list?categoryName=서울` (4 element samples — degraded desktop shell, used to confirm primary CTA spec).
|
|
249
|
+
|
|
250
|
+
- **Proof artefacts**:
|
|
251
|
+
- `assets/_reference/.live-inspect-proof.json` — 10 raw_samples (≥5 floor), full frequency proof, 33-color token map, 5-tier shadow ladder.
|
|
252
|
+
- `assets/_reference/.live-inspect-raw.json` — provenance manifest.
|
|
253
|
+
- `assets/_reference/tokens.json` — normalised colour / typography / radius / elevation / spacing.
|
|
254
|
+
- `assets/_reference/fonts.json` — Pretendard stack + weight-role map.
|
|
255
|
+
- `assets/_reference/structure.json` — IA + heading outline + tone-observed.
|
|
256
|
+
- `_research.md` — 5-tier source map + IP guardrails + flags.
|
|
257
|
+
|
|
258
|
+
- **IP guardrails**: Brand assets (logo, name, primary `#FF3D00`) referenced for inspiration only. Title-tag positioning phrase quoted **once** as §11 narrative evidence; **not** reproduced as design copy. §10 voice samples are fresh OmD analyst paraphrases. Token values reproduced as factual CSS-custom-property values under analytical fair-use.
|
|
259
|
+
|
|
260
|
+
- **Confidence**: **High** for tokens, type, radius, elevation, colour, IA spine, footer disclosure. **Medium** for personas (analyst-inferred from IA, not from internal research). **Low / Flagged** for motion (not captured), restaurant-detail page, list page, sell/reservation flow, MY tab — all require an UPDATE pass via mobile-emulated CDP.
|
|
261
|
+
|
|
262
|
+
- **Verification date**: 2026-05-15.
|