PABCD Initiative Documentation Hub pabcd_initiative codexclaw cli-jaw

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 단독 사용 시 발생하는 문제

LLM에게 디자인을 맡기면 세 가지 수렴이 발생한다: (1) 시각적 수렴 — 모든 프로젝트가 같은 카드 그리드, 같은 히어로 레이아웃, 같은 색상 팔레트로 수렴한다. (2) 문화적 수렴 — 한국어 요청을 영어권 디자인 관습으로 해석한다('깔끔하게'를 일률적으로 미니멀리즘으로). (3) 상태 수렴 — 데이터가 완벽하게 들어와 있는 해피 상태만 디자인한다. 비어있는/에러/로딩/권한 부족 상태는 LLM이 자발적으로 고려하지 않는다.

이 세 가지 수렴은 LLM의 학습 데이터 분포에서 직접 비롯된다. dev-uiux-design은 구현 전에 이 세 수렴을 깨뜨리는 '디자인 방향 결정'을 강제한다.

이 스킬이 해결하는 실제 문제

한국어 디자인 요청의 번역 손실

'깔끔하게 해줘'라는 요청은 미니멀리즘인지, 화이트 스페이스 정리인지, 타이포 개선인지 맥락에 따라 다르다. Korean Request Translation(section 3)은 흔한 한국어 디자인 요청을 구체적인 디자인 방향으로 변환하는 사전을 제공한다.

모든 프로젝트가 같은 성격으로 수렴

에이전트는 SaaS 대시보드와 게임 랜딩 페이지에 같은 디자인을 적용한다. Product Personality Selection은 도메인별 성격(미니멀/엔터프라이즈/플레이풀/에디토리얼)을 먼저 결정하게 한다. product-personalities.md에 구체적인 참조 제품과 시각적 특성이 정리되어 있다.

UX 상태 누락 — 빈 상태, 에러 상태, 로딩 상태

에이전트는 데이터가 잘 들어와 있는 해피 경로만 구현한다. 데이터가 없을 때, 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

Reference Documents

DocumentDescription
color-system
design-ismsBauhaus/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 Guidetext-wrap: balance/pretty, ch 단위, 한국어 고아 방지
UX Preflight Checklist
ux-states빈 상태/에러/로딩/권한 부족의 UX 패턴과 마이크로카피 가이드
Visual Hierarchy

Sections Overview

SectionSummary
Product Personality도메인과 사용자에 맞는 제품 성격(미니멀/엔터프라이즈/플레이풀 등)을 결정한다.
Design IsmsBauhaus, Memphis, Brutalism 등 디자인 사조를 알고 적절히 적용한다.
Korean Request Translation한국어 디자인 요청의 실제 의도를 파악하여 구체적 디자인 방향으로 변환한다.
UX States비어있는/에러/로딩/권한 부족 상태의 UX 패턴을 설계한다.

Academic References

PaperYearRelevance
Co-Constructed or Constrained? AI Tools Reshape UI Design Practice
CHI 2026
2026AI 도구가 UI 디자인을 동질적으로 만드는 현상의 실증.
Generative AI Enhances Individual Creativity but Reduces Collective Diversity
Science Advances 2024
2024AI 지원 창작의 개별 품질 향상 + 집단 다양성 감소.
Antislop: A Comprehensive Framework for Identifying and Eliminating Repetitive Patterns in LLMs
arXiv:2510.15061
2025LLM 특유의 반복적 언어 패턴 탐지 프레임워크. anti-slop 체크리스트의 학술적 근거.
Measuring AI Slop in Text
arXiv:2509.19163
2025전문가 기반 AI 슬롭 분류 체계와 해석 가능한 평가 차원 개발.

Official Guides

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

FileWhen to ReadWhat It Covers
references/design-isms.mdUser names a style/movement15 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.mdLearning or reviewing Design Read formatFilled-in Design Read + dial setting example
references/product-personalities.mdUser references a product10 product DNA profiles with exact tokens, incl. 2026 AI-product pastel + OpenAI warm-sans organic + Anthropic serif bookish
references/layout-macrostructures.mdChoosing page/component layoutComponent layouts + page-level compositions
references/ux-states.mdBuilding any stateful UIOnboarding, empty, error, loading, progressive disclosure
references/color-system.mdGenerating colors/paletteOKLCH-based palette generation, dark mode, accessibility
references/design-system-bootstrap.mdNew project / design systemToken architecture, component hierarchy, DESIGN.md format (google-labs-code/design.md)
references/responsive-nav.mdResponsive or navigation workBreakpoints, container queries, nav patterns by density
references/ux-preflight.mdBefore deliveryUX state verification checklist
references/typography-line-breaks.mdAlways for text-heavy UIHeading 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.mdFavicon, product logo, or brand identity workFavicon file set, SVG dark mode, logo in nav/footer, dark mode variants, OG images, brand tokens, common mistakes
references/logo-trust-sections.mdIntegration/partner/client logosMarquee vs grid decision, anti-patterns, grayscale treatment, placement
references/visual-hierarchy.mdAny layout / composition decision6 levers: size scale, weight contrast, color emphasis, spacing, position, density
references/form-patterns.mdForms, wizards, auth, file uploadValidation timing, multi-step, password UX, file upload, search/filter
references/mobile-native-ux.mdNative mobile app UX decisionsiOS 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:

  1. Do nothing: can a correct default remove this decision entirely? (A settings

page is a collection of defaults you failed to choose.)

  1. Delete: does the step/field earn its completion-rate cost? Every added decision

