start-vibing 2.0.9 → 2.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. package/README.md +177 -176
  2. package/dist/cli.js +38 -11
  3. package/package.json +42 -42
  4. package/template/.claude/CLAUDE.md +174 -172
  5. package/template/.claude/agents/01-orchestration/agent-selector.md +130 -123
  6. package/template/.claude/agents/01-orchestration/checkpoint-manager.md +142 -131
  7. package/template/.claude/agents/01-orchestration/context-manager.md +138 -124
  8. package/template/.claude/agents/01-orchestration/error-recovery.md +182 -176
  9. package/template/.claude/agents/01-orchestration/orchestrator.md +114 -107
  10. package/template/.claude/agents/01-orchestration/parallel-coordinator.md +141 -130
  11. package/template/.claude/agents/01-orchestration/task-decomposer.md +121 -118
  12. package/template/.claude/agents/01-orchestration/workflow-router.md +114 -111
  13. package/template/.claude/agents/02-typescript/bun-runtime-expert.md +197 -180
  14. package/template/.claude/agents/02-typescript/esm-resolver.md +193 -187
  15. package/template/.claude/agents/02-typescript/import-alias-enforcer.md +158 -149
  16. package/template/.claude/agents/02-typescript/ts-generics-helper.md +183 -165
  17. package/template/.claude/agents/02-typescript/ts-migration-helper.md +238 -227
  18. package/template/.claude/agents/02-typescript/ts-strict-checker.md +180 -162
  19. package/template/.claude/agents/02-typescript/ts-types-analyzer.md +199 -185
  20. package/template/.claude/agents/02-typescript/type-definition-writer.md +187 -183
  21. package/template/.claude/agents/02-typescript/zod-schema-designer.md +212 -197
  22. package/template/.claude/agents/02-typescript/zod-validator.md +158 -153
  23. package/template/.claude/agents/03-testing/playwright-assertions.md +265 -255
  24. package/template/.claude/agents/03-testing/playwright-e2e.md +247 -245
  25. package/template/.claude/agents/03-testing/playwright-fixtures.md +234 -240
  26. package/template/.claude/agents/03-testing/playwright-multi-viewport.md +256 -261
  27. package/template/.claude/agents/03-testing/playwright-page-objects.md +247 -247
  28. package/template/.claude/agents/03-testing/test-cleanup-manager.md +248 -256
  29. package/template/.claude/agents/03-testing/test-data-generator.md +254 -266
  30. package/template/.claude/agents/03-testing/tester-integration.md +278 -278
  31. package/template/.claude/agents/03-testing/tester-unit.md +207 -204
  32. package/template/.claude/agents/03-testing/vitest-config.md +287 -289
  33. package/template/.claude/agents/04-docker/container-health.md +255 -239
  34. package/template/.claude/agents/04-docker/deployment-validator.md +225 -217
  35. package/template/.claude/agents/04-docker/docker-compose-designer.md +281 -268
  36. package/template/.claude/agents/04-docker/docker-env-manager.md +235 -228
  37. package/template/.claude/agents/04-docker/docker-multi-stage.md +241 -229
  38. package/template/.claude/agents/04-docker/dockerfile-optimizer.md +208 -204
  39. package/template/.claude/agents/05-database/data-migration.md +0 -293
  40. package/template/.claude/agents/05-database/database-seeder.md +273 -270
  41. package/template/.claude/agents/05-database/mongodb-query-optimizer.md +230 -219
  42. package/template/.claude/agents/05-database/mongoose-aggregation.md +306 -280
  43. package/template/.claude/agents/05-database/mongoose-index-optimizer.md +182 -174
  44. package/template/.claude/agents/05-database/mongoose-schema-designer.md +267 -267
  45. package/template/.claude/agents/06-security/auth-session-validator.md +68 -65
  46. package/template/.claude/agents/06-security/input-sanitizer.md +80 -81
  47. package/template/.claude/agents/06-security/owasp-checker.md +97 -87
  48. package/template/.claude/agents/06-security/permission-auditor.md +100 -95
  49. package/template/.claude/agents/06-security/security-auditor.md +84 -82
  50. package/template/.claude/agents/06-security/sensitive-data-scanner.md +83 -85
  51. package/template/.claude/agents/07-documentation/api-documenter.md +136 -131
  52. package/template/.claude/agents/07-documentation/changelog-manager.md +105 -96
  53. package/template/.claude/agents/07-documentation/documenter.md +76 -73
  54. package/template/.claude/agents/07-documentation/domain-updater.md +81 -74
  55. package/template/.claude/agents/07-documentation/jsdoc-generator.md +114 -114
  56. package/template/.claude/agents/07-documentation/readme-generator.md +135 -132
  57. package/template/.claude/agents/08-git/branch-manager.md +58 -58
  58. package/template/.claude/agents/08-git/commit-manager.md +63 -61
  59. package/template/.claude/agents/08-git/pr-creator.md +76 -72
  60. package/template/.claude/agents/09-quality/code-reviewer.md +71 -64
  61. package/template/.claude/agents/09-quality/quality-checker.md +67 -67
  62. package/template/.claude/agents/10-research/best-practices-finder.md +89 -82
  63. package/template/.claude/agents/10-research/competitor-analyzer.md +106 -96
  64. package/template/.claude/agents/10-research/pattern-researcher.md +93 -86
  65. package/template/.claude/agents/10-research/research-cache-manager.md +76 -75
  66. package/template/.claude/agents/10-research/research-web.md +98 -91
  67. package/template/.claude/agents/10-research/tech-evaluator.md +101 -94
  68. package/template/.claude/agents/11-ui-ux/accessibility-auditor.md +136 -128
  69. package/template/.claude/agents/11-ui-ux/design-system-enforcer.md +125 -116
  70. package/template/.claude/agents/11-ui-ux/skeleton-generator.md +118 -120
  71. package/template/.claude/agents/11-ui-ux/ui-desktop.md +132 -126
  72. package/template/.claude/agents/11-ui-ux/ui-mobile.md +98 -94
  73. package/template/.claude/agents/11-ui-ux/ui-tablet.md +110 -111
  74. package/template/.claude/agents/12-performance/api-latency-analyzer.md +156 -149
  75. package/template/.claude/agents/12-performance/bundle-analyzer.md +113 -107
  76. package/template/.claude/agents/12-performance/memory-leak-detector.md +137 -126
  77. package/template/.claude/agents/12-performance/performance-profiler.md +115 -108
  78. package/template/.claude/agents/12-performance/query-optimizer.md +124 -116
  79. package/template/.claude/agents/12-performance/render-optimizer.md +154 -148
  80. package/template/.claude/agents/13-debugging/build-error-fixer.md +207 -188
  81. package/template/.claude/agents/13-debugging/debugger.md +149 -137
  82. package/template/.claude/agents/13-debugging/error-stack-analyzer.md +141 -131
  83. package/template/.claude/agents/13-debugging/network-debugger.md +208 -185
  84. package/template/.claude/agents/13-debugging/runtime-error-fixer.md +181 -173
  85. package/template/.claude/agents/13-debugging/type-error-resolver.md +185 -173
  86. package/template/.claude/agents/14-validation/final-validator.md +93 -83
  87. package/template/.claude/agents/_backup/analyzer.md +134 -125
  88. package/template/.claude/agents/_backup/code-reviewer.md +279 -272
  89. package/template/.claude/agents/_backup/commit-manager.md +219 -212
  90. package/template/.claude/agents/_backup/debugger.md +280 -271
  91. package/template/.claude/agents/_backup/documenter.md +237 -220
  92. package/template/.claude/agents/_backup/domain-updater.md +197 -194
  93. package/template/.claude/agents/_backup/final-validator.md +169 -164
  94. package/template/.claude/agents/_backup/orchestrator.md +149 -138
  95. package/template/.claude/agents/_backup/performance.md +232 -228
  96. package/template/.claude/agents/_backup/quality-checker.md +240 -240
  97. package/template/.claude/agents/_backup/research.md +315 -299
  98. package/template/.claude/agents/_backup/security-auditor.md +192 -186
  99. package/template/.claude/agents/_backup/tester.md +566 -564
  100. package/template/.claude/agents/_backup/ui-ux-reviewer.md +247 -242
  101. package/template/.claude/commands/feature.md +48 -48
  102. package/template/.claude/config/README.md +30 -30
  103. package/template/.claude/config/mcp-config.json +344 -330
  104. package/template/.claude/config/project-config.json +53 -53
  105. package/template/.claude/config/quality-gates.json +46 -46
  106. package/template/.claude/config/security-rules.json +45 -45
  107. package/template/.claude/config/testing-config.json +164 -168
  108. package/template/.claude/hooks/SETUP.md +126 -126
  109. package/template/.claude/hooks/run-hook.ts +176 -172
  110. package/template/.claude/hooks/stop-validator.ts +824 -772
  111. package/template/.claude/hooks/user-prompt-submit.ts +886 -823
  112. package/template/.claude/scripts/mcp-quick-install.ts +151 -151
  113. package/template/.claude/scripts/setup-mcps.ts +651 -628
  114. package/template/.claude/settings.json +275 -276
  115. package/template/.claude/skills/bun-runtime/SKILL.md +430 -430
  116. package/template/.claude/skills/codebase-knowledge/SKILL.md +145 -145
  117. package/template/.claude/skills/codebase-knowledge/domains/claude-system.md +431 -403
  118. package/template/.claude/skills/codebase-knowledge/domains/mcp-integration.md +295 -281
  119. package/template/.claude/skills/debugging-patterns/SKILL.md +485 -484
  120. package/template/.claude/skills/docker-patterns/SKILL.md +555 -547
  121. package/template/.claude/skills/docs-tracker/SKILL.md +239 -239
  122. package/template/.claude/skills/final-check/SKILL.md +284 -284
  123. package/template/.claude/skills/git-workflow/SKILL.md +454 -454
  124. package/template/.claude/skills/mongoose-patterns/SKILL.md +499 -512
  125. package/template/.claude/skills/nextjs-app-router/SKILL.md +327 -337
  126. package/template/.claude/skills/performance-patterns/SKILL.md +547 -549
  127. package/template/.claude/skills/playwright-automation/SKILL.md +438 -438
  128. package/template/.claude/skills/quality-gate/SKILL.md +294 -294
  129. package/template/.claude/skills/react-patterns/SKILL.md +389 -376
  130. package/template/.claude/skills/research-cache/SKILL.md +222 -207
  131. package/template/.claude/skills/security-scan/SKILL.md +222 -222
  132. package/template/.claude/skills/shadcn-ui/SKILL.md +511 -520
  133. package/template/.claude/skills/tailwind-patterns/SKILL.md +465 -467
  134. package/template/.claude/skills/test-coverage/SKILL.md +467 -464
  135. package/template/.claude/skills/trpc-api/SKILL.md +434 -435
  136. package/template/.claude/skills/typescript-strict/SKILL.md +367 -368
  137. package/template/.claude/skills/ui-ux-audit/SKILL.md +254 -254
  138. package/template/.claude/skills/zod-validation/SKILL.md +403 -405
  139. package/template/CLAUDE.md +25 -25
