跳到主要内容

Kanban Integration - Vibe-Kanban Integration Specification

Integrating vibe-kanban task board functionality in workspace, providing project-level task management capabilities.


Overview

AttributeValue
Module IDM-KANBAN
Dependenciesworkspace-ui (T17), UI Shell (T3)
PriorityP1
Status📝 Specification

Goals

Integrate vibe-kanban into the viben desktop application:

  1. Add [Task Board] entry on workspace page
  2. Open embedded kanban page within desktop on click
  3. Implement Notion-style breadcrumb navigation
  4. Support workspace-level task management

User Flow


Package Architecture

Overall Architecture Diagram

┌─────────────────────────────────── Applications ───────────────────────────────────┐
│ │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
│ │ apps/desktop │ │ apps/web │ │ apps/docs │ │
│ │ (Tauri + React) │ │ (Next.js) │ │ (Docusaurus) │ │
│ └────────┬────────┘ └────────┬────────┘ └─────────────────┘ │
│ │ │ │
│ └──────────┬───────────┘ │
│ │ imports │
│ ▼ │
├────────────────────────────────── Packages (Shared Libraries) ─────────────────────┤
│ │
│ ┌─────────────────────────────── @viben/kanban (NEW) ──────────────────────────┐ │
│ │ KanbanBoard │ KanbanColumn │ TaskCard │ useKanban │ useDragDrop │ types │ │
│ └──────────────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────── @viben/ui (NEW) ──────────────────────────────┐ │
│ │ Breadcrumb │ Badge │ Priority │ Assignee │ Button │ Card │ Dialog │ Skeleton│ │
│ └──────────────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │
│ │ @viben/api-client│ │ @viben/cli │ │ @viben/types │ │
│ │ (existing) │ │ (existing) │ │ (NEW) │ │
│ └──────────────────┘ └──────────────────┘ └──────────────────┘ │
└────────────────────────────────────────────────────────────────────────────────────┘

New Package Definitions

Package 1: @viben/ui - Shared UI Component Library

Purpose: Extract reusable UI primitives from desktop application for sharing across all applications.

Priority: P0 (Foundation dependency)

packages/ui/
├── package.json
├── tsconfig.json
├── tsup.config.ts
├── tailwind.config.ts
├── src/
│ ├── index.ts # Export entry
│ ├── lib/
│ │ └── utils.ts # cn() utility function
│ ├── styles/
│ │ └── globals.css # Tailwind base styles + CSS variables
│ └── components/
│ ├── breadcrumb.tsx # Breadcrumb navigation ⭐ New
│ ├── button.tsx # Button
│ ├── card.tsx # Card
│ ├── badge.tsx # Badge
│ ├── skeleton.tsx # Skeleton
│ ├── dialog.tsx # Dialog
│ ├── dropdown-menu.tsx # Dropdown menu
│ ├── tooltip.tsx # Tooltip
│ ├── scroll-area.tsx # Scroll area
│ ├── separator.tsx # Separator
│ └── index.ts # Component exports
└── README.md

package.json:

{
"name": "@viben/ui",
"version": "1.0.0",
"description": "Viben shared UI component library",
"main": "dist/index.js",
"module": "dist/index.mjs",
"types": "dist/index.d.ts",
"exports": {
".": {
"types": "./dist/index.d.ts",
"import": "./dist/index.mjs",
"require": "./dist/index.js"
},
"./styles.css": "./dist/styles.css"
},
"sideEffects": ["*.css"],
"scripts": {
"build": "tsup && pnpm build:css",
"build:css": "tailwindcss -i src/styles/globals.css -o dist/styles.css --minify",
"dev": "tsup --watch",
"typecheck": "tsc --noEmit",
"clean": "rm -rf dist"
},
"dependencies": {
"@radix-ui/react-dialog": "^1.1.4",
"@radix-ui/react-dropdown-menu": "^2.1.4",
"@radix-ui/react-scroll-area": "^1.2.2",
"@radix-ui/react-separator": "^1.1.1",
"@radix-ui/react-slot": "^1.1.1",
"@radix-ui/react-tooltip": "^1.1.6",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"tailwind-merge": "^2.6.0"
},
"peerDependencies": {
"react": "^18.0.0 || ^19.0.0",
"react-dom": "^18.0.0 || ^19.0.0"
},
"devDependencies": {
"@types/react": "^19.0.0",
"tailwindcss": "^4.0.0",
"tsup": "^8.3.5",
"typescript": "^5.7.0"
}
}

