# 🚀 Quick Start Guide: Size Limits & Refactoring ## What Was Done? A **code size limit enforcement system** was created for MetaBuilder to maintain code quality and architectural standards. ## 📏 The Rules Each TypeScript/React file must stay under: - **150 lines of code** (actual code, not comments/blanks) - **200 total lines** (including comments) - **3 levels of nesting** max - **5-10 exports** per file - **5 function parameters** max ## 🛠️ How to Check Run this command to check if your code violates any limits: ```bash npx tsx /workspaces/metabuilder/scripts/enforce-size-limits.ts ``` **Success output:** ``` ✅ All files comply with size limits! ``` **Failure output:** ``` ❌ ERRORS (3): 📄 src/components/MyComponent.tsx Lines of Code (LOC): 187 / 150 ``` ## 📋 How to Refactor (Step by Step) ### Step 1: Identify the Problem ```bash # Check which files are too large npx tsx /workspaces/metabuilder/scripts/enforce-size-limits.ts ``` ### Step 2: Extract Business Logic Create a custom hook in `src/hooks/`: ```typescript // src/hooks/useMyFeature.ts import { useState, useCallback } from 'react' export function useMyFeature() { const [data, setData] = useState(null) const [isLoading, setIsLoading] = useState(false) const fetch = useCallback(async () => { setIsLoading(true) try { // Your logic here } finally { setIsLoading(false) } }, []) return { data, isLoading, fetch } } ``` ### Step 3: Create Small UI Components Break rendering into focused components: ```typescript // src/components/MyItem.tsx export function MyItem({ item, onSelect }) { return (
onSelect(item)}>

{item.title}

) } ``` ### Step 4: Connect with Container Create a small container that glues everything together: ```typescript // src/components/MyFeature.tsx import { useMyFeature } from '@/hooks/useMyFeature' import { MyItem } from './MyItem' export function MyFeature() { const { data, isLoading, fetch } = useMyFeature() return (
{isLoading ?

Loading...

: null} {data?.map(item => ( ))}
) } ``` ### Step 5: Verify ```bash # Check your changes pass the limit npx tsx /workspaces/metabuilder/scripts/enforce-size-limits.ts ``` ## 🎯 Available Hooks Pre-made hooks you can use: ### `useGitHubFetcher` Fetch GitHub workflow runs: ```typescript const { data, isLoading, error, fetch } = useGitHubFetcher() ``` ### `useAutoRefresh` Auto-refresh at intervals: ```typescript const { isAutoRefreshing, toggleAutoRefresh } = useAutoRefresh({ intervalMs: 30000, onRefresh: () => fetch(), }) ``` ### `useFileTree` Manage file tree structure: ```typescript const { files, addChild, deleteNode } = useFileTree(initialFiles) ``` ### `useCodeEditor` Manage code editor state: ```typescript const { activeFile, openFile, saveFile } = useCodeEditor() ``` See `src/hooks/index.ts` for all available hooks. ## 📚 Detailed Resources - **Full Guide**: `docs/REFACTORING_ENFORCEMENT_GUIDE.md` - **Quick Reference**: `docs/REFACTORING_QUICK_REFERENCE.md` - **Strategy**: `docs/REFACTORING_STRATEGY.md` - **Examples**: Look at `src/components/GitHubActionsFetcher.refactored.tsx` ## 🔄 Automated Checks ### On Each Commit (Local) The pre-commit hook automatically runs checks before you commit: ``` git commit -m "my changes" # → Pre-commit hook checks size limits # → If violations found, commit is blocked ``` ### On Each PR (GitHub) The GitHub Actions workflow checks your PR: - Scans changed files - Posts violations as comments - Blocks merge if errors found ## ✅ Dos and Don'ts **DO:** - ✅ Extract logic to custom hooks - ✅ Create small, focused components - ✅ Use composition over large components - ✅ Test hooks in isolation - ✅ Document your hooks **DON'T:** - ❌ Put all logic in a component - ❌ Create massive render methods - ❌ Duplicate logic across files - ❌ Nest JSX deeply - ❌ Add too many props ## 🆘 Help & FAQ **Q: How do I know what to extract?** A: If your component has multiple responsibilities (fetching, rendering, state management), extract the non-rendering parts to hooks. **Q: Can I exceed the limits?** A: Not recommended. If you absolutely must, discuss with team. The limits exist for good reasons. **Q: What if my hook exceeds 100 LOC?** A: Break it into smaller hooks. Each hook should do one thing well. **Q: How do I test hooks?** A: Use React Testing Library's `renderHook` function. See docs for examples. ## 📞 Contact Questions? Check these resources in order: 1. `docs/REFACTORING_QUICK_REFERENCE.md` (code examples) 2. `docs/REFACTORING_ENFORCEMENT_GUIDE.md` (full guide) 3. `docs/REFACTORING_STRATEGY.md` (deep dive) 4. Look at example in `src/components/GitHubActionsFetcher.refactored.tsx` --- **Ready to refactor?** Start with the [Full Guide](docs/REFACTORING_ENFORCEMENT_GUIDE.md) →