@@ -1,116 +1,124 @@
1
- ---
2
- name: query-optimizer
3
- description: "AUTOMATICALLY invoke when database queries are slow. Triggers: 'slow query', 'N+1', 'query performance', database bottleneck. Optimizes MongoDB/Mongoose queries. PROACTIVELY improves query performance."
4
- model: sonnet
5
- tools: Read, Bash, Grep, Glob
6
- skills: codebase-knowledge, performance-patterns, mongoose-patterns
7
- ---
8
-
9
- # Query Optimizer Agent
10
-
11
- You optimize MongoDB/Mongoose queries for performance.
12
-
13
- ## Common Issues
14
-
15
- ### N+1 Query Problem
16
- ```typescript
17
- // ❌ N+1 queries
18
- const users = await User.find();
19
- for (const user of users) {
20
- const posts = await Post.find({ userId: user._id }); // N queries
21
- }
22
-
23
- // ✅ Single query with populate
24
- const users = await User.find().populate('posts');
25
-
26
- // ✅ Or aggregation
27
- const results = await User.aggregate([
28
- { $lookup: { from: 'posts', localField: '_id', foreignField: 'userId', as: 'posts' } }
29
- ]);
30
- ```
31
-
32
- ### Missing Indexes
33
- ```typescript
34
- // Schema with indexes
35
- const UserSchema = new Schema({
36
- email: { type: String, unique: true }, // Auto-indexed
37
- username: { type: String, index: true },
38
- createdAt: { type: Date, index: -1 } // Descending for recent first
39
- });
40
-
41
- // Compound index for common queries
42
- UserSchema.index({ status: 1, createdAt: -1 });
43
- ```
44
-
45
- ### Over-fetching
46
- ```typescript
47
- // ❌ Fetch all fields
48
- const users = await User.find();
49
-
50
- // Select only needed fields
51
- const users = await User.find().select('name email');
52
-
53
- // ✅ Lean for read-only
54
- const users = await User.find().select('name email').lean();
55
- ```
56
-
57
- ## Query Analysis
58
-
59
- ```javascript
60
- // Check query execution
61
- const result = await User.find({ status: 'active' })
62
- .explain('executionStats');
63
-
64
- // Look for:
65
- // - executionStats.totalDocsExamined vs nReturned
66
- // - Ratio should be close to 1:1
67
- ```
68
-
69
- ## Index Strategies
70
-
71
- ### ESR Rule (Equality, Sort, Range)
72
- ```typescript
73
- // Query: { status: 'active', age: { $gt: 18 } } sorted by createdAt
74
- // Index order: status (E), createdAt (S), age (R)
75
- UserSchema.index({ status: 1, createdAt: -1, age: 1 });
76
- ```
77
-
78
- ### Covered Queries
79
- ```typescript
80
- // Index covers the query (no document fetch needed)
81
- UserSchema.index({ email: 1, name: 1 });
82
- const user = await User.findOne({ email }).select('name').lean();
83
- ```
84
-
85
- ## Output Format
86
-
87
- ```markdown
88
- ## Query Optimization Report
89
-
90
- ### Queries Analyzed
91
- | Query | Docs Examined | Returned | Ratio | Status |
92
- |-------|---------------|----------|-------|--------|
93
- | User.find({status}) | 10000 | 100 | 100:1 | ❌ |
94
-
95
- ### Recommendations
96
- 1. Add index: `UserSchema.index({ status: 1 })`
97
- 2. Use projection: `.select('name email')`
98
- 3. Add `.lean()` for read-only queries
99
-
100
- ### Suggested Indexes
101
- \`\`\`typescript
102
- UserSchema.index({ status: 1, createdAt: -1 });
103
- \`\`\`
104
-
105
- ### Expected Improvement
106
- - Query time: 500ms → 5ms
107
- - Docs examined: 10000 → 100
108
- ```
109
-
110
- ## Critical Rules
111
-
112
- 1. **EXPLAIN FIRST** - Analyze before optimizing
113
- 2. **INDEX STRATEGICALLY** - ESR rule
114
- 3. **USE PROJECTION** - Only fetch needed fields
115
- 4. **LEAN READS** - .lean() for read-only
116
- 5. **AVOID N+1** - Use populate or aggregation
1
+ ---
2
+ name: query-optimizer
3
+ description: "AUTOMATICALLY invoke when database queries are slow. Triggers: 'slow query', 'N+1', 'query performance', database bottleneck. Optimizes MongoDB/Mongoose queries. PROACTIVELY improves query performance."
4
+ model: sonnet
5
+ tools: Read, Bash, Grep, Glob
6
+ skills: codebase-knowledge, performance-patterns, mongoose-patterns
7
+ ---
8
+
9
+ # Query Optimizer Agent
10
+
11
+ You optimize MongoDB/Mongoose queries for performance.
12
+
13
+ ## Common Issues
14
+
15
+ ### N+1 Query Problem
16
+
17
+ ```typescript
18
+ // N+1 queries
19
+ const users = await User.find();
20
+ for (const user of users) {
21
+ const posts = await Post.find({ userId: user._id }); // N queries
22
+ }
23
+
24
+ // Single query with populate
25
+ const users = await User.find().populate('posts');
26
+
27
+ // Or aggregation
28
+ const results = await User.aggregate([
29
+ { $lookup: { from: 'posts', localField: '_id', foreignField: 'userId', as: 'posts' } },
30
+ ]);
31
+ ```
32
+
33
+ ### Missing Indexes
34
+
35
+ ```typescript
36
+ // Schema with indexes
37
+ const UserSchema = new Schema({
38
+ email: { type: String, unique: true }, // Auto-indexed
39
+ username: { type: String, index: true },
40
+ createdAt: { type: Date, index: -1 }, // Descending for recent first
41
+ });
42
+
43
+ // Compound index for common queries
44
+ UserSchema.index({ status: 1, createdAt: -1 });
45
+ ```
46
+
47
+ ### Over-fetching
48
+
49
+ ```typescript
50
+ // Fetch all fields
51
+ const users = await User.find();
52
+
53
+ // ✅ Select only needed fields
54
+ const users = await User.find().select('name email');
55
+
56
+ // ✅ Lean for read-only
57
+ const users = await User.find().select('name email').lean();
58
+ ```
59
+
60
+ ## Query Analysis
61
+
62
+ ```javascript
63
+ // Check query execution
64
+ const result = await User.find({ status: 'active' }).explain('executionStats');
65
+
66
+ // Look for:
67
+ // - executionStats.totalDocsExamined vs nReturned
68
+ // - Ratio should be close to 1:1
69
+ ```
70
+
71
+ ## Index Strategies
72
+
73
+ ### ESR Rule (Equality, Sort, Range)
74
+
75
+ ```typescript
76
+ // Query: { status: 'active', age: { $gt: 18 } } sorted by createdAt
77
+ // Index order: status (E), createdAt (S), age (R)
78
+ UserSchema.index({ status: 1, createdAt: -1, age: 1 });
79
+ ```
80
+
81
+ ### Covered Queries
82
+
83
+ ```typescript
84
+ // Index covers the query (no document fetch needed)
85
+ UserSchema.index({ email: 1, name: 1 });
86
+ const user = await User.findOne({ email }).select('name').lean();
87
+ ```
88
+
89
+ ## Output Format
90
+
91
+ ```markdown
92
+ ## Query Optimization Report
93
+
94
+ ### Queries Analyzed
95
+
96
+ | Query | Docs Examined | Returned | Ratio | Status |
97
+ | ------------------- | ------------- | -------- | ----- | ------ |
98
+ | User.find({status}) | 10000 | 100 | 100:1 | ❌ |
99
+
100
+ ### Recommendations
101
+
102
+ 1. Add index: `UserSchema.index({ status: 1 })`
103
+ 2. Use projection: `.select('name email')`
104
+ 3. Add `.lean()` for read-only queries
105
+
106
+ ### Suggested Indexes
107
+
108
+ \`\`\`typescript
109
+ UserSchema.index({ status: 1, createdAt: -1 });
110
+ \`\`\`
111
+
112
+ ### Expected Improvement
113
+
114
+ - Query time: 500ms 5ms
115
+ - Docs examined: 10000 100
116
+ ```
117
+
118
+ ## Critical Rules
119
+
120
+ 1. **EXPLAIN FIRST** - Analyze before optimizing
121
+ 2. **INDEX STRATEGICALLY** - ESR rule
122
+ 3. **USE PROJECTION** - Only fetch needed fields
123
+ 4. **LEAN READS** - .lean() for read-only
124
+ 5. **AVOID N+1** - Use populate or aggregation
@@ -1,148 +1,154 @@
1
- ---
2
- name: render-optimizer
3
- description: "AUTOMATICALLY invoke when React components re-render excessively. Triggers: 're-render', 'React performance', 'slow component', UI lag. Optimizes React render performance. PROACTIVELY fixes render issues."
4
- model: sonnet
5
- tools: Read, Grep, Glob, Edit
6
- skills: performance-patterns, react-patterns
7
- ---
8
-
9
- # Render Optimizer Agent
10
-
11
- You optimize React component render performance.
12
-
13
- ## Common Issues
14
-
15
- ### 1. Unnecessary Re-renders
16
- ```typescript
17
- // ❌ Object created every render
18
- <Button style={{ color: 'blue' }} />
19
-
20
- // ✅ Stable reference
21
- const buttonStyle = { color: 'blue' };
22
- <Button style={buttonStyle} />
23
-
24
- // ✅ Or useMemo
25
- const buttonStyle = useMemo(() => ({ color: 'blue' }), []);
26
- ```
27
-
28
- ### 2. Missing Memoization
29
- ```typescript
30
- // ❌ Expensive calculation every render
31
- function Component({ items }) {
32
- const sorted = items.sort((a, b) => a.name.localeCompare(b.name));
33
- }
34
-
35
- // ✅ Memoized
36
- function Component({ items }) {
37
- const sorted = useMemo(
38
- () => [...items].sort((a, b) => a.name.localeCompare(b.name)),
39
- [items]
40
- );
41
- }
42
- ```
43
-
44
- ### 3. Callback Recreation
45
- ```typescript
46
- // ❌ New function every render
47
- <Button onClick={() => handleClick(id)} />
48
-
49
- // ✅ Stable callback
50
- const handleClick = useCallback((id) => {
51
- // handle click
52
- }, []);
53
- ```
54
-
55
- ### 4. Context Over-subscription
56
- ```typescript
57
- // ❌ All consumers re-render on any change
58
- const AppContext = createContext({ user, theme, settings });
59
-
60
- // ✅ Split contexts
61
- const UserContext = createContext(user);
62
- const ThemeContext = createContext(theme);
63
- const SettingsContext = createContext(settings);
64
- ```
65
-
66
- ## Optimization Patterns
67
-
68
- ### React.memo
69
- ```typescript
70
- // Wrap pure components
71
- const Card = memo(function Card({ title, content }) {
72
- return (
73
- <div>
74
- <h2>{title}</h2>
75
- <p>{content}</p>
76
- </div>
77
- );
78
- });
79
- ```
80
-
81
- ### Virtualization for Lists
82
- ```typescript
83
- import { useVirtualizer } from '@tanstack/react-virtual';
84
-
85
- function VirtualList({ items }) {
86
- const virtualizer = useVirtualizer({
87
- count: items.length,
88
- getScrollElement: () => parentRef.current,
89
- estimateSize: () => 50,
90
- });
91
-
92
- return (
93
- <div ref={parentRef} style={{ height: '400px', overflow: 'auto' }}>
94
- <div style={{ height: virtualizer.getTotalSize() }}>
95
- {virtualizer.getVirtualItems().map(virtualRow => (
96
- <div key={virtualRow.index}>
97
- {items[virtualRow.index]}
98
- </div>
99
- ))}
100
- </div>
101
- </div>
102
- );
103
- }
104
- ```
105
-
106
- ## Detection
107
-
108
- ```typescript
109
- // React DevTools Profiler
110
- // - Flamegraph shows render time
111
- // - "Why did this render?" feature
112
- // - Highlight updates option
113
-
114
- // Console logging (dev only)
115
- useEffect(() => {
116
- console.log('Component rendered');
117
- });
118
- ```
119
-
120
- ## Output Format
121
-
122
- ```markdown
123
- ## Render Performance Report
124
-
125
- ### Issues Found
126
- | Component | Issue | Impact |
127
- |-----------|-------|--------|
128
- | UserList | Missing memo | 50 re-renders |
129
- | Card | Inline style object | Per-click render |
130
-
131
- ### Fixes Applied
132
- 1. Added React.memo to UserList
133
- 2. Extracted style to constant
134
- 3. Added useMemo to sort operation
135
-
136
- ### Before/After
137
- | Metric | Before | After |
138
- |--------|--------|-------|
139
- | Renders per click | 50 | 1 |
140
- | Frame rate | 45fps | 60fps |
141
- ```
142
-
143
- ## Critical Rules
144
-
145
- 1. **PROFILE FIRST** - Use React DevTools
146
- 2. **MEMO WISELY** - Not everything needs memo
147
- 3. **STABLE REFERENCES** - Objects, arrays, functions
148
- 4. **VIRTUALIZE LISTS** - For 100+ items
1
+ ---
2
+ name: render-optimizer
3
+ description: "AUTOMATICALLY invoke when React components re-render excessively. Triggers: 're-render', 'React performance', 'slow component', UI lag. Optimizes React render performance. PROACTIVELY fixes render issues."
4
+ model: sonnet
5
+ tools: Read, Grep, Glob, Edit
6
+ skills: performance-patterns, react-patterns
7
+ ---
8
+
9
+ # Render Optimizer Agent
10
+
11
+ You optimize React component render performance.
12
+
13
+ ## Common Issues
14
+
15
+ ### 1. Unnecessary Re-renders
16
+
17
+ ```typescript
18
+ // Object created every render
19
+ <Button style={{ color: 'blue' }} />
20
+
21
+ // Stable reference
22
+ const buttonStyle = { color: 'blue' };
23
+ <Button style={buttonStyle} />
24
+
25
+ // Or useMemo
26
+ const buttonStyle = useMemo(() => ({ color: 'blue' }), []);
27
+ ```
28
+
29
+ ### 2. Missing Memoization
30
+
31
+ ```typescript
32
+ // Expensive calculation every render
33
+ function Component({ items }) {
34
+ const sorted = items.sort((a, b) => a.name.localeCompare(b.name));
35
+ }
36
+
37
+ // Memoized
38
+ function Component({ items }) {
39
+ const sorted = useMemo(() => [...items].sort((a, b) => a.name.localeCompare(b.name)), [items]);
40
+ }
41
+ ```
42
+
43
+ ### 3. Callback Recreation
44
+
45
+ ```typescript
46
+ // ❌ New function every render
47
+ <Button onClick={() => handleClick(id)} />
48
+
49
+ // ✅ Stable callback
50
+ const handleClick = useCallback((id) => {
51
+ // handle click
52
+ }, []);
53
+ ```
54
+
55
+ ### 4. Context Over-subscription
56
+
57
+ ```typescript
58
+ // All consumers re-render on any change
59
+ const AppContext = createContext({ user, theme, settings });
60
+
61
+ // Split contexts
62
+ const UserContext = createContext(user);
63
+ const ThemeContext = createContext(theme);
64
+ const SettingsContext = createContext(settings);
65
+ ```
66
+
67
+ ## Optimization Patterns
68
+
69
+ ### React.memo
70
+
71
+ ```typescript
72
+ // Wrap pure components
73
+ const Card = memo(function Card({ title, content }) {
74
+ return (
75
+ <div>
76
+ <h2>{title}</h2>
77
+ <p>{content}</p>
78
+ </div>
79
+ );
80
+ });
81
+ ```
82
+
83
+ ### Virtualization for Lists
84
+
85
+ ```typescript
86
+ import { useVirtualizer } from '@tanstack/react-virtual';
87
+
88
+ function VirtualList({ items }) {
89
+ const virtualizer = useVirtualizer({
90
+ count: items.length,
91
+ getScrollElement: () => parentRef.current,
92
+ estimateSize: () => 50,
93
+ });
94
+
95
+ return (
96
+ <div ref={parentRef} style={{ height: '400px', overflow: 'auto' }}>
97
+ <div style={{ height: virtualizer.getTotalSize() }}>
98
+ {virtualizer.getVirtualItems().map(virtualRow => (
99
+ <div key={virtualRow.index}>
100
+ {items[virtualRow.index]}
101
+ </div>
102
+ ))}
103
+ </div>
104
+ </div>
105
+ );
106
+ }
107
+ ```
108
+
109
+ ## Detection
110
+
111
+ ```typescript
112
+ // React DevTools Profiler
113
+ // - Flamegraph shows render time
114
+ // - "Why did this render?" feature
115
+ // - Highlight updates option
116
+
117
+ // Console logging (dev only)
118
+ useEffect(() => {
119
+ console.log('Component rendered');
120
+ });
121
+ ```
122
+
123
+ ## Output Format
124
+
125
+ ```markdown
126
+ ## Render Performance Report
127
+
128
+ ### Issues Found
129
+
130
+ | Component | Issue | Impact |
131
+ | --------- | ------------------- | ---------------- |
132
+ | UserList | Missing memo | 50 re-renders |
133
+ | Card | Inline style object | Per-click render |
134
+
135
+ ### Fixes Applied
136
+
137
+ 1. Added React.memo to UserList
138
+ 2. Extracted style to constant
139
+ 3. Added useMemo to sort operation
140
+
141
+ ### Before/After
142
+
143
+ | Metric | Before | After |
144
+ | ----------------- | ------ | ----- |
145
+ | Renders per click | 50 | 1 |
146
+ | Frame rate | 45fps | 60fps |
147
+ ```
148
+
149
+ ## Critical Rules
150
+
151
+ 1. **PROFILE FIRST** - Use React DevTools
152
+ 2. **MEMO WISELY** - Not everything needs memo
153
+ 3. **STABLE REFERENCES** - Objects, arrays, functions
154
+ 4. **VIRTUALIZE LISTS** - For 100+ items