Skip to content

feat(app): a quieter sidebar, boxes as a detail, and one type scale everywhere - #146

Merged
sean-brydon merged 19 commits into
mainfrom
feat/quiet-sidebar
Oct 17, 2026
Merged

sean-brydon merged 19 commits into
mainfrom
feat/quiet-sidebar

Conversation

@sean-brydon

Copy link
Copy Markdown
Collaborator

A calmer Shipyard, after comparing it with MonoCode: the sidebar speaks in one ink, boxes stop showing up everywhere, and every page sizes its text from one type scale.

What changes

Sidebar: one ink

  • Text and icons are the foreground in a few strengths, from full ink down to the theme's own muted text. These steps hold 4.5:1 contrast in all 23 themes, which plain alpha didn't (components/sidebar/ink.ts).
  • Colour means two things only: amber when an agent needs you (and a setup that failed), blue while one works.
  • A finished task gets a muted check, an idle one no mark, and times show only on active rows (or for an hour after a task finishes).
  • The footer's box dots are monochrome; a box that's outdated or unreachable is amber.

Boxes are a detail

  • No box rows in the by-project list.
  • A project on a box that's away dims and says "offline", with a tip naming the box and how long it has been gone.
  • The footer's tip lists each box with its state, CPU, memory, agents and route.
  • Box actions: the footer has a right-click or ⋯ menu with each box, and a project's menu has a submenu for its box.
  • The status bar loses the per-box meters and "N/M boxes online". A failed queued prompt there is amber instead of red.

One type scale

  • The scale gains text-heading (16), text-body (14) and text-tag (11), and moves to rem so ⌘+ scales it.
  • 1,424 raw sizes in 224 files are now scale classes. pnpm check:type runs in CI and fails on new ones. Three drawings are exempt, each with a reason.
  • coss ui parts had a phone size and a desktop size, so a size passed in lost on every desktop window. Each part now has its desktop size alone, and caller sizes apply.

Dev builds wear an orange Dock icon on macOS, set at runtime in debug builds only; release bundles are untouched.

Tests

  • New sidebar-boxes.spec.ts.
  • slow-link, box-routes and box-processes now look for the footer instead of the status-bar meters.
  • The openWorktree fixture clicks a row's title, clear of its + and ⋯. This was failing on main for header-picture, reports and files-panel.

Proof (mock data; before = main at v0.3.25)

Before After

The full set of before/after pairs, in both themes, is in a private review page the author has.

Checks

  • tsc, typecheck:plugins, check:titles, check:type, check:themes (24), pnpm test (516), pnpm build, npx tsc -p e2e, cargo check.
  • Specs on the merged branch: sidebar-* (5), guided-install, skills-notice, slow-link, box-routes, box-processes, rail, a11y, look (⌘+), chat, reports, header-picture, workspace and files-panel: 146 passed. Earlier, on the type merge: compare, keyboard and first-run passed. compare flaked once under load and passes on its own.
  • The helpers also ran settings, onboarding, team, home, review, dashboard, kits, artifacts and terminal specs on their own branches.

🤖 Generated with Claude Code

sean-brydon and others added 19 commits October 17, 2026 21:00
… missing steps

The scale gains text-heading (16), text-body (14) and text-tag (11), and
scripts/check-type.mjs lists every raw text size left in the app.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…by the type scale

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Text and icons step from the theme's foreground down to its muted
text, so every theme stays readable; colour is left to amber (needs
you) and blue (working).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…a detail in its foot

Idle rows lose their hollow ring and their time; a finished check is
quiet, not green; a folded project only shows amber or blue. Boxes
leave the list: the foot is one line whose tip says each box's state,
load and route and whose menu holds every box's actions, a project's
menu has its box's, and a project on an away box dims and says
offline. The status bar drops the per-box meters and box count.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… by the type scale

Settings' row names, descriptions, group titles and notes, the guided and
quick install, the welcome and add-a-box steps, team setup, the add-project
dialog and the guard, plugin-consent, requirements and upgrade cards now use
the role classes (text-row, text-desc, text-section, text-meta, text-tag, ...)
instead of raw sizes. Item names in lists (computers, agent CLIs, joined
tailnets, repos) take text-row like Settings rows. The theme card's terminal
and the chat-background preview's miniature chat are drawings, so they move
to files of their own (theme-preview.tsx, chat-miniature.tsx) to be exempted.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s size their text by the type scale

Home, Review, Worktrees, Automations, Kits, a project's settings, the
dashboard, PR review, the notification centre, the command palette,
the switchboard, What's new, artifacts and the visual diff, charts and
the shared parts in lib now take their sizes from the roles in
index.css instead of raw sizes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…pe scale

Messages read as text-body, tool-call rows as text-desc or text-row,
code as text-mono and times, counts and chips as text-tag, across the
conversation, workspace, files, browser, preview, devtools, queue,
prompts, editors, orchestrate and new-worktree panes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… desktop too

coss ui's parts sized text twice, for a phone and from 640px up, so a size
passed in only replaced the phone's and lost on every desktop window. The
app is a desktop app: each part now has its desktop size alone.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…clearly

The shortcut beside the selected place is full ink, and an away
project's header tip names its box and how long it has been gone.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ecks text sizes

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@vercel

vercel Bot commented Oct 17, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
berth Ready Ready Preview Oct 17, 2026 8:56pm UTC
berth-docs Ready Ready Preview Oct 17, 2026 8:56pm UTC

Request Review

@sean-brydon
sean-brydon merged commit 71ccfef into main Oct 17, 2026
8 checks passed
@linear-code

linear-code Bot commented Oct 17, 2026

Copy link
Copy Markdown

ENG-6400

This branch was successfully deployed

2 active deployments
Preview – berth-docs — b95755f3 Deployed Oct 17, 2026 by vercel[bot]
Preview – berth — b95755f3 Deployed Oct 17, 2026 by vercel[bot]
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