Skip to main content

UI Component Prompts

Coditect Activity Dashboard

Document Version: 1.0
Date: November 27, 2025

This document contains prompts for generating each UI component of the Activity Dashboard. Each prompt is designed to be used with an AI UI generator or as specifications for development.


Table of Contents

  1. Project Summary Bar
  2. Task Kanban Board
  3. Task Card
  4. Activity Feed
  5. Blocker Panel
  6. Work Distribution Chart
  7. Project Selector
  8. Unified Dashboard

1. Project Summary Bar

Component Name

ProjectSummaryBar

UI Prompt

Create a horizontal project summary bar component for a development dashboard.

LAYOUT:
- Horizontal bar spanning full width of container
- Each project displayed as a row with: name, progress bar, metrics, and status indicator
- Maximum 5 projects visible; scrollable if more
- Compact design: each row approximately 48px height

CONTENT PER PROJECT ROW:
- Project name (left-aligned, bold, 14px)
- Progress bar (horizontal, 200px wide):
- Fill color: #22c55e (green) for progress
- Background: #e5e7eb (gray)
- Show percentage text inside bar (right-aligned, white text)
- Task count: "N/M tasks" format (muted gray text)
- Commit count: "X commits" with git icon (small, muted)
- Blocker indicator: Red dot if project has blocked tasks, hidden otherwise

STYLING:
- Background: White (#ffffff)
- Border: 1px solid #e5e7eb
- Border-radius: 8px
- Shadow: subtle (0 1px 3px rgba(0,0,0,0.1))
- Hover state: Light blue background (#f0f9ff)
- Selected state: Blue left border (3px, #3b82f6)

INTERACTIONS:
- Click on row selects project (triggers onProjectSelect callback)
- Hover shows tooltip with full project name if truncated

DATA PROPS:
- projects: Array of { id, name, progress_pct, tasks_completed, tasks_total, commits_count, has_blockers }
- selectedProjectId: string | null
- onProjectSelect: (projectId: string) => void

RESPONSIVE:
- On mobile (<640px): Stack vertically, hide commit count
- Progress bar shrinks to fit available space

Sample Data

const sampleProjects = [
{
id: 'proj-1',
name: 'Auth System',
progress_pct: 58,
tasks_completed: 7,
tasks_total: 12,
commits_count: 3,
has_blockers: true
},
{
id: 'proj-2',
name: 'Payment Gateway',
progress_pct: 40,
tasks_completed: 4,
tasks_total: 10,
commits_count: 1,
has_blockers: false
},
{
id: 'proj-3',
name: 'User Dashboard',
progress_pct: 70,
tasks_completed: 14,
tasks_total: 20,
commits_count: 5,
has_blockers: false
}
];

2. Task Kanban Board

Component Name

KanbanBoard

UI Prompt

Create a Kanban board component for task management with status columns.

LAYOUT:
- Horizontal columns for each status: PENDING, IN PROGRESS, REVIEW, DONE
- BLOCKED tasks shown as special highlighting within IN PROGRESS column (not separate column)
- Equal column widths, responsive to container
- Column headers with status name and task count badge
- Scrollable task list within each column (max-height: 400px)

COLUMN CONFIGURATION:
1. PENDING (Gray header #6b7280)
- Tasks with status='pending' AND checked=false
- Icon: Circle outline

2. IN PROGRESS (Blue header #3b82f6)
- Tasks with status='in_progress'
- Icon: Play circle
- Blocked tasks highlighted with orange border

3. REVIEW (Purple header #8b5cf6)
- Tasks with status='review'
- Icon: Eye

4. DONE (Green header #22c55e)
- Tasks with checked=true
- Icon: Check circle
- Tasks show checkmark overlay

COLUMN STYLING:
- Background: #f9fafb (light gray)
- Header: Colored bar (4px) at top matching status color
- Border-radius: 8px
- Gap between columns: 16px
- Min column width: 240px

TASK CARDS:
- Use TaskCard component (see separate prompt)
- Vertically stacked with 8px gap
- Drag handle visible on hover (future: drag-and-drop)

EMPTY STATE:
- Show dashed border placeholder
- Text: "No tasks" in muted gray
- Smaller text: status-specific hint (e.g., "Drag tasks here to start")

INTERACTIONS:
- Click on task card opens task detail
- Column headers clickable to expand/collapse
- Keyboard navigation: Arrow keys to move between cards

DATA PROPS:
- kanban: { columns: Array<{ status, label, tasks, count }> }
- onTaskClick: (taskId: string) => void
- onTaskMove: (taskId: string, newStatus: string) => void (future)

RESPONSIVE:
- On mobile (<768px): Horizontal scroll for columns
- On tablet (768-1024px): 2 columns visible, scroll for others

Sample Data

const sampleKanban = {
columns: [
{
status: 'pending',
label: 'Pending',
count: 2,
tasks: [
{ id: 't1', title: 'Rate Limiting', checked: false, status: 'pending', complexity: 'M' },
{ id: 't2', title: 'Error Handling', checked: false, status: 'pending', complexity: 'S' }
]
},
{
status: 'in_progress',
label: 'In Progress',
count: 2,
tasks: [
{ id: 't3', title: 'Refresh Token Logic', checked: false, status: 'in_progress', complexity: 'L', progress: 60 },
{ id: 't4', title: 'MFA Setup', checked: false, status: 'blocked', complexity: 'M', blocked_reason: 'Awaiting API spec' }
]
},
{
status: 'review',
label: 'Review',
count: 0,
tasks: []
},
{
status: 'done',
label: 'Done',
count: 3,
tasks: [
{ id: 't5', title: 'JWT Tokens', checked: true, status: 'done', complexity: 'L' },
{ id: 't6', title: 'Auth Schema', checked: true, status: 'done', complexity: 'M' },
{ id: 't7', title: 'Login Form', checked: true, status: 'done', complexity: 'S' }
]
}
]
};

3. Task Card

Component Name

TaskCard

UI Prompt

Create a task card component for display within the Kanban board.

LAYOUT:
- Compact card design (full column width, ~80-120px height)
- Checkbox on left side
- Title and metadata stacked vertically
- Status indicators on right side

CONTENT STRUCTURE:
┌─────────────────────────────────────────┐
│ ☐ Task Title [M] │
│ └ 3 commits • 2 sessions │
│ ████████░░░░░░░░ 60% [BLOCKED] │
└─────────────────────────────────────────┘

ELEMENTS:
1. Checkbox (left side)
- Unchecked: Empty circle outline
- Checked: Filled green circle with white checkmark
- Clickable to toggle completion

2. Title (main content)
- Font: 14px, semi-bold
- Max 2 lines, ellipsis if longer
- Color: #111827 (dark gray)

3. Complexity badge (top right)
- Small pill: S/M/L/XL
- Colors: S=#d1fae5, M=#fef3c7, L=#fed7aa, XL=#fecaca
- Font: 10px, bold

4. Evidence line (below title)
- Format: "N commits • M sessions"
- Only show if > 0
- Font: 12px, muted gray (#6b7280)
- Icons: git-commit, message-circle

5. Progress bar (if in_progress)
- Only show for tasks with progress value
- Thin bar (4px height)
- Percentage text on right

6. Blocked badge (if status='blocked')
- Orange/amber background (#fef3c7)
- Text: "BLOCKED" in orange (#d97706)
- Position: bottom right

STATES:
- Default: White background, subtle shadow
- Hover: Light blue background (#f0f9ff), stronger shadow
- Selected: Blue border (2px, #3b82f6)
- Blocked: Orange left border (3px, #f59e0b)
- Completed: Muted colors, strikethrough on title

INTERACTIONS:
- Click anywhere on card (except checkbox) opens detail view
- Click checkbox toggles completion
- Hover shows full title in tooltip if truncated

DATA PROPS:
- task: { id, title, checked, status, complexity?, progress?, linked_commits_count, linked_sessions_count, blocked_reason? }
- onToggle: (taskId: string, checked: boolean) => void
- onClick: (taskId: string) => void

Sample Data

const sampleTasks = [
{
id: 't1',
title: 'Implement JWT token refresh with automatic retry logic',
checked: false,
status: 'in_progress',
complexity: 'L',
progress: 60,
linked_commits_count: 3,
linked_sessions_count: 2
},
{
id: 't2',
title: 'MFA Setup',
checked: false,
status: 'blocked',
complexity: 'M',
linked_commits_count: 0,
linked_sessions_count: 1,
blocked_reason: 'Awaiting API spec from auth provider'
},
{
id: 't3',
title: 'JWT Tokens',
checked: true,
status: 'done',
complexity: 'L',
linked_commits_count: 5,
linked_sessions_count: 3
}
];

4. Activity Feed

Component Name

ActivityFeed

UI Prompt

Create an activity feed component showing recent highlights (max 5 items).

LAYOUT:
- Vertical list of activity items
- Compact design fitting in sidebar or card
- Header: "Recent Activity" with refresh button
- Fixed height, no scroll (exactly 5 items max)

ACTIVITY ITEM STRUCTURE:
┌─────────────────────────────────────────┐
│ 🔷 ☑ JWT tokens complete │
│ └ 3 commits, 2 sessions │
│ 2 hours ago│
└─────────────────────────────────────────┘

ELEMENTS PER ITEM:
1. Icon (left side, 20x20px)
- task_completed: Green checkmark (✓)
- blocked: Orange warning (⚠)
- commit: Purple git branch icon
- session: Blue chat bubble
- status_change: Gray arrow

2. Title (main text)
- Font: 14px, regular weight
- Prefix based on type:
- task_completed: "☑ {title}"
- blocked: "⚠️ {title}"
- commit: "{sha}: {message}"
- session: "Session: {topic}"

3. Subtitle (secondary text)
- Font: 12px, muted gray
- Examples: "3 commits, 2 sessions", "Awaiting review"
- Only show if present

4. Timestamp (right-aligned)
- Relative format: "2h ago", "Yesterday", "Nov 25"
- Font: 11px, light gray

5. Project indicator (if in portfolio view)
- Small colored dot matching project
- Project name on hover

STYLING:
- Card background: White
- Item separator: 1px border-bottom #f3f4f6
- Item padding: 12px vertical
- Icon column width: 32px
- Hover: Light gray background (#f9fafb)

INTERACTIONS:
- Click on item navigates to source (task, commit, or session)
- Hover shows project name tooltip
- "View all" link at bottom (optional)

EMPTY STATE:
- Show: "No recent activity"
- Subtext: "Activity will appear here as work progresses"
- Icon: Clock with empty state

DATA PROPS:
- activities: Array<{ id, type, title, subtitle?, project_id, project_name, task_id?, timestamp, icon }>
- onActivityClick: (activityId: string, type: string) => void
- maxItems: number (default: 5)

Sample Data

const sampleActivities = [
{
id: 'act-1',
type: 'task_completed',
title: '☑ JWT tokens complete',
subtitle: '3 commits, 2 sessions',
project_id: 'proj-1',
project_name: 'Auth System',
task_id: 't5',
timestamp: '2025-11-27T14:30:00Z',
icon: 'check'
},
{
id: 'act-2',
type: 'commit',
title: 'abc123: Add refresh token logic',
subtitle: '+45/-12 lines',
project_id: 'proj-1',
project_name: 'Auth System',
timestamp: '2025-11-27T13:15:00Z',
icon: 'git'
},
{
id: 'act-3',
type: 'task_completed',
title: '☑ Login form merged',
subtitle: 'PR #42 approved',
project_id: 'proj-1',
project_name: 'Auth System',
task_id: 't7',
timestamp: '2025-11-27T11:00:00Z',
icon: 'check'
},
{
id: 'act-4',
type: 'session',
title: 'Session: Rate limiting design',
subtitle: 'Started 2h ago',
project_id: 'proj-1',
project_name: 'Auth System',
timestamp: '2025-11-27T12:30:00Z',
icon: 'chat'
},
{
id: 'act-5',
type: 'blocked',
title: '⚠️ MFA Setup blocked',
subtitle: 'Awaiting API spec',
project_id: 'proj-1',
project_name: 'Auth System',
task_id: 't4',
timestamp: '2025-11-27T10:00:00Z',
icon: 'alert'
}
];

5. Blocker Panel

Component Name

BlockerPanel

UI Prompt

Create an attention-required panel showing blocked tasks that need intervention.

LAYOUT:
- Card with warning/alert styling
- Header: "⚠️ Attention Required" with count badge
- List of blocked items (expandable if > 3)
- Prominent placement - should catch user's eye

HEADER:
- Icon: Warning triangle (⚠️) in orange/amber
- Title: "Attention Required"
- Count badge: Red circle with number of blockers
- Collapse/expand button if many items

BLOCKER ITEM STRUCTURE:
┌─────────────────────────────────────────┐
│ ⚠️ MFA Setup │
│ Blocked: Awaiting API spec │
│ Project: Auth System │
│ Task List: Backend Tasks │
│ Blocked for: 3 days │
│ [View Task] [Mark Resolved] │
└─────────────────────────────────────────┘

ELEMENTS PER BLOCKER:
1. Task title (bold, 14px)
- Warning icon prefix
- Truncate if too long

2. Blocked reason (primary detail)
- Label: "Blocked:"
- Value: reason text or "No reason specified"
- Font: 13px, dark gray

3. Context info (secondary)
- Project name
- Task list name
- Days blocked (highlighted if > 3 days)

4. Quick actions (buttons)
- "View Task": Opens task detail
- "Mark Resolved": Quick status change
- Small, subtle buttons

STYLING:
- Card background: #fffbeb (warm amber tint)
- Border: 1px solid #fcd34d (amber)
- Header background: #fef3c7
- Item separator: Dashed border
- Warning icon: #f59e0b (orange)
- "Days blocked" badge: Red if > 3 days

STATES:
- Empty state: "No blockers - all clear! ✓" with green styling
- 1-3 items: Show all
- 4+ items: Show first 3, "Show N more" expand button

INTERACTIONS:
- Click item expands to show full details
- "View Task" navigates to task detail
- "Mark Resolved" triggers status change with confirmation

DATA PROPS:
- blockers: Array<{ task_id, task_title, project_id, project_name, task_list_name, blocked_reason?, days_blocked }>
- onViewTask: (taskId: string) => void
- onResolve: (taskId: string) => void

RESPONSIVE:
- Full width on mobile
- Side panel on desktop

Sample Data

const sampleBlockers = [
{
task_id: 't4',
task_title: 'MFA Setup',
project_id: 'proj-1',
project_name: 'Auth System',
task_list_name: 'Backend Tasks',
blocked_reason: 'Awaiting API spec from auth provider',
days_blocked: 3
},
{
task_id: 't12',
task_title: 'Payment Webhook Integration',
project_id: 'proj-2',
project_name: 'Payment Gateway',
task_list_name: 'Integration',
blocked_reason: 'External dependency on Stripe API update',
days_blocked: 1
}
];

6. Work Distribution Chart

Component Name

WorkDistributionChart

UI Prompt

Create a work distribution chart showing effort allocation across projects.

LAYOUT:
- Horizontal bar chart (preferred) or pie/donut chart
- Header with title and time range selector
- Legend showing project names and percentages
- Compact design fitting in dashboard card

CHART TYPE: Horizontal Bars (Recommended)
┌─────────────────────────────────────────┐
│ Work Distribution (This Week) [▼] │
├─────────────────────────────────────────┤
│ Auth System ████████████████ 45% │
│ Payment Gateway █████████░░░░░░░ 25% │
│ User Dashboard ███████░░░░░░░░░ 20% │
│ Documentation ████░░░░░░░░░░░░ 10% │
└─────────────────────────────────────────┘

ELEMENTS:
1. Header
- Title: "Work Distribution"
- Time range dropdown: Day / Week / Month
- Info icon with tooltip explaining calculation

2. Bars (per project)
- Project name (left-aligned, 120px width)
- Bar (flex-grow, colored by project)
- Percentage (right-aligned, 40px)
- Commits badge (optional): "12 commits"

3. Color coding
- Each project has assigned color
- Suggested palette:
- #3b82f6 (blue)
- #22c55e (green)
- #f59e0b (amber)
- #8b5cf6 (purple)
- #ec4899 (pink)

STYLING:
- Card background: White
- Bar background: #e5e7eb (gray)
- Bar height: 24px
- Bar border-radius: 4px
- Gap between bars: 8px
- Hover: Darken bar, show tooltip with details

TOOLTIP ON HOVER:
"Auth System: 45%
- 12 commits
- 8 sessions
- 3 tasks completed"

INTERACTIONS:
- Hover shows detailed breakdown tooltip
- Click on bar filters dashboard to that project
- Time range selector updates chart data

DATA PROPS:
- distribution: Array<{ project_id, project_name, percentage, commit_count, session_count, tasks_completed, color }>
- timeRange: 'day' | 'week' | 'month'
- onTimeRangeChange: (range: string) => void
- onProjectClick: (projectId: string) => void

Sample Data

const sampleDistribution = [
{
project_id: 'proj-1',
project_name: 'Auth System',
percentage: 45,
commit_count: 12,
session_count: 8,
tasks_completed: 3,
color: '#3b82f6'
},
{
project_id: 'proj-2',
project_name: 'Payment Gateway',
percentage: 25,
commit_count: 4,
session_count: 5,
tasks_completed: 1,
color: '#22c55e'
},
{
project_id: 'proj-3',
project_name: 'User Dashboard',
percentage: 20,
commit_count: 6,
session_count: 10,
tasks_completed: 2,
color: '#f59e0b'
},
{
project_id: 'proj-4',
project_name: 'Documentation',
percentage: 10,
commit_count: 2,
session_count: 3,
tasks_completed: 1,
color: '#8b5cf6'
}
];

7. Project Selector

Component Name

ProjectSelector

UI Prompt

Create a project selector dropdown for filtering the dashboard view.

LAYOUT:
- Dropdown button showing current selection
- Dropdown menu with project list
- "All Projects" option at top
- Search/filter for many projects

BUTTON (Collapsed State):
┌─────────────────────────────────────────┐
│ 📁 Auth System ▼ │
└─────────────────────────────────────────┘

- Or for all projects:
┌─────────────────────────────────────────┐
│ 📊 All Projects (3) ▼ │
└─────────────────────────────────────────┘

DROPDOWN MENU (Expanded):
┌─────────────────────────────────────────┐
│ 🔍 Search projects... │
├─────────────────────────────────────────┤
│ ✓ All Projects │
├─────────────────────────────────────────┤
│ 📁 Auth System 58% ████░░ │
│ 📁 Payment Gateway 40% ███░░░ │
│ 📁 User Dashboard 70% █████░ │
└─────────────────────────────────────────┘

ELEMENTS:
1. Selected indicator
- Icon: Folder for single project, chart for all
- Project name or "All Projects (N)"
- Dropdown arrow

2. Search input (if > 5 projects)
- Placeholder: "Search projects..."
- Filter list as user types

3. "All Projects" option
- Always first in list
- Shows total project count
- Checkmark if selected

4. Project items
- Folder icon
- Project name
- Mini progress bar (40px wide)
- Percentage text
- Checkmark if selected

STYLING:
- Button: White background, border, rounded
- Dropdown: White, shadow, max-height 300px (scroll)
- Selected item: Light blue background
- Hover: Light gray background
- Progress bars: Match project colors

INTERACTIONS:
- Click button toggles dropdown
- Click item selects and closes
- Type to filter (if search enabled)
- Keyboard: Arrow keys navigate, Enter selects
- Click outside closes dropdown

DATA PROPS:
- projects: Array<{ id, name, progress_pct, color }>
- selectedProjectId: string | null (null = all projects)
- onSelect: (projectId: string | null) => void

RESPONSIVE:
- Full width on mobile
- Fixed width (240px) on desktop

8. Unified Dashboard

Component Name

ActivityDashboard

UI Prompt

Create the unified Activity Dashboard that combines all components into a cohesive, non-scrolling view.

OVERALL LAYOUT:
┌─────────────────────────────────────────────────────────────────────────────┐
│ CODITECT [All Projects ▼] [⚙ Settings] │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─ PROJECT SUMMARY BAR ────────────────────────────────────────────────┐ │
│ │ [ProjectSummaryBar component - all projects with progress] │ │
│ └──────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─ TASK JOURNEY ─────────────────────────────────────────────────────────┐│
│ │ ││
│ │ [KanbanBoard component - PENDING | IN PROGRESS | REVIEW | DONE] ││
│ │ ││
│ └─────────────────────────────────────────────────────────────────────────┘│
│ │
│ ┌─ RECENT ACTIVITY ──────────────┐ ┌─ ATTENTION REQUIRED ──────────────┐ │
│ │ │ │ │ │
│ │ [ActivityFeed - 5 items] │ │ [BlockerPanel - exceptions] │ │
│ │ │ │ │ │
│ └────────────────────────────────┘ └───────────────────────────────────┘ │
│ │
│ ┌─ WORK DISTRIBUTION ──────────────────────────────────────────────────┐ │
│ │ [WorkDistributionChart - horizontal bars by project] │ │
│ └──────────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────┘

GRID STRUCTURE:
- Use CSS Grid for responsive layout
- Desktop (>1024px):
- Header: full width
- Project Summary: full width
- Kanban: full width
- Activity + Blockers: 2 columns (60% / 40%)
- Work Distribution: full width

- Tablet (768-1024px):
- Same as desktop but narrower
- Kanban horizontally scrollable

- Mobile (<768px):
- Single column stack
- Kanban columns horizontal scroll
- Activity and Blockers stacked

HEADER:
- Logo/brand: "CODITECT" (left)
- Project selector dropdown (center-right)
- Settings gear icon (right)
- Height: 60px
- Background: White with bottom border

SECTION STYLING:
- Each section has:
- Title bar with label
- Card container (white, rounded, shadow)
- Consistent padding (16px)
- Margin between sections (16px)

COLOR PALETTE:
- Background: #f3f4f6 (light gray)
- Cards: #ffffff (white)
- Primary: #3b82f6 (blue)
- Success: #22c55e (green)
- Warning: #f59e0b (amber)
- Error: #ef4444 (red)
- Text primary: #111827
- Text secondary: #6b7280
- Border: #e5e7eb

TYPOGRAPHY:
- Font family: Inter, system-ui, sans-serif
- Page title: 24px, bold
- Section titles: 16px, semi-bold
- Body text: 14px, regular
- Small text: 12px, regular

KEY CONSTRAINTS:
1. NO SCROLLING on primary view (800px viewport height)
2. Maximum 5 activity items
3. Blockers always visible if any exist
4. Progress visible at a glance
5. Exception-based display (hide uniform data)

STATE MANAGEMENT:
- Dashboard-level state:
- selectedProjectId: string | null
- timeRange: 'day' | 'week' | 'month'
- isLoading: boolean
- error: string | null

- Data from API:
- portfolioSummary: ProjectSummary[]
- kanban: KanbanBoard
- recentActivity: ActivityHighlight[]
- blockedTasks: BlockedTask[]
- workDistribution: WorkDistribution[]

INTERACTIONS:
1. Project selection: Updates Kanban to show selected project
2. Time range: Updates work distribution
3. Task click: Opens task detail modal/drawer
4. Activity click: Navigates to relevant item
5. Blocker actions: Quick resolve or view task

LOADING STATES:
- Skeleton loaders for each section
- Staggered animation (top to bottom)
- Subtle pulse effect

ERROR STATES:
- Error banner at top of dashboard
- Retry button
- Graceful degradation (show cached data if available)

REAL-TIME UPDATES:
- WebSocket connection for live updates
- Subtle animation when data changes
- Toast notifications for significant events

DATA FLOW:
1. On mount: Fetch dashboard data
2. On project select: Refetch with filter
3. On WebSocket event: Update relevant sections
4. Periodic refresh: Every 60 seconds (background)

Component Composition

// ActivityDashboard.tsx
import React from 'react';
import { ProjectSummaryBar } from './ProjectSummaryBar';
import { KanbanBoard } from './KanbanBoard';
import { ActivityFeed } from './ActivityFeed';
import { BlockerPanel } from './BlockerPanel';
import { WorkDistributionChart } from './WorkDistributionChart';
import { ProjectSelector } from './ProjectSelector';
import { useDashboardStore } from '../stores/dashboardStore';
import { useDashboardWebSocket } from '../hooks/useDashboardWebSocket';

export function ActivityDashboard() {
const {
portfolioSummary,
selectedProjectId,
kanban,
recentActivity,
blockedTasks,
workDistribution,
isLoading,
selectProject,
timeRange,
setTimeRange
} = useDashboardStore();

// Connect WebSocket for real-time updates
useDashboardWebSocket(portfolioSummary.map(p => p.project_id));

return (
<div className="dashboard-container">
{/* Header */}
<header className="dashboard-header">
<h1>CODITECT</h1>
<ProjectSelector
projects={portfolioSummary}
selectedProjectId={selectedProjectId}
onSelect={selectProject}
/>
<button className="settings-btn"></button>
</header>

{/* Main Content */}
<main className="dashboard-main">
{/* Project Summary */}
<section className="section-summary">
<ProjectSummaryBar
projects={portfolioSummary}
selectedProjectId={selectedProjectId}
onProjectSelect={selectProject}
/>
</section>

{/* Kanban Board */}
<section className="section-kanban">
<h2>Task Journey</h2>
<KanbanBoard
kanban={kanban}
onTaskClick={handleTaskClick}
/>
</section>

{/* Activity + Blockers Row */}
<div className="section-row">
<section className="section-activity">
<h2>Recent Activity</h2>
<ActivityFeed
activities={recentActivity}
onActivityClick={handleActivityClick}
/>
</section>

<section className="section-blockers">
<BlockerPanel
blockers={blockedTasks}
onViewTask={handleViewTask}
onResolve={handleResolveBlocker}
/>
</section>
</div>

{/* Work Distribution */}
<section className="section-distribution">
<WorkDistributionChart
distribution={workDistribution}
timeRange={timeRange}
onTimeRangeChange={setTimeRange}
onProjectClick={selectProject}
/>
</section>
</main>
</div>
);
}

CSS Grid Layout

.dashboard-container {
min-height: 100vh;
max-height: 100vh;
overflow: hidden;
background: #f3f4f6;
display: flex;
flex-direction: column;
}

.dashboard-header {
height: 60px;
background: white;
border-bottom: 1px solid #e5e7eb;
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 24px;
}

.dashboard-main {
flex: 1;
padding: 16px 24px;
display: grid;
grid-template-rows: auto 1fr auto auto;
gap: 16px;
overflow: hidden;
}

.section-summary {
/* Full width */
}

.section-kanban {
min-height: 0; /* Allow shrinking */
overflow: hidden;
}

.section-row {
display: grid;
grid-template-columns: 3fr 2fr;
gap: 16px;
}

.section-distribution {
/* Full width */
}

/* Responsive */
@media (max-width: 768px) {
.section-row {
grid-template-columns: 1fr;
}

.dashboard-main {
overflow-y: auto;
}
}

Usage Notes

For AI UI Generators

When using these prompts with AI UI generation tools (v0, Bolt, etc.):

  1. Provide one component at a time - Start with atomic components (TaskCard), then build up
  2. Include sample data - Paste the sample data with the prompt
  3. Specify framework - Add "Using React with Tailwind CSS" or your preferred stack
  4. Iterate - Refine styling and interactions in follow-up prompts

For Development Teams

  1. Component Library - Build these as a shared component library
  2. Storybook - Create stories for each component with various states
  3. Testing - Use sample data for unit and integration tests
  4. Accessibility - Ensure ARIA labels, keyboard navigation, focus management

Customization Points

  • Color palette can be theme-customized
  • Time ranges can be extended (quarter, year)
  • Activity types can be added/removed
  • Chart types can be swapped (bar ↔ pie)

Document History

VersionDateAuthorChanges
1.02025-11-27Design TeamInitial 8 component prompts