point taxes conversion and comprehension (Hick's law).

  1. Absorb: can the system take the complexity instead of the user (Tesler's law) —

auto-detect, infer, remember last choice?

  1. 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 shapeDefault IA
Dense desktop repeated workSidebar + command palette
Medium sectioned workTabs or segmented navigation
Mobile-primary consumer flowBottom nav, sheet, or thumb-zone actions
Wizard/auth/setupStepper 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):

  1. Produce the Design Read from §2 using available signals.
  2. If one decision still blocks the direction, ask ONE best clarifying fork with binary/ternary choices.
  3. 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?"

OptionSignalsProduct References
전문적/신뢰감 (Professional)swiss, flat, restrainedLinear, Vercel, GitHub
따뜻한/친근한 (Warm/Friendly)rounded, warm-neutrals, illustrationsNotion, Airbnb, Toss
고급스러운/세련된 (Premium)generous-whitespace, thin-type, restrained-colorApple, Stripe, Aesop
재미있는/활기찬 (Fun/Energetic)bright-colors, playful-shapes, bold-typeFigma, Discord
대담한/독특한 (Bold/Distinctive)brutalism, asymmetry, experimentalGumroad, Nothing

Step 2 — Lightness

Ask: "밝은 화면이 좋으신가요, 어두운 화면이 좋으신가요?" / "Light or dark background?"

OptionCSS
밝은 배경 (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?"

OptionVISUAL_DENSITYTokens
빽빽하게 (Dense)8–10text-sm py-1 px-2 gap-1
보통 (Normal)4–7text-base py-3 px-4 gap-4
여유롭게 (Spacious)1–3text-lg py-8 px-8 gap-8

Step 4 — Shape

Ask: "모서리가 각진 느낌이 좋으신가요, 둥근 느낌이 좋으신가요?" / "Sharp or rounded?"

OptionCSSSignals
각진 (Sharp)rounded-none / 0–2pxVercel, brutalism, swiss
살짝 둥근 (Slightly rounded)rounded-md / 6–8pxLinear, Notion, material
많이 둥근 (Very rounded)rounded-2xl / 16–24pxFigma, iOS, Toss

Step 5 — Viewport Priority

Ask: "주로 어떤 화면에서 볼 건가요?" / "What's the primary viewing device?"

OptionResponsive StrategyKey Constraint
데스크탑 위주 (Desktop-first)Desktop layout → tablet → mobile collapseData density OK, hover interactions OK
모바일 위주 (Mobile-first)Mobile layout → tablet → desktop expansionThumb zone, touch targets, minimal density
둘 다 중요 (Both equally)Design mobile AND desktop as separate compositions, not one adapted from the otherMost 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 saysAction
"더 좋게" / "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

  1. Page kind — landing (SaaS/consumer/agency/event), portfolio, redesign, editorial, app UI, tool UI
  2. Vibe words — what the user said or implied
  3. Reference signals — URLs, screenshots, brands named
  4. Audience — B2B procurement vs design-conscious consumer vs recruiter
  5. Existing brand assets — logo, color, type, photography
  6. 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.

KoreanLiteralCSS/Token Translation
깔끔하게cleanlyGenerous whitespace (24-48px gaps), strict grid, max 2-3 colors, saturation < 60%, 1px borders or none, 4-8px radius, single font, no/subtle shadows
모던하게modernGeometric sans-serif (Geist/Outfit), negative letter-spacing on headings, dark mode or high-contrast light, 8-16px radius, spring micro-interactions
고급스럽게luxuriousVery generous whitespace (48-96px padding), thin weights (300-400), serif for headings, low-saturation palette, slow animations (800ms+), 0-4px radius
심플하게simplyMax 3-4 element types per screen, 1-2 colors, single font, 2-3 size steps, hidden/minimal navigation, zero decoration
트렌디하게trendyGlassmorphism, bento grid, gradient mesh, variable fonts — ask for a reference site
따뜻하게warmlyWarm hue range (stone/amber/orange), 12-20px radius, warm-tinted shadows rgba(180,140,100,0.1), serif or rounded sans
차가운cold/coolCool grays (slate/zinc), blue-tinted whites, geometric sans, thin weights, 0-8px radius
감성적으로emotionallyEditorial/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 FromDark?RadiusDensityFont
깔끔하게CleanNotion or VercelNo8px4–7Geist / Pretendard
모던하게ModernLinear or VercelYes6px4–7Geist / Outfit
고급스럽게PremiumApple or StripeEither0–4px1–3Satoshi / system thin-300
심플하게SimpleVercelEither0px1–3Geist
따뜻하게WarmNotion or TossNo12px4–7Pretendard / Cabinet Grotesk
재미있게FunFigmaNo16px+4–7Custom grotesque
전문적으로ProfessionalLinear or GitHubEither6px4–7Geist / Outfit
대담하게BoldNeobrutalismNo0px4–7Black 900
감성적으로AestheticEditorialNo0–4px1–3Serif display
트렌디하게TrendyAsk for referenceEither12px4–7Variable 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-frontend aesthetics.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-frontend korea-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.