beadboard/docs/plans/2026-02-15-unified-ux-prd.md
2026-03-03 16:43:42 -08:00

12 KiB

Unified UX PRD - Swimlane Social Hub

Version: 2.0
Date: 2026-02-16
Status: UPDATED - Complete Design Specification
Supersedes: Previous versions, bb-u6f.7

Implementation Status

Last Updated: 2026-02-16

Phase 0: Design Foundation

  • bb-ui2.1 (codex-3fn) - Design Tokens Update - COMPLETED
    • Added complete earthy-dark token system in globals.css
    • Legacy Aero Chrome classes preserved for backward compatibility (gradual migration)
  • bb-ui2.2 (codex-1ky) - Semantic Rename - READY (blocked by tokens - unblocked)
  • bb-ui2.3 (codex-5vm) - Base Card Component - READY (blocked by tokens - unblocked)

Phase 1-3: Not Started

  • Planning complete, implementation pending Phase 0 completion

Executive Summary

Problem

BeadBoard has 4 fragmented pages with no shared navigation, no shared state, and inconsistent design language. The current Aero Chrome glass-morphism visual style has been rejected by users. Users want ONE cohesive experience for supervising multi-agent teams and managing tasks.

Solution

Single unified shell at / with 4 switchable views (Social Feed, Swimlanes, Graph, Timeline), new earthy-dark design system, agent-prominent UX, and thoughtful interaction patterns throughout.


Key Decisions (Immutable)

# Decision Choice Rationale
1 Routing Single page + client tabs at / Preserves selection state, panels never unmount
2 State Source URL is Single Source of Truth Prevents race conditions
3 Activity Feed Context-aware (filters to selection) Most useful for supervision workflow
4 Mobile Hamburger left + slide-over right + bottom tabs Standard pattern
5 Build Order Tokens → Shell → Views (tracer bullet) Real dependency chain
6 Card Interaction Selection + detail strip below grid (desktop) Grid stays uniform, split-view for conversation
7 Mobile Detail Full-screen overlay (not split) Keyboard takes 40% of screen
8 Visual Style Earthy-dark design system (NOT Aero Chrome) User provided full token spec
9 Agent Presence Prominent - agents are the star Avatars on every card, role-colored borders
10 Left Panel Minimal with counts, nested epic tree Status dots, hover tooltips
11 Card View-Jump Small icons at card bottom Jump to views with task pre-selected
12 Units rem-based Accessibility

Design Token Specification

Color Palette

Backgrounds:

--color-bg-base: #2D2D2D      /* primary background */
--color-bg-card: #363636      /* cards, elevated surfaces */
--color-bg-input: #404040     /* inputs, hover states */

Accents:

--color-accent-green: #7CB97A   /* primary CTA, success, in-progress */
--color-accent-amber: #D4A574   /* warning, blocked */
--color-accent-teal: #5BA8A0    /* secondary, open/ready */

Text:

--color-text-primary: #FFFFFF
--color-text-secondary: #B8B8B8
--color-text-muted: #888888
--color-text-on-primary: #1A1A1A

Borders:

--color-border-default: #4A4A4A
--color-border-subtle: #3A3A3A

Status Mapping:

  • open/ready → teal #5BA8A0
  • in_progress → green #7CB97A
  • blocked → amber #D4A574
  • closed → muted #888888

Agent Role Colors:

  • ui → #6B9BD2 (steel blue)
  • graph → #7CB97A (green)
  • orchestrator → #B08ED6 (soft purple)
  • agent → #B8B8B8 (neutral)
  • researcher → #D4A574 (amber)

Liveness Colors:

  • active → #7CB97A (green, pulsing)
  • stale → #D4A574 (amber)
  • evicted → #C97A7A (muted rose)
  • idle → #888888 (muted)

Radii

--radius-sm: 0.375rem      /* 6px */
--radius-card: 0.625rem    /* 10px */
--radius-modal: 1rem       /* 16px */
--radius-pill: 9999px

Shadows

