dev-uiux-design
Source: skills/dev-uiux-design/SKILL.md
UI/UX design direction: visual judgment, design isms, product personality, UX states.
에이전트에게 '멋지게 만들어'라고 하면 매번 비슷한 그라데이션, 둥근 카드, 보라색 팔레트가 나온다. 디자인 판단은 도메인, 사용자, 맥락에 따라 달라져야 하는데, 구현 스킬(dev-frontend)만으로는 이 판단이 빠진다. 이 스킬은 디자인 방향을 먼저 결정하고, 그 방향에 맞는 구체적인 타이포/색상/레이아웃을 설정한 뒤 dev-frontend에 구현을 넘긴다.
LLM에게 디자인을 맡기면 세 가지 수렴이 발생한다: (1) 시각적 수렴 — 모든 프로젝트가 같은 카드 그리드, 같은 히어로 레이아웃, 같은 색상 팔레트로 수렴한다. (2) 문화적 수렴 — 한국어 요청을 영어권 디자인 관습으로 해석한다('깔끔하게'를 일률적으로 미니멀리즘으로). (3) 상태 수렴 — 데이터가 완벽하게 들어와 있는 해피 상태만 디자인한다. 비어있는/에러/로딩/권한 부족 상태는 LLM이 자발적으로 고려하지 않는다.
이 세 가지 수렴은 LLM의 학습 데이터 분포에서 직접 비롯된다. dev-uiux-design은 구현 전에 이 세 수렴을 깨뜨리는 '디자인 방향 결정'을 강제한다.
이 스킬이 해결하는 실제 문제
'깔끔하게 해줘'라는 요청은 미니멀리즘인지, 화이트 스페이스 정리인지, 타이포 개선인지 맥락에 따라 다르다. Korean Request Translation(section 3)은 흔한 한국어 디자인 요청을 구체적인 디자인 방향으로 변환하는 사전을 제공한다.
에이전트는 SaaS 대시보드와 게임 랜딩 페이지에 같은 디자인을 적용한다. Product Personality Selection은 도메인별 성격(미니멀/엔터프라이즈/플레이풀/에디토리얼)을 먼저 결정하게 한다. product-personalities.md에 구체적인 참조 제품과 시각적 특성이 정리되어 있다.
에이전트는 데이터가 잘 들어와 있는 해피 경로만 구현한다. 데이터가 없을 때, API가 실패했을 때, 로딩 중일 때, 권한이 없을 때의 UX가 빠진다. ux-states.md는 이 4가지 상태를 반드시 설계하게 한다.
에이전트가 앱을 완성한 뒤 파비콘을 까먹거나, 적당히 이모지를 넣는다. favicon-logo.md는 파비콘/로고가 디자인 시스템의 일부임을 명시하고, 브라우저 탭에서 식별 가능한 아이콘을 만들게 한다.
Triggers: make it look good, modern, clean, aesthetic, onboarding, empty state, error state, favicon, logo, design system
Key Concepts
- Product Personality Selection
- Design Isms (Bauhaus/Memphis/Brutalism/etc.)
- Korean Request Translation
- UX States (Empty/Error/Loading/Permission)
- Typography Decision Gate
- Favicon & Logo System
Related Skills
Reference Documents
| Document | Description |
|---|---|
| color-system | |
| design-isms | Bauhaus/Memphis/Brutalism/Wabi-Sabi 등 디자인 사조와 적용 조건 |
| Design Read Example | |
| design-system-bootstrap | |
| Favicon & Product Logo — Design Judgment & Patterns | 파비콘/로고 생성 규칙, 크기별 대응, 브랜드 일관성 |
| Form Design Patterns | |
| layout-macrostructures | |
| Logo Trust Sections — Design Patterns & Judgment | |
| Mobile Native UX Conventions | |
| product-personalities | 미니멀/엔터프라이즈/플레이풀/에디토리얼 성격별 참조 제품과 시각적 특성 |
| responsive-nav | |
| Typography Line Breaks — Design Judgment Guide | text-wrap: balance/pretty, ch 단위, 한국어 고아 방지 |
| UX Preflight Checklist | |
| ux-states | 빈 상태/에러/로딩/권한 부족의 UX 패턴과 마이크로카피 가이드 |
| Visual Hierarchy |
Sections Overview
| Section | Summary |
|---|---|
| Product Personality | 도메인과 사용자에 맞는 제품 성격(미니멀/엔터프라이즈/플레이풀 등)을 결정한다. |
| Design Isms | Bauhaus, Memphis, Brutalism 등 디자인 사조를 알고 적절히 적용한다. |
| Korean Request Translation | 한국어 디자인 요청의 실제 의도를 파악하여 구체적 디자인 방향으로 변환한다. |
| UX States | 비어있는/에러/로딩/권한 부족 상태의 UX 패턴을 설계한다. |
Academic References
| Paper | Year | Relevance |
|---|---|---|
Co-Constructed or Constrained? AI Tools Reshape UI Design PracticeCHI 2026 | 2026 | AI 도구가 UI 디자인을 동질적으로 만드는 현상의 실증. |
Generative AI Enhances Individual Creativity but Reduces Collective DiversityScience Advances 2024 | 2024 | AI 지원 창작의 개별 품질 향상 + 집단 다양성 감소. |
Antislop: A Comprehensive Framework for Identifying and Eliminating Repetitive Patterns in LLMsarXiv:2510.15061 | 2025 | LLM 특유의 반복적 언어 패턴 탐지 프레임워크. anti-slop 체크리스트의 학술적 근거. |
Measuring AI Slop in TextarXiv:2509.19163 | 2025 | 전문가 기반 AI 슬롭 분류 체계와 해석 가능한 평가 차원 개발. |
Official Guides
- Material Design 3 — Google Material Design 3 디자인 시스템 가이드.
- Apple Human Interface Guidelines — Apple의 플랫폼별 UX 디자인 가이드라인.
- Figma Design Systems — 디자인 시스템 컴포넌트 구성 베스트 프랙티스.
Full Specification
Show full SKILL.md content
UI/UX Design: Intent Discovery, Patterns & Product Vocabulary
Activates by change surface when:
- User's design direction is vague ("깔끔하게", "모던하게", "just make it look good")
- Building onboarding, empty state, error state, or loading state UI
- User references a product aesthetic ("Notion 느낌", "Linear처럼")
- Starting a new design system or generating a color palette
- Choosing layout patterns or navigation architecture
- Setting up favicons, product logos, or brand identity elements
- Handling logo dark mode variants, OG images, or social sharing meta
Read this before style-specific references when the user cannot articulate a clear design direction.
For anti-slop detection and banned patterns, defer to dev-frontend/references/core/anti-slop.md.
Emoji ban (stub): no emoji as UI visual elements (STRICT). Canonical rule, scope, and exemptions: dev-frontend §5 / dev-frontend/references/core/anti-slop.md § Emoji Slop.
Role separation: This skill provides design judgment (when/why). dev-frontend provides implementation (CSS/HTML how). When both have a reference on the same topic (e.g., typography, logos), read this skill first for the decision, then dev-frontend for the code.
External/current design evidence: For live product-reference claims, current
design-system docs, browser API behavior, accessibility guidance that may have
changed, or browser-rendered source evidence, read the active search skill and
follow its query-rewrite, source-fetch, and evidence-status rules. Use browser
fetch/open/text/get-dom/snapshot only after candidate URLs exist.
> C0/C1 work (small local patches): See dev §0.0 Work Classifier + §0.1 Patch Fast-Path before reading references.
> Rule class note (UX-STYLE-01): Everything in this skill that expresses taste —
> product personalities, design-isms, preset tokens, aesthetic vocabulary — is
> STYLE_SAMPLE: examples to draw from, never universal requirements. Objective UX
> correctness (state coverage, accessibility, readability) is owned by dev-frontend
> §1.5 and stays STRICT/DEFAULT.
Modular References
| File | When to Read | What It Covers | ||||
|---|---|---|---|---|---|---|
references/design-isms.md | User names a style/movement | 15 design movements with CSS signatures, incl. Liquid Glass + Liquid Editorial default kit (2025-2026) + AI Serif Editorial + Organic Capsule (verified 2026-07-09) | ||||
references/design-read-example.md | Learning or reviewing Design Read format | Filled-in Design Read + dial setting example | ||||
references/product-personalities.md | User references a product | 10 product DNA profiles with exact tokens, incl. 2026 AI-product pastel + OpenAI warm-sans organic + Anthropic serif bookish | ||||
references/layout-macrostructures.md | Choosing page/component layout | Component layouts + page-level compositions | ||||
references/ux-states.md | Building any stateful UI | Onboarding, empty, error, loading, progressive disclosure |
references/color-system.md | Generating colors/palette | OKLCH-based palette generation, dark mode, accessibility | ||||
references/design-system-bootstrap.md | New project / design system | Token architecture, component hierarchy, DESIGN.md format (google-labs-code/design.md) | ||||
references/responsive-nav.md | Responsive or navigation work | Breakpoints, container queries, nav patterns by density | ||||
references/ux-preflight.md | Before delivery | UX state verification checklist | ||||
references/typography-line-breaks.md | Always for text-heavy UI | Heading break quality, short descriptor category (hero subtitle, card desc — use balance not pretty), orphan prevention, ch units, Korean orphan criteria, -webkit-line-clamp conflict | ||||
references/favicon-logo.md | Favicon, product logo, or brand identity work | Favicon file set, SVG dark mode, logo in nav/footer, dark mode variants, OG images, brand tokens, common mistakes |
references/logo-trust-sections.md | Integration/partner/client logos | Marquee vs grid decision, anti-patterns, grayscale treatment, placement |
references/visual-hierarchy.md | Any layout / composition decision | 6 levers: size scale, weight contrast, color emphasis, spacing, position, density |
references/form-patterns.md | Forms, wizards, auth, file upload | Validation timing, multi-step, password UX, file upload, search/filter |
references/mobile-native-ux.md | Native mobile app UX decisions | iOS HIG vs Material 3, gestures, deep linking, Korean privacy, app store UX |
---
Lazy-User Gate (UX-LAZY-01, DEFAULT — ponytail discipline applied to UX)
Design for the cognitively frugal user: users don't read, they scan; they satisfice;
they will trade choice for one obvious next action. Before shipping any user-facing
decision point — option, setting, step, confirmation, input field, mode — justify its
existence the ponytail way, in order:
- Do nothing: can a correct default remove this decision entirely? (A settings
page is a collection of defaults you failed to choose.)
- Delete: does the step/field earn its completion-rate cost? Every added decision
point taxes conversion and comprehension (Hick's law).
- Absorb: can the system take the complexity instead of the user (Tesler's law) —
auto-detect, infer, remember last choice?
- Demote: still needed for some users → progressive disclosure (advanced section,
"more options"), never a top-level fork.
Every screen has ONE primary action. If two actions compete visually, the design has
not decided what the screen is for.
Surface-conditional (do not over-apply): laziness means *fewer decisions* on
consumer/one-shot flows (D1-D3), but *fewer repeated motions* on repeated-work tools
(D4-D8: density, keyboard paths, batch actions — collapsing an expert's controls into
wizards is the inverse failure). Route by the product-density profile first.
STRICT exemptions (never one-click away): destructive/irreversible actions,
consent/privacy/legal choices, payments confirmation, and accessibility affordances
are never collapsed into magic defaults.
UX State Contract (UX-STATE-01)
For onboarding, empty, loading, error, or progressive-disclosure work, answer the state meaning before styling. Deep patterns live in references/ux-states.md.
- Onboarding teaches the first meaningful action, not the whole product.
- Empty explains why the state exists and names the next action.
- Loading chooses skeleton for known structure, spinner/progress for short unknown waits, and avoids fake completion.
- Error exposes retry, recovery, or escalation; never dead-end the user.
- Progressive disclosure names what stays hidden, why, and where it becomes available.
IA Chooser (UX-IA-01)
Default navigation architecture by work shape; read references/responsive-nav.md for responsive details.
| Work shape | Default IA |
|---|---|
| Dense desktop repeated work | Sidebar + command palette |
| Medium sectioned work | Tabs or segmented navigation |
| Mobile-primary consumer flow | Bottom nav, sheet, or thumb-zone actions |
| Wizard/auth/setup | Stepper or stacked linear flow |
1. User Intent Discovery Protocol
When the user's design request is vague ("깔끔하게 해줘", "모던하게", "just make it look good"), do not produce generic output. Run the compact ambiguity flow (UX-INTENT-01):
- Produce the Design Read from §2 using available signals.
- If one decision still blocks the direction, ask ONE best clarifying fork with binary/ternary choices.
- Proceed from the answer; if the user does not answer and the task can continue, choose the most domain-correct default and state the assumption. On EXPRESSIVE surfaces (landing/consumer/creative/AI-product), that default is the No-Brief Default Direction below (UX-DEFAULT-ISM-01); quiet surfaces keep quiet domain-correct defaults.
> Skip this section if the user provided explicit design specs or this is a ≤5-line patch.
No-Brief Default Direction (UX-DEFAULT-ISM-01, DEFAULT — kit content STYLE_SAMPLE)
This is the UX-INTENT-01 step-3 FALLBACK, never a bypass: it fires only after
the Design Read and after the one blocking fork is resolved or unanswered, and
the applied direction is ALWAYS stated as an explicit assumption in the
deliverable. A named, specific, domain-gated direction replaces generic LLM
defaults; it must NOT reintroduce generic glassmorphism / centered-card /
beige-default taste under a new label.
Default kit for expressive surfaces: Liquid Editorial (2026 composite,
decided 2026-07-07 from Tier-2 trend research — see references/design-isms.md
§1.13 for the full signature):
- Structure: type-led editorial composition (oversized authored headline
scale, grotesk default, serif display only with editorial rationale per
UX-TYPE-01), tactile/photographic texture over flat gradient washes,
asymmetric content-weighted layout.
- Material accent: Liquid Glass or near-opaque pill chrome ONLY on floating
functional layers (nav/toolbars/chip clusters); pill-chip content units;
content layer stays solid (dev-frontend FE-LIQUID-LAYER-01).
- Motion: feedback baseline + exactly ONE signature moment
(pointer-proximity chips or scroll-driven reveal), per motion domain gates.
- Color: OKLCH-derived single accent + tinted neutrals (hue budget,
references/color-system.md).
Domain gate (STRICT): dashboards, admin, ops, finance, gov, B2B repeated-work
tools NEVER receive this kit by default — "fancy" never overrides domain
correctness (§ IA Chooser + dev-frontend product-density profiles).
Optional deepening: use the ladder below only when the first fork fails or the user explicitly wants guided exploration.
- Use binary/ternary choices, not open-ended questions.
- Reference known products — users recognize what they want faster than they articulate it.
- If the diagram skill is available, offer: "참고로 스타일 비교를 다이어그램으로 보여드릴 수도 있어요."
- If the user names a specific product reference, skip remaining steps and map directly via
references/product-personalities.md.
Step 1 — Mood
Ask: "전체적인 분위기가 어떤 느낌이면 좋을까요?" / "What overall feeling should the product have?"
| Option | Signals | Product References |
|---|---|---|
| 전문적/신뢰감 (Professional) | swiss, flat, restrained | Linear, Vercel, GitHub |
| 따뜻한/친근한 (Warm/Friendly) | rounded, warm-neutrals, illustrations | Notion, Airbnb, Toss |
| 고급스러운/세련된 (Premium) | generous-whitespace, thin-type, restrained-color | Apple, Stripe, Aesop |
| 재미있는/활기찬 (Fun/Energetic) | bright-colors, playful-shapes, bold-type | Figma, Discord |
| 대담한/독특한 (Bold/Distinctive) | brutalism, asymmetry, experimental | Gumroad, Nothing |
Step 2 — Lightness
Ask: "밝은 화면이 좋으신가요, 어두운 화면이 좋으신가요?" / "Light or dark background?"
| Option | CSS |
|---|---|
| 밝은 배경 (Light) | bg-white text-gray-900 |
| 어두운 배경 (Dark) | bg-gray-950 text-gray-100 |
| 둘 다 (Both / auto) | prefers-color-scheme aware |
Step 3 — Density
Ask: "화면에 정보가 많이 보이는 게 좋으신가요, 여유롭게 보이는 게 좋으신가요?" / "Dense or spacious?"
| Option | VISUAL_DENSITY | Tokens |
|---|---|---|
| 빽빽하게 (Dense) | 8–10 | text-sm py-1 px-2 gap-1 |
| 보통 (Normal) | 4–7 | text-base py-3 px-4 gap-4 |
| 여유롭게 (Spacious) | 1–3 | text-lg py-8 px-8 gap-8 |
Step 4 — Shape
Ask: "모서리가 각진 느낌이 좋으신가요, 둥근 느낌이 좋으신가요?" / "Sharp or rounded?"
| Option | CSS | Signals |
|---|---|---|
| 각진 (Sharp) | rounded-none / 0–2px | Vercel, brutalism, swiss |
| 살짝 둥근 (Slightly rounded) | rounded-md / 6–8px | Linear, Notion, material |
| 많이 둥근 (Very rounded) | rounded-2xl / 16–24px | Figma, iOS, Toss |
Step 5 — Viewport Priority
Ask: "주로 어떤 화면에서 볼 건가요?" / "What's the primary viewing device?"
| Option | Responsive Strategy | Key Constraint |
|---|---|---|
| 데스크탑 위주 (Desktop-first) | Desktop layout → tablet → mobile collapse | Data density OK, hover interactions OK |
| 모바일 위주 (Mobile-first) | Mobile layout → tablet → desktop expansion | Thumb zone, touch targets, minimal density |
| 둘 다 중요 (Both equally) | Design mobile AND desktop as separate compositions, not one adapted from the other | Most work — section order/composition may differ |
Cross-ref: references/responsive-nav.md for canonical breakpoints and container query patterns, dev-frontend/references/core/mobile-ux.md for mobile-specific composition rules.
Step 6 — Reference
Ask: "혹시 '이런 느낌이면 좋겠다' 하는 사이트나 앱이 있으신가요?" / "Any website or app that feels like what you want?"
This single question often resolves all ambiguity. If the user names a product, map it via references/product-personalities.md.
Vague Request Disambiguation
When the user gives feedback without specifics, translate:
| User says | Action | |||||
|---|---|---|---|---|---|---|
| "더 좋게" / "make it better" | Ask: "레이아웃? 색상? 타이포? 여백?" — identify the dimension | |||||
| "더 전문적으로" / "more professional" | Increase whitespace, reduce color count to 2–3, tighten grid alignment | |||||
| "더 모던하게" / "more modern" | Negative letter-spacing on headings, offer dark mode, reduce radius to 8px | |||||
| "더 재미있게" / "more exciting" | Add one bold accent color, increase type contrast, add micro-animation on hover | |||||
| "너무 심심해" / "too boring" | Add asymmetric layout, introduce one unexpected element, vary section rhythm |
| "너무 복잡해" / "too busy" | Reduce element count, increase whitespace, limit to 2 colors |
---
2. Design Read (MANDATORY for new pages, components, or layouts. Optional for ≤5-line patches — see dev §0.1 Patch Fast-Path.)
Before generating ANY frontend code, produce a Design Read. If the project has a DESIGN.md file, read it first — its tokens and prose override everything below.
Output format (mini DESIGN.md)
Filled-in example: references/design-read-example.md.
---
name: <project-name>
colors:
primary: "<hex>"
accent: "<hex>"
background: "<hex>"
typography:
heading: { fontFamily: <font>, fontSize: <size> }
body: { fontFamily: <font>, fontSize: <size> }
---
Reading this as: <page kind> for <audience>, with a <vibe> language.
<1-2 sentences: specific reference, not adjectives. "1970s lecture handout" > "modern and clean">
Do's: <context-specific positive from brief>
Don'ts: <context-specific ban from brief>
Signals to read
- Page kind — landing (SaaS/consumer/agency/event), portfolio, redesign, editorial, app UI, tool UI
- Vibe words — what the user said or implied
- Reference signals — URLs, screenshots, brands named
- Audience — B2B procurement vs design-conscious consumer vs recruiter
- Existing brand assets — logo, color, type, photography
- Quiet constraints — accessibility-first, public-sector, regulated, kids
Dial Setting (MANDATORY — immediately after Design Read)
From the Design Read, derive and declare three dials before any code:
DESIGN_VARIANCE: <1-10>
MOTION_INTENSITY: <1-10>
Product density profile: <D1-D8> (see dev-frontend/references/core/product-density.md)
Reasoning: <one sentence explaining why these values match the brief>
Inference rules:
- Corporate/gov/utility → VARIANCE 2-4, MOTION 1-3, density D2-D3
- Marketing/landing → VARIANCE 4-7, MOTION 3-5, density D2-D3
- Creative/portfolio/editorial → VARIANCE 6-9, MOTION 4-7, density D1-D3
- Dashboard/SaaS/admin → VARIANCE 2-4, MOTION 1-2, density D4-D5
- "Complex" in brief → increase density profile (functional depth), NOT VARIANCE or MOTION
- "Simple" in brief → decrease all three proportionally
"복잡하다" = high DESIGN_VARIANCE is WRONG. Complexity means more features/data/flows, not more visual tricks (carousels, parallax, animations).
Anti-Default Discipline
Do not default to: warm beige backgrounds, centered hero, three equal feature cards, generic glassmorphism, Inter + slate-900, card-based everything. These are LLM defaults. Reach past them BASED ON the design read.
If the brief is ambiguous, ask ONE clarifying question. Not a multi-question dump.
DESIGN.md persistence
If the project needs persistent design tokens across sessions, save the Design Read as a full DESIGN.md in the project root. Format spec: references/design-system-bootstrap.md § DESIGN.md Format.
---
3. Korean Request Translation
Map common Korean design descriptors to concrete tokens. When the user uses these words, translate before implementing.
| Korean | Literal | CSS/Token Translation | ||||
|---|---|---|---|---|---|---|
| 깔끔하게 | cleanly | Generous whitespace (24-48px gaps), strict grid, max 2-3 colors, saturation < 60%, 1px borders or none, 4-8px radius, single font, no/subtle shadows | ||||
| 모던하게 | modern | Geometric sans-serif (Geist/Outfit), negative letter-spacing on headings, dark mode or high-contrast light, 8-16px radius, spring micro-interactions | ||||
| 고급스럽게 | luxurious | Very generous whitespace (48-96px padding), thin weights (300-400), serif for headings, low-saturation palette, slow animations (800ms+), 0-4px radius | ||||
| 심플하게 | simply | Max 3-4 element types per screen, 1-2 colors, single font, 2-3 size steps, hidden/minimal navigation, zero decoration | ||||
| 트렌디하게 | trendy | Glassmorphism, bento grid, gradient mesh, variable fonts — ask for a reference site |
| 따뜻하게 | warmly | Warm hue range (stone/amber/orange), 12-20px radius, warm-tinted shadows rgba(180,140,100,0.1), serif or rounded sans |
| 차가운 | cold/cool | Cool grays (slate/zinc), blue-tinted whites, geometric sans, thin weights, 0-8px radius |
| 감성적으로 | emotionally | Editorial/lifestyle, serif display + sans body, muted/pastel colors, generous line-height, photography-heavy |
Clarifying questions per term:
- 깔끔: "Notion처럼 따뜻한 깔끔함인지, Vercel처럼 차가운 깔끔함인지요?"
- 모던: "다크 모드 + 날카로움(Linear)인지, 화이트 + 미니멀(Vercel)인지요?"
- 고급: "브랜드 고급감(Apple/Stripe)인지, 패션 럭셔리(Art Deco)인지요?"
- 심플: "기능이 적은 건지, 기능은 많지만 화면이 심플해 보이길 원하는 건지요?"
---
4. Quick-Match Table
Rapid lookup: user word → concrete starting point.
| User (KO) | User (EN) | Start From | Dark? | Radius | Density | Font |
|---|---|---|---|---|---|---|
| 깔끔하게 | Clean | Notion or Vercel | No | 8px | 4–7 | Geist / Pretendard |
| 모던하게 | Modern | Linear or Vercel | Yes | 6px | 4–7 | Geist / Outfit |
| 고급스럽게 | Premium | Apple or Stripe | Either | 0–4px | 1–3 | Satoshi / system thin-300 |
| 심플하게 | Simple | Vercel | Either | 0px | 1–3 | Geist |
| 따뜻하게 | Warm | Notion or Toss | No | 12px | 4–7 | Pretendard / Cabinet Grotesk |
| 재미있게 | Fun | Figma | No | 16px+ | 4–7 | Custom grotesque |
| 전문적으로 | Professional | Linear or GitHub | Either | 6px | 4–7 | Geist / Outfit |
| 대담하게 | Bold | Neobrutalism | No | 0px | 4–7 | Black 900 |
| 감성적으로 | Aesthetic | Editorial | No | 0–4px | 1–3 | Serif display |
| 트렌디하게 | Trendy | Ask for reference | Either | 12px | 4–7 | Variable font |
Font Selection Guidelines (STYLE_SAMPLE)
- Typography stance (UX-TYPE-01): sans by default; serif only with brief/brand/editorial rationale. When justified (AI-product/editorial/research/trust surfaces), use the three-role system — display serif at light weights 330-400 + sans UI + mono accent — never serif-everywhere or as a bare AI-premium shortcut ("tasteslop", 2026); gates in
dev-frontendaesthetics.md § Serif Discipline.
- Primary default: Geist (modern SaaS, Vercel ecosystem)
- Korean-first: Pretendard — strong Korean-first default (Pretendard Variable
available); verify brand/product font rules before claiming any specific Korean
company standard
- Warm/editorial: Outfit or Cabinet Grotesk
- Premium/luxury: Satoshi or system thin weights
- Korean serif display: MaruBuri (Naver 명조/부리) 400-600 for editorial Hangul headlines, paired with Pretendard UI — see
dev-frontendkorea-2026.md § Korean Serif / Myeongjo Display - Avoid defaulting to Inter (DEFAULT) — a widely recognized AI-generated-UI tell
(judgment rule, not a measured fact). Use it when the user requests it or the project
already uses it.