Remove 15 completed/superseded plan documents. Add analytics improvements reference and visual QA design migration notes. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
14 KiB
Visual QA & Design System Migration — Implementation Plan
For Claude: REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.
Goal: Fix the collapsed sidebar scaling issue and migrate all pages from old monochrome design patterns to the new purple gradient accent design system.
Architecture: Systematic find-and-replace across 15 frontend files, replacing old monochrome CSS utilities (glass-card, text-white/N, border-white/N, bg-white text-black buttons) with new design tokens (bg-card border-border, text-foreground, border-border, bg-gradient-brand). Sidebar collapsed state gets a layout fix.
Tech Stack: React, Tailwind CSS v3, Lucide React
Pattern Replacement Reference
Every task below uses this table. Keep it open.
| OLD Pattern | NEW Pattern | Context |
|---|---|---|
glass-card rounded-2xl |
bg-card border border-border rounded-xl |
Card containers |
glass-card rounded-xl |
bg-card border border-border rounded-xl |
Card containers |
bg-black or bg-black/50 |
bg-card |
Input/section backgrounds |
text-white (on headings) |
text-foreground + add font-heading |
Primary heading text |
text-white (on body text) |
text-foreground |
Primary body text |
text-white/70 |
text-muted-foreground |
Secondary text |
text-white/40 |
text-muted-foreground |
Muted text |
text-white/60 |
text-muted-foreground |
Button secondary text |
border-white/10 |
border-border |
Standard borders |
border-white/[0.06] |
border-border |
Subtle borders |
border-white/20 |
border-border |
Toggle/active borders |
bg-white/10 |
bg-accent |
Hover/active backgrounds |
hover:bg-white/10 |
hover:bg-accent |
Hover states |
hover:text-white |
hover:text-foreground |
Hover text |
bg-white text-black hover:bg-white/90 |
bg-gradient-brand text-white shadow-lg shadow-primary/20 hover:opacity-90 |
Primary buttons |
bg-white px-N py-N text-black ... hover:bg-white/90 |
bg-gradient-brand text-white shadow-lg shadow-primary/20 hover:opacity-90 |
Primary buttons (multi-class) |
border-white/10 ... text-white/60 ... hover:bg-white/10 |
border-border text-muted-foreground hover:bg-accent hover:text-foreground |
Secondary buttons |
focus:border-white/30 focus:ring-white/20 |
focus:border-primary focus:ring-1 focus:ring-primary/20 |
Input focus |
placeholder:text-white/40 |
placeholder:text-muted-foreground |
Input placeholders |
bg-white/10 px-2.5 py-0.5 (badges) |
bg-accent rounded-full px-2 text-[0.6875rem] font-label |
Badge/chip styling |
Task 1: Fix Collapsed Sidebar Layout
Files:
- Modify:
frontend/src/components/layout/Sidebar.tsx - Modify:
frontend/src/index.css
Problem: When the sidebar is collapsed, the navigation divider doesn't span the full height (top to bottom), and the expand icon is extremely small — suggests the entire collapsed column isn't sizing correctly.
Step 1: Fix collapsed sidebar to be a proper full-height flex column
In Sidebar.tsx, the collapsed state renders a <div className="px-2 py-3 space-y-1"> with nav icons but doesn't fill the column. The <nav> wrapper has flex flex-col but the collapsed branch lacks structure to fill it.
Replace the collapsed branch (lines 115-127) to add full-height structure with proper icon sizing and dividers:
{sidebarCollapsed ? (
<>
{/* Collapsed: icon-only nav */}
<div className="flex flex-col items-center px-1.5 py-3 space-y-1">
<NavItem href="/" icon={LayoutGrid} label="Dashboard" collapsed />
<NavItem href="/trees" icon={Box} label="All Flows" matchPaths={['/trees', '/flows']} collapsed />
<NavItem href="/my-trees" icon={PenLine} label="Flow Editor" collapsed />
<NavItem href="/sessions" icon={Clock} label="Sessions" badge={activeSessionCount || undefined} collapsed />
<NavItem href="/shares" icon={FileText} label="Exports" collapsed />
<NavItem href="/step-library" icon={Bookmark} label="Step Library" collapsed />
</div>
</>
) : (
In the footer section (lines 173-189), ensure the toggle button has adequate sizing in collapsed mode:
{/* Footer */}
<div className={cn(
'border-t border-[hsl(var(--border-subtle))]',
sidebarCollapsed ? 'px-1.5 py-2' : 'px-3 py-2 space-y-0.5'
)}>
{!sidebarCollapsed && (
<>
<NavItem href="/account" icon={Users} label="Team" />
<NavItem href="/account" icon={Settings} label="Settings" />
</>
)}
<button
onClick={toggleSidebar}
className={cn(
'flex items-center justify-center rounded-lg text-muted-foreground hover:bg-[hsl(var(--sidebar-hover))] hover:text-foreground transition-colors',
sidebarCollapsed ? 'w-full p-2.5' : 'w-full gap-3 px-3 py-2 text-[0.8125rem] font-medium'
)}
title={sidebarCollapsed ? 'Expand sidebar' : 'Collapse sidebar'}
>
{sidebarCollapsed ? <PanelLeftOpen size={20} /> : <PanelLeftClose size={18} />}
{!sidebarCollapsed && <span>Collapse</span>}
</button>
</div>
Step 2: Verify build passes
Run: cd frontend && npm run build
Expected: Build succeeds with no errors.
Step 3: Commit
git add frontend/src/components/layout/Sidebar.tsx
git commit -m "fix: collapsed sidebar layout scaling and toggle button size"
Task 2: Migrate Auth Pages (Login, Register, ChangePassword, ResetPassword)
Files:
- Modify:
frontend/src/pages/LoginPage.tsx - Modify:
frontend/src/pages/RegisterPage.tsx - Modify:
frontend/src/pages/ChangePasswordPage.tsx - Modify:
frontend/src/pages/ResetPasswordPage.tsx
Step 1: Apply replacements to all four files
Each file has the same three patterns:
glass-card rounded-2xl→bg-card border border-border rounded-xlborder-white/10 bg-black/50→border-border bg-cardbg-white ... text-black ... hover:bg-white/90→bg-gradient-brand text-white shadow-lg shadow-primary/20 hover:opacity-90
Also check for:
- Missing
font-headingon page titles text-white→text-foreground- Input focus states:
focus:border-white/30 focus:ring-white/20→focus:border-primary focus:ring-1 focus:ring-primary/20 - Placeholder colors:
placeholder:text-white/40→placeholder:text-muted-foreground
Step 2: Verify build passes
Run: cd frontend && npm run build
Step 3: Commit
git add frontend/src/pages/LoginPage.tsx frontend/src/pages/RegisterPage.tsx frontend/src/pages/ChangePasswordPage.tsx frontend/src/pages/ResetPasswordPage.tsx
git commit -m "refactor: migrate auth pages to new design system"
Task 3: Migrate TreeLibraryPage
Files:
- Modify:
frontend/src/pages/TreeLibraryPage.tsx
Step 1: Apply replacements
This file has extensive old patterns:
- Primary buttons:
bg-white ... text-black hover:bg-white/90→bg-gradient-brand text-white shadow-lg shadow-primary/20 hover:opacity-90 - Cards:
glass-card→bg-card border border-border rounded-xl - Inputs:
border-white/10 bg-black/50 text-white placeholder:text-white/40→border-border bg-card text-foreground placeholder:text-muted-foreground - Focus states:
focus:border-white/30 focus:ring-white/20→focus:border-primary focus:ring-1 focus:ring-primary/20 - Text:
text-white→text-foreground,text-white/40→text-muted-foreground - Borders:
border-white/10→border-border - Badges:
bg-white/10→bg-accent - Select dropdowns:
border-white/10 bg-black/50→border-border bg-card - Add
font-headingto page title heading
Step 2: Verify build passes
Run: cd frontend && npm run build
Step 3: Commit
git add frontend/src/pages/TreeLibraryPage.tsx
git commit -m "refactor: migrate TreeLibraryPage to new design system"
Task 4: Migrate SessionHistoryPage and SessionDetailPage
Files:
- Modify:
frontend/src/pages/SessionHistoryPage.tsx - Modify:
frontend/src/pages/SessionDetailPage.tsx
Step 1: Apply replacements
SessionHistoryPage:
text-whiteheading →text-foreground+font-headingtext-white/40→text-muted-foregroundborder-white/[0.06]→border-borderglass-card rounded-2xl→bg-card border border-border rounded-xl- Primary buttons:
bg-white ... text-black hover:bg-white/90→ gradient - Secondary buttons:
border-white/10 ... text-white/60 ... hover:bg-white/10→border-border text-muted-foreground hover:bg-accent
SessionDetailPage:
text-white font-bold→text-foreground font-heading font-boldtext-white/40→text-muted-foregroundbg-white/10badges →bg-accent- Primary buttons: old → gradient
border-white/10 bg-black/50→border-border bg-cardborder-white/10 bg-transparent→border-border bg-card
Step 2: Verify build passes
Run: cd frontend && npm run build
Step 3: Commit
git add frontend/src/pages/SessionHistoryPage.tsx frontend/src/pages/SessionDetailPage.tsx
git commit -m "refactor: migrate session pages to new design system"
Task 5: Migrate TreeEditorPage
Files:
- Modify:
frontend/src/pages/TreeEditorPage.tsx
Step 1: Apply replacements
glass-card rounded-2xl→bg-card border border-border rounded-xl- Primary buttons:
bg-white ... text-black hover:bg-white/90→ gradient border-white/[0.06]→border-bordertext-lg font-semibold text-white→text-lg font-heading font-semibold text-foreground- Dark mode mixed patterns:
bg-yellow-100 ... dark:bg-yellow-900/30 dark:text-yellow-400→ justbg-yellow-900/30 text-yellow-400 border border-yellow-500/20(we're dark-only) bg-white/10 text-whitetoggle states →bg-accent text-foregroundborder-white/10 bg-black/50→border-border bg-card
Step 2: Verify build passes
Run: cd frontend && npm run build
Step 3: Commit
git add frontend/src/pages/TreeEditorPage.tsx
git commit -m "refactor: migrate TreeEditorPage to new design system"
Task 6: Migrate TreeNavigationPage
Files:
- Modify:
frontend/src/pages/TreeNavigationPage.tsx
This is the largest file with the most old patterns.
Step 1: Apply replacements
text-whiteheadings →text-foreground+font-headingtext-white/40→text-muted-foregroundglass-card rounded-2xl→bg-card border border-border rounded-xlglass-card→bg-card border border-borderborder-white/10 bg-black/50→border-border bg-cardborder-white/10→border-borderborder-white/[0.06]→border-borderbg-white/10→bg-accenttext-white/70 hover:bg-white/10 hover:text-white→text-muted-foreground hover:bg-accent hover:text-foreground- Primary buttons:
bg-white ... text-black hover:bg-white/90→ gradient border-purple-700 bg-purple-900/20→border-primary/30 bg-primary/10(use design tokens, not hardcoded colors)bg-white/10 px-2.5 py-0.5badges →bg-accent rounded-full px-2 text-[0.6875rem] font-label
Step 2: Verify build passes
Run: cd frontend && npm run build
Step 3: Commit
git add frontend/src/pages/TreeNavigationPage.tsx
git commit -m "refactor: migrate TreeNavigationPage to new design system"
Task 7: Migrate Session Sharing Components
Files:
- Modify:
frontend/src/pages/MySharesPage.tsx - Modify:
frontend/src/pages/SharedSessionPage.tsx - Modify:
frontend/src/components/session/ShareSessionModal.tsx
Step 1: Apply replacements
MySharesPage:
text-whiteheading →text-foreground+font-headingtext-white/40→text-muted-foregroundglass-card rounded-xl→bg-card border border-border rounded-xl- Primary buttons: old → gradient
SharedSessionPage:
glass-card w-full max-w-md rounded-2xl→bg-card border border-border w-full max-w-md rounded-xlbg-white ... text-black hover:bg-white/90→ gradientborder-white/[0.06]→border-bordertext-lg font-semibold text-white→text-lg font-heading font-semibold text-foregroundtext-lg text-white/70→text-lg text-muted-foreground
ShareSessionModal:
glass-card rounded-2xl→bg-card border border-border rounded-xlborder-white/[0.06]→border-borderborder-white/20 bg-white/10toggle →border-border bg-accentborder-white/10 bg-black/50→border-border bg-card- Primary buttons: old → gradient
Step 2: Verify build passes
Run: cd frontend && npm run build
Step 3: Commit
git add frontend/src/pages/MySharesPage.tsx frontend/src/pages/SharedSessionPage.tsx frontend/src/components/session/ShareSessionModal.tsx
git commit -m "refactor: migrate session sharing components to new design system"
Task 8: Clean Up Legacy CSS
Files:
- Modify:
frontend/src/index.css
Step 1: Remove workspace dropdown animation (dead code)
Remove the comment and @keyframes dropIn block (lines 115-119) — it was for the workspace switcher dropdown that no longer exists.
Step 2: Verify build passes
Run: cd frontend && npm run build
Step 3: Commit
git add frontend/src/index.css
git commit -m "chore: remove workspace dropdown animation (dead code)"
Task 9: Final Grep Audit
Step 1: Grep for remaining old patterns
Search for all remaining instances of old patterns across the entire frontend:
grep -rn "glass-card\|text-white/\|border-white/\|bg-white text-black\|bg-black/50\|hover:bg-white/" frontend/src/ --include="*.tsx" --include="*.ts"
Any hits are stragglers to fix.
Step 2: Grep for dark mode toggles
grep -rn "dark:" frontend/src/ --include="*.tsx" --include="*.ts"
We're dark-only — dark: prefixes are dead code and should be cleaned to just the dark variant.
Step 3: Fix any stragglers found
Step 4: Verify build passes
Run: cd frontend && npm run build
Step 5: Commit
git add -A
git commit -m "refactor: clean up remaining old monochrome patterns"