--shadow-sm: 0 1px 2px rgba(0,0,0,0.1)
--shadow-md: 0 4px 12px rgba(0,0,0,0.15)

Typography

  • Font: system sans-serif (Inter if available)
  • H1: 2rem/700, H2: 1.5rem/600, H3: 1.125rem/600
  • Body: 0.875rem/400, Small: 0.75rem/400, Tiny: 0.6875rem/500
  • Line-height: headings 1.2, body 1.5

Spacing

  • Base: 0.25rem (4px)
  • Card padding: 1rem-1.25rem
  • Gaps: 1rem
  • Section gaps: 2rem-2.5rem

Icons & Transitions

  • Icons: Lucide React, 1.5-2px stroke, 1rem-1.5rem size
  • Transitions: 150-200ms ease-out for all hover/focus

Component Anatomy

Social Feed Card

┌─────────────────────────────────────┐
│ [⊕]                           (top-R)│  expand icon
│                                     │
│ bb-buff.1.1                         │  task ID (tiny, teal)
│ Fix login bug on mobile             │  title (bold, white)
│                                     │
│ UNLOCKS:                            │  blocked-by (ROSE tint)
│  ● #123 Blocker task                │
│                                     │
│ BLOCKS:                             │  downstream (AMBER tint)
│  ● #234 Dependent task              │
│                                     │
│ "Found the issue in the auth..."    │  latest message (muted)
│                                     │
│ [●a-1] [●a-2]                       │  agent avatars (PROMINENT)
│                          [≡] [◊] [≋]│  view-jump icons
└─────────────────────────────────────┘

