Skip to content

chore(design-system): re-sync to latest and drop the redundant next/font wiring - #8

Merged
EliRobinson merged 3 commits into
mainfrom
chore/design-system-resync
Aug 26, 2026
Merged

EliRobinson merged 3 commits into
mainfrom
chore/design-system-resync

Conversation

@EliRobinson

@EliRobinson EliRobinson commented Aug 26, 2026

Copy link
Copy Markdown
Owner

What

Brings the four @elirobinson/* packages to latest, re-syncs the generated agent artifacts, and drops the app-side font wiring the upgrade made redundant.

Package From To
@elirobinson/react 2.0.1 2.3.4
@elirobinson/tokens 0.5.0 0.12.0
@elirobinson/ai-patterns 0.9.2 0.20.0
@elirobinson/eslint-config 0.3.0 0.8.0

Migration surface

ds-resync migrate finds no token renames left in src/ — every hit it reports is inside the generated .claude/skills/ trees, which ds-resync artifacts --write regenerates from the installed packages. The app's own design system surface is small (Card, CardContent, Eyebrow, the .t-* classes) and none of it changed shape.

The artifact sync also brought in the palette/platform stylesheets (palettes.css, mobile.css) and the self-hosted Geist / JetBrains Mono faces the brand skill now ships.

Fonts

@elirobinson/tokens stopped reaching Google Fonts at 0.7.1 and now ships Geist and JetBrains Mono as woff2 inside the package, so importing tokens.css is enough to load them. The --ds-font-*-override block in globals.css and the two next/font/google loaders in layout.tsx were pointing the family tokens at a second, build-time-fetched copy of the same typeface, so both are gone. The override hooks still exist upstream for a family the system does not ship — AGENTS.md now says that instead of describing the old wiring.

Confirmed in the browser after the change: --font-sans resolves to the package's Geist and --font-mono to JetBrains Mono, both with a loaded face.

Dev server port

pnpm dev picked a random port in 3000..3999, which nothing else in the repo could predict — .claude/launch.json, playwright.config.ts and the E2E job in CI all name 3000, so tooling that reads them opened a port the server was not on and you had to read the startup log to find the real one. It was also broken outright under a pty: console.log colorizes a number when stdout is a TTY, so next dev -p received \e[33m3891\e[39m and rejected it as "not a non-negative number". Piped output hid that, which is why it passed review.

The script is now next dev --turbopack -p ${PORT:-3000}. The conflict the random port was avoiding — a second worktree, a concurrent session — is handled explicitly with PORT=3010 pnpm dev, which keeps the port knowable when nobody sets it. Documented in README.md and AGENTS.md.

Verified both: the preview tool opens 3000 and finds the app there, and PORT=3010 pnpm dev binds 3010.

Verification

  • pnpm type-check — pass
  • pnpm lint — pass (on eslint-config 0.8.0)
  • pnpm format:check — pass
  • pnpm test — 2 passed
  • pnpm build — pass
  • pnpm test:e2e — 16 passed, including the design system contracts (touch targets, visible focus, WCAG AA contrast) in light and dark across chromium, firefox, webkit and mobile-chrome

Screenshots

Before/after at 1280×900, light and dark: the rendered page is pixel-identical in both themes. The home page only uses the sans family and neutral surfaces, both of which resolve to the same values before and after; the new status hues and tinted-badge colours in tokens 0.6.0–0.12.0 have no call site here yet.

EliRobinson and others added 3 commits August 26, 2026 01:42
…artifacts

react 2.0.1 -> 2.3.4, tokens 0.5.0 -> 0.12.0, ai-patterns 0.9.2 -> 0.20.0,
eslint-config 0.3.0 -> 0.8.0.

`ds-resync migrate` reports no token renames left in `src/` — every hit is
inside the generated `.claude/skills/` trees, which `ds-resync artifacts`
regenerates here. The new files are the palette/platform stylesheets and the
self-hosted Geist and JetBrains Mono faces the brand skill now ships.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
… faces

tokens 0.7.1 stopped reaching Google Fonts and started shipping Geist and
JetBrains Mono as woff2 in the package, so importing tokens.css is now enough
to load them. The `--ds-font-*-override` block and the two `next/font/google`
loaders were pointing the family tokens at a second, build-time-fetched copy of
the same typeface; the hooks still exist for a family the system does not ship.

Verified in the browser: `--font-sans` resolves to the package's Geist and
`--font-mono` to JetBrains Mono, both with a loaded face. The page renders
identically in light and dark.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The random port in `3000..3999` could not be predicted by anything else in the
repo: `.claude/launch.json`, `playwright.config.ts` and the E2E job in CI all
name 3000, so tooling that reads them opened a port the dev server was not on
and you had to read the startup log to find the real one.

It was also broken outright under a pty. `console.log` colorizes a number when
stdout is a TTY, so `next dev -p` was handed `\e[33m3891\e[39m` and rejected it
as "not a non-negative number". Piped output hid that, which is why it passed
review.

The conflict the random port was avoiding — a second worktree or a concurrent
session — is now handled explicitly: `PORT=3010 pnpm dev`. That keeps the port
knowable when nobody sets it, which is the case the config files describe.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@EliRobinson
EliRobinson force-pushed the chore/design-system-resync branch from 8c4bcb8 to 4bfcda1 Compare August 26, 2026 08:43
@EliRobinson
EliRobinson merged commit c0b00df into main Aug 26, 2026
3 of 6 checks passed
@EliRobinson
EliRobinson deleted the chore/design-system-resync branch August 26, 2026 08:50
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