Design System
WolfWave's visual language. One tokens.json drives the macOS app, docs site, and OBS widget. How to change a token and the rules the linter enforces.
TL;DR: one file, design-system/tokens.json, sets the colors, type, spacing, and motion for the app, this site, and the OBS widget.
This section is for contributors changing how WolfWave looks.
For a visual tour, open the public Design system: live type specimens, measured color pairs in both appearances, shared actions, and motion timing samples.
It covers three products:
- The native macOS app (Swift / SwiftUI, macOS 26 Liquid Glass)
- This docs site (Fumadocs / Tailwind 4)
- The OBS widget overlay (TypeScript / Tailwind 3, inlined into one HTML file)
Canonical source
All tokens live in design-system/tokens.json at the repo root. A Bun script (bun run tokens) generates per-platform outputs that are committed alongside the source. Runtime consumers use those committed outputs; contributors rerun the generator after changing tokens or generator code.
design-system/tokens.json ← edit this
│
├─→ Tokens.generated.swift (DSColor, DSFont, DSSpace, DSRadius, …)
├─→ tokens.generated.css (--ds-* custom properties)
├─→ widget-tokens.generated.js (window.WW_TOKENS)
└─→ widget-themes.generated.ts (landing-page overlay preview)Change a token
- Edit
design-system/tokens.json. - Run
bun run tokensto regenerate all four outputs. - Touched widget themes or layouts? Run
make widgettoo. - Run
bun run ds:schema,bun run ds:lint, andbun run ds:test(including text contrast checks). - Commit the source and every regenerated file together. CI fails on drift.
Never hand-edit a *.generated.* file.
Rules the linter enforces
bun run ds:lint blocks these in SwiftUI views:
- Literal font sizes. Use
DSFont.Size.*. - Literal
spacing:or.padding(N). UseDSSpace.*. - Literal corner radii. Use
DSRadius.*. - Literal animation durations or spring responses. Use
DSMotion.*. - Raw system colors as a status tint. Use
DSColor.success/.warning/.error/.info/.neutral.
In this section
- Foundations. Colors, type, spacing, radius, motion, shadows.
- Components. Catalog of reusable SwiftUI views and their Tailwind/CSS equivalents.
- Brand. Logo usage, partner colors, voice.
Security
How WolfWave protects Twitch and local WebSocket credentials with macOS Keychain, App Sandbox, OAuth Device Code flow, and signed updates.
Foundations
WolfWave's core design tokens. Brand color scale, type ramp, spacing, radius, motion, and shadows. Generated from one tokens.json into Swift, CSS, JS, and TS.