Skip to content

Ship UX — Shep reference audit

Reference clone: local/vendor/shep (gitignored, MIT, study only).

Shep web UI: src/presentation/web/ — Next.js + shadcn/ui + React Flow. Ship adapts patterns in vanilla HTML/CSS/JS.

Component mapping

Shep path Ship implementation
layouts/app-shell, app-sidebar ship/public app shell + #sidebar
features/control-center Now view — #hero-card, ranked queue
common/feature-list-item .ticket-row in All work
common/feature-status-group Queue view grouped by ui_label
common/feature-drawer, drawer-action-bar #ticket-drawer + .drawer-cta-bar
common/feature-drawer-tabs Drawer tabs: Playbook · Detail · Receipts
common/ci-status-badge CiPill on graph ticket nodes + slot pills on list rows
features/features-canvas Graph tab — React Flow + Dagre (ship/graph-ui/, lazy /graph/graph.js)
lib/derive-graph ship/graph-ui/src/derive-ship-graph.ts
lib/layout-with-dagre ship/graph-ui/src/layout-with-dagre.ts (LR, ranksep 200, nodesep 48)
common/repository-node RepoNode (416×140)
common/feature-node TicketNode (388×140) + lifecycle phase badge
Writing topic queue TopicNode (300×96) chained off WRITING-DAILY · writing-context.js
common/empty-state .empty-state when queue clear

Tokens borrowed (semantic, not copied hex-for-hex)

  • Sidebar: muted background, accent on active nav
  • Hero card: elevated surface, accent left border
  • Status: success / warn / danger semantic badges
  • Spacing: 4px base grid (8, 12, 16, 24)

Do not port

  • GitHub gh, pnpm workspace, Next.js build, TypeSpec domain, Electron