feat(desktop): clean up the workspaces board cards

Merged
KI
2mo ago
+112-47

Follows #7142 (merged). Replaces #7146, which GitHub closed when that PR's base branch was deleted on merge; this is the same three commits rebased onto main, with the card's Lingui calls updated to the English-text-as-id convention from #7092.

What changed

The board cards were carrying a lot of repeated chrome: "This device" on every local card, the branch name printed under a title that was already the branch name, and unstyled metadata. This reworks the card after Linear's board anatomy (checked on Mobbin) while keeping the page's existing vocabulary.

Card

  • Muted project line at the top: project icon, project name, a laptop mark on main checkouts (same tooltip as the list row). The host chip only appears for remote devices.
  • State glyph beside a medium-weight title. This is the same WorkspaceStateGlyph the list row uses, so the green review dot, the working spinner, and the column pies read the same on both layouts.
  • Branch line only when it says something the title doesn't (the list row's rule): hidden for sessions and when branch and name match.
  • Footer of outlined pills: PR number with checks dot, +adds −dels churn when present, Merged/Deleted for tombstones, with the activity age on the right. Age now tracks activity like the list, not creation.
  • Done states (merged PR, archived) recede to muted text.

Column

  • Lanes get a surface one step above the page (bg-muted/30) with the header inside, so cards read as items in a column. Card gap 8px, lane gap 12px. Works in both themes: page < lane < card.

Refactor commit: WorkspaceStateGlyph moves from the row's private folder up to v2-workspaces/components since two components share it now.

Checks

  • bun run typecheck (apps/desktop): exit 0
  • bun test for the workspaces page directory: 17 pass
  • bun run check:i18n: exit 0, no catalog changes. The card reuses the row's existing ids, so no new strings.
  • Rendered in the dev app over CDP; screenshots in the session.

A later commit moves the age to the header's right slot and the state glyph to the footer's right slot, and widens the card inset to 14/12px.

https://claude.ai/code/session_01BjVLqU1kEE6SQqKSYem9ax


Summary by cubic

Reworks the workspaces board cards and columns after Linear's board anatomy so cards read as items in a lane and drop repeated chrome like "This device" and the redundant branch line.

What changed

  • Cards show a muted project line, state glyph beside the title, and outlined pills for PR, diff churn, and archive state.
  • Branch line only appears when it says something the title doesn't; age tracks last activity like the list row, not creation.
  • Done states (merged PR, archived) recede to muted text; columns get a surface one step above the page.
  • WorkspaceStateGlyph moves up to v2-workspaces/components since the card and list row share it.