NMWC 제품의 빌딩 블록. 레이아웃 시스템, surface, semantic color, 컴포넌트 라이브러리, states, 데이터 시각화, 접근성. 제품을 만드는 모든 결정은 이 문서 기준.
모든 UI는 자기 SILO를 운영하는 빌더를 위해. "안전한" 기본값이 아니라 "강력한" 기본값. 빌더가 자기 사업을 가장 빠르게 운영할 수 있도록.
제품 디자인의 결정 원칙. 막혔을 때 이 4가지 중 하나로 답합니다.
spacing scale, grid, breakpoints. 9-tier scale (강제 base 없음, 4·5px 혼합).
1920px viewport 기준 콘텐츠 영역 비율. 파선이 max-width 경계, 양옆 어두운 영역이 side padding.
9-tier scale. var(--space-*) 토큰으로 모든 간격 통일.
4 breakpoint. Display 타이포는 단계 축소하면서 음수 트래킹 비례 유지.
| Name | Width | Key changes |
|---|---|---|
| Desktop | 1199px | Default desktop layout |
| Tablet | 810px | Card grid 4-up → 2-up · nav가 햄버거로 collapse |
| Mobile-Lg | 809px | 가격 비교 표가 tier별 아코디언 |
| Mobile-XS | 480px | 모든 것이 single-column |
다크 모드의 깊이를 표현하는 surface 위계.
spec 토큰 상세는 Brand §02 Color 참조. 제품 UI에서 자주 쓰이는 표면 토큰:
| 토큰 | HEX | 용도 |
|---|---|---|
--canvas | #090909 | 페이지 배경 |
--surface-1 | #141414 | 카드, secondary 버튼, mockup 타일 |
--surface-2 | #1c1c1c | featured 카드, popover, modal |
--hairline | #262626 | 1px 보더 |
--hairline-soft | #1a1a1a | row separator |
--ink / --ink-muted | #ffffff / #999999 | 본문 / 2차 텍스트 |
--shadow-xs: 0 1px 2px rgba(0,0,0,0.3);
--shadow-sm: 0 4px 12px rgba(0,0,0,0.4);
--shadow-md: 0 12px 32px rgba(0,0,0,0.5);
--shadow-lg: 0 24px 60px rgba(0,0,0,0.6);
8-tier scale. var(--radius-xs/sm/md/lg/xl/xxl/pill/full) 토큰 사용.
4 레벨 — flat / charcoal / light-edge / selected ring (focus-visible).
상태 표현용 4색. 의미가 있는 곳에만, 장식용 사용 금지.
NMWC 제품 UI의 빌딩 블록. Brad Frost의 Atomic Design 5단계 — Atoms → Molecules → Organisms → Templates → Pages. 모든 컴포넌트는 default · hover · active · focused · disabled · loading 상태를 가집니다.
가장 작은 UI 단위. 더 쪼갤 수 없는 빌딩 블록. spec 토큰을 직접 사용.
| 컴포넌트 | 변종 | 주요 의존 토큰 | Demo |
|---|---|---|---|
| Button | primary / secondary / translucent / ghost / danger / icon-circular | --primary, --surface-1, --surface-2, --semantic-error, --radius-pill | ✓ |
| Button size | sm / default / lg | --space-* | ✓ |
| Input (text) | default / focused / disabled / error | --surface-1, --hairline, --elev-3 | ✓ |
| Input (email/password/number/search) | text와 동일 | (text와 동일) | ✓ |
| Textarea | default / autosize | (text와 동일) | ✓ |
| Select | native / custom dropdown | --surface-1, --hairline | ✓ |
| Checkbox | unchecked / checked / indeterminate | --accent-blue, --radius-xs | ✓ |
| Radio | unchecked / checked | --accent-blue, --radius-full | ✓ |
| Switch | off / on | --accent-blue, --radius-pill | ✓ |
| Label / Helper | default / required / error | --fs-body-sm, --ink-muted | ✓ |
| Badge | success / warning / error / info / neutral | --semantic-*, --radius-pill | ✓ |
| Tag / Chip | static / closable / selected | --surface-1, --radius-pill | ✓ |
| Avatar | image / initial / icon | --surface-2, --radius-full | ✓ |
| Icon | Lucide React + NMWC custom | currentColor, 1.5px stroke | ✓ |
| Divider | horizontal / vertical | --hairline, --hairline-soft | ✓ |
| Spinner | sm / md / lg | --accent-blue, --motion-fast | ✓ |
| Progress bar | linear / circular | --accent-blue, --surface-1 | ✓ |
| Skeleton | text / rect / circle | --surface-1 ↔ --surface-2 shimmer | ✓ |
| Tooltip | top / bottom / left / right | --surface-2, --radius-md | ✓ |
| Link | default / muted / accent | --accent-blue | ✓ |
| Kbd | default | --surface-2, monospace | ✓ |
| Code | inline / block | --surface-2, monospace | ✓ |
| Mark glyph | x / check | --semantic-error/success | ✓ |
npm install nmwcconst silo = await createSILO({
name: 'paperclip',
builder: 'hyungwoon',
});
Atoms의 단순 결합. 단일 기능 단위.
| 컴포넌트 | 구성 | 용도 | Demo |
|---|---|---|---|
| Form field | Label + Input + Helper + Error | 모든 form 필드 | ✓ |
| Search bar | Icon + Input + Clear | 검색 | ✓ |
| Button group | 3+ Button (segmented) | 분리 선택 | ✓ |
| Pagination | Buttons + page numbers | 페이지 분할 | ✓ |
| Breadcrumbs | Link + separator | 위치 표시 | ✓ |
| Tab bar | Tabs + active indicator | 컨텍스트 전환 | ✓ |
| Accordion item | Title + chevron + body | 접기/펼치기 | ✓ |
| Dropdown menu | Trigger + Menu items | action menu | ✓ |
| Notification banner | Icon + body + action + close | inline alert | ✓ |
| Toast | Dot + message + action | 일시 알림 | ✓ |
| Empty state | Icon + title + body + CTA | 빈 화면 | ✓ |
| Stat card | Number + label + trend | 메트릭 | ✓ |
| File upload zone | Dropzone + icon + progress | 파일 업로드 | ✓ |
| Code block w/ copy | Code + copy button | 코드 공유 | ✓ |
| Date / time picker | Input + calendar | 일정 선택 | ✓ |
| Color swatch | Color + hex + label | 디자인 시스템 | ✓ |
| Spotlight tile | Gradient bg + eyebrow + title + body | feature 강조 | ✓ |
curl -X POST https://api.nmwc.ai/silo \
-H "Authorization: Bearer $TOKEN" \
-d '{"name":"paperclip"}'
큰 빌딩 블록. 두 가지로 나뉜다 — 일반(generic)은 공통 UI 패턴(header bar, sidebar, data table 등), NMWC 특화는 SILO·HQ 같은 NMWC 도메인 전용 organism.
Molecules + Atoms의 복합 구조. 페이지의 큰 섹션.
| 컴포넌트 | Demo | 비고 |
|---|---|---|
| Site header | ✓ | shell 제공 — 32px mark + 22px wordmark + tabs + actions |
| Site footer | ✓ | 6 sibling 링크 |
| Top navigation tabs | ✓ | underline + accent active |
| Sidebar navigation | ✓ | dashboard용 · collapsible |
| Modal (basic / confirm / drawer / full-screen) | ✓ | scale 0.96 + fade-in 250ms |
| Dialog (alert / confirm / prompt) | ✓ | modal 기반 · 3-up grid |
| Toast container | ✓ | 우하단 / 상단 (모바일), max 3 stack |
| Pricing table (4-tier compare) | ✓ | featured 1개 (--elev-2) |
| FAQ accordion | ✓ | hairline-soft separator |
| Feature grid (3-up / 4-up / 2-up) | ✓ | tile + spotlight 혼합 |
| Hero section (spotlight / split / video) | ✓ | display + lead + CTA + radial gradient |
| CTA section (band, inverse) | ✓ | inverse-canvas band |
| Newsletter signup | ✓ | input + button + privacy note |
| Data table (sort / filter / pagination) | ✓ | hairline divider · search + pager |
| Activity feed (vertical timeline) | ✓ | avatar + time + body |
| Comment thread | ✓ | nested replies |
| 404 / 500 page | ✓ | hero + CTA |
| Loading (page-level) | ✓ | skeleton scaffold + brand splash |
| Cookie banner | ✓ | bottom band |
Max width: 480 (sm) / 640 (md) / 800 (lg). Backdrop: rgba(0,0,0,0.6) + blur(8px). 진입 애니메이션: scale(0.96) + fade-in 250ms.
현재 페이지의 상단 탭이 NMWC의 표준 탭 스타일입니다. Underline + accent 색 active.
5 canonical variants + pricing-tab toggle group + ghost/danger.
Surface lift hierarchy — pricing-card / pricing-card.featured / template-card.
text-input + textarea. focus는 elevation level 3 블루 링.
SILO는 NMWC 조직 내 독립된 비즈니스 유닛입니다. AI Native Builder 1명이 운영하며, 마크의 시각적 메타포이자 조직 구조의 기본 단위입니다.
NMWC가 "AI Builder Colectivo + HQ + SILO" 구조이므로 다음 organism은 NMWC 도메인 우선 정의.
| 컴포넌트 | 의미 | Demo |
|---|---|---|
| SILO card | 한 SILO 요약 — 이름 · status badge · last activity · member avatar · stack count | ✓ |
| SILO grid | 빌더의 SILO 전체 — grid + sort + filter | ✓ |
| Stack timeline | "오늘 한 줄" 누적 — 일자별 stack 시각화 | ✓ |
| Builder profile card | 빌더 정보 — name · avatar · AI tools stack · active SILO count | ✓ |
| HQ command center | 모든 SILO overview — health badge map + risk distribution | ✓ |
| AI collaboration indicator | AI 상태 — active / idle / error / honest uncertainty (NMWC 'AI is Honest') | ✓ |
| SILO health badge | active / dormant / archived / at-risk | ✓ |
| Daily prompt | "오늘 한 줄" 입력 + 어제 stack 미리보기 (BX Value 'Start-Small') | ✓ |
| HQ Support panel | 법무·회계·운영 요청 위젯 | ✓ |
| Economic sharing dashboard | SILO/HQ 50:50 분배 시각화 (Operations §08~09) | ✓ |
| SILO Nominee transition card | Nominee 검증 진행률 + 승격 버튼 | ✓ |
주요 organism의 최소 구현 패턴. spec 클래스(.btn-*, .pricing-card, .spot-*, .text-input)과 spec 토큰(var(--canvas/--surface-1/--ink/...))만 사용. 인라인 style은 레이아웃 조정용만.
<!-- variants -->
<button class="btn-primary">Build now</button>
<button class="btn-secondary">See SILO</button>
<button class="btn-translucent">Learn more</button>
<button class="btn-ghost">Cancel</button>
<button class="btn-danger">Delete SILO</button>
<button class="btn-icon-circular" aria-label="Continue">→</button>
<!-- size modifiers · apply alongside variant -->
<button class="btn-primary btn-sm">Stack</button>
<button class="btn-primary btn-lg">Get started for free</button>
<!-- disabled -->
<button class="btn-primary" disabled>Saving…</button>
<div class="form-field">
<label for="silo-name">
SILO 이름 <span style="color: var(--semantic-error)">*</span>
</label>
<input id="silo-name" type="text" class="text-input"
placeholder="예: DANDO commerce" required>
<p class="helper">한 줄로 설명 가능한 소규모 이름이 좋습니다.</p>
<p class="error" hidden>이름을 입력해주세요.</p>
</div>
<div role="dialog" aria-modal="true" aria-labelledby="m-title" class="modal">
<div class="modal-backdrop"></div>
<div class="modal-card">
<h2 id="m-title" class="t-headline">Delete this SILO?</h2>
<p class="t-body-sm t-ink-muted">이 작업은 되돌릴 수 없습니다.</p>
<div class="modal-actions">
<button class="btn-secondary">Cancel</button>
<button class="btn-danger">Delete</button>
</div>
</div>
</div>
<div role="status" aria-live="polite" class="toast">
<span class="toast-dot" style="background: var(--semantic-success)"></span>
SILO에 한 줄 더 쌓았어요.
</div>
<article class="silo-card">
<header class="silo-card-header">
<span class="silo-mark spot-violet" aria-hidden="true">...</span>
<div class="silo-meta">
<h3 class="t-body-lg">DANDO</h3>
<p class="t-caption t-ink-muted">Commerce · 성빈</p>
</div>
<span class="badge badge-success">• Active</span>
</header>
<dl class="silo-stats">
<div><dt>Stacks (7d)</dt><dd>14</dd></div>
<div><dt>Members</dt><dd>3</dd></div>
<div><dt>MRR</dt><dd>$2.4k</dd></div>
</dl>
<footer class="silo-card-footer">
<time datetime="2026-05-17T16:00">2시간 전</time>
<a href="/silos/dando">열기 →</a>
</footer>
</article>
<section class="daily-prompt">
<header class="t-caption t-ink-muted">오늘 한 줄</header>
<textarea class="text-input" rows="2"
placeholder="오늘 SILO에 더한 것…"></textarea>
<footer class="daily-prompt-footer">
<p class="t-caption t-ink-muted">
어제: "AI ToV 정리 — 4개 명의에서 3개로…"
</p>
<button class="btn-primary btn-sm">Stack</button>
</footer>
</section>
<div class="ai-indicator ai-active">
<span class="pulse-dot" aria-hidden="true"></span>
<span>AI active</span>
<span class="t-caption t-ink-muted">작업 중</span>
</div>
<div class="ai-indicator ai-honest">
<span class="dot warning"></span>
<span>확실하지 않아요</span>
<span class="t-caption t-ink-muted">honest</span>
</div>
<article class="pricing-card featured">
<header>
<span class="t-caption t-ink-muted">Pro</span>
<span class="badge">POPULAR</span>
</header>
<p class="t-display-md">$15</p>
<p class="t-caption t-ink-muted">매월</p>
<button class="btn-primary">Build SILO</button>
<ul>
<li>3 SILOs</li>
<li>3 members</li>
<li>AI 무제한</li>
</ul>
</article>
페이지의 골격 — 콘텐츠가 들어가는 wireframe.
| 템플릿 | 구조 | 사용 사례 | Demo |
|---|---|---|---|
| Marketing landing | Header → Hero spotlight → Feature grid → Pricing → FAQ → CTA → Footer | NMWC 공식 랜딩 | ✓ |
| Dashboard | Sidebar + Top nav + (Stat grid + Activity + SILO grid) | SILO 빌더 데일리 | ✓ |
| Settings | Sidebar tabs + Form sections | 설정 | ✓ |
| Article / Doc | TOC sidebar + Long-form column + Footer | 문서 (현 NMWC Brand System) | ✓ |
| Pricing page | Hero → Pricing tier grid → Compare → FAQ → CTA | 가격 | ✓ |
| About / Team | Header → Story → People grid → Values → Footer | 회사 소개 | ✓ |
| Contact / Form | Header → Form + side info → Footer | 문의 | ✓ |
| Error (404 / 500) | Header → Hero error + CTA → Footer | 에러 | ✓ |
| Auth (login / signup / reset) | Centered form + brand mark | 인증 | ✓ |
| Onboarding flow | Stepper + form steps + Skip | 첫 SILO | ✓ |
| SILO single page | Header → SILO info → Stack timeline → Members → Settings | SILO 상세 | ✓ |
| HQ overview | Header → SILO 카드 grid → Health summary | HQ 운영 | ✓ |
각 템플릿의 골격 mockup (mini frame). 실제 구현 시 컴포넌트(Atoms/Molecules/Organisms)로 조립.
현 NMWC Brand System 사이트의 페이지들. NMWC 제품(SILO 운영 도구) 본체 Pages는 별도 repo에서 위 Dashboard / SILO single page / HQ overview 템플릿으로 구성.
| 페이지 | 템플릿 | 카테고리 번호 |
|---|---|---|
index.html | Marketing landing (랜딩 hub) | — |
about.html | Article · 소개 | 00 |
brand.html | Article · 시각 가이드 | 01 |
bx.html | Article · 언어/전략 | 02 |
product.html | Article · 제품 디자인 | 03 |
ux.html | Article · UX | 04 |
빌더가 SILO를 운영하면서 필요한 자산 카탈로그. 아이콘 카탈로그는 §06 Iconography, 차트·뱃지·스켈레톤·히트맵은 §07 Data Visualization 참조. 로고·브랜드 자산은 Brand §07 참조.
| 자산 | Demo | 구체 |
|---|---|---|
| Empty state | ✓ | 5종 — no SILO / no member / no activity / no notification / no search |
| Error | ✓ | 3종 — 404 / 500 / offline |
| Onboarding | ✓ | 3종 — Land / Auth / First SILO |
| Hero illustration | ✓ | 랜딩용 1종 |
| Feature illustration | ✓ | 카테고리별 6종 |
시스템 파일: .assets-source/illustrations/{empty-*, error-*}.svg
| 자산 | Demo | 비고 |
|---|---|---|
| Stagger build animation (마크 4단) | ✓ | Brand §06 |
| Modal enter (scale + fade) | ✓ | --motion-medium |
| Toast slide-in | ✓ | --motion-fast |
| Skeleton shimmer | ✓ | infinite loop, 앞 Atom 데모에 적용 중 |
| Page transition (fade) | ✓ | --motion-fast |
| Spinner rotate | ✓ | infinite, linear easing — 앞 Atom 데모에 적용 중 |
| AI working pulse | ✓ | NMWC 특화, AI collaboration indicator에 적용 중 |
| 자산 | Demo | 구체 |
|---|---|---|
| OG image (1200×630) | ✓ | nmwc-og.png + 페이지별 확장 가능 |
| Social square (1080×1080) | ✓ | Instagram · mockup |
| Email header banner (600×200) | ✓ | Newsletter · mockup |
| Twitter/X header (1500×500) | ✓ | profile banner · mockup |
| 자산 | Demo | 비고 |
|---|---|---|
| Component code snippets (React / HTML) | ✓ | 각 organism별 · Organisms 섹션 하단 |
| Storybook (또는 유사한 카탈로그) | ✓ | 현 페이지 자체가 대안 |
| Brand guide PDF | — | 외부 파트너용 · 추후 도구로 생성 |
제품 UI용 아이콘. Lucide React 표준 셋 + NMWC 커스텀. 이 섹션은 제품 적용 룰 — 브랜드 캐넌(스타일 방향·use·don't)은 Brand § Iconography 참조.
npm install lucide-react
import { ChevronRight, Settings, User, Plus } from 'lucide-react';
<ChevronRight size={20} strokeWidth={1.5} />
동일 아이콘(Settings)이 컨텍스트에 따라 어떤 크기로 살아나는지. stroke-width는 모든 크기에서 1.5 고정.
Lucide 표준 셋 외에 NMWC 시스템 고유 아이콘 6종. 24×24 그리드, currentColor. 권장 사용 크기는 위 Size Standards 참조.
| 자산 | 설명 |
|---|---|
silo-stack | 4단 pill stack 단순화 — 마크 축소형 |
builder | 사람 + 미니 SILO 3단 — "SILO를 가진 빌더" |
ai-collab | 별 + 점 — AI collaboration indicator |
build-action | 화살표 + 4단 pill |
hq | HQ 아이콘 |
silo-single | 1단 pill |
시스템 파일: .assets-source/icons/{silo-stack,builder,ai-collab,build-action,hq,silo-single}.svg
차트와 시각화. 다크 모드 친화적 팔레트.
실제 라인 차트에 4색을 적용한 예시. Primary는 주 트렌드, Secondary는 무관 라인, Accent는 강조, Comparison은 비교 기준 (대시 라인).
5개 차트 타입 — 데이터 유형에 맞춰 선택. NMWC White가 주 라인, Accent Blue는 강조·fill에 적용. Gridline은 hairline-soft + 점선.
--line 색, opacity 0.5--elevated background--muted, 11-12px제품 UI에 바로 쓰는 데이터 시각화 자산 — 상태 뱃지 · 로딩 스켈레톤 · 활동 히트맵. 차트 프리셋(line/bar/area/funnel/sparkline)은 위 Chart Types 참조. 구현 권장 — Recharts · D3.
| 자산 | 비고 |
|---|---|
| Status badge set (색 + 아이콘 매핑) | spec semantic 색상 5종 — Active · At-risk · Failed · Building · Dormant |
| Loading skeleton set | 5종 — text / card / table / chart / form (shimmer animation 포함) |
| Heatmap (Stack timeline용) | 일자 × 강도. 14×7 grid 기본. |
모든 컴포넌트가 가져야 할 상태 정의.
| 상태 | 특징 | 예시 |
|---|---|---|
| Default | 기본 표시 | 버튼 평상시 |
| Hover | brightness +10%, 또는 명시적 변화 | 마우스 올림 |
| Active | brightness -5%, 짧은 transition | 클릭 중 |
| Focused | :focus-visible → var(--elev-3) (1px+4px blue ring, spec) | 키보드 탭 |
| Disabled | opacity 0.4, cursor not-allowed | 제출 불가 폼 |
| Loading | spinner + label, click 차단 | 저장 진행 중 |
| Error | border var(--error), 메시지 below | 유효성 실패 |
| Success | border var(--success), 짧은 확인 | 저장 완료 |
| Empty | 친근한 안내 + CTA | SILO 0개 |
WCAG 2.1 AA 기준. 모든 UI는 이 기준을 만족해야 합니다.
Tab으로 접근 가능:focus-visible이 var(--elev-3) (1px + 4px blue ring)을 자동 부여. 페이지에서 별도 outline 정의 금지Esc로 모달·드롭다운 닫기Enter/Space로 버튼 활성화aria-labelalt (장식용은 alt="")aria-live로 announce<nav>, <main>, <article>)@media (prefers-reduced-motion: reduce) {
*, *::before, *::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
}
}