Exported Components:

ComponentSourceReusability
BreadcrumbNew⭐⭐⭐⭐⭐
ButtonExtracted from desktop⭐⭐⭐⭐⭐
CardExtracted from desktop⭐⭐⭐⭐⭐
BadgeExtracted from desktop⭐⭐⭐⭐⭐
SkeletonExtracted from desktop⭐⭐⭐⭐⭐
DialogExtracted from desktop⭐⭐⭐⭐⭐
DropdownMenuExtracted from desktop⭐⭐⭐⭐⭐
TooltipExtracted from desktop⭐⭐⭐⭐⭐
ScrollAreaExtracted from desktop⭐⭐⭐⭐⭐
SeparatorExtracted from desktop⭐⭐⭐⭐⭐

Package 2: @viben/kanban - Kanban Core Components

Purpose: Encapsulate reusable Kanban board UI components without business logic.

Priority: P1 (Kanban feature core)

packages/kanban/
├── package.json
├── tsconfig.json
├── tsup.config.ts
├── src/
│ ├── index.ts # Export entry
│ ├── types.ts # Type definitions
│ ├── context.ts # Kanban context
│ ├── components/
│ │ ├── kanban-provider.tsx # DnD context provider
│ │ ├── kanban-board.tsx # Board container
│ │ ├── kanban-column.tsx # Column component
│ │ ├── kanban-column-header.tsx
│ │ ├── kanban-card.tsx # Card component
│ │ ├── kanban-card-content.tsx
│ │ ├── kanban-add-card.tsx # Add card
│ │ └── index.ts
│ ├── primitives/
│ │ ├── priority-icon.tsx # Priority icon
│ │ ├── assignee-avatar.tsx # Assignee avatar
│ │ ├── due-date-badge.tsx # Due date badge
│ │ ├── tag-badge.tsx # Tag badge
│ │ └── index.ts
│ └── hooks/
│ ├── use-kanban-context.ts
│ ├── use-drag-handle.ts
│ └── index.ts
└── README.md

package.json:

{
"name": "@viben/kanban",
"version": "1.0.0",
"description": "Viben Kanban board components",
"main": "dist/index.js",
"module": "dist/index.mjs",
"types": "dist/index.d.ts",
"exports": {
".": {
"types": "./dist/index.d.ts",
"import": "./dist/index.mjs",
"require": "./dist/index.js"
}
},
"scripts": {
"build": "tsup",
"dev": "tsup --watch",
"typecheck": "tsc --noEmit",
"clean": "rm -rf dist"
},
"dependencies": {
"@dnd-kit/core": "^6.3.1",
"@dnd-kit/sortable": "^10.0.0",
"@dnd-kit/utilities": "^3.2.2"
},
"peerDependencies": {
"@viben/ui": "workspace:*",
"react": "^18.0.0 || ^19.0.0",
"react-dom": "^18.0.0 || ^19.0.0",
"lucide-react": ">=0.400.0"
},
"devDependencies": {
"@types/react": "^19.0.0",
"tsup": "^8.3.5",
"typescript": "^5.7.0"
}
}

Core Type Definitions (src/types.ts):

// ============================================
// Core Types (No business logic)
// ============================================

/**
* Kanban item status
*/
export type KanbanStatus = string;

/**
* Priority
*/
export type KanbanPriority = "low" | "medium" | "high" | "urgent";

/**
* Kanban column configuration
*/
export interface KanbanColumnConfig {
id: string;
status: KanbanStatus;
title: string;
color?: string;
order: number;
/** Whether collapsible */
collapsible?: boolean;
/** Whether collapsed by default */
defaultCollapsed?: boolean;
/** Maximum task limit (WIP limit) */
maxItems?: number;
}

/**
* Kanban item (generic)
* Uses generics to support extended fields
*/
export interface KanbanItem<TMetadata = Record<string, unknown>> {
id: string;
title: string;
description?: string;
status: KanbanStatus;
priority?: KanbanPriority;
order: number;
/** Extended metadata */
metadata?: TMetadata;
}

/**
* Drag result
*/
export interface KanbanDragResult {
itemId: string;
sourceColumnId: string;
targetColumnId: string;
newOrder: number;
}

/**
* Kanban event callbacks
*/
export interface KanbanCallbacks<TItem extends KanbanItem = KanbanItem> {
onItemMove?: (result: KanbanDragResult) => void | Promise<void>;
onItemCreate?: (columnId: string, item: Partial<TItem>) => void | Promise<void>;
onItemUpdate?: (item: TItem) => void | Promise<void>;
onItemDelete?: (itemId: string) => void | Promise<void>;
onItemClick?: (item: TItem) => void;
onColumnCollapse?: (columnId: string, collapsed: boolean) => void;
}

/**
* Kanban configuration
*/
export interface KanbanConfig {
/** Allow cross-column drag */
allowCrossColumnDrag?: boolean;
/** Allow reordering within column */
allowReorder?: boolean;
/** Show add card button */
showAddCard?: boolean;
/** Read-only mode */
readonly?: boolean;
/** Virtual scroll threshold */
virtualizeThreshold?: number;
}

// ============================================
// Component Props
// ============================================

export interface KanbanProviderProps {
children: React.ReactNode;
config?: KanbanConfig;
}

export interface KanbanBoardProps<TItem extends KanbanItem = KanbanItem> {
columns: KanbanColumnConfig[];
items: TItem[];
callbacks?: KanbanCallbacks<TItem>;
config?: KanbanConfig;
className?: string;
/** Custom card rendering */
renderCard?: (item: TItem) => React.ReactNode;
/** Custom column header rendering */
renderColumnHeader?: (column: KanbanColumnConfig, itemCount: number) => React.ReactNode;
}

export interface KanbanColumnProps<TItem extends KanbanItem = KanbanItem> {
column: KanbanColumnConfig;
items: TItem[];
callbacks?: KanbanCallbacks<TItem>;
config?: KanbanConfig;
renderCard?: (item: TItem) => React.ReactNode;
renderColumnHeader?: (column: KanbanColumnConfig, itemCount: number) => React.ReactNode;
}

export interface KanbanCardProps<TItem extends KanbanItem = KanbanItem> {
item: TItem;
isDragging?: boolean;
onClick?: () => void;
children?: React.ReactNode;
}

Component Responsibility Separation:

ComponentResponsibilityBusiness Logic
KanbanProviderProvides DnD contextNone
KanbanBoardRenders column container, handles drag eventsNone
KanbanColumnRenders single column, acts as drop zoneNone
KanbanColumnHeaderRenders column title, task countNone
KanbanCardRenders draggable cardNone
KanbanCardContentRenders card content (customizable)None
KanbanAddCardAdd new card UINone

Package 3: @viben/types - Shared Type Definitions

Purpose: Define TypeScript types shared across applications.

Priority: P0 (Foundation dependency)

packages/types/
├── package.json
├── tsconfig.json
├── src/
│ ├── index.ts
│ ├── workspace.ts # Workspace related types
│ ├── kanban.ts # Kanban business types (extends @viben/kanban)
│ ├── user.ts # User related types
│ ├── package.ts # MCP/Skill package types
│ └── api.ts # API response types
└── README.md

Kanban Business Types (src/kanban.ts):

import type { KanbanItem, KanbanColumnConfig, KanbanPriority } from "@viben/kanban";

/**
* Viben task metadata
*/
export interface TaskMetadata {
assigneeId?: string;
assigneeName?: string;
assigneeAvatar?: string;
dueDate?: string;
tags?: string[];
estimatedHours?: number;
actualHours?: number;
linkedIssueUrl?: string;
createdBy?: string;
createdAt: string;
updatedAt: string;
}

/**
* Viben task (extends KanbanItem)
*/
export interface Task extends KanbanItem<TaskMetadata> {
workspaceId: string;
projectId?: string;
}

/**
* Task status (predefined)
*/
export type TaskStatus = "backlog" | "todo" | "in_progress" | "review" | "done" | "archived";

/**
* Default column configuration
*/
export const DEFAULT_COLUMNS: KanbanColumnConfig[] = [
{ id: "backlog", status: "backlog", title: "Backlog", color: "#6B7280", order: 0 },
{ id: "todo", status: "todo", title: "To Do", color: "#3B82F6", order: 1 },
{ id: "in_progress", status: "in_progress", title: "In Progress", color: "#F59E0B", order: 2 },
{ id: "review", status: "review", title: "Review", color: "#8B5CF6", order: 3 },
{ id: "done", status: "done", title: "Done", color: "#10B981", order: 4 },
];

/**
* Task filter criteria
*/
export interface TaskFilter {
status?: TaskStatus[];
priority?: KanbanPriority[];
assigneeId?: string;
tags?: string[];
search?: string;
dueBefore?: string;
dueAfter?: string;
}

/**
* Task sort field
*/
export type TaskSortField = "order" | "priority" | "dueDate" | "createdAt" | "updatedAt" | "title";

/**
* Task sort direction
*/
export type TaskSortDirection = "asc" | "desc";

Package Dependency Graph

Dependency Direction Legend:

  • Runtime dependency
  • -.-> Type dependency (type imports only)

Core Concept: Link vibe-kanban frontend packages directly to viben monorepo via symlink, achieving code sharing rather than duplication.

ApproachProsConsRecommendation
A: Source CopyFull controlMaintain two codebases, sync difficult⭐⭐
B: NPM Package PublishingClear version managementRequires publish flow, slow iteration⭐⭐⭐
C: Git SubmoduleVersion trackingComplex build, submodule management difficult⭐⭐⭐
D: SymlinkReal-time sync, zero maintenance costRequires local vibe-kanban repo⭐⭐⭐⭐⭐

vibe-kanban Project Structure

According to ARCHITECTURE.md, vibe-kanban's frontend structure:

vibe-kanban/
├── frontend/ # React frontend application
│ ├── src/
│ │ ├── components/
│ │ │ ├── ui/ # Basic UI components (shadcn/ui)
│ │ │ │ └── shadcn-io/
│ │ │ │ └── kanban/ # ⭐ Kanban core components
│ │ │ ├── ui-new/ # New design system components
│ │ │ │ ├── containers/ # Business containers
│ │ │ │ ├── primitives/ # ⭐ Atomic components
│ │ │ │ └── views/ # ⭐ View components
│ │ │ └── ...
│ │ ├── hooks/ # Custom Hooks (~90)
│ │ ├── stores/ # Zustand state
│ │ └── lib/ # Utility library
│ └── package.json
├── shared/ # Frontend-backend shared types
│ ├── types.ts # ⭐ TypeScript type definitions
│ └── remote-types.ts
└── ...

Create symlinks in viben monorepo pointing to vibe-kanban's relevant directories:

# Target structure
viben/
├── packages/
│ ├── vibe-kanban-ui/ # symlink → vibe-kanban/frontend/src/components/ui
│ ├── vibe-kanban-ui-new/ # symlink → vibe-kanban/frontend/src/components/ui-new
│ ├── vibe-kanban-shared/ # symlink → vibe-kanban/shared
│ └── ...

Setup Steps

cd /Users/lxy/Documents/GitHub/LinXueyuanStdio/viben

# Create symlink directory
mkdir -p packages/vibe-kanban

# Link UI components
ln -s /Users/lxy/Documents/GitHub/others/vibe-kanban/frontend/src/components/ui \
packages/vibe-kanban/ui

# Link new design components
ln -s /Users/lxy/Documents/GitHub/others/vibe-kanban/frontend/src/components/ui-new \
packages/vibe-kanban/ui-new

# Link hooks
ln -s /Users/lxy/Documents/GitHub/others/vibe-kanban/frontend/src/hooks \
packages/vibe-kanban/hooks

# Link shared types
ln -s /Users/lxy/Documents/GitHub/others/vibe-kanban/shared \
packages/vibe-kanban/shared

# Link utility library
ln -s /Users/lxy/Documents/GitHub/others/vibe-kanban/frontend/src/lib \
packages/vibe-kanban/lib

Step 2: Create Wrapper package.json

Create package.json in packages/vibe-kanban/:

{
"name": "@viben/vibe-kanban",
"version": "1.0.0",
"description": "Symlinked vibe-kanban components for viben",
"private": true,
"main": "index.ts",
"types": "index.ts",
"exports": {
".": "./index.ts",
"./ui/*": "./ui/*",
"./ui-new/*": "./ui-new/*",
"./hooks/*": "./hooks/*",
"./shared": "./shared/types.ts",
"./lib/*": "./lib/*"
},
"peerDependencies": {
"react": "^18.0.0 || ^19.0.0",
"react-dom": "^18.0.0 || ^19.0.0"
}
}

Step 3: Create Unified Export Entry

In packages/vibe-kanban/index.ts:

// Kanban core components
export * from "./ui/shadcn-io/kanban";

// New design components
export * from "./ui-new/primitives";
export * from "./ui-new/views/KanbanBoard";

// Type definitions
export type * from "./shared/types";

Step 4: Update Turbo Configuration

Configure build dependencies in turbo.json:

{
"pipeline": {
"build": {
"dependsOn": ["^build"],
"outputs": ["dist/**"]
}
},
"globalDependencies": [
"packages/vibe-kanban/**"
]
}

Step 5: Use in Desktop Application

// apps/desktop/src/components/workspace/workspace-kanban.tsx
import {
KanbanProvider,
KanbanBoard,
KanbanCard,
KanbanHeader,
} from "@viben/vibe-kanban";
import type { Task } from "@viben/vibe-kanban/shared";

export function WorkspaceKanban({ workspaceId }: { workspaceId: string }) {
// ... business logic
return (
<KanbanProvider>
<KanbanBoard
columns={columns}
items={tasks}
onDragEnd={handleDragEnd}
/>
</KanbanProvider>
);
}
PathComponentsPurpose
ui/shadcn-io/kanban/KanbanProvider, KanbanBoard, KanbanCard, KanbanCards, KanbanHeaderKanban core UI
ui-new/primitives/PriorityIcon, ViewNavTabs, StatusBadgeAtomic components
ui-new/views/KanbanBoard, KanbanCardContent, IssueListViewView components
hooks/useKanban*, useDragDrop, useProject*State Hooks
shared/Task, Project, TaskStatus, IssuePriorityTypeScript types
lib/utils.ts, api.tsUtility functions

Notes

  1. Development Environment: Requires cloning both vibe-kanban and viben repositories
  2. CI/CD: Need to set up symlink in CI, or use Git Submodule as fallback
  3. Type Compatibility: vibe-kanban uses React 18, viben uses React 19, ensure compatibility
  4. Style Conflicts: vibe-kanban uses dual Tailwind config, need to adapt to Viben Design System

Fallback: Hybrid Mode

If symlink is unavailable in certain environments, use hybrid mode:

  1. Development Environment: Use symlink (real-time sync)
  2. CI Environment: Use Git Submodule or npm pack
  3. Production Environment: Copy necessary files during build

Component Migration Mapping

vibe-kanban ComponentImport PathModification Level
ui/shadcn-io/kanban/KanbanProvider@viben/vibe-kanbanNo modification
ui/shadcn-io/kanban/KanbanBoard@viben/vibe-kanbanNo modification
ui/shadcn-io/kanban/KanbanCard@viben/vibe-kanbanNo modification
ui/shadcn-io/kanban/KanbanCards@viben/vibe-kanbanNo modification
ui/shadcn-io/kanban/KanbanHeader@viben/vibe-kanbanNo modification
ui-new/views/KanbanCardContent@viben/vibe-kanban/ui-new/viewsNo modification
ui-new/primitives/PriorityIcon@viben/vibe-kanban/ui-new/primitivesNo modification
ComponentReasonImplementation Location
WorkspaceKanbanviben-specific workspace integrationapps/desktop/src/components/workspace/
useWorkspaceKanbanviben-specific state managementapps/desktop/src/hooks/
BreadcrumbNotion-style, provided by @viben/uipackages/ui/
ComponentReason
KanbanContainerContains vibe-kanban specific business logic
KanbanFilterBarDepends on vibe-kanban filter state
KanbanIssuePanelContainerSpecific to Issue details
useTaskMutationsDepends on vibe-kanban backend API
All storesvibe-kanban application-level state

Style Adaptation Guide

From vibe-kanban Styles to Viben Design System

Color Mapping:

vibe-kanbanViben Design SystemCSS Variable
bg-cardbg-surface--surface
border-borderborder-border--border
text-foregroundtext-foreground--foreground
Blue primaryWarm amber--primary
Default radiusrounded-xl--radius-lg

Animation Adaptation:

/* vibe-kanban default */
transition: all 0.2s ease;

/* Viben Design System */
transition: all var(--duration-fast) var(--ease-out-expo);

Card Style Adaptation:

// vibe-kanban original style
<div className="rounded-lg border bg-card p-3 shadow-sm">

// Viben Design System adaptation
<div className={cn(
"rounded-xl border border-border bg-surface p-4",
"transition-all duration-200",
"hover:border-primary/30 hover:shadow-md hover:-translate-y-0.5"
)}>

UI Design

1. Breadcrumb Navigation

Position: Top of workspace page

Design Philosophy: Notion-style

┌─────────────────────────────────────────────────────────────────────────┐
│ Home / My Workspace / Task Board │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ [Page Content Area] │
│ │
└─────────────────────────────────────────────────────────────────────────┘

Interaction Behavior:

  • Each level is clickable, navigates to corresponding page
  • Current page is not clickable, displayed as plain text
  • Supports icon display (optional)
  • Responsive: collapses middle levels on mobile, shows ... / Current Page

2. Kanban Page Layout

┌─────────────────────────────────────────────────────────────────────────────────────┐
│ Breadcrumb: Home / My Workspace / Task Board │
├──────────────────┬──────────────────┬──────────────────┬────────────────────────────┤
│ To Do (5) │ In Progress (3) │ Done (12) │ Archived │
├──────────────────┼──────────────────┼──────────────────┼────────────────────────────┤
│ ┌──────────────┐ │ ┌──────────────┐ │ ┌──────────────┐ │ │
│ │ Task 1 │ │ │ Task 3 │ │ │ Task 5 │ │ │
│ └──────────────┘ │ └──────────────┘ │ └──────────────┘ │ │
│ ┌──────────────┐ │ ┌──────────────┐ │ ┌──────────────┐ │ │
│ │ Task 2 │ │ │ Task 4 │ │ │ Task 6 │ │ │
│ └──────────────┘ │ └──────────────┘ │ └──────────────┘ │ │
│ │ │ │ │
│ │ │ │ │
│ + Add Task │ │ │ │
└──────────────────┴──────────────────┴──────────────────┴────────────────────────────┘

Goal: Establish symlink connection between vibe-kanban and viben

TaskDeliverablePriority
Create symlink directory structurepackages/vibe-kanban/P0
Link vibe-kanban frontend componentssymlinks to ui/, ui-new/, hooks/P0
Link shared typessymlink to shared/P0
Create wrapper package.jsonpackages/vibe-kanban/package.jsonP0
Create unified export entrypackages/vibe-kanban/index.tsP0
Update pnpm-workspace.yamlAdd vibe-kanban packageP0
Update turbo.jsonConfigure build dependenciesP0

Acceptance Criteria:

  • ls -la packages/vibe-kanban/ shows correct symlinks
  • pnpm install succeeds without errors
  • desktop app can import components from @viben/vibe-kanban
  • TypeScript type checking passes

Setup Commands:

# Create directory
mkdir -p packages/vibe-kanban

# Create symlinks
ln -s /Users/lxy/Documents/GitHub/others/vibe-kanban/frontend/src/components/ui packages/vibe-kanban/ui
ln -s /Users/lxy/Documents/GitHub/others/vibe-kanban/frontend/src/components/ui-new packages/vibe-kanban/ui-new
ln -s /Users/lxy/Documents/GitHub/others/vibe-kanban/frontend/src/hooks packages/vibe-kanban/hooks
ln -s /Users/lxy/Documents/GitHub/others/vibe-kanban/shared packages/vibe-kanban/shared
ln -s /Users/lxy/Documents/GitHub/others/vibe-kanban/frontend/src/lib packages/vibe-kanban/lib

Phase 1: Foundation Package Setup (@viben/ui)

Goal: Create shared UI component library (complementing vibe-kanban)

TaskDeliverablePriority
Create @viben/types packagepackages/types/P0
Create @viben/ui packagepackages/ui/P0
Migrate UI primitives from desktop10+ componentsP0
Create Breadcrumb component@viben/ui/breadcrumbP0
Configure Turbo build pipelineturbo.json updateP0

Acceptance Criteria:

  • pnpm build successfully builds all packages
  • desktop app can import components from @viben/ui
  • Type checking passes

Goal: Use vibe-kanban components in desktop application (via symlink)

TaskDeliverablePriority
Add Workspace Kanban TabUI entry pointP1
Implement WorkspaceKanban containerUsing @viben/vibe-kanbanP1
Implement useWorkspaceKanban hookviben-specific state managementP1
Style adaptation layerCSS variable mappingP1
Local storage (SQLite via Tauri)Data persistenceP2
Add internationalization supporti18n translationsP2

Usage Example:

