Skip to content

feat(ui): migrate to @ossrandom/design-system 0.2.1#5

Merged
aksOps merged 1 commit into
mainfrom
feat/design-system-migration
Apr 27, 2026
Merged

feat(ui): migrate to @ossrandom/design-system 0.2.1#5
aksOps merged 1 commit into
mainfrom
feat/design-system-migration

Conversation

@aksOps

@aksOps aksOps commented Apr 27, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Replace in-repo radix-ui + shadcn shim layer with the published design system (@ossrandom/design-system@^0.2.1).
  • Drop class-variance-authority and the @fontsource/* packages — typography now ships with the DS as self-hosted variable woff2 (Bricolage Grotesque · Plus Jakarta Sans · Geist Mono, all OFL-1.1).
  • New PageHeader on session detail uses size="xs" + backInline for a slim ~34px app-bar; dashboard uses inlineSubtitle for the "ctm · claude tmux manager" brand row.
  • Mobile: 100dvh root + flex-shrink chrome, iOS auto-zoom guard on the session input bar.

Net diff: +2955 / −4713 lines across 46 files (−1758 net). Bundle: −46 KB JS, −9 KB CSS.

Component swaps

Was Now
shadcn TabsList/TabsTrigger/TabsContent DS Tabs items[] API
radix Sheet (DiffSheet · RevertSheet · SettingsDrawer) DS Drawer
radix Dialog (NewSessionModal) DS Modal (rcs-pop-in)
shadcn Skeleton (7 consumers) DS Skeleton
shadcn Button (Dashboard chrome) DS Button / IconButton
Custom <header> on SessionDetail DS PageHeader (xs + backInline)

Test plan

  • pnpm test — 110/110 vitest tests pass
  • pnpm audit — 0 findings
  • make build — UI bundle + Go binary build clean
  • Manual: Dashboard list-only on mobile, two-pane on desktop
  • Manual: Session detail header is slim (~34px) with back chevron
  • Manual: Tabs strip scrolls horizontally on narrow widths with edge fade
  • Manual: Modal opens with rcs-pop-in (no zoom-in)
  • Manual: Custom input field on yolo session does not iOS-zoom on focus

🤖 Generated with Claude Code

Replace the in-repo radix-ui + shadcn shim layer with the published
design system (@ossrandom/design-system@^0.2.1). This also removes
class-variance-authority and the @fontsource Inter / JetBrains Mono /
Playfair Display packages — typography now ships with the design
system as self-hosted variable woff2 (Bricolage Grotesque, Plus
Jakarta Sans, Geist Mono — all OFL-1.1).

Component swaps:
- Tabs: shadcn TabsList/TabsTrigger/TabsContent → DS Tabs items[] API
- Drawer: radix Sheet → DS Drawer (DiffSheet, RevertSheet, SettingsDrawer)
- Modal: radix Dialog → DS Modal (NewSessionModal — uses rcs-pop-in)
- Skeleton: shadcn → DS Skeleton (7 consumers)
- Button: shadcn → DS Button / IconButton (Dashboard chrome, etc.)
- PageHeader: custom <header> → DS PageHeader with size="xs",
  inlineSubtitle, backInline. Slim ~34px detail header on session
  pages; "ctm · claude tmux manager" inline-subtitle on dashboard.

Layout robustness:
- 100dvh root + flex-shrink chrome so the input bar stays pinned and
  the tabs content claims height correctly (fixes mobile overlap).
- iOS auto-zoom guard: SessionInputBar text-base on mobile (<sm), tiny
  on desktop. The DS Input/Textarea also pin font-size 16px under
  pointer:coarse, so future migrations off raw <input> are zoom-safe.

Bundle delta: −46 KB JS (radix gone), −9 KB CSS (shadcn gone).
Net diff: +2955 / −4713 lines (−1758 net), 46 files.

110/110 vitest tests pass; 0 audit findings.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@socket-security

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Addednpm/​@​ossrandom/​design-system@​0.2.17710010088100

View full report

@aksOps aksOps merged commit a7c3646 into main Apr 27, 2026
8 checks passed
@aksOps aksOps deleted the feat/design-system-migration branch April 27, 2026 12:45
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