Skip to content

feat(web): adopt Modular Mind brand tokens and icons - #11

Merged
dommango merged 1 commit into
mainfrom
feat/brand-tokens
Jul 17, 2026
Merged

feat(web): adopt Modular Mind brand tokens and icons#11
dommango merged 1 commit into
mainfrom
feat/brand-tokens

Conversation

@dommango

Copy link
Copy Markdown
Owner

Summary

Ports the Claude Design "Modular Mind Design System" export into the Next app (web/) — the S2 milestone of the web-frontend roadmap.

  • Brand tokens (web/src/app/brand-tokens.css, --mm-* namespace): a full system for colour, typography, spacing, radius, elevation and motion. Direction "Rack Panel" — warm graphite anthracite surfaces with a single amber signal accent (#f2a63c), plus a verdict set (amber good / #f2c14e caution / #e8664e fault) that maps onto analyze_audio's flags.
  • Branded icon set: src/app/favicon.ico, icon.svg, apple-icon.png (App Router auto-generates the <head> tags), plus logo.svg and a 512px PNG.
  • Fonts via next/font (Archivo / IBM Plex Sans / IBM Plex Mono) instead of the export's Google Fonts @import, so fonts self-host — no external request, no layout shift.
  • SiteNav migrated off zinc-* utilities onto the tokens.

Three export traps fixed (each compiles clean; only rendering catches them)

  • Unlayered base rules beat Tailwind utilities. The export's bare a { color: var(--mm-link) } was unlayered and overrode every text-* class regardless of specificity, flattening the nav's active state. Moved base rules into @layer base.
  • Stale scaffold favicon. The export's src/app/favicon.ico was the untouched Next default; the branded icon (from public/) now sits in src/app/, where App Router gives it precedence.
  • Plex Mono weight 700. Plex Mono has no variable cut on Google Fonts and the export's @import omitted 700, which --mm-text-readout needs — weights are now listed explicitly.

Page bodies remain placeholder stubs from the S1 scaffold; S3–S6 fill them in. This PR establishes the design system on the shell.

Test plan

  • npx tsc --noEmit — clean
  • npm run lint — clean
  • npm test — 5/5 pass
  • npm run build — compiles successfully; icon routes present
  • Rendered / and /listen under headless Chromium against next start — tokens applied (graphite ground, amber links, bone text), nav shows correct active/inactive distinction, zero external font requests in served HTML

Port the design system export into the Next app: --mm-* tokens for
colour, type, spacing, radius, elevation and motion, plus the branded
favicon/icon set and wordmark.

- Load Archivo / IBM Plex Sans / IBM Plex Mono via next/font instead of
  the export's Google Fonts @import, so fonts self-host (no external
  request, no layout shift). Plex Mono has no variable cut on Google
  Fonts, so its weights are listed explicitly — including 700, which
  --mm-text-readout needs and the export's @import omitted.
- Keep base rules in @layer base. Unlayered rules outrank every Tailwind
  utility regardless of specificity, so the export's bare `a` rule was
  overriding text-colour classes and flattening the nav's active state.
- Install the branded favicon at src/app/favicon.ico; the export shipped
  the untouched Next scaffold default there, which takes precedence over
  public/ and would have kept serving the old icon.
- Migrate SiteNav off zinc utilities onto the tokens.
@dommango
dommango force-pushed the feat/brand-tokens branch from f09d63a to 32952c4 Compare July 17, 2026 16:11
@dommango
dommango merged commit 87bd1ab into main Jul 17, 2026
2 checks passed
@dommango
dommango deleted the feat/brand-tokens branch July 17, 2026 16:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant