Skip to main content

Kanban Phase 4 - Advanced Customization and Collaboration

Advanced features based on vibe-kanban, adapted for Viben Design System


Overview

AttributeValue
Module IDM-KANBAN-PHASE4
Dependencieskanban-features (Phase 1-3)
PriorityP1
Status📝 Specification

Feature List

P0 - Board Customization

#FeatureDescriptionvibe-kanban Reference
F24Board Display SettingsColumn reordering, colors, visibilityKanbanDisplaySettingsContainer
F25Column Configuration PanelColumn name editing, color selection, WIP limitsColumnSettings
F26User Preference PersistenceSave collapsed state, sort preferenceslocalStorage/preferences

P1 - Collaboration Features

#FeatureDescriptionvibe-kanban Reference
F27Comment SystemRich text comments, emoji reactionsIssueCommentsSection
F28Activity TimelineTask change history recordsActivityFeed
F29Notification SystemComments, status change notificationsNotificationTypes

P2 - Enhanced Features

#FeatureDescriptionvibe-kanban Reference
F30Advanced List ViewCollapsible groups, dedicated drag handlesIssueListView
F31View Navigation TabsDynamic tabs, URL deep linkingViewNavTabs
F32Drag EnhancementPortal preview, multi-select dragDnD enhancements
F33Board TemplatesPreset templates, quick creationBoardTemplates

F24: Board Display Settings

Feature Description

Provide visual interface to configure board column display and order.

Component Design

BoardSettingsDialog - Board settings dialog:

interface BoardSettingsDialogProps {
open: boolean;
onOpenChange: (open: boolean) => void;
columns: ColumnConfig[];
onColumnsChange: (columns: ColumnConfig[]) => void;
}

interface ColumnConfig {
id: string;
name: string;
color: string;
visible: boolean;
wipLimit?: number;
order: number;
}

Interaction Design

  • Drag to reorder columns
  • Click color block to select color
  • Toggle visibility switch
  • Edit column name (double-click or pencil icon)

F25: Column Configuration Panel

Component Design

ColumnSettingsPanel:

interface ColumnSettingsPanelProps {
column: ColumnConfig;
onChange: (column: ColumnConfig) => void;
onDelete?: () => void;
canDelete?: boolean;
}

// Color presets
const COLUMN_COLORS = [
{ name: "Gray", value: "hsl(var(--muted))" },
{ name: "Blue", value: "hsl(var(--primary))" },
{ name: "Yellow", value: "hsl(var(--warning))" },
{ name: "Green", value: "hsl(var(--success))" },
{ name: "Red", value: "hsl(var(--destructive))" },
{ name: "Purple", value: "hsl(280 60% 50%)" },
{ name: "Orange", value: "hsl(25 90% 50%)" },
{ name: "Cyan", value: "hsl(180 60% 45%)" },
];

F26: User Preference Persistence

Hook Design

useKanbanPreferences:

interface KanbanPreferences {
// View preferences
viewMode: ViewMode;
sortMode: SortMode;
sortDirection: SortDirection;

// Column state
collapsedColumns: string[];
columnOrder: string[];
hiddenColumns: string[];

// Panel state
detailPanelWidth: number;
showStats: boolean;

// Filters
savedFilters: KanbanFilter[];
}

interface UseKanbanPreferencesOptions {
projectId: string;
storageKey?: string;
}

function useKanbanPreferences(options: UseKanbanPreferencesOptions): {
preferences: KanbanPreferences;
updatePreference: <K extends keyof KanbanPreferences>(
key: K,
value: KanbanPreferences[K]
) => void;
resetPreferences: () => void;
};

F27: Comment System

Feature Description

  • Rich text comment input
  • Emoji reactions (thumbs up, heart, celebration, etc.)
  • Comment edit/delete
  • Relative time display

Component Design

CommentList + CommentItem + CommentInput:

interface Comment {
id: string;
content: string;
author: {
id: string;
name: string;
avatar?: string;
};
createdAt: string;
updatedAt?: string;
reactions: CommentReaction[];
}

interface CommentReaction {
emoji: string;
users: { id: string; name: string }[];
count: number;
}

interface CommentListProps {
taskId: string;
comments: Comment[];
onAddComment: (content: string) => void;
onEditComment: (id: string, content: string) => void;
onDeleteComment: (id: string) => void;
onToggleReaction: (commentId: string, emoji: string) => void;
}

Emoji Reaction Presets

const REACTION_EMOJIS = ["👍", "👎", "❤️", "🎉", "😄", "🤔", "👀", "🚀"];

F28: Activity Timeline

Feature Description

Record all change history for tasks.

Component Design

ActivityFeed:

interface ActivityEvent {
id: string;
type: ActivityType;
actor: { id: string; name: string; avatar?: string };
timestamp: string;
data: Record<string, unknown>;
}

type ActivityType =
| "created"
| "status_changed"
| "priority_changed"
| "assignee_changed"
| "title_changed"
| "description_changed"
| "tag_added"
| "tag_removed"
| "due_date_changed"
| "comment_added";

interface ActivityFeedProps {
events: ActivityEvent[];
className?: string;
}

F30: Advanced List View

Feature Description

  • Group by status, collapsible
  • Dedicated drag handles
  • Relative time format

Component Design

GroupedListView:

interface ListGroup {
id: string;
name: string;
color: string;
count: number;
collapsed?: boolean;
}

interface GroupedListViewProps<T> {
items: T[];
groups: ListGroup[];
groupBy: (item: T) => string;
collapsedGroups: Set<string>;
onToggleGroup: (groupId: string) => void;
renderItem: (item: T) => React.ReactNode;
onDragEnd: (event: DragEndEvent) => void;
}

F32: Drag Enhancement

Feature Description

  • Portal drag preview (prevent clipping)
  • Multi-select drag support
  • Animation optimization

Hook Design

useDragPreview:

interface UseDragPreviewOptions {
enabled?: boolean;
renderPreview: (ids: string[]) => React.ReactNode;
}

function useDragPreview(options: UseDragPreviewOptions): {
DragOverlay: React.FC;
isDragging: boolean;
draggedIds: string[];
};

Implementation Order

Phase 4A (Parallel)

Task IDFeatureDependencies
T24Board Display SettingsNone
T25Column Configuration PanelNone
T26User Preference PersistenceNone
T27Comment System TypesNone

Phase 4B (Parallel, depends on 4A)

Task IDFeatureDependencies
T28Comment Component ImplementationT27
T29Activity TimelineNone
T30Advanced List ViewNone
T31Drag EnhancementNone

Phase 4C (depends on 4B)

Task IDFeatureDependencies
T32Desktop IntegrationT24-T31

Acceptance Criteria

F24: Board Display Settings

  • Can drag to reorder columns
  • Color picker works correctly
  • Visibility toggle takes effect
  • Settings persist after refresh

F25: Column Configuration Panel

  • Double-click to edit column name
  • Color preset selection
  • WIP limit configurable
  • Warning when deleting column with tasks

F26: User Preference Persistence

  • Collapsed state persists
  • Sort preferences persist
  • Persists across sessions

F27: Comment System

  • Can add comments
  • Can add emoji reactions
  • Can edit/delete own comments
  • Shows relative time

Last Updated: 2026-02-07 Version: 1.0.0 Status: 📝 Specification