onClick(task.id)}
className={`
card-glow rounded-xl cursor-grab active:cursor-grabbing
bg-[var(--color-surface)] border transition-all duration-200
hover:-translate-y-0.5
${isActive
? 'border-[color:var(--color-status-active)]/30 animate-pulse-glow'
: 'border-[var(--color-border)] hover:border-[var(--color-border-hover)]'
}
${isDragging ? 'shadow-xl shadow-black/40' : ''}
`}
>
{/* Title row */}
{isActive && (
)}
{task.title}
{/* Meta row */}
{task.category && (
{task.category}
)}
{elapsed && (
{elapsed}
)}
{totalSubTasks > 0 && (
{Array.from({ length: totalSubTasks }, (_, i) => (
))}
{completedSubTasks}/{totalSubTasks}
)}
)
}
```
**Step 2: Rewrite `KanbanColumn.tsx`**
```tsx
import { useState } from 'react'
import { useDroppable } from '@dnd-kit/core'
import { SortableContext, verticalListSortingStrategy } from '@dnd-kit/sortable'
import { Plus } from 'lucide-react'
import { WorkTaskStatus, type WorkTask } from '../types/index.ts'
import TaskCard from './TaskCard.tsx'
import CreateTaskForm from './CreateTaskForm.tsx'
interface KanbanColumnProps {
status: string
label: string
color: string
tasks: WorkTask[]
onTaskClick: (id: number) => void
onAddTask?: () => void
}
export default function KanbanColumn({
status,
label,
color,
tasks,
onTaskClick,
}: KanbanColumnProps) {
const { setNodeRef, isOver } = useDroppable({ id: `column-${status}` })
const [showForm, setShowForm] = useState(false)
const taskIds = tasks.map((t) => t.id)
return (
```
to:
```tsx
```
**Step 4: Commit**
```bash
git add -A
git commit -m "feat(ui): redesign kanban columns and task cards — borderless columns, glow cards, live dots"
```
---
### Task 5: Redesign the task detail panel
**Files:**
- Rewrite: `TaskTracker.Web/src/components/TaskDetailPanel.tsx`
**Step 1: Rewrite `TaskDetailPanel.tsx`**
This is a large file. The key changes are:
- Width from 400px to 480px
- Add backdrop blur and frosted glass effect
- Use `framer-motion` for animation instead of manual CSS translate
- Larger, bolder title
- Status as small pill, not big badge
- Sections separated by faint rules, not uppercase labeled boxes
- Action buttons remain sticky at bottom
- Better visual hierarchy throughout
Replace the entire component. Key structural changes to make:
1. Replace the overlay `div` with a `motion.div` that has `backdrop-blur-sm`
2. Replace the panel `div` with a `motion.div` using `initial={{ x: '100%' }}` and `animate={{ x: 0 }}` with a spring transition
3. Change panel width to `w-[480px]`
4. Change panel background to `bg-[var(--color-elevated)]/95 backdrop-blur-xl`
5. Replace section headers from `
` to ``
6. Replace all hardcoded colors with CSS variable references
7. Status badge: small, muted pill style
8. Action buttons: use gradient for primary action, outline for secondary
The full rewrite is needed because the component is 449 lines with extensive inline styles. The implementer should rewrite it with the new design system colors and the framer-motion animation, keeping all the same editing logic (inline title/desc/category/estimate editing, save handlers, escape key handling, subtask/notes integration).
**Step 2: Commit**
```bash
git add -A
git commit -m "feat(ui): redesign detail panel — frosted glass, spring animation, refined hierarchy"
```
---
### Task 6: Restyle the filter bar and create task form
**Files:**
- Modify: `TaskTracker.Web/src/components/FilterBar.tsx`
- Modify: `TaskTracker.Web/src/components/CreateTaskForm.tsx`
**Step 1: Update FilterBar colors**
Replace all hardcoded color references in `FilterBar.tsx`:
- `bg-[#2a2d37]` → `bg-white/[0.06]`
- `text-[#94a3b8]` → `text-[var(--color-text-secondary)]`
- `bg-indigo-500` → `bg-[var(--color-accent)]`
- Change chip border radius from `rounded-full` to `rounded-md`
- Make chips smaller: `text-[10px]` instead of `text-[11px]`, `px-2 py-0.5` padding
**Step 2: Update CreateTaskForm colors**
Replace all hardcoded colors in `CreateTaskForm.tsx`:
- `bg-[#0f1117]` → `bg-[var(--color-page)]`
- `bg-[#1a1d27]` → `bg-[var(--color-surface)]`
- `border-white/10` → `border-[var(--color-border)]`
- `text-[#64748b]` → `text-[var(--color-text-secondary)]`
- `focus:ring-indigo-500/60` → `focus:ring-[var(--color-accent)]/60`
- `bg-indigo-600` → `bg-gradient-to-r from-[var(--color-accent)] to-[var(--color-accent-end)]`
**Step 3: Commit**
```bash
git add -A
git commit -m "feat(ui): restyle filter bar and create task form with design tokens"
```
---
### Task 7: Restyle the Board page
**Files:**
- Modify: `TaskTracker.Web/src/pages/Board.tsx`
**Step 1: Update Board.tsx**
The Board page just orchestrates components. Ensure it uses the new color tokens for any wrapper elements. The main change is removing `SearchBar` imports (already deleted) and ensuring the layout passes through cleanly with the new top-nav layout.
No major structural changes needed — the components it renders (FilterBar, KanbanBoard, TaskDetailPanel) are already restyled.
**Step 2: Commit**
```bash
git add -A
git commit -m "feat(ui): update Board page to match new design system"
```
---
### Task 8: Redesign the Analytics page
**Files:**
- Modify: `TaskTracker.Web/src/pages/Analytics.tsx`
- Modify: `TaskTracker.Web/src/components/analytics/Timeline.tsx`
- Modify: `TaskTracker.Web/src/components/analytics/CategoryBreakdown.tsx`
- Modify: `TaskTracker.Web/src/components/analytics/ActivityFeed.tsx`
**Step 1: Add stat cards to Analytics page header**
Add a row of 3 stat cards above the charts:
- "Open Tasks" — count of non-completed tasks
- "Active Time" — total elapsed time of active+completed tasks
- "Top Category" — most common category
Each card: small, `bg-[var(--color-surface)]` with `border-[var(--color-border)]`, subtle rounded corners.
**Step 2: Restyle section containers**
Change section container backgrounds from `bg-[#161922]` to `bg-[var(--color-surface)]` and borders from `border-white/5` to `border-[var(--color-border)]`.
Replace section headers from `text-[#94a3b8] uppercase tracking-wider` to `text-[11px] font-medium text-[var(--color-text-secondary)] uppercase tracking-wider`.
**Step 3: Update chart colors in Timeline and CategoryBreakdown**
Use accent gradient colors for chart fills. Update any hardcoded colors to reference the design system.
**Step 4: Restyle ActivityFeed with timeline connector**
Add a vertical line connecting activity dots (like a git log):
- Left side: colored dots with a thin vertical line connecting them
- Right side: relative timestamps
- Each entry: task title, event type, timestamp
**Step 5: Commit**
```bash
git add -A
git commit -m "feat(ui): redesign analytics page — stat cards, styled charts, git-log activity feed"
```
---
### Task 9: Redesign the Mappings page
**Files:**
- Modify: `TaskTracker.Web/src/pages/Mappings.tsx`
**Step 1: Update all hardcoded colors to design tokens**
Replace throughout:
- `bg-[#1a1d27]` → `bg-[var(--color-surface)]`
- `bg-[#1e2230]` → `bg-white/[0.04]`
- `bg-[#161922]` → `bg-[var(--color-surface)]`
- `bg-[#0f1117]` → `bg-[var(--color-page)]`
- `text-[#94a3b8]` → `text-[var(--color-text-secondary)]`
- `border-white/5` → `border-[var(--color-border)]`
- `border-white/10` → `border-[var(--color-border)]`
- `bg-indigo-600` → `bg-gradient-to-r from-[var(--color-accent)] to-[var(--color-accent-end)]`
**Step 2: Improve table row styling**
- Remove heavy border dividers, use subtle `border-b border-[var(--color-border)]`
- Add `hover:bg-white/[0.03]` for rows
- Make the header row blend in more: `text-[10px] uppercase tracking-wider`
**Step 3: Improve empty state**
Add a muted icon (Link icon from Lucide, larger at 40px, with `text-[var(--color-text-tertiary)]`) above the "No mappings" text.
**Step 4: Commit**
```bash
git add -A
git commit -m "feat(ui): redesign mappings page with design tokens and refined table"
```
---
### Task 10: Update SubtaskList and NotesList styling
**Files:**
- Modify: `TaskTracker.Web/src/components/SubtaskList.tsx`
- Modify: `TaskTracker.Web/src/components/NotesList.tsx`
**Step 1: Update SubtaskList colors**
Replace all hardcoded colors with CSS variable references. The structure stays the same — just update colors to match the new design system.
**Step 2: Update NotesList colors**
Same treatment. Also make the note type badges use muted pill styling consistent with the rest of the UI.
**Step 3: Commit**
```bash
git add -A
git commit -m "feat(ui): restyle subtask list and notes list with design tokens"
```
---
### Task 11: Visual QA and polish pass
**Files:**
- Any files needing tweaks
**Step 1: Run the dev server**
Run: `cd TaskTracker.Web && npm run dev`
**Step 2: Visual QA checklist**
Open the browser and verify:
- [ ] Top nav renders correctly, active tab highlights
- [ ] Cmd+K opens search modal with backdrop blur
- [ ] Board columns show without boxes, colored underlines work
- [ ] Task cards have gradient glow on hover
- [ ] Active task shows pulsing blue dot
- [ ] Drag-and-drop still works correctly
- [ ] Detail panel slides in with spring animation and frosted glass
- [ ] Filter chips styled correctly
- [ ] Create task form matches design system
- [ ] Analytics page stat cards render
- [ ] Activity feed has timeline connector
- [ ] Mappings table rows are clean
- [ ] Background noise texture is visible but subtle
- [ ] No remnant old color values (cyan rings, old backgrounds)
**Step 3: Fix any issues found during QA**
**Step 4: Commit**
```bash
git add -A
git commit -m "fix(ui): visual QA polish — fix alignment, spacing, and color consistency"
```
---
### Task 12: Build verification
**Step 1: Run the production build**
Run: `cd TaskTracker.Web && npm run build`
Ensure no TypeScript errors or build failures.
**Step 2: If errors, fix them and re-build**
**Step 3: Final commit if any fixes were needed**
```bash
git add -A
git commit -m "fix: resolve build errors from UI redesign"
```