04 · UX Guidelines
UX
Guidelines.
NMWC 제품의 상호작용 원칙과 패턴. Nielsen 휴리스틱 + NMWC 고유 추가. 온보딩, 폼, 에러, 로딩, 마이크로카피, 모션, 성능까지. 빌더가 도구를 빠르게 쓸 수 있도록 만드는 규칙.
NMWC UX Principle
Show
the SILO.
빌더가 자기 SILO의 현재 상태를 항상 볼 수 있도록. 운영 중인 사업의 지표·진행이 첫 화면에 · 빌더의 일상은 자기 SILO에서 시작합니다.
01
UX Principles
Nielsen 10 휴리스틱을 채택하고, NMWC 고유 3개 원칙을 추가.
Nielsen's 10 Heuristics
- Visibility of system status · 시스템이 무엇을 하는지 항상 보여라
- Match between system and real world · 사용자의 언어로
- User control and freedom · 실수 복구가 항상 가능
- Consistency and standards · 같은 행동은 같은 결과
- Error prevention · 에러가 발생하지 않게 설계
- Recognition over recall · 사용자가 외우지 않게
- Flexibility and efficiency · 초보와 고수 모두
- Aesthetic and minimalist design · 불필요한 정보 제거
- Help users recognize, diagnose, recover from errors · 에러를 사람말로
- Help and documentation · 도움말은 발견 가능하게
NMWC Additions
NMWC · 01
Show the SILO
사용자의 누적 작업은 항상 시각화. 본인이 얼마나 쌓았는지 보여줘야 함. 빈 페이지로 시작하지 마라. 어제의 SILO를 항상 보여라.
NMWC · 02
AI is Honest
AI 능력의 한계와 불확실성을 숨기지 마라. "확실하지 않습니다"가 거짓 확신보다 낫습니다. AI는 동료, 거짓말하지 않습니다.
NMWC · 03
Start Small, Scale Up
빈 화면에서도 첫 단계가 항상 제시되어야 함. 다음 단계는 점진적으로. 한 번에 모든 기능을 보여주지 마라. Build small, then build again.
02
Onboarding
첫 사용자의 60초. 첫 가치 경험까지 최단 거리.
Rules
- Max 3 단계 · 4단계 이상이면 분리해서 점진 전달
- 60초 내 첫 가치 · 가입~첫 SILO 빌드까지
- Skip 옵션 항상 · 강제 가이드 금지
- 진행률 표시 · "3/3 단계" 같이 명확히
- 가입 우선순위 · 1) 소셜 (Google/GitHub) 2) 이메일 3) 게스트 모드
Anti-Patterns
✓ DO
소셜 로그인 우선 · 첫 SILO 즉시 빌드 · 가입 없이 둘러보기 허용 · "오늘 한 줄" 즉시 가능
✗ DON'T
이메일 가입 강제 · 5단계 튜토리얼 · 모든 기능 슬라이드쇼 · 카드 등록 요구 · 다음 단계 강제
Sample Flow
- Land · Hero + "Build now" CTA 한 개. 다른 산만한 요소 0
- Auth (옵션) · Google/GitHub 한 번 클릭, 또는 게스트로 진행
- First SILO · 빈 입력 필드 1개, placeholder에 예시. Enter하면 SILO 시작
03
Navigation
탐색·이동의 일관된 룰.
Top Navigation
- 5~7개 적정 (8개부터는 dropdown 또는 햄버거 검토). 현재 NMWC 사이트는 Home + 5개 카테고리 + Process = 7개로 운영
- 활성 상태: underline + accent 색 (현재 페이지 nav 참조)
- 로고는 항상 좌측 최상단, 클릭 시 홈으로
- 모바일 (720px 이하): 햄버거 메뉴로 전환 (
.site-header.menu-open 토글)
Breadcrumbs
- 3단계 이상 깊이일 때만 표시
- 마지막 단계 = 현재 페이지 (클릭 불가, color muted)
- 구분자:
/ 또는 ›
Tabs
- 같은 컨텍스트 안의 view 전환에만 · 페이지 이동에는 사용 금지
- 3-7개 적정 (8개 이상은 dropdown 검토)
- 현재 페이지 상단의 7개 탭(Home + 5 카테고리 + Process)이 NMWC 표준
05
Error Handling
에러는 회복이 우선. 사용자를 비난하지 마라.
Recovery-First
모든 에러 메시지는 사용자가 다음에 할 일을 명시해야 합니다.
BAD
"Error: Something went wrong."
GOOD
"AI가 잠시 멈췄어요. 같이 다시 가요." (재시도 버튼)
BAD
"Invalid input"
GOOD
"이메일 형식이 아닌 것 같아요. 예: name@example.com"
BAD
"Failed to save"
GOOD
"저장에 실패했어요. 인터넷 연결을 확인하고 다시 시도해주세요."
Severity Levels
각 심각도가 실제 UI에서 어떻게 전달되는지 미니 미리보기로 표현. 색이 진할수록 사용자를 더 적극적으로 차단·알림.
!
권한이 없습니다
이 페이지에 접근할 수 없습니다.
다시 로그인
Critical
Full-page error
인증 실패, 권한 없음, 시스템 다운.
이메일
user@example
✗ 올바른 이메일 형식이 아닙니다.
저장에 실패했어요. 다시 시도해주세요.
Major
Inline error + toast
저장 실패, API 에러, 폼 검증 실패.
Minor
Toast only
임시 네트워크 지연, 백그라운드 재시도.
Info
Silent · minimal pill
자동 저장, 동기화 완료, 백그라운드 성공.
Don'ts
- ✗ 사용자에게 책임 돌리기 ("잘못된 입력")
- ✗ 기술 용어 그대로 노출 ("400 Bad Request")
- ✗ 다음 단계 없는 에러 ("다시 시도하세요" 단독)
- ✗ 닫을 수 없는 에러 모달
06
Loading & Feedback
시스템이 무엇을 하고 있는지 사용자가 항상 알게.
Timing Table
응답 시간대별 사용자에게 보여줄 피드백. 각 행의 미리보기는 실제 거동을 라이브로 보여줍니다.
< 100ms
저장됨
무표시
즉각적 반응. 사용자는 지연을 인지하지 못함. 상태만 즉시 반영.
100ms–1s
결과 업데이트됨
즉시 결과
스피너 없이 결과 표시. Optimistic UI 권장 — 실패 시 롤백.
1s–3s
처리 중…
인라인 스피너
버튼 내부 또는 카드 위 작은 스피너. 위치 = 트리거 옆.
3s–10s
스켈레톤 + 진행률
스피너 대신 콘텐츠 모양 placeholder. 가능하면 진행률 함께 표시.
> 10s
설명 메시지
"이 작업은 시간이 걸려요" + 예상 시간. 백그라운드 처리·취소 옵션 제공.
Optimistic UI
네트워크 요청 시작 즉시 UI를 업데이트. 실패 시 롤백 + 토스트.
- 좋아요 클릭 → 즉시 +1, 서버 응답 후 확정 (실패 시 롤백)
- 아이템 삭제 → 즉시 제거, "Undo" 토스트 5초 (실패 시 복원)
- 댓글 작성 → 즉시 표시 (회색 처리), 서버 응답 후 정상 색
Skeleton vs Spinner
두 로딩 패턴이 동시에 작동하고 있는 모습. 스켈레톤은 콘텐츠 모양을 미리 보여줘 인지 지연을 줄이고 레이아웃 shift를 막습니다. 스피너만으로는 사용자에게 "얼마나 더 기다려야 하는지" 신호가 없습니다.
✓ Skeleton
콘텐츠 모양 placeholder
- 페이지 첫 로드 · 콘텐츠 fetch · 1초 이상 예상
- 레이아웃 shift 방지 — 실제 콘텐츠와 같은 자리·크기
- 인지 지연 감소 — "구조"가 먼저 도착
✗ Spinner only
진행률 없는 무한 회전
- 페이지 전체에 큰 스피너 단독 사용 금지
- 3초 이상의 대기에 스피너만 두지 말 것
- 스피너는 1–3초 인라인 액션 피드백에만 적절
CTA Buttons
동사 중심, 구체적, 결과 명시. (BX 가이드의 voice 참조)
VAGUESubmit
SPECIFICSILO 저장
VAGUEClick here
SPECIFIC오늘 빌드 시작
VAGUELearn more
SPECIFICNMWC 방식 보기
VAGUEGet started
SPECIFIC첫 SILO 짓기
Empty States
- 이유 명시 ("아직 SILO가 비어 있어요")
- 다음 액션 명시 ("첫 SILO를 지어보세요")
- CTA 버튼 포함
- 친근한 톤 (BX TOV 참조)
Number Specificity
VAGUE여러 SILO
SPECIFIC3개의 SILO
VAGUE곧 완료
SPECIFIC약 30초 후 완료
Permission / Destructive Action
- 제거되는 대상 명시 ("이 SILO와 데이터 전체")
- 복구 가능성 명시 ("이 작업은 되돌릴 수 없습니다")
- 확인 단어 입력 ("DELETE" 타이핑 등, 위험한 작업에만)
- 버튼 색은 destructive (error)
08
Notifications
방해와 정보 사이의 균형. 사용자의 흐름을 끊지 마라.
Toast
- Duration: 4초 default (에러는 6초)
- Position: 화면 우하단 (모바일은 상단)
- Stack: 최대 3개. 4번째부터 첫 번째 dismiss
- Action: Undo, View, Retry 등 단축 액션 가능
- Swipe to dismiss: 모바일에서 swipe로 닫기
Notification Center
- 읽음/안 읽음 시각적 구분 (작은 dot 등)
- 그룹화 (같은 종류 5개 이상은 "5개의 새 빌드" 식)
- "모두 읽음" 버튼 항상
- 오래된 항목 자동 정리 (30일+)
Email / Push
- Opt-in 기본 (체크 해제 상태)
- Granular control · 종류별 on/off
- Easy unsubscribe · 모든 이메일 푸터에 1-click 링크
- Push: 정말 시급한 것만 (빌드 완료 등 user action 결과)
09
Search & Filter
검색과 필터링은 빌더의 일상 도구. 즉시 반응해야 함.
Search Behavior
- Debounce: 300ms (typing 멈춤 감지)
- 즉시 결과: 클라이언트 데이터는 instant, 서버는 로딩 표시
- 빈 결과: 제안 표시 ("이런 검색은 어때요?")
- 최근 검색: 5개 저장, 클릭으로 재실행
- 키보드:
⌘K로 검색 열기, Esc로 닫기
Filter
- Multi-select default (단일 선택은 명시적으로 표시)
- "Clear all" 버튼 항상
- 활성 필터는 칩으로 표시 (개별 제거 가능)
- 적용 결과 카운트 표시 ("23개 결과")
10
Motion in UX
모션은 장식이 아니라 정보 전달의 수단.
Purpose of Motion
ORIENT
어디서 왔고 어디로 가는지. 예: 모달이 클릭한 버튼에서 expand. 페이지 전환이 방향성을 가짐.
INDICATE
무슨 일이 일어났는지. 예: 아이템 추가 시 slide-in, 삭제 시 fade-out. 상태 변화를 시각적으로 알림.
DELIGHT
보상감. 예: 완료 시 짧은 success 체크 애니메이션. 단, 너무 빈번하면 산만함.
Duration & Easing
Brand 가이드의 motion 토큰을 그대로 사용. (Brand → Motion 섹션 참조)
Reduced Motion
@media (prefers-reduced-motion: reduce) {
*, *::before, *::after {
animation-duration: 0.01ms !important;
transition-duration: 0.01ms !important;
}
}
Don'ts
✓ DO
목적 있는 motion · 250ms 이하 · prefers-reduced-motion 지원 · 사용자 액션에 반응
✗ DON'T
텍스트 자체 애니메이션 (어지러움) · 0.5s 이상 transition · 무한 반복 (집중 방해) · 자동 캐러셀