# WorkflowUI - Files Over 300 LOC (Refactoring Targets)
## Overview
Found 6 files that are larger than ideal and could be refactored into smaller modules.
---
## 1. **db/schema.ts** (538 LOC) ✅ ACCEPTABLE
**Status**: Keep as-is
**Why**: This is a database schema file, best kept together
- Type definitions (Workspace, Project, ProjectCanvasItem, etc.)
- Dexie database initialization
- CRUD helper methods organized by entity
**Structure**:
```
- Workspace type + CRUD methods (50 LOC)
- Project type + CRUD methods (50 LOC)
- ProjectCanvasItem type + CRUD methods (80 LOC)
- SyncQueueItem type + CRUD methods (60 LOC)
- Database instance (20 LOC)
- Export/helpers (50 LOC)
```
**Keep together** because it's a cohesive schema unit.
---
## 2. **app/project/[id]/page.tsx** (487 LOC) ⚠️ TOO LARGE
**Status**: Just refactored, now 220 LOC with Fakemui
This was recently refactored to use Fakemui and is now much smaller. ✅
---
## 3. **components/Settings/sections/CanvasSettings.tsx** (343 LOC) ⚠️ NEEDS SPLIT
**Problem**: Too many settings in one component
**Suggested Refactoring**:
```
CanvasSettings.tsx (100 LOC)
├── /GridSettings.tsx (60 LOC)
├── /ZoomSettings.tsx (60 LOC)
├── /SnapSettings.tsx (50 LOC)
└── /LayoutSettings.tsx (50 LOC)
```
**Current structure**: 343 lines of form controls
**Refactored structure**:
- Main component just composes 4 smaller components
- Each handles its own setting group
- Easy to test and reuse
---
## 4. **store/slices/projectSlice.ts** (335 LOC) ⚠️ NEEDS SPLIT
**Problem**: Too many Redux reducers in one file
**Suggested Refactoring**:
```
projectSlice.ts
├── /projectSlice.ts (80 LOC) - Project CRUD only
├── /canvasSlice.ts (120 LOC) - Canvas zoom/pan/items
└── /collaborationSlice.ts (100 LOC) - Real-time collab
```
**Why split**:
- Project operations (create, update, delete)
- Canvas state (zoom, pan, selected items)
- Collaboration (connected users, locks)
These are three different concerns bundled together.
---
## 5. **hooks/useProjectCanvas.ts** (322 LOC) ⚠️ NEEDS SPLIT
**Problem**: Too many canvas-related functions in one hook
**Suggested Refactoring**:
```
useProjectCanvas.ts
├── useCanvasZoom.ts (60 LOC)
├── useCanvasPan.ts (60 LOC)
├── useCanvasSelection.ts (80 LOC)
└── useCanvasItems.ts (100 LOC)
```
Then compose in useProjectCanvas:
```typescript
export function useProjectCanvas() {
const zoom = useCanvasZoom()
const pan = useCanvasPan()
const selection = useCanvasSelection()
const items = useCanvasItems()
return { zoom, pan, selection, items }
}
```
**Benefits**:
- Each hook does one thing
- Easier to test each piece
- Reusable in other contexts
---
## 6. **components/ProjectCanvas/WorkflowCard.tsx** (320 LOC) ⚠️ NEEDS SPLIT
**Problem**: Card component + preview + actions all bundled
**Suggested Refactoring**:
```
WorkflowCard.tsx (120 LOC) - Main card wrapper
├── /WorkflowCardHeader.tsx (50 LOC) - Title + status badge
├── /WorkflowCardPreview.tsx (70 LOC) - Mini node preview
├── /WorkflowCardFooter.tsx (40 LOC) - Metadata + date
└── /WorkflowCardActions.tsx (40 LOC) - Action buttons
```
**Current nesting**:
```tsx
```
**Refactored**:
```tsx
```
---
## Refactoring Plan
### Phase 1 (Immediate)
- ✅ db/schema.ts - Keep as-is (works well)
- ✅ project/[id]/page.tsx - Already done (220 LOC)
### Phase 2 (This Week)
- **components/Settings/sections/CanvasSettings.tsx** → Split into 4 components
- **components/ProjectCanvas/WorkflowCard.tsx** → Split into 5 components
### Phase 3 (Next Week)
- **store/slices/projectSlice.ts** → Split into 3 slices
- **hooks/useProjectCanvas.ts** → Split into 4 hooks
---
## Guidelines for Refactoring
### ✅ Keep Together
- Database schema files (type definitions + CRUD)
- Tightly coupled state (Redux slices with related actions)
- Small hooks under 150 LOC
### ❌ Split When
- Component has multiple JSX sections (use sub-components)
- Hook has 3+ independent concerns (split into smaller hooks)
- Redux slice mixes unrelated state (split into separate slices)
- Settings/form has 20+ controls (group into sections)
### 📏 Target Sizes
- **Components**: 80-150 LOC max
- **Hooks**: 80-150 LOC max
- **Redux slices**: 100-150 LOC max
- **Exceptions**: Schema files, API clients (can be 300-500 LOC)
---
## Refactoring Commands
### Split CanvasSettings into 4 components
```bash
# Create component directory
mkdir -p src/components/Settings/CanvasSettings
# Create sub-components
touch src/components/Settings/CanvasSettings/GridSettings.tsx
touch src/components/Settings/CanvasSettings/ZoomSettings.tsx
touch src/components/Settings/CanvasSettings/SnapSettings.tsx
touch src/components/Settings/CanvasSettings/LayoutSettings.tsx
touch src/components/Settings/CanvasSettings/index.ts
```
### Split WorkflowCard into 5 components
```bash
# Create component directory
mkdir -p src/components/ProjectCanvas/WorkflowCard
# Create sub-components
touch src/components/ProjectCanvas/WorkflowCard/WorkflowCardHeader.tsx
touch src/components/ProjectCanvas/WorkflowCard/WorkflowCardPreview.tsx
touch src/components/ProjectCanvas/WorkflowCard/WorkflowCardFooter.tsx
touch src/components/ProjectCanvas/WorkflowCard/WorkflowCardActions.tsx
touch src/components/ProjectCanvas/WorkflowCard/index.ts
```
### Split useProjectCanvas into 4 hooks
```bash
# Create hooks directory structure
mkdir -p src/hooks/canvas
# Create sub-hooks
touch src/hooks/canvas/useCanvasZoom.ts
touch src/hooks/canvas/useCanvasPan.ts
touch src/hooks/canvas/useCanvasSelection.ts
touch src/hooks/canvas/useCanvasItems.ts
touch src/hooks/canvas/index.ts
```
---
## Benefits of Refactoring
✅ **Testability**: Each component/hook is independently testable
✅ **Reusability**: Sub-components can be used elsewhere
✅ **Maintainability**: Smaller files are easier to understand
✅ **Performance**: Sub-components can be memoized separately
✅ **Composability**: Easy to compose smaller pieces into larger features
---
## Estimated Effort
| File | Current | Effort | Timeline |
|------|---------|--------|----------|
| CanvasSettings.tsx | 343 → 100 + 4×50 | 2 hours | Today |
| WorkflowCard.tsx | 320 → 120 + 4×50 | 2 hours | Today |
| projectSlice.ts | 335 → 3×100 | 3 hours | Tomorrow |
| useProjectCanvas.ts | 322 → 4×80 | 2 hours | Tomorrow |
**Total**: ~9 hours to refactor all large files to <150 LOC each
---
## Summary
**Current State**:
- 6 files over 300 LOC
- 2 files already optimized (✅ db/schema.ts, ✅ project page)
- 4 files need refactoring (2-3 days of work)
**Target State**:
- All components <150 LOC
- All hooks <150 LOC
- All Redux slices <150 LOC
- Clean, composable, testable codebase
---
Want me to start refactoring any of these? Start with CanvasSettings? 🚀