# Design System Onboarding Guide > For developers and AI coding agents working on ByteLyst products. ## Overview ByteLyst uses a **unified design system** via `@bytelyst/design-tokens`. This ensures consistent colors, typography, spacing, and motion across all platforms (Web, iOS, Android, React Native). **Key Principle:** Never hardcode colors. Always use design tokens. --- ## Platform Quick Reference | Platform | Token Source | Import Path | Primary Usage | | ---------------- | ------------------------ | ------------------------------------------------------- | --------------------------------------- | | **Web (CSS)** | `tokens.css` | `@bytelyst/design-tokens/generated/tokens.css` | CSS custom properties (`var(--ml-*)`) | | **Web (TS)** | `tokens.ts` | `@bytelyst/design-tokens/generated/tokens` | TypeScript constants | | **iOS** | `MindLystTheme.swift` | Copy & rename to `ProductTheme.swift` | `ProductColors.dark*`, `ProductSpacing` | | **Android/KMP** | `MindLystTokens.kt` | Copy to `shared/.../theme/` | `MindLystTokens.Dark.*` | | **React Native** | `react-native/tokens.ts` | `@bytelyst/design-tokens/generated/react-native/tokens` | `tokens.colors.*`, `tokens.spacing.*` | --- ## Per-Product Setup ### MindLyst (Reference Implementation) **iOS:** ```swift // iosApp/MindLystTheme.swift // Uses generated MindLystTheme.swift directly Text("Hello").foregroundColor(MindLystColors.darkTextPrimary) ``` **Android:** ```kotlin // shared/src/commonMain/kotlin/.../theme/MindLystTokens.kt // Uses generated MindLystTokens.kt directly ``` **Status:** ✅ 100% token adoption — use as reference. --- ### ChronoMind (Needs Migration) **Current:** Hardcoded colors in Web (`#5A8CFF`) **Migration Steps:** 1. **Web:** ```bash # In web/src/app/globals.css @import '@bytelyst/design-tokens/generated/tokens.css'; ``` ```tsx // Replace: style={{ backgroundColor: '#5A8CFF' }} // With: style={{ backgroundColor: 'var(--cm-accent-primary)' }} ``` 2. **iOS:** ```bash # Copy theme file cp mindlyst-native/iosApp/MindLystTheme.swift ios/ChronoMind/Shared/Theme/ChronoMindTheme.swift ``` ```swift // Find/replace: Color(hex: 0x5A8CFF) // With: ChronoMindColors.darkAccentPrimary ``` **Priority:** High (26 hardcoded colors) --- ### PeakPulse (Needs Migration) **Current:** No tokens detected, but no hardcoded colors either **Migration Steps:** 1. Copy `MindLystTheme.swift` → `PeakPulse/Theme/PeakPulseTheme.swift` 2. Use product-specific tokens: ```swift PeakPulseColors.activityHike PeakPulseColors.speedZoneFast ``` **Priority:** Medium (clean slate — easier migration) --- ### NomGap (Critical — 466 Hardcoded Colors) **Current:** React Native StyleSheet with inline hex values **Migration Steps:** 1. **Install tokens:** ```bash # Copy generated file to your repo cp learning_ai_common_plat/packages/design-tokens/generated/react-native/tokens.ts nomgap/src/theme/ ``` 2. **Create theme provider:** ```typescript // src/theme/index.ts import { tokens } from './tokens'; export const theme = { colors: tokens.colors, spacing: tokens.spacing, radius: tokens.radius, }; ``` 3. **Migrate styles:** ```typescript // Before: const styles = StyleSheet.create({ container: { backgroundColor: '#5A8CFF' }, }); // After: import { tokens } from '../theme'; const styles = StyleSheet.create({ container: { backgroundColor: tokens.colors.accentPrimary }, }); ``` **Tools:** Use `token-coverage.js` to track progress: ```bash node ../learning_ai_common_plat/packages/design-tokens/scripts/token-coverage.cjs src/ ``` **Priority:** Critical (466 colors in 36 files) --- ### LysnrAI (Needs Migration) **Current:** 34 hardcoded colors in iOS, unknown Android state **Migration Steps:** 1. Integrate with existing ByteLystPlatformSDK 2. Use `color.lysnrai` tokens: ```swift // Available tokens: LysnrAIColors.recordingActive // #FF6E6E LysnrAIColors.processing // #5A8CFF LysnrAIColors.transcribed // #34D399 ``` **Priority:** High --- ### JarvisJr (Needs Migration) **Current:** 8 hardcoded colors **Migration Steps:** 1. Copy theme file from MindLyst pattern 2. Use existing `color.jarvisjr` tokens: ```swift JarvisJrColors.agentCoach JarvisJrColors.agentLingua ``` **Priority:** Low (only 8 colors — quick fix) --- ## Common Patterns ### Adding a New Color 1. Edit `packages/design-tokens/tokens/bytelyst.tokens.json`: ```json "color": { "yourproduct": { "newColor": "#RRGGBB" } } ``` 2. Regenerate: ```bash pnpm --filter @bytelyst/design-tokens generate ``` 3. Copy to your repo and use: ```swift // iOS YourProductColors.newColor // Web var(--yp-new-color) ``` --- ### Validation Before Commit Always run validation before committing UI changes: ```bash # From your product repo root node ../learning_ai_common_plat/packages/design-tokens/scripts/validate-tokens.cjs src/ ``` **Exit codes:** - `0` — No hardcoded colors found ✅ - `1` — Hardcoded colors detected ❌ --- ### CI Integration Add to your `.github/workflows/ci.yml`: ```yaml design-system-check: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Check for hardcoded colors run: | node ../learning_ai_common_plat/packages/design-tokens/scripts/validate-tokens.cjs src/ if [ $? -ne 0 ]; then echo "❌ Hardcoded colors found. Use design tokens." exit 1 fi ``` --- ## Token Cheat Sheet ### Semantic Colors (Dark Mode) | Token | Hex | Usage | | ----------------------- | --------- | ---------------- | | `--ml-bg-canvas` | `#06070A` | Page background | | `--ml-surface-card` | `#121725` | Card backgrounds | | `--ml-text-primary` | `#EFF4FF` | Main text | | `--ml-text-secondary` | `#A5B1C7` | Secondary text | | `--ml-accent-primary` | `#5A8CFF` | Primary actions | | `--ml-accent-secondary` | `#2EE6D6` | Secondary accent | | `--ml-success` | `#34D399` | Success states | | `--ml-warning` | `#F59E0B` | Warnings | | `--ml-danger` | `#FF6E6E` | Errors/danger | ### Spacing (8pt Grid) | Token | Value | Common Use | | -------------- | ----- | ---------------- | | `--ml-space-1` | 4px | Tight gaps | | `--ml-space-2` | 8px | Small padding | | `--ml-space-4` | 16px | Standard padding | | `--ml-space-6` | 24px | Large padding | | `--ml-space-8` | 32px | Section gaps | ### Typography | Token | Value | Usage | | ------------------- | ------------- | ---------- | | `--ml-font-display` | Space Grotesk | Headlines | | `--ml-font-body` | DM Sans | Body text | | `--ml-fs-lg` | 18px | Large text | | `--ml-fs-xl` | 22px | Headlines | --- ## Troubleshooting ### "Tokens not found" error **Cause:** Generated files not copied to consumer repo. **Fix:** ```bash # Regenerate and copy pnpm --filter @bytelyst/design-tokens generate cp packages/design-tokens/generated/MindLystTheme.swift ../your-repo/ios/ ``` ### "Validation script fails with parsing error" **Cause:** ES module vs CommonJS mismatch. **Fix:** Use `.cjs` extension for scripts: ```bash node scripts/validate-tokens.cjs src/ ``` ### "Colors look wrong in dark mode" **Cause:** Using static hex instead of semantic tokens. **Fix:** Use `dark`/`light` semantic tokens, not palette colors directly: ```css /* ❌ Bad - always same color */ color: #5a8cff; /* ✅ Good - adapts to theme */ color: var(--ml-accent-primary); ``` --- ## Resources - **Full Audit:** [`docs/design-system/DESIGN_SYSTEM_AUDIT_2026-03-03.md`](../docs/design-system/DESIGN_SYSTEM_AUDIT_2026-03-03.md) - **Token Reference:** [`packages/design-tokens/README.md`](../packages/design-tokens/README.md) - **AGENTS.md:** Coding conventions for AI agents - **Audit Report:** Current adoption status across all products --- ## Migration Priority Matrix | Product | Hardcoded Colors | Priority | Effort | | --------------- | ---------------- | ----------- | --------------- | | NomGap | 466 | 🔴 Critical | High (1 week) | | ChronoMind Web | 26 | 🟠 High | Low (1 day) | | LysnrAI iOS | 34 | 🟠 High | Medium (2 days) | | Admin Dashboard | 60 | 🟠 High | Low (1 day) | | JarvisJr iOS | 8 | 🟡 Medium | Low (2 hours) | | PeakPulse iOS | 0 | 🟢 Low | Low (1 day) | --- ## Contact For questions about the design system: - Check the audit report for current status - Review MindLyst implementation as reference - Run validation scripts to check compliance --- _Last updated: 2026-03-03_