4.5 KiB
4.5 KiB
BeadBoard Kanban Design System Plan
Goal Ship a production-ready baseline visual system for Tracer Bullet 1 (Kanban) before further feature expansion.
Primary decision
Use Tailwind CSS v4 + CSS tokens (@theme) + Framer Motion.
1. Why This Stack
Tailwind v4 is the right baseline
- Fastest path to a coherent, reusable system in Next.js 15.
- CSS-first token model (
@theme) fits our need for semantic design tokens. - Lets us avoid scattered inline styles and ad-hoc CSS files.
Framer Motion should be scoped
- Use for state transitions (card changes, panel enter/exit, filtered results).
- Avoid decorative over-animation that hurts readability in a dense dashboard.
Risks and mitigations
- Risk: “generic Tailwind look”
- Mitigation: strict token palette + component contracts + typography rules.
- Risk: visual inconsistency
- Mitigation: no direct color literals in component markup except token definitions.
2. Baseline-First Sequencing
This should happen now, not later.
- Foundation (tokens, layout, core components)
- Motion and interaction polish
- Accessibility and responsive hardening
- Continue other tracer bullets
3. Visual Language (v1)
Product feel
- High-signal operations UI.
- Calm neutral surfaces with sharp status accents.
- Dense information without visual clutter.
Typography
- Primary UI:
DM Sans(orInterfallback decision at implementation time) - Metadata/IDs:
JetBrains Mono
Color model
- Semantic tokens only:
background,foreground,surface,mutedstatus-open,status-in-progress,status-blocked,status-deferred,status-closedpriority-p0...priority-p4
- Contrast target: at least WCAG AA for normal text.
4. Component Contract
Required first-class components:
KanbanPageShellKanbanControlsKanbanBoardKanbanColumnKanbanCardKanbanDetailPanel- shared:
Badge,Chip,StatPill
Rules:
- Component variants defined via class composition (CVA optional but preferred).
- No inline style objects for production components.
- All spacing/radius/shadow/color come from tokens/utilities.
5. Layout Contract
Desktop
- Sticky top header with filters + stats.
- Main grid: board + detail panel.
- Columns scroll horizontally as needed.
Mobile
- Stacked controls.
- Board in horizontal swipe/scroll mode.
- Detail panel becomes full-screen drawer.
6. Motion Contract (Framer Motion)
Use motion for:
- Card appear/disappear on filtering.
- Detail panel slide-in/out.
- Subtle status count transitions.
Do not animate:
- Global page container on every render.
- Constant hover effects that reduce legibility/performance.
7. Tailwind v4 Implementation Plan
Phase A: Design System Foundation (P0)
- Add Tailwind v4 pipeline with
@import "tailwindcss"in global stylesheet. - Define
@themetoken set (colors, radius, spacing aliases, shadows, motion tokens). - Add base layer typography/background defaults.
- Replace inline styles in tracer-1 components with tokenized Tailwind classes.
Acceptance criteria:
- No inline style usage in
src/components/kanban/*and shared primitives (except truly dynamic edge cases). - UI at
localhost:3000has coherent baseline styling.
Phase B: Motion + Interaction Polish (P1)
- Integrate Framer Motion transitions for board and panel.
- Improve visual hierarchy of card metadata.
- Add polished empty/loading/error states.
Acceptance criteria:
- Motion communicates state changes without jitter.
- Filtering and detail interactions feel intentional.
Phase C: Accessibility + Responsive Hardening (P1)
- Keyboard focus and traversal for cards/panel.
- Verify color contrast and focus visibility.
- Tune mobile breakpoints and touch targets.
Acceptance criteria:
- Keyboard-only flow works for core Kanban actions.
- Mobile experience is usable and visually consistent.
8. Technical Boundaries
- Read path remains
.beads/issues.jsonl/.beads/issues.jsonl.new. - No direct write path to JSONL.
- Styling changes must not alter read/write boundary behavior.
9. Definition of Done (Tracer-1 Design Baseline)
- Tailwind v4 configured and used as primary styling framework.
- Tokenized design system applied across tracer-1 Kanban components.
- Framer Motion integrated for key transitions.
- Tests/typecheck pass, app runs on
localhost:3000. - Visual result is clearly beyond prototype/demo quality.