Card Specs:

  • Background: #363636
  • Border: 1px status-colored (teal/green/amber/muted)
  • Border-radius: 10px
  • Status dot on card matches status mapping
  • Agent avatars have role-colored left border
  • Blocks/unlocks have tinted backgrounds (rose #E57373/10%, amber #D4A574/10%)

Blocks/Unlocks Pattern (reuse from task-card-grid.tsx):

// Container
rounded-lg p-2 border border-white/5

// "Unlocks" header (rose tint)
text-[9px] font-bold uppercase tracking-widest text-rose-400/80
bg-rose-500/10  // background tint

// "Blocks" header (amber tint)
text-[9px] font-bold uppercase tracking-widest text-amber-400/80
bg-amber-500/10  // background tint

// Individual item
rounded border border-white/5 bg-white/5 px-2.5 py-2
hover:border-sky-400/30 hover:bg-white/10 transition-colors

ZFC Agent State Visuals

State Visual
idle #888888 static dot
spawning #5BA8A0 pulsing dot
running #7CB97A animated dot
working #7CB97A pulsing glow
stuck #D4A574 attention dot (needs help!)
done #7CB97A check
stopped #888888 no animation
dead #C97A7A warning

Agent Card (Right Panel)

┌──────────────────────┐
│ [●avatar] agent-1    │  role-colored left border
│ role: ui             │  role label
│ ● working · 2m ago   │  ZFC state dot + age
│ Task: buff.1.1       │  current task
│ [≡] [◊] [≋] [💬]      │  view-jump + message
└──────────────────────┘

Swimlane Header

  • Swarm name + computed counts: "3/8 done · 2 active · 1 ready · 1 blocked"
  • Agent roster with ZFC state labels
  • Collapsible

Layout Architecture

Shell Structure (CSS Grid)

┌──────────────────────────────────────────────────────────────────┐
│ TOP BAR (fixed, 3rem)                                            │
│ ≡  [Swimlanes|Graph|Timeline|Social]                      ◢     │
├──────────┬──────────────────────────────────┬────────────────────┤
│ LEFT     │ MIDDLE                           │ RIGHT              │
│ 13.75rem │ flex-1                           │ 17.5rem            │
│          │                                  │                    │
│ Channel  │ View content (swaps on tab)      │ Agents (~40%)      │
│ tree     │                                  │ ────────────────── │
│          │                                  │ Activity (~60%)    │
└──────────┴──────────────────────────────────┴────────────────────┘

Grid: grid-template-columns: 13.75rem 1fr 17.5rem

Detail Strip Behavior

Desktop (≥1024px):

  • Grid splits: cards (~45%) | detail strip (~55%)
  • Strip slides in below grid when card selected
  • Cards remain visible above

Mobile (<768px):

  • Full-screen overlay (z-index above bottom tabs)
  • Required: virtual keyboard takes 40% of screen
  • Split view would leave 0px for conversation

Responsive Behavior

Size Left Middle Right Detail Strip
Desktop (≥1024px) 13.75rem fixed flex-1 17.5rem fixed Below grid
Tablet (768-1024px) Overlay flex-1 Overlay Slide-over
Mobile (<768px) Overlay flex-1 Hidden Full-screen

Anti-Patterns (Forbidden)

  • NO glass-morphism / backdrop-blur effects
  • NO arbitrary Tailwind color values (use tokens)
  • NO agent-unaware cards (every card shows agents)
  • NO page-per-view routing (use client tabs)
  • NO localStorage for view state (use URL)
  • NO direct JSONL writes (use bd CLI)

Phase 0: Design Foundation

Goal: Tokens + Primitives only. No views.

bb-ui2.1a - Token System Update

  • Update tokens.css with complete spec above
  • Ensure all status/liveness/role colors defined
  • Migrate away from Aero Chrome gradients

bb-ui2.2a - Card Primitive with Blocks/Unlocks

  • Build reusable Card component
  • Implement blocks/unlocks section pattern (reuse task-card-grid.tsx logic)
  • Status-colored borders
  • Soft gradient backgrounds (amber/teal tints, not harsh Aero Chrome)

bb-ui2.3a - Agent Avatar Primitive

  • Avatar with role-colored ring
  • ZFC state indicator (dot/pulse/glow)
  • Size variants (sm, md, lg)

bb-ui2.4a - Status Utilities Update

  • Rewrite status-utils.tsx for new tokens
  • Status badge component with pill + dot
  • Liveness indicator component

Phase 1: Layout Polish

Goal: Fix current layout issues, preserve structure

bb-ui2.22 - Detail Strip Positioning Fix

  • Move from side drawer to below-grid (desktop)
  • Full-screen overlay (mobile)
  • Preserve URL state behavior
  • Thread content actually shows selected bead data

bb-ui2.23 - Activity Panel Polish

  • Split right panel: Agents (40%) + Activity (60%)
  • Agent cards with ZFC states
  • Context-aware activity filtering

bb-ui2.24 - Mobile Responsive Polish

  • Bottom tab bar
  • Panel overlays
  • Touch-friendly targets

Phase 2: Card Design Implementation

Goal: Implement complete card anatomy

bb-ui2.25 - Social Feed Card Redesign

  • Full card anatomy from spec
  • Blocks/unlocks with rose/amber tints
  • Prominent agent avatars
  • View-jump icons
  • Expand icon → full-page popup

bb-ui2.26 - Swimlane Card Redesign

  • Agent-first layout
  • ZFC state prominent
  • Status-colored border
  • Drag-drop preserved

bb-ui2.27 - Graph Node Redesign

  • New design tokens
  • Agent avatars on nodes
  • Selection syncs with store

Phase 3: Cross-Cutting Polish

Goal: Deep links, mobile, final gates

bb-ui2.28 - Deep Link Verification

  • All URL patterns work
  • Browser back/forward
  • Shareable URLs

bb-ui2.29 - Screenshot Evidence

  • All breakpoints
  • All views
  • Mobile + desktop

bb-ui2.30 - Final Gates

  • typecheck, lint, test
  • Close epic

Verification Strategy

After each bead:

npm run typecheck
npm run lint
npm run test

Visual verification:

  • Screenshots at 390px, 768px, 1440px
  • Compare against design spec
  • Agent avatars visible on all cards
  • Blocks/unlocks sections tinted correctly

End of PRD v2.0 - Ready for Implementation