Forge Design System
Forge is a React component library that ships as wss3-forge. Every UI concern (layout, forms, overlays, data display, charts, motion) is covered by a component. All colors, spacing, radius, shadows, and motion live in CSS variables injected by ForgeProvider.
Decision rule: if the task changes what the user sees, touches, or waits for, load this skill.
Find by task
Lookup table for the most common requests. Jump straight to the relevant anchor.
| If you're trying to | Read | Skip ahead |
|---|---|---|
| Build a login screen | patterns.md | #auth |
| Build signup or forgot-password | patterns.md | #auth-forgot |
| Show a toast on user action | components.md | #feedback-toast |
| Inline alert (success, error, info) | components.md | #feedback-decision |
| Errored input with screen-reader feedback | a11y.md | #inputs |
| Icon-only button | a11y.md | #buttons |
| Pricing strip with monthly/yearly toggle | patterns.md | #pricing |
| Pick Modal vs Sheet vs Drawer vs Popover | components.md | #overlay-decision |
| Pick Card vs StatCard vs KpiCard | components.md | #cards-decision |
| Pick VStack vs HStack vs Grid vs Box | components.md | #layout-decision |
| Pick Input vs Select vs Combobox | components.md | #forms-decision |
| Pick Checkbox vs Switch vs Radio vs Tabs | components.md | #selection-decision |
| Animate items into view, one by one | motion.md | #stagger |
| Sticky scroll-jacked phase | motion.md | #sticky-section |
| Brand color customization | theming.md | #brand-customization-in-30-seconds |
| Theme color won't apply | faq.md | faq.md |
| Empty state | patterns.md | #empty-state |
| Loading or error or empty triad | patterns.md | #triad |
| Settings page (profile, billing, team) | patterns.md | #settings |
| Marketing page (hero, pricing, testimonials) | patterns.md | #marketing |
| Data screen (table, master-detail, kanban) | patterns.md | #data |
| Dashboard with sidebar | patterns.md | #dashboard-sidebar--content |
| Build a docs site | patterns.md | #docs |
| Pick Navbar vs AppSidebar (horizontal vs vertical menu) | components.md | #navigation |
Review priority (check in this order)
- Accessibility. Focus visible, correct roles,
aria-labelon icon-only buttons,aria-invalid/aria-describedbyon errored inputs, keyboard navigation works, reduced motion respected. See a11y.md. - Semantics. Using the right Forge primitive:
Headingnot styled<h1>,Buttonnot styled<button>,VStack/HStacknot flex<div>,Cardnot styled container. See anti-patterns.md. - Motion. Durations 150 to 300ms for interactions, reduced-motion respected by
ForgeProvider, no animations over 500ms for UI feedback. See motion.md. - Theme parity. Code works in both
darkThemeandlightTheme. No hardcodedrgba(255, 255, 255, ...)or#xxx. Use CSS vars orcolor-mix(in srgb, currentColor N%, transparent). - Performance.
VirtualListwhen rendering more than 100 rows, lazy routes,<Motion whileInView>overanimatefor offscreen content.
Hard rules
- Import only from
'wss3-forge'. No deep imports. - Wrap the app in
<ForgeProvider>. Without it every component renders unstyled. - Icons only from
@fluentui/react-icons. Convention:{Name}{Size}{Style}(e.g.ArrowRight20Regular). - Colors via
var(--...). No hardcoded hex, RGB, or color names. - Spacing via gap/padding props on Forge primitives. No raw
px/remwhen a semantic key exists. - Layout via
VStack,HStack,Stack,Grid,Flex,Box,Center,Spacer,AspectRatio. No flex divs. - Responsive via
useIsMobile,useBreakpoint, or responsive object props. No@mediaqueries in app code. - Typography via
Heading,Text,Label. Never style<h1>,<span>, or<p>manually. - No em-dashes anywhere. Period, comma, colon, or line break.
- No emojis in UI. Use Fluent icons.
- No decorative colored backgrounds behind icons. Color the glyph itself via
style={{ color: '...' }}. OnlyStatusBadge,Avatarstatus, and coloredBadgevariants keep a tinted surface. - No custom components when Forge provides one. Check components.md first.
- No custom CSS classes for design-system concerns (spacing, color, radius, shadow, typography). Use props or CSS vars.
For the reasoning behind each rule, see design.md. For concrete wrong/right pairs, see anti-patterns.md.
What Forge is NOT
Forge is a restrained design system. These are baseline anti-aesthetics:
- No aurora-gradient backgrounds. The page reads as flat surfaces with brand-tinted accents, not as a colored sky.
- No glass-on-everything. Backdrop-filter is a tool for the navbar and the modal scrim, not for every card.
- No icon glow / icon-tint backgrounds. Color the glyph itself; let surfaces stay calm.
- No cyan-magenta-violet gradients. They read as AI-template defaults; we build for Linear / Stripe / Vercel restraint.
- No streaming-text fakery, no ASCII art in production UI, no AI-marketing clichés.
When in doubt, restrain. Forge ships polished defaults; consumers reach for them, not around them.
Pre-delivery checklist
Before claiming done, verify:
-
tsc --noEmitclean. - Works in both dark and light mode (no hardcoded dark-only colors).
- Focus ring visible on every interactive element.
- Icon-only buttons have
aria-labelortooltip. - Touch targets at least
size="sm"(32px) on mobile flows. - Motion durations within 150 to 300ms for interactions, reduced-motion respected.
- No em-dash, no emoji in UI strings.
- No hardcoded hex/rgba in styles. All colors via CSS var.
- No fallback or try/catch for scenarios that cannot happen.
- No trivial comments that restate the code.
Files in this skill
Load the file that matches your task. Do not load them all at once.
- getting-started.md five-minute install and first screen. Read this first if Forge is not already wired up.
- components.md every export grouped by category, with props table. Read this when picking a component or looking up props.
- tokens.md CSS variables, spacing scale, radius, shadows, z-index, motion tokens, breakpoints, color constants. Read this when styling edges Forge does not cover with a prop.
- theming.md
ForgeProviderprops,ForgeThemefields, defaultdarkThemeandlightTheme,createTheme,useForge. Read this when configuring the provider or building a custom theme. - motion.md the Motion library (
Motion,AnimatePresence,Stagger, gesture, scroll, text/visual effects, canvas backgrounds, motion hooks). Read this when adding animations. - patterns.md full compositions for dashboards, forms, responsive sidebars, list-with-actions, plus quality gates per pattern and block creation rules. Read this when building a page, not a single component.
- a11y.md accessibility playbook: what Forge adds automatically per component and what the dev must still add. Read this when working on any interactive surface.
- anti-patterns.md wrong/right pairs for the most common mistakes. Skim this when you are about to write a s