// apps/desktop/src/components/workspace/workspace-kanban.tsx
import {
KanbanProvider,
KanbanBoard,
KanbanCard,
} from "@viben/vibe-kanban";
import { Breadcrumb } from "@viben/ui";

export function WorkspaceKanban({ workspaceId }: Props) {
const { tasks, columns, actions } = useWorkspaceKanban(workspaceId);

return (
<div>
<Breadcrumb items={breadcrumbItems} />
<KanbanProvider>
<KanbanBoard columns={columns} items={tasks} />
</KanbanProvider>
</div>
);
}

Acceptance Criteria:

  • Can correctly import components from @viben/vibe-kanban
  • Can create, edit, delete tasks in workspace
  • Dragging tasks updates status
  • Data persists locally
  • Supports English and Chinese

Phase 3: Cloud Sync and Advanced Features

Goal: Implement cloud synchronization and collaboration features

TaskDeliverablePriority
Backend Task APIREST endpointsP3
Cloud sync mechanismBidirectional syncP3
Real-time collaboration (optional)WebSocketP3
Filtering and searchAdvanced featuresP3
Performance optimization (virtual scroll)Large data supportP3

viben/
├── apps/
│ ├── desktop/
│ │ └── src/
│ │ ├── components/
│ │ │ ├── workspace/
│ │ │ │ └── workspace-kanban.tsx # Kanban container (business logic)
│ │ │ └── layout/
│ │ │ └── ... (uses @viben/ui)
│ │ └── hooks/
│ │ └── use-workspace-kanban.ts # Kanban business hook
│ └── web/
│ └── ... (can also use @viben/ui)

├── packages/
│ ├── vibe-kanban/ # ⭐ Symlink to vibe-kanban project
│ │ ├── package.json # Wrapper configuration
│ │ ├── index.ts # Unified exports
│ │ ├── ui -> ../../../others/vibe-kanban/frontend/src/components/ui
│ │ ├── ui-new -> ../../../others/vibe-kanban/frontend/src/components/ui-new
│ │ ├── hooks -> ../../../others/vibe-kanban/frontend/src/hooks
│ │ ├── shared -> ../../../others/vibe-kanban/shared
│ │ └── lib -> ../../../others/vibe-kanban/frontend/src/lib
│ │
│ ├── ui/ # Shared UI component library (viben specific)
│ │ └── src/
│ │ ├── components/
│ │ │ ├── breadcrumb.tsx # Notion-style breadcrumb
│ │ │ ├── button.tsx
│ │ │ ├── card.tsx
│ │ │ └── ...
│ │ └── lib/
│ │ └── utils.ts
│ │
│ ├── types/ # Shared type definitions (viben specific)
│ │ └── src/
│ │ ├── workspace.ts
│ │ ├── kanban.ts # Extends vibe-kanban types
│ │ └── user.ts
│ │
│ ├── api-client/ # (existing)
│ └── cli/ # (existing)

├── /Users/lxy/Documents/GitHub/others/vibe-kanban/ # External repo (symlink source)
│ ├── frontend/
│ │ └── src/
│ │ ├── components/
│ │ │ ├── ui/ # shadcn/ui base components
│ │ │ │ └── shadcn-io/
│ │ │ │ └── kanban/ # Kanban core components
│ │ │ └── ui-new/ # New design components
│ │ │ ├── containers/
│ │ │ ├── primitives/
│ │ │ └── views/
│ │ ├── hooks/ # 90+ custom hooks
│ │ └── lib/
│ └── shared/ # Frontend-backend shared types

└── docs/specs/modules/
└── kanban-integration.md # This document

Acceptance Criteria

  • packages/vibe-kanban/ directory exists and symlinks are valid
  • pnpm install succeeds without symlink errors
  • TypeScript can correctly resolve symlinked modules

Component Integration

  • @viben/vibe-kanban can correctly import Kanban components
  • @viben/ui Breadcrumb component supports Notion-style navigation
  • Kanban board supports drag-and-drop sorting
  • Styles adapted to Viben Design System
  • Supports dark/light themes

Desktop Application

  • Workspace page displays [Task Board] Tab
  • Can create, edit, delete tasks in workspace
  • Task data persists locally
  • Supports English and Chinese internationalization

Reference Resources


Last Updated: 2026-02-06 Version: 3.0.0 Status: 📝 Architecture Specification (Symlink)