oh-my-design-cli 1.1.0 → 1.2.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.
@@ -0,0 +1,457 @@
1
+ ---
2
+ omd: 0.1
3
+ brand: Zigbang (직방)
4
+ ---
5
+
6
+ # Design System Inspiration of Zigbang (직방)
7
+
8
+ ## 1. Visual Theme & Atmosphere
9
+
10
+ Zigbang's web product is a study in restraint applied to a data-dense domain. Where almost every other Korean real-estate service crowds the viewport with red flags, yellow "신규!" badges, and saturated promotional overlays, Zigbang renders a near-monochrome map canvas with a near-black neutral (`#171719`) for primary type and a single functional blue (`#0066ff`) reserved for auth and primary interaction. The result reads less like a classified-ad site and more like a financial map tool — the visual register of a Bloomberg terminal compressed into consumer real-estate.
11
+
12
+ The signature typeface is **Pretendard Variable** (open-source Korean/Latin variable font), set on top of a Japanese-locale fallback (`Pretendard JP Variable`) and Apple system stack. This is the same family Toss, Karrot, and a generation of modern Korean apps converged on, but Zigbang uses it with notably lighter intensity than its peers — weight 400 across nav, weight 400 on station chips, and reliance on size + color rather than weight contrast for hierarchy. The disabled state uses transparency on a near-black (`rgba(55, 56, 60, 0.16)` and `rgba(55, 56, 60, 0.28)`) rather than a separate grey, which keeps the entire surface chromatically consistent — every element on the page is some opacity of the same near-black.
13
+
14
+ The brand mark is the one place warmth enters. Following the 2022 "Beyond Home" rebrand, the logo retains Zigbang's signature **orange** — described by the company as "deeper, more premium" than the original — paired with a house glyph encircled by an expanding ellipse, signifying the company's pivot from listings service to "Home OS". On the production surface this orange is reserved almost entirely for brand chrome and never bleeds into functional UI. The product UI is neutral; the brand mark carries the warmth. This separation is intentional and is the most important structural rule of the system: **orange = brand, blue = action, near-black = surface**.
15
+
16
+ Radius is generous but never frivolous. 8px on nav buttons, 10px on station chips and pagination, 9999px on icon-only and bookmark controls, 50% for circular bookmark toggles. There are no pill-shaped CTAs on the map surface — the closest is the 10px station chip, which reads as comfortable rather than playful. The map dominates the layout; chrome is built around not obscuring it.
17
+
18
+ **Key Characteristics:**
19
+ - **Pretendard Variable** as the universal typeface across nav, body, chips, and headings
20
+ - **Near-black `#171719`** as the primary text neutral — not pure black, slightly warm, designed to sit on a white map canvas without harshness
21
+ - **Functional blue `#0066ff`** as the single interactive color (auth links, primary CTA) — never used decoratively
22
+ - **Signature orange** as brand-mark-only — does not appear on functional UI on the map surface
23
+ - **Disabled-by-transparency** (`rgba(55,56,60,0.16)` / `0.28`) rather than dedicated grey tokens — every UI state is an opacity stop of the same neutral
24
+ - 8/10/9999/50% radius scale — 8px nav, 10px chips & paginators, 9999px icon controls, 50% circular toggles
25
+ - Weight 400 dominant — Zigbang resists the bold-Korean-headline default
26
+ - White map canvas is the design's largest surface — chrome must never compete with it
27
+
28
+ ## 2. Color Palette & Roles
29
+
30
+ ### Brand
31
+ - **Zigbang Orange** (`#FF6600` approx, premium tone): Logo mark only following 2022 "Beyond Home" rebrand. Encircles the house-glyph in the wordmark. *Not* used in functional product UI on the map surface.
32
+ - **Map Canvas White** (`#FFFFFF`): The dominant surface of the entire product — the map background that listing chrome floats over.
33
+
34
+ ### Text Neutrals
35
+ - **Heading / Primary Text** (`#171719`, observed `rgb(23, 23, 25)`): Near-black with a slight warm cast. Used for the search button, nav labels, station-name chip text, and primary content.
36
+ - **Bookmark Icon** (`#333333`, observed `rgb(51, 51, 51)`): Slightly lighter than primary text — used on icon-only bookmark toggles in the listing rail.
37
+
38
+ ### Interactive
39
+ - **Action Blue** (`#0066ff`, observed `rgb(0, 102, 255)`): The single functional accent. Used on auth links ("회원가입/로그인"), primary text-link CTAs, and active states. Reserved — does not appear decoratively.
40
+
41
+ ### Disabled / Muted (opacity tokens)
42
+ - **Muted 28%** (`rgba(55, 56, 60, 0.28)`): Bookmark-this-position icons, secondary disabled controls.
43
+ - **Muted 16%** (`rgba(55, 56, 60, 0.16)`): Paginator inactive arrows, deep-disabled states.
44
+
45
+ ### Surface
46
+ - **Page Background** (`#FFFFFF`): Map canvas and floating panel backgrounds.
47
+ - **Transparent Chrome** (`rgba(0, 0, 0, 0)`): Nav buttons sit on transparent backgrounds — chrome is structured by typography, not by fill.
48
+
49
+ ### Notes on the orange/blue split
50
+ Pre-2022, Zigbang's product UI itself was orange-tinted. The "Beyond Home" rebrand re-cast orange as a brand-only signal and migrated interactive UI to neutral + blue. This is the system Zigbang now ships. The orange wordmark reads as warm and human; the product reads as technical and data-rich. This split is the brand's most distinctive design decision and the reason Zigbang doesn't feel like a competing listings site.
51
+
52
+ ## 3. Typography Rules
53
+
54
+ ### Font Family
55
+ - **Primary**: `"Pretendard Variable"`, with fallback chain `"Pretendard JP Variable", -apple-system, BlinkMacSystemFont, system-ui, Roboto, sans-serif`
56
+ - **OpenType Features**: standard; Pretendard's variable axis is used implicitly via `font-weight` values
57
+
58
+ ### Hierarchy
59
+
60
+ | Role | Font | Size | Weight | Color | Notes |
61
+ |------|------|------|--------|-------|-------|
62
+ | Base body | Pretendard Variable | 16px | 400 | `#171719` | Browser default body text inherits this |
63
+ | Nav button label | Pretendard Variable | 14px | 400 | `#171719` (default) / `#0066ff` (auth) | 7px 14px padding, 32px tall |
64
+ | Search button (icon) | Pretendard Variable | 24px | 400 | `#171719` | Icon-only, 24px glyph, 9999px hit area |
65
+ | Station chip | Pretendard Variable | 22px | 400 | `#171719` | Comfortable size — map labels are read at distance |
66
+ | Paginator arrows | Pretendard Variable | 20px | 400 | `rgba(55,56,60,0.16-0.28)` | Disabled-by-default |
67
+ | Bookmark icon | Pretendard Variable | 22-24px | 400 | `#333333` / `rgba(55,56,60,0.28)` | Glyph-only |
68
+ | Heading (h2 example "NOTICE") | Pretendard Variable | 13px | 700 | `#000000` | Headings are *smaller* than body — Zigbang uses weight, not size, to mark structure in chrome |
69
+
70
+ ### Principles
71
+ - **Pretendard Variable is non-negotiable.** The fallback chain to `Pretendard JP Variable` shows the company expects the same family across all Korean and JP locales — no per-locale type swap.
72
+ - **Weight 400 as default.** Most Korean services lean on weight 600-700 for nav and chip labels to "feel substantial". Zigbang stays at 400 and uses size + color separation instead. This is the source of the system's quiet confidence.
73
+ - **Headings can be smaller than body.** The `h2 NOTICE` heading at 13px / 700 against 16px / 400 body is the inverted convention: when chrome must label rather than dominate, Zigbang shrinks the heading and adds weight. This is deliberate and worth preserving.
74
+ - **Color carries hierarchy.** With weight pinned to 400, hierarchy is built by `#171719` → `#333333` → `rgba(55,56,60,0.28)` → `rgba(55,56,60,0.16)` — a four-stop opacity ramp on a single neutral.
75
+ - **No italic, no underline as decoration.** Underline is reserved for link affordance only. Italic does not appear on the map surface.
76
+
77
+ ## 4. Component Stylings
78
+
79
+ ### Buttons
80
+
81
+ **Nav Auth Link (회원가입/로그인)**
82
+ - Background: transparent (`rgba(0, 0, 0, 0)`)
83
+ - Text: `#0066ff`
84
+ - Border: none
85
+ - Radius: 8px
86
+ - Padding: 7px 14px
87
+ - Height: 32px
88
+ - Font: 14px Pretendard Variable / 400
89
+ - Use: Auth-related actions in the header — sign-in, sign-up, account entry
90
+
91
+ **Nav Default Link (기업 서비스 etc.)**
92
+ - Background: transparent (`rgba(0, 0, 0, 0)`)
93
+ - Text: `#171719`
94
+ - Border: none
95
+ - Radius: 8px
96
+ - Padding: 7px 14px
97
+ - Height: 32px
98
+ - Font: 14px Pretendard Variable / 400
99
+ - Use: Standard nav entries — non-auth top bar links
100
+
101
+ **Search Trigger (Icon-only)**
102
+ - Background: transparent (`rgba(0, 0, 0, 0)`)
103
+ - Icon: `#171719`
104
+ - Border: none
105
+ - Radius: 9999px (circular hit area)
106
+ - Padding: 0
107
+ - Height: 24px
108
+ - Font: 24px / 400 (glyph)
109
+ - Use: Search-icon button at the right of the top bar
110
+
111
+ ### Listing & Map Chrome
112
+
113
+ **Station Chip (map label / region filter, e.g., "강남역")**
114
+ - Background: transparent (`rgba(0, 0, 0, 0)`)
115
+ - Text: `#171719`
116
+ - Border: none
117
+ - Radius: 10px
118
+ - Padding: 7px 9px 7px 11px (asymmetric — extra left for icon-glyph)
119
+ - Height: 32px
120
+ - Font: 22px Pretendard Variable / 400
121
+ - Use: Subway-station and region chips on the map surface — the largest piece of text on the chrome
122
+
123
+ **Bookmark Toggle (listing card)**
124
+ - Background: transparent
125
+ - Icon color (default): `#333333`
126
+ - Icon color (muted/empty state): `rgba(55, 56, 60, 0.28)`
127
+ - Border: none
128
+ - Radius: 50%
129
+ - Padding: 8px
130
+ - Height: 40px
131
+ - Font: 22-24px glyph
132
+ - Use: Save-this-listing toggle on every listing card and map-position pin
133
+
134
+ **Pagination Arrow (이전 / 다음)**
135
+ - Background: transparent
136
+ - Icon: `rgba(55, 56, 60, 0.16)` (disabled/inactive) — becomes `#333333` when active
137
+ - Radius (prev): `10px 0px 0px 10px` (left-rounded only)
138
+ - Radius (next): `0px 10px 10px 0px` (right-rounded only)
139
+ - Padding: 8px
140
+ - Height: 32px
141
+ - Font: 20px / 400
142
+ - Border: none
143
+ - Use: Paired previous/next paginators — the split-corner radius makes the pair read as a single segmented control
144
+
145
+ **Bookmark-this-Position (icon, map pin)**
146
+ - Background: transparent
147
+ - Icon color: `rgba(55, 56, 60, 0.28)` (default)
148
+ - Radius: 9999px
149
+ - Padding: 0
150
+ - Height: 24px
151
+ - Font: 24px glyph
152
+ - Use: "Save this map position" affordance — sits on the map at decision points
153
+
154
+ ### Cards & Containers
155
+ - Listing cards on the map surface are predominantly white (`#FFFFFF`) on the white map canvas, separated by 1px hairlines or subtle shadows
156
+ - Border-radius on listing cards: matches the chrome scale (8-10px range observed; specific tokens vary by surface)
157
+ - Shadow: minimal — the map is the dominant visual; cards lift via narrow shadows rather than heavy elevation
158
+ - Padding: aligned to 8px multiples
159
+
160
+ ### Inputs & Search
161
+ - Search input is launched as a dedicated mode rather than always-visible on the map; entry is via the search-trigger icon
162
+ - Placeholder reads "Search" (English on the production input observed) — Korean placeholder variants exist on other surfaces
163
+
164
+ ### Navigation
165
+ - Header sits on the white canvas with no border-bottom by default; sticky on scroll
166
+ - Logo (Zigbang wordmark) left-aligned
167
+ - Right-side cluster: nav links + auth link in `#0066ff` + icon controls
168
+ - Mobile: collapses to icon-only top bar with hamburger affordance
169
+
170
+ ### Map Overlay Components
171
+ The map surface is Zigbang's most distinctive component class. Every overlay must:
172
+ - Float on `#FFFFFF` map canvas without competing with map tiles
173
+ - Use transparent or low-opacity backgrounds where possible
174
+ - Reserve `#0066ff` for primary actions only — overuse drowns the map
175
+ - Use `#171719` near-black for type, never pure black
176
+ - Disable via opacity (`rgba(55,56,60,0.16)`) rather than swap to grey
177
+ - Pin / marker variants live as floating chrome; bookmark toggles use 50% radius
178
+
179
+ ### Price Chips (real-estate-domain-specific)
180
+ Price chips on listing cards follow the chip pattern (10px radius, 22px Pretendard, weight 400) but lean on color separation:
181
+ - **Active / featured price**: `#171719` text on white
182
+ - **Past / sold**: `rgba(55, 56, 60, 0.28)` muted neutral
183
+ - **Highlight (new listing, optional)**: `#0066ff` for indicator dot — never as background fill
184
+
185
+ ---
186
+
187
+ **Verified:** 2026-05-13
188
+ **Tier 1 sources:** zigbang.com/ (home — live DOM, computed-style observation on header buttons, station chips, bookmark toggles, paginators, body); zigbang.com/home/apt/map (map surface — partial inspect; second-pass evaluate disrupted by parallel browser-session tab contention)
189
+ **Tier 2 sources:** getdesign.md/zigbang (no entry — "No designs found for 'zigbang'"); styles.refero.design/?q=zigbang (no public style entry surfaced via search); designcompass.org Beyond Home rebrand commentary (token-light, design rationale only); company.zigbang.com/en/newsroom/view?idx=314 (rebrand announcement, CEO quote, color-direction "deeper, more premium orange" — no hex value published)
190
+ **Conflicts unresolved:** Zigbang's exact brand orange hex is not published publicly. The 2022 rebrand commentary describes the orange as "deeper, more premium" than the original, but no canonical token is exposed in the company-published materials reviewed. The `#FF6600`-approx label in §2 is a conservative estimate aligned with the wordmark; treat as illustrative until token publication is confirmed. The map surface is JS-rendered with a long bootstrap; listing-card and price-chip values in §4 are inferred from the chrome inspected and the visual rendering — exact card-surface tokens (border color, shadow) should be re-verified on a stable inspect session.
191
+
192
+ ## 5. Layout Principles
193
+
194
+ ### Spacing System
195
+ - Base unit: 4px
196
+ - Observed scale: 4px, 7px, 8px, 9px, 11px, 14px (from button padding `7px 14px` and chip padding `7px 9px 7px 11px`)
197
+ - Asymmetric padding is used deliberately — the 11px-left / 9px-right station chip padding accounts for an embedded glyph
198
+
199
+ ### Grid & Container
200
+ - The map surface is the container — full-bleed, edge-to-edge
201
+ - Floating chrome panels (filter rail, listing rail, detail sheet) sit over the map at fixed widths (typically 360-440px)
202
+ - Header is full-width with content-bounded inner padding (~16-24px lateral)
203
+ - No marketing-style centered max-width container on the map surface — the map *is* the layout
204
+
205
+ ### Whitespace Philosophy
206
+ - **The map is the negative space.** Zigbang's whitespace is the white map canvas itself. Floating chrome must respect this — no overlay should cover more than ~40% of viewport width at desktop
207
+ - **Asymmetric padding is fine.** The station chip uses `7px 9px 7px 11px` precisely because the leading glyph needs 11px of breathing room and the trailing text only needs 9px. Symmetric padding would feel mechanical
208
+ - **Air over decoration.** No decorative dividers, no badge clusters. If chrome can be removed without losing function, it is removed
209
+
210
+ ### Border Radius Scale
211
+ - 8px: nav buttons, standard interactive chrome
212
+ - 10px: station chips, segmented controls (with split-corner application)
213
+ - 9999px (effective ∞): icon-only hit areas, bookmark-position toggles
214
+ - 50%: circular toggles (bookmark on listing card)
215
+ - Split-corner application: paginators use `10px 0 0 10px` / `0 10px 10px 0` to read as a connected pair
216
+
217
+ ## 6. Depth & Elevation
218
+
219
+ | Level | Treatment | Use |
220
+ |-------|-----------|-----|
221
+ | Flat (0) | No shadow, transparent background | Nav buttons, page chrome on map |
222
+ | Map-pin lift (1) | Subtle 1-2px shadow on white background | Map markers, station chips with overlay state |
223
+ | Floating panel (2) | Soft shadow, 8-10px radius, white surface | Listing rail, filter rail |
224
+ | Sheet (3) | Stronger shadow, top-radius only (`16px 16px 0 0`) | Bottom-sheet detail panels on mobile |
225
+ | Modal (4) | Backdrop dim (`rgba(0,0,0,0.4-0.5)`) + center-aligned white panel | Sign-in, filter modals |
226
+ | Focus ring | 2px solid `#0066ff` outline | Keyboard focus on interactive elements |
227
+
228
+ **Shadow Philosophy.** Zigbang uses elevation sparingly. The map already implies depth via tile shading and scroll; over-layering shadows on chrome would compete. The system favors *position* over *shadow* — a panel reads as elevated because it floats over the map at a fixed offset, not because it has a heavy drop shadow.
229
+
230
+ ## 7. Do's and Don'ts
231
+
232
+ ### Do
233
+ - Use Pretendard Variable everywhere with weight 400 as default
234
+ - Reserve `#0066ff` for auth and primary interaction only
235
+ - Use `#171719` (near-black) for all primary text — never pure black
236
+ - Build hierarchy with opacity ramps on `rgba(55,56,60,...)`, not with separate grey tokens
237
+ - Use 10px radius on chips and segmented controls; 8px on nav; 9999px on icon-only
238
+ - Treat the white map canvas as the dominant surface — chrome floats, never dominates
239
+ - Use orange only for the wordmark and brand-chrome moments — never for functional UI on the map
240
+ - Use split-corner radius on paired paginators to read as one segmented control
241
+ - Apply asymmetric padding when a leading glyph needs more breathing room than trailing text
242
+
243
+ ### Don't
244
+ - Don't use bold weight (600-700) on nav, chip, or station labels — weight 400 is the signature
245
+ - Don't introduce a second accent color alongside `#0066ff` — the system is single-accent on functional UI
246
+ - Don't use pure black (`#000`) for text — `#171719` is the warmer, on-brand neutral
247
+ - Don't paint the product orange — orange is brand-mark-only post-2022 rebrand
248
+ - Don't use heavy drop shadows on map chrome — the map already implies depth
249
+ - Don't add decorative dividers, badges, or "신규!" flags — Zigbang's restraint is the differentiator vs. competitor real-estate sites
250
+ - Don't use pill-radius (full-round) on long-text CTAs — keep it at 10px max for content chrome
251
+ - Don't ever cover more than ~40% of viewport width with overlay panels at desktop
252
+
253
+ ## 8. Responsive Behavior
254
+
255
+ ### Breakpoints
256
+ | Name | Width | Key Changes |
257
+ |------|-------|-------------|
258
+ | Mobile | <640px | Bottom-sheet detail; map full-bleed; collapsed nav to hamburger |
259
+ | Tablet | 640-1024px | Side panels become bottom-sheet on narrow tablets; map remains dominant |
260
+ | Desktop | 1024-1440px | Listing rail at left/right of map; full nav surfaced |
261
+ | Large Desktop | >1440px | Listing rail width grows; map expands to fill remaining width |
262
+
263
+ ### Touch Targets
264
+ - Bookmark toggle: 40px (`8px padding` + 24px glyph) — comfortably above 44pt iOS guidance
265
+ - Nav buttons: 32px tall — borderline; relies on horizontal padding for tap area
266
+ - Paginators: 32px square — adequate; benefits from split-corner pairing
267
+ - Station chip: 32px — same scale as paginators, intentional for chrome consistency
268
+
269
+ ### Collapsing Strategy
270
+ - Map: always present, never collapsed
271
+ - Listing rail: side panel on desktop → bottom-sheet on mobile, swipe-up to expand
272
+ - Filter rail: dropdown chips on desktop → full-screen modal on mobile
273
+ - Nav: full link cluster on desktop → hamburger + search icon on mobile
274
+ - Sign-in CTA: visible as link on desktop → moved into hamburger drawer on mobile
275
+
276
+ ### Image Behavior
277
+ - Listing photos in cards crop to fixed aspect (commonly 4:3 or 16:9)
278
+ - Map pins remain at fixed pixel size — no scaling on zoom (avoids visual chaos)
279
+ - Logo wordmark preserves orange at all sizes
280
+
281
+ ## 9. Agent Prompt Guide
282
+
283
+ ### Quick Color Reference
284
+ - Primary text: Near-black (`#171719`)
285
+ - Body neutral fallback: `#333333`
286
+ - Interactive (auth, primary action): Action Blue (`#0066ff`)
287
+ - Disabled / muted: `rgba(55,56,60,0.16)` (deep) / `rgba(55,56,60,0.28)` (medium)
288
+ - Background: White (`#FFFFFF`)
289
+ - Brand mark only: Premium Orange (~`#FF6600`)
290
+ - Focus ring: `#0066ff`
291
+
292
+ ### Example Component Prompts
293
+ - "Create a Zigbang-style nav header on white. Left: Zigbang wordmark in orange. Right: nav links in Pretendard Variable 14px / 400, color `#171719`, 8px radius, 7px 14px padding, transparent background. Auth link uses `#0066ff` text. Search trigger is an icon-only button with 9999px hit area and 24px glyph."
294
+ - "Build a station chip for the map surface. 22px Pretendard Variable / 400, color `#171719`, transparent background, 10px radius, 7px 9px 7px 11px padding (asymmetric for leading glyph), 32px tall."
295
+ - "Design paired paginators (이전 / 다음). 32px square, transparent background. Left arrow uses radius `10px 0 0 10px`, right arrow uses `0 10px 10px 0`. Disabled state: `rgba(55,56,60,0.16)` icon. Active: `#333333` icon. 20px glyph, no border."
296
+ - "Make a bookmark toggle for a listing card. 40px circular button (50% radius), 8px padding, 22-24px heart/star glyph. Default state: `#333333`. Empty/muted: `rgba(55,56,60,0.28)`. Transparent background. No border."
297
+ - "Listing card on the map surface: white background, ~8-10px radius, soft shadow (avoid heavy lifts — the map already implies depth). 16px Pretendard Variable / 400 body. Price emphasized in `#171719`. Bookmark toggle in upper-right corner. Maximum 40% viewport width when floating over the map."
298
+
299
+ ### Iteration Guide
300
+ 1. Pretendard Variable is non-negotiable across all locales — never swap to a Korean-specific or Japanese-specific family
301
+ 2. Weight 400 is the default. Use 700 *only* on tiny labels like a 13px "NOTICE" header — never on nav or content
302
+ 3. The map canvas is the largest design surface. Chrome must never compete with it
303
+ 4. Action Blue (`#0066ff`) is the only functional accent. Don't add a second accent
304
+ 5. Orange is brand-mark-only. Do not paint UI orange — that was the pre-2022 system
305
+ 6. Build hierarchy with opacity ramps on `rgba(55,56,60,...)` — not separate grey tokens
306
+ 7. Split-corner radius on paired controls is a signature pattern — use it on segmented paginators
307
+ 8. Asymmetric padding is fine when content requires it — don't force symmetry on a glyph-prefixed chip
308
+
309
+ ---
310
+
311
+ ## 10. Voice & Tone
312
+
313
+ Zigbang's voice is **trustworthy, data-rich, and neutral-utilitarian** — the tone of a regional analyst rather than a salesperson. Where Korean real-estate has historically traded on urgency ("지금 안 보면 놓쳐요!"), Zigbang chose the opposite register after the 2022 rebrand: declarative, fact-forward, and quiet. CEO 안성우's most-quoted founding observation was that "most listings online were 허위매물 (fake)" — the brand voice is the brand's response to that history. Trust is performed through restraint, not through claims of trust.
314
+
315
+ | Context | Tone |
316
+ |---|---|
317
+ | Home / landing | Declarative, vision-forward. "Beyond Home". "공간에서 경험까지". No exclamation. |
318
+ | Map chrome | Functional, label-only. "강남역", "이전", "다음", "검색". Never decorative. |
319
+ | Listing card | Data-first. Price, size, floor, address — in that order, every time. No "great deal!" qualifiers. |
320
+ | Filter chips | Single-noun labels. "전세", "월세", "매매". The category *is* the label. |
321
+ | Empty states | Honest. "조건에 맞는 매물이 없습니다." Never "Oops!" Never an apology animation. |
322
+ | Error states | Mechanism-first. The error names what went wrong; the recovery action follows. |
323
+ | Marketing / company | Vision-register. "Home OS", "주거 혁신", "Beyond Home" — confident but not superlative. |
324
+ | Smart Home product | Slightly warmer, lifestyle-flavored — but still factual. "집의 디지털화". |
325
+ | Customer service | Patient, structured. Real-estate disputes are emotional; voice does not match the emotion, it grounds it. |
326
+
327
+ **Forbidden phrases.** "지금 바로!", "놓치지 마세요!", "최저가 보장", "단 한 번뿐인 기회". Performative urgency. Exclamation marks on routine CTAs. Star ratings as marketing claims (they are data, not a claim). Stacked superlatives ("최고의 프리미엄 매물"). Emoji on functional chrome. "혁신적인" as an adjective applied to UI ("혁신적인 검색 경험") — the word may appear in vision statements but never as marketing dressing.
328
+
329
+ **Voice samples** (illustrative; align with verified vision register from CEO statements):
330
+ - *"Beyond Home."* — Brand-level positioning, verified ([Zigbang Smart Home newsroom](http://en.smarthome.zigbang.com/index/?bmode=view&idx=162547182))
331
+ - *"공간에서 경험까지, 완전히 새롭게."* — From [company.zigbang.com/who-we-are](https://company.zigbang.com/who-we-are), verbatim
332
+ - *"Our next chapter goes beyond listings—we're building the Home OS."* — CEO Ahn Sung-woo, [company.zigbang.com newsroom](https://company.zigbang.com/en/newsroom/view?idx=314), verbatim
333
+
334
+ ## 11. Brand Narrative
335
+
336
+ Zigbang was founded in **2010** as **채널브리즈 (Channel Breeze)** by **안성우 (Ahn Sung-woo)**, a Seoul National University Statistics graduate who, while looking for a place to rent after graduation, discovered that the overwhelming majority of online real-estate listings were 허위매물 — fake listings staged to lure renters into calling offices for a different unit ([나무위키 안성우](https://namu.wiki/w/%EC%95%88%EC%84%B1%EC%9A%B0), [아주경제 창업 스토리](https://www.ajunews.com/view/20210805150341038)). The **Zigbang app launched in March 2012**; the parent company renamed itself from 채널브리즈 to 직방 in **October 2015** ([company.zigbang.com/who-we-are](https://company.zigbang.com/who-we-are)).
337
+
338
+ The name itself encodes the founding rejection. *직방* literally reads as "직접 찍은 방" — "rooms photographed directly". The product premise was that every listing on Zigbang would carry the actual photographs of the actual unit, not stock interior photos or competitive bait. This was an aggressive position in a market built on the opposite practice, and it shaped the brand's tone for the next decade: trust is performed through evidence, not asserted through copy.
339
+
340
+ In **November 2022**, Zigbang unveiled the **"Beyond Home"** rebrand — the first identity change since the 2012 launch ([Zigbang Smart Home newsroom](http://en.smarthome.zigbang.com/index/?bmode=view&idx=162547182)). The new wordmark replaced the Korean name with the English "zigbang", added a house glyph encircled by an expanding ellipse, and re-cast the signature orange in a "deeper, more premium" tone. CEO 안성우 framed the rebrand in a published statement: *"Our next chapter goes beyond listings—we're building the Home OS. Zigbang will evolve into a proptech company that supports every part of the residential experience, from home search to home life."* The 2022 rebrand is also when the product UI dropped its orange-heavy chrome and migrated to the neutral + functional-blue system documented here.
341
+
342
+ What Zigbang refuses: urgency-driven marketing (no "right now / limited time" CTAs), fake-listing tolerance (the original founding rejection — operationalized as a verification system), and orange-tinted UI chrome (orange is now strictly a brand signal). What it embraces: a near-monochrome product surface that lets the map carry the design, Pretendard Variable as a quiet typographic baseline, and an English-forward wordmark that signals global ambition without abandoning the Korean meaning of the name.
343
+
344
+ ## 12. Principles
345
+
346
+ 1. **Show the room, don't claim it.** The founding rejection of fake listings is the entire brand. Every design surface should support evidence (photos, measurements, verified-broker badges) and avoid claims that could be unverified. *UI implication:* Listing card hierarchy is photo → price → size → floor → address. Marketing copy is below this fold, never above.
347
+ 2. **The map is the product.** Zigbang's defining design choice is that the map dominates and chrome floats. *UI implication:* No overlay covers more than ~40% of viewport width. Chrome uses transparent backgrounds wherever it can.
348
+ 3. **One accent is enough.** `#0066ff` is the only functional color outside the neutral ramp. Adding a second accent would compete with the brand orange and turn the system into a flag of confusion. *UI implication:* No "second CTA color". No urgent-red, no success-green outside semantic states.
349
+ 4. **Orange is the wordmark. Blue is the action.** The 2022 rebrand split these intentionally. *UI implication:* If you find yourself painting a CTA orange, stop. Orange belongs to the logo and to brand-chrome moments only.
350
+ 5. **Restraint is trust.** In a market saturated with red-flag urgency and yellow promotional badges, the absence of decoration is itself a positioning statement. *UI implication:* When in doubt, remove the badge.
351
+ 6. **Weight 400 is the signature.** Most Korean services lean on 600-700 for chrome to "feel substantial". Zigbang's quiet confidence comes from refusing that. *UI implication:* Reserve 700 for tiny labels (13px or smaller) only.
352
+ 7. **Hierarchy by opacity, not by hue.** Zigbang's four-stop neutral ramp is a single near-black at four opacity levels. *UI implication:* Don't introduce a "grey-300" or "grey-500" — use `rgba(55,56,60,...)` opacity stops.
353
+ 8. **Asymmetry is okay when content asks for it.** The 11px-left / 9px-right chip padding exists because a glyph leads. *UI implication:* Don't force symmetric padding on chrome with leading glyphs.
354
+
355
+ ## 13. Personas
356
+
357
+ *Personas below are fictional archetypes informed by publicly observable Zigbang user segments (first-time renters in Seoul, mid-career apartment buyers, returning expats, Smart Home customers), not individual people.*
358
+
359
+ **김지윤, 27, 서울 마포구.** First-time monthly-rental seeker, two years out of university, looking for a 원룸 under ₩600,000 deposit + ₩50만 월세. Uses Zigbang on commute every evening. Trusts Zigbang specifically because she once called about a listing on a competitor and was offered a different unit ("그건 나갔어요, 비슷한 거 보여드릴게요") — Zigbang's verified-photo policy is the entire reason she still has the app. Cares more about the photos being real than about the price being lowest.
360
+
361
+ **박재훈, 41, 경기 성남시 분당구.** Mid-career buyer with a school-age child, looking to upgrade from his current apartment within a 2km school-zone radius. Spends 30+ minutes per session on the map view, comparing 단지 by 단지. Reads every listing's transaction history before contacting an agent. Values that Zigbang's filter chips don't try to upsell premium listings — the data is presented flat and he ranks it himself.
362
+
363
+ **Sarah Lim, 33, returning from London.** Korean-American returning to Seoul after six years abroad, looking for a 전세 oh in 한남동. Uses the English logo and the international-ready interface as a signal that Zigbang is the modern option among Korean real-estate apps. Does not speak fluent Korean for legal documents but can navigate the map and listing chrome confidently because the icon language is universal.
364
+
365
+ **이수진, 52, 부산 해운대구.** Apartment owner who installed Zigbang Smart Home digital locks two years ago and discovered the listings app later through the cross-promo. Uses Zigbang as a household-management tool, not primarily as a real-estate tool. Trusts the brand because the lock has not failed once in 24 months.
366
+
367
+ ## 14. States
368
+
369
+ | State | Treatment |
370
+ |---|---|
371
+ | **Empty (map area with no listings)** | Map remains visible. Floating panel center-aligned over the map: 16px Pretendard Variable / 400 in `#171719`: "조건에 맞는 매물이 없어요". One secondary line in muted: "필터를 조정해 보세요." One blue text-link: "필터 초기화". No illustration. |
372
+ | **Empty (saved listings)** | White panel. 16px line in `#171719`: "찜한 매물이 없어요." Below in `rgba(55,56,60,0.28)`: "지도에서 ♡ 아이콘을 눌러 저장할 수 있어요." |
373
+ | **Loading (map first paint)** | Map tiles load progressively; chrome (listing rail) shows skeleton blocks at exact dimensions in a low-opacity neutral. 1.0s shimmer. No spinner over the map itself — the tile load *is* the loading affordance. |
374
+ | **Loading (filter applied)** | Subtle 2px `#0066ff` progress bar at the top of the listing rail. Previous results remain visible underneath. |
375
+ | **Error (network failed)** | Inline banner above the listing rail. Text: 14px / 400 in `#171719`. Pattern: error type + retry link in `#0066ff`. No alarm color — Zigbang trusts the user to read. |
376
+ | **Error (geolocation denied)** | Banner over the map: "위치 권한이 거부되어 현재 위치를 표시할 수 없어요." Recovery: "주소 직접 검색" link in `#0066ff`. |
377
+ | **Success (listing saved)** | Bookmark glyph fills (`#333333` → filled `#FF6600` brand orange — the one place orange touches functional UI, as a momentary state). 2s auto-dismiss confirmation: "찜 목록에 저장됐어요." Sentence case, declarative. |
378
+ | **Success (agent contacted)** | Inline confirmation in the listing detail: "문의가 전송됐어요. 곧 연락받으실 수 있어요." Past tense, factual. |
379
+ | **Skeleton** | Low-opacity neutral blocks (`rgba(55,56,60,0.08-0.12)`) at final dimensions. No shimmer hue — the shimmer is opacity-only, consistent with the entire design system's anti-second-color rule. |
380
+ | **Disabled** | Action Blue actions fade to `rgba(0,102,255,0.3)`. Neutral actions fade to `rgba(55,56,60,0.16)`. Text stays at `rgba(55,56,60,0.28)`. |
381
+ | **Map pin hover** | Pin scales 1.05× over 120ms; no color change. The size delta is enough. |
382
+ | **Listing card hover** | 1-2px lift via subtle shadow increase; never a background-color change. |
383
+
384
+ ## 15. Motion & Easing
385
+
386
+ **Durations:**
387
+
388
+ | Token | Value | Use |
389
+ |---|---|---|
390
+ | `motion-instant` | 0ms | State commits, bookmark toggles, focus rings |
391
+ | `motion-fast` | 120ms | Hover lifts, pin scale, button press feedback |
392
+ | `motion-standard` | 200ms | Filter rail open, listing rail slide, dropdown |
393
+ | `motion-slow` | 320ms | Bottom-sheet expand, modal enter |
394
+ | `motion-map` | 400-600ms | Map pan/zoom transitions (Naver Maps / Kakao Maps default) |
395
+
396
+ **Easings:**
397
+
398
+ | Token | Curve | Use |
399
+ |---|---|---|
400
+ | `ease-enter` | `cubic-bezier(0.2, 0.7, 0.3, 1)` | Sheet, modal, rail enter |
401
+ | `ease-exit` | `cubic-bezier(0.4, 0, 1, 1)` | Dismissal |
402
+ | `ease-standard` | `cubic-bezier(0.25, 0.1, 0.25, 1)` | Hover, focus, generic two-way |
403
+ | `ease-map` | (provided by underlying map SDK) | Pan/zoom — Zigbang inherits rather than overrides |
404
+
405
+ **Explicitly forbidden.** Spring, bounce, overshoot. `cubic-bezier` middle control above 1.0. Bouncing "drop the pin" pin-animation. Confetti, success-celebration motion. Real-estate decisions are weighty; the motion language must signal stability, not delight.
406
+
407
+ **Signature motions:**
408
+
409
+ 1. **Bottom-sheet expand.** On mobile, tapping a listing rail item or a map pin lifts a sheet from the bottom with `motion-slow` / `ease-enter`. The sheet uses top-only radius (`16px 16px 0 0`). Backdrop dims to `rgba(0,0,0,0.4)` simultaneously.
410
+ 2. **Map-pin selection.** Tapping a pin scales it to 1.1× with `motion-fast`. The corresponding listing card in the rail scrolls into view with `motion-standard` / `ease-standard`. No color flash — the size delta + scroll is the affordance.
411
+ 3. **Filter chip activation.** Tapping a filter chip applies `motion-fast` border/fill change. The listing rail behind it refreshes with a `#0066ff` top progress bar — never a full content blur or replacement.
412
+ 4. **Reduce motion.** Under `prefers-reduced-motion: reduce`, all `motion-*` tokens collapse to `motion-instant`. Map pan/zoom respects the underlying SDK's reduced-motion handling. Bottom sheets snap rather than slide. Pin scaling on selection disables entirely.
413
+
414
+ <!--
415
+ OmD v0.1 Sources — Philosophy Layer (sections 10-15)
416
+
417
+ Verified via WebFetch (2026-05-13):
418
+ - https://company.zigbang.com/who-we-are — confirms vision phrasing "Living Forward, Zigbang",
419
+ brand values (Reliability / Innovation / Efficiency / Possibility), and founding timeline
420
+ (채널브리즈 1115/2010 → Zigbang web launch 03/2012 → rename to 직방 10/2015).
421
+ - https://company.zigbang.com/en/newsroom/view?idx=314 — confirms 2022 "Beyond Home" rebrand,
422
+ CEO Ahn Sung-woo's verbatim quote: "Our next chapter goes beyond listings—we're building
423
+ the Home OS. Zigbang will evolve into a proptech company that supports every part of the
424
+ residential experience, from home search to home life." Confirms "deeper, more premium
425
+ orange" color direction.
426
+ - http://en.smarthome.zigbang.com/index/?bmode=view&idx=162547182 — confirms English Beyond
427
+ Home rebrand article, logo description (house icon encircled by expanding ellipse).
428
+ - https://designcompass.org/en/2022/11/30/zigbang-rebranding-beyond-home/ — third-party
429
+ design commentary on the rebrand; rationale rather than specs.
430
+
431
+ Verified via WebSearch (2026-05-13):
432
+ - 안성우 founding story (Seoul National Univ. Statistics graduate, post-graduation rental
433
+ search → discovered prevalent fake listings → founded 채널브리즈 1115/2010): aju news +
434
+ 나무위키 + 서울경제 CEO&Story corroborate.
435
+ - 직방 name etymology ("직접 찍은 방"): standard interpretation across CEO interviews
436
+ available in the cited search results.
437
+
438
+ Tier 1 live inspect (2026-05-13):
439
+ - zigbang.com home — Pretendard Variable confirmed, #171719 confirmed, #0066ff confirmed
440
+ on auth link, 8px nav radius, 10px chip radius, 9999px icon, 50% bookmark toggle,
441
+ rgba(55,56,60,0.16/0.28) muted ramp.
442
+ - zigbang.com/home/apt/map — partial inspect; tab contention from parallel browser
443
+ sessions prevented full second-pass. Map-overlay tokens in §4 are inferred from the
444
+ chrome inspected on the home surface + visual rendering.
445
+
446
+ Personas (§13) are fictional archetypes informed by publicly observable Zigbang user
447
+ segments. Names are illustrative; they do not refer to real people.
448
+
449
+ Interpretive claims (e.g., "weight 400 is the signature", "the map is the negative space",
450
+ "orange = brand, blue = action") are editorial readings connecting Zigbang's observed
451
+ design choices to its founding rejection of fake listings, not directly sourced Zigbang
452
+ statements.
453
+
454
+ Brand-orange hex value is NOT publicly published; the ~#FF6600 estimate in §2 is
455
+ conservative and labeled as illustrative. Treat as unresolved until official token
456
+ publication is confirmed.
457
+ -->