cp-toolkit 2.0.0

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 (196) hide show
  1. package/README.md +130 -0
  2. package/bin/cp-kit.js +72 -0
  3. package/package.json +46 -0
  4. package/src/commands/add.js +212 -0
  5. package/src/commands/doctor.js +149 -0
  6. package/src/commands/init.js +662 -0
  7. package/src/commands/list.js +128 -0
  8. package/src/index.js +13 -0
  9. package/templates/agents/backend-specialist.md +263 -0
  10. package/templates/agents/code-archaeologist.md +106 -0
  11. package/templates/agents/database-architect.md +226 -0
  12. package/templates/agents/debugger.md +225 -0
  13. package/templates/agents/devops-engineer.md +242 -0
  14. package/templates/agents/documentation-writer.md +104 -0
  15. package/templates/agents/explorer-agent.md +73 -0
  16. package/templates/agents/frontend-specialist.md +556 -0
  17. package/templates/agents/game-developer.md +162 -0
  18. package/templates/agents/mobile-developer.md +377 -0
  19. package/templates/agents/orchestrator.md +416 -0
  20. package/templates/agents/penetration-tester.md +188 -0
  21. package/templates/agents/performance-optimizer.md +187 -0
  22. package/templates/agents/product-manager.md +112 -0
  23. package/templates/agents/product-owner.md +95 -0
  24. package/templates/agents/project-planner.md +406 -0
  25. package/templates/agents/qa-automation-engineer.md +103 -0
  26. package/templates/agents/security-auditor.md +170 -0
  27. package/templates/agents/seo-specialist.md +111 -0
  28. package/templates/agents/test-engineer.md +158 -0
  29. package/templates/github/agents/backend-specialist.md +67 -0
  30. package/templates/github/agents/code-archaeologist.md +61 -0
  31. package/templates/github/agents/database-architect.md +73 -0
  32. package/templates/github/agents/debugger.md +71 -0
  33. package/templates/github/agents/devops-engineer.md +85 -0
  34. package/templates/github/agents/documentation-writer.md +107 -0
  35. package/templates/github/agents/explorer-agent.md +87 -0
  36. package/templates/github/agents/frontend-specialist.md +54 -0
  37. package/templates/github/agents/game-developer.md +94 -0
  38. package/templates/github/agents/mobile-developer.md +75 -0
  39. package/templates/github/agents/orchestrator.md +48 -0
  40. package/templates/github/agents/penetration-tester.md +87 -0
  41. package/templates/github/agents/performance-optimizer.md +70 -0
  42. package/templates/github/agents/product-manager.md +85 -0
  43. package/templates/github/agents/product-owner.md +77 -0
  44. package/templates/github/agents/project-planner.md +83 -0
  45. package/templates/github/agents/qa-automation-engineer.md +95 -0
  46. package/templates/github/agents/security-auditor.md +72 -0
  47. package/templates/github/agents/seo-specialist.md +78 -0
  48. package/templates/github/agents/test-engineer.md +79 -0
  49. package/templates/github/instructions/database.instructions.md +74 -0
  50. package/templates/github/instructions/python.instructions.md +76 -0
  51. package/templates/github/instructions/security.instructions.md +73 -0
  52. package/templates/github/instructions/typescript.instructions.md +50 -0
  53. package/templates/rules/GEMINI.md +273 -0
  54. package/templates/scripts/mcp-server.js +704 -0
  55. package/templates/skills/core/behavioral-modes/SKILL.md +242 -0
  56. package/templates/skills/core/brainstorming/SKILL.md +163 -0
  57. package/templates/skills/core/brainstorming/dynamic-questioning.md +350 -0
  58. package/templates/skills/core/clean-code/SKILL.md +201 -0
  59. package/templates/skills/core/intelligent-routing/SKILL.md +335 -0
  60. package/templates/skills/core/mcp-builder/SKILL.md +176 -0
  61. package/templates/skills/core/parallel-agents/SKILL.md +175 -0
  62. package/templates/skills/core/plan-writing/SKILL.md +152 -0
  63. package/templates/skills/optional/api-patterns/SKILL.md +81 -0
  64. package/templates/skills/optional/api-patterns/api-style.md +42 -0
  65. package/templates/skills/optional/api-patterns/auth.md +24 -0
  66. package/templates/skills/optional/api-patterns/documentation.md +26 -0
  67. package/templates/skills/optional/api-patterns/graphql.md +41 -0
  68. package/templates/skills/optional/api-patterns/rate-limiting.md +31 -0
  69. package/templates/skills/optional/api-patterns/response.md +37 -0
  70. package/templates/skills/optional/api-patterns/rest.md +40 -0
  71. package/templates/skills/optional/api-patterns/scripts/api_validator.py +211 -0
  72. package/templates/skills/optional/api-patterns/security-testing.md +122 -0
  73. package/templates/skills/optional/api-patterns/trpc.md +41 -0
  74. package/templates/skills/optional/api-patterns/versioning.md +22 -0
  75. package/templates/skills/optional/app-builder/SKILL.md +75 -0
  76. package/templates/skills/optional/app-builder/agent-coordination.md +71 -0
  77. package/templates/skills/optional/app-builder/feature-building.md +53 -0
  78. package/templates/skills/optional/app-builder/project-detection.md +34 -0
  79. package/templates/skills/optional/app-builder/scaffolding.md +118 -0
  80. package/templates/skills/optional/app-builder/tech-stack.md +40 -0
  81. package/templates/skills/optional/app-builder/templates/SKILL.md +39 -0
  82. package/templates/skills/optional/app-builder/templates/astro-static/TEMPLATE.md +76 -0
  83. package/templates/skills/optional/app-builder/templates/chrome-extension/TEMPLATE.md +92 -0
  84. package/templates/skills/optional/app-builder/templates/cli-tool/TEMPLATE.md +88 -0
  85. package/templates/skills/optional/app-builder/templates/electron-desktop/TEMPLATE.md +88 -0
  86. package/templates/skills/optional/app-builder/templates/express-api/TEMPLATE.md +83 -0
  87. package/templates/skills/optional/app-builder/templates/flutter-app/TEMPLATE.md +90 -0
  88. package/templates/skills/optional/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -0
  89. package/templates/skills/optional/app-builder/templates/nextjs-fullstack/TEMPLATE.md +82 -0
  90. package/templates/skills/optional/app-builder/templates/nextjs-saas/TEMPLATE.md +100 -0
  91. package/templates/skills/optional/app-builder/templates/nextjs-static/TEMPLATE.md +106 -0
  92. package/templates/skills/optional/app-builder/templates/nuxt-app/TEMPLATE.md +101 -0
  93. package/templates/skills/optional/app-builder/templates/python-fastapi/TEMPLATE.md +83 -0
  94. package/templates/skills/optional/app-builder/templates/react-native-app/TEMPLATE.md +93 -0
  95. package/templates/skills/optional/architecture/SKILL.md +55 -0
  96. package/templates/skills/optional/architecture/context-discovery.md +43 -0
  97. package/templates/skills/optional/architecture/examples.md +94 -0
  98. package/templates/skills/optional/architecture/pattern-selection.md +68 -0
  99. package/templates/skills/optional/architecture/patterns-reference.md +50 -0
  100. package/templates/skills/optional/architecture/trade-off-analysis.md +77 -0
  101. package/templates/skills/optional/bash-linux/SKILL.md +199 -0
  102. package/templates/skills/optional/code-review-checklist/SKILL.md +109 -0
  103. package/templates/skills/optional/database-design/SKILL.md +52 -0
  104. package/templates/skills/optional/database-design/database-selection.md +43 -0
  105. package/templates/skills/optional/database-design/indexing.md +39 -0
  106. package/templates/skills/optional/database-design/migrations.md +48 -0
  107. package/templates/skills/optional/database-design/optimization.md +36 -0
  108. package/templates/skills/optional/database-design/orm-selection.md +30 -0
  109. package/templates/skills/optional/database-design/schema-design.md +56 -0
  110. package/templates/skills/optional/database-design/scripts/schema_validator.py +172 -0
  111. package/templates/skills/optional/deployment-procedures/SKILL.md +241 -0
  112. package/templates/skills/optional/documentation-templates/SKILL.md +194 -0
  113. package/templates/skills/optional/frontend-design/SKILL.md +418 -0
  114. package/templates/skills/optional/frontend-design/animation-guide.md +331 -0
  115. package/templates/skills/optional/frontend-design/color-system.md +311 -0
  116. package/templates/skills/optional/frontend-design/decision-trees.md +418 -0
  117. package/templates/skills/optional/frontend-design/motion-graphics.md +306 -0
  118. package/templates/skills/optional/frontend-design/scripts/accessibility_checker.py +183 -0
  119. package/templates/skills/optional/frontend-design/scripts/ux_audit.py +722 -0
  120. package/templates/skills/optional/frontend-design/typography-system.md +345 -0
  121. package/templates/skills/optional/frontend-design/ux-psychology.md +541 -0
  122. package/templates/skills/optional/frontend-design/visual-effects.md +383 -0
  123. package/templates/skills/optional/game-development/2d-games/SKILL.md +119 -0
  124. package/templates/skills/optional/game-development/3d-games/SKILL.md +135 -0
  125. package/templates/skills/optional/game-development/SKILL.md +167 -0
  126. package/templates/skills/optional/game-development/game-art/SKILL.md +185 -0
  127. package/templates/skills/optional/game-development/game-audio/SKILL.md +190 -0
  128. package/templates/skills/optional/game-development/game-design/SKILL.md +129 -0
  129. package/templates/skills/optional/game-development/mobile-games/SKILL.md +108 -0
  130. package/templates/skills/optional/game-development/multiplayer/SKILL.md +132 -0
  131. package/templates/skills/optional/game-development/pc-games/SKILL.md +144 -0
  132. package/templates/skills/optional/game-development/vr-ar/SKILL.md +123 -0
  133. package/templates/skills/optional/game-development/web-games/SKILL.md +150 -0
  134. package/templates/skills/optional/geo-fundamentals/SKILL.md +156 -0
  135. package/templates/skills/optional/geo-fundamentals/scripts/geo_checker.py +289 -0
  136. package/templates/skills/optional/i18n-localization/SKILL.md +154 -0
  137. package/templates/skills/optional/i18n-localization/scripts/i18n_checker.py +241 -0
  138. package/templates/skills/optional/lint-and-validate/SKILL.md +45 -0
  139. package/templates/skills/optional/lint-and-validate/scripts/lint_runner.py +172 -0
  140. package/templates/skills/optional/lint-and-validate/scripts/type_coverage.py +173 -0
  141. package/templates/skills/optional/mobile-design/SKILL.md +394 -0
  142. package/templates/skills/optional/mobile-design/decision-trees.md +516 -0
  143. package/templates/skills/optional/mobile-design/mobile-backend.md +491 -0
  144. package/templates/skills/optional/mobile-design/mobile-color-system.md +420 -0
  145. package/templates/skills/optional/mobile-design/mobile-debugging.md +122 -0
  146. package/templates/skills/optional/mobile-design/mobile-design-thinking.md +357 -0
  147. package/templates/skills/optional/mobile-design/mobile-navigation.md +458 -0
  148. package/templates/skills/optional/mobile-design/mobile-performance.md +767 -0
  149. package/templates/skills/optional/mobile-design/mobile-testing.md +356 -0
  150. package/templates/skills/optional/mobile-design/mobile-typography.md +433 -0
  151. package/templates/skills/optional/mobile-design/platform-android.md +666 -0
  152. package/templates/skills/optional/mobile-design/platform-ios.md +561 -0
  153. package/templates/skills/optional/mobile-design/scripts/mobile_audit.py +670 -0
  154. package/templates/skills/optional/mobile-design/touch-psychology.md +537 -0
  155. package/templates/skills/optional/nextjs-react-expert/1-async-eliminating-waterfalls.md +312 -0
  156. package/templates/skills/optional/nextjs-react-expert/2-bundle-bundle-size-optimization.md +240 -0
  157. package/templates/skills/optional/nextjs-react-expert/3-server-server-side-performance.md +490 -0
  158. package/templates/skills/optional/nextjs-react-expert/4-client-client-side-data-fetching.md +264 -0
  159. package/templates/skills/optional/nextjs-react-expert/5-rerender-re-render-optimization.md +581 -0
  160. package/templates/skills/optional/nextjs-react-expert/6-rendering-rendering-performance.md +432 -0
  161. package/templates/skills/optional/nextjs-react-expert/7-js-javascript-performance.md +684 -0
  162. package/templates/skills/optional/nextjs-react-expert/8-advanced-advanced-patterns.md +150 -0
  163. package/templates/skills/optional/nextjs-react-expert/SKILL.md +267 -0
  164. package/templates/skills/optional/nextjs-react-expert/scripts/convert_rules.py +222 -0
  165. package/templates/skills/optional/nextjs-react-expert/scripts/react_performance_checker.py +252 -0
  166. package/templates/skills/optional/nodejs-best-practices/SKILL.md +333 -0
  167. package/templates/skills/optional/performance-profiling/SKILL.md +143 -0
  168. package/templates/skills/optional/performance-profiling/scripts/lighthouse_audit.py +76 -0
  169. package/templates/skills/optional/powershell-windows/SKILL.md +167 -0
  170. package/templates/skills/optional/python-patterns/SKILL.md +441 -0
  171. package/templates/skills/optional/red-team-tactics/SKILL.md +199 -0
  172. package/templates/skills/optional/seo-fundamentals/SKILL.md +129 -0
  173. package/templates/skills/optional/seo-fundamentals/scripts/seo_checker.py +219 -0
  174. package/templates/skills/optional/server-management/SKILL.md +161 -0
  175. package/templates/skills/optional/systematic-debugging/SKILL.md +109 -0
  176. package/templates/skills/optional/tailwind-patterns/SKILL.md +269 -0
  177. package/templates/skills/optional/tdd-workflow/SKILL.md +149 -0
  178. package/templates/skills/optional/testing-patterns/SKILL.md +178 -0
  179. package/templates/skills/optional/testing-patterns/scripts/test_runner.py +219 -0
  180. package/templates/skills/optional/vulnerability-scanner/SKILL.md +276 -0
  181. package/templates/skills/optional/vulnerability-scanner/checklists.md +121 -0
  182. package/templates/skills/optional/vulnerability-scanner/scripts/security_scan.py +458 -0
  183. package/templates/skills/optional/web-design-guidelines/SKILL.md +57 -0
  184. package/templates/skills/optional/webapp-testing/SKILL.md +187 -0
  185. package/templates/skills/optional/webapp-testing/scripts/playwright_runner.py +173 -0
  186. package/templates/workflows/brainstorm.md +113 -0
  187. package/templates/workflows/create.md +59 -0
  188. package/templates/workflows/debug.md +103 -0
  189. package/templates/workflows/deploy.md +176 -0
  190. package/templates/workflows/enhance.md +63 -0
  191. package/templates/workflows/orchestrate.md +237 -0
  192. package/templates/workflows/plan.md +89 -0
  193. package/templates/workflows/preview.md +81 -0
  194. package/templates/workflows/status.md +86 -0
  195. package/templates/workflows/test.md +144 -0
  196. package/templates/workflows/ui-ux-pro-max.md +296 -0
@@ -0,0 +1,150 @@
1
+ # 8. Advanced Patterns
2
+
3
+ > **Impact:** VARIABLE
4
+ > **Focus:** Advanced patterns for specific cases that require careful implementation.
5
+
6
+ ---
7
+
8
+ ## Overview
9
+
10
+ This section contains **3 rules** focused on advanced patterns.
11
+
12
+ ---
13
+
14
+ ## Rule 8.1: Initialize App Once, Not Per Mount
15
+
16
+ **Impact:** LOW-MEDIUM
17
+ **Tags:** initialization, useEffect, app-startup, side-effects
18
+
19
+ ## Initialize App Once, Not Per Mount
20
+
21
+ Do not put app-wide initialization that must run once per app load inside `useEffect([])` of a component. Components can remount and effects will re-run. Use a module-level guard or top-level init in the entry module instead.
22
+
23
+ **Incorrect (runs twice in dev, re-runs on remount):**
24
+
25
+ ```tsx
26
+ function Comp() {
27
+ useEffect(() => {
28
+ loadFromStorage()
29
+ checkAuthToken()
30
+ }, [])
31
+
32
+ // ...
33
+ }
34
+ ```
35
+
36
+ **Correct (once per app load):**
37
+
38
+ ```tsx
39
+ let didInit = false
40
+
41
+ function Comp() {
42
+ useEffect(() => {
43
+ if (didInit) return
44
+ didInit = true
45
+ loadFromStorage()
46
+ checkAuthToken()
47
+ }, [])
48
+
49
+ // ...
50
+ }
51
+ ```
52
+
53
+ Reference: [Initializing the application](https://react.dev/learn/you-might-not-need-an-effect#initializing-the-application)
54
+
55
+ ---
56
+
57
+ ## Rule 8.2: Store Event Handlers in Refs
58
+
59
+ **Impact:** LOW
60
+ **Tags:** advanced, hooks, refs, event-handlers, optimization
61
+
62
+ ## Store Event Handlers in Refs
63
+
64
+ Store callbacks in refs when used in effects that shouldn't re-subscribe on callback changes.
65
+
66
+ **Incorrect (re-subscribes on every render):**
67
+
68
+ ```tsx
69
+ function useWindowEvent(event: string, handler: (e) => void) {
70
+ useEffect(() => {
71
+ window.addEventListener(event, handler)
72
+ return () => window.removeEventListener(event, handler)
73
+ }, [event, handler])
74
+ }
75
+ ```
76
+
77
+ **Correct (stable subscription):**
78
+
79
+ ```tsx
80
+ function useWindowEvent(event: string, handler: (e) => void) {
81
+ const handlerRef = useRef(handler)
82
+ useEffect(() => {
83
+ handlerRef.current = handler
84
+ }, [handler])
85
+
86
+ useEffect(() => {
87
+ const listener = (e) => handlerRef.current(e)
88
+ window.addEventListener(event, listener)
89
+ return () => window.removeEventListener(event, listener)
90
+ }, [event])
91
+ }
92
+ ```
93
+
94
+ **Alternative: use `useEffectEvent` if you're on latest React:**
95
+
96
+ ```tsx
97
+ import { useEffectEvent } from 'react'
98
+
99
+ function useWindowEvent(event: string, handler: (e) => void) {
100
+ const onEvent = useEffectEvent(handler)
101
+
102
+ useEffect(() => {
103
+ window.addEventListener(event, onEvent)
104
+ return () => window.removeEventListener(event, onEvent)
105
+ }, [event])
106
+ }
107
+ ```
108
+
109
+ `useEffectEvent` provides a cleaner API for the same pattern: it creates a stable function reference that always calls the latest version of the handler.
110
+
111
+ ---
112
+
113
+ ## Rule 8.3: useEffectEvent for Stable Callback Refs
114
+
115
+ **Impact:** LOW
116
+ **Tags:** advanced, hooks, useEffectEvent, refs, optimization
117
+
118
+ ## useEffectEvent for Stable Callback Refs
119
+
120
+ Access latest values in callbacks without adding them to dependency arrays. Prevents effect re-runs while avoiding stale closures.
121
+
122
+ **Incorrect (effect re-runs on every callback change):**
123
+
124
+ ```tsx
125
+ function SearchInput({ onSearch }: { onSearch: (q: string) => void }) {
126
+ const [query, setQuery] = useState('')
127
+
128
+ useEffect(() => {
129
+ const timeout = setTimeout(() => onSearch(query), 300)
130
+ return () => clearTimeout(timeout)
131
+ }, [query, onSearch])
132
+ }
133
+ ```
134
+
135
+ **Correct (using React's useEffectEvent):**
136
+
137
+ ```tsx
138
+ import { useEffectEvent } from 'react';
139
+
140
+ function SearchInput({ onSearch }: { onSearch: (q: string) => void }) {
141
+ const [query, setQuery] = useState('')
142
+ const onSearchEvent = useEffectEvent(onSearch)
143
+
144
+ useEffect(() => {
145
+ const timeout = setTimeout(() => onSearchEvent(query), 300)
146
+ return () => clearTimeout(timeout)
147
+ }, [query])
148
+ }
149
+ ```
150
+
@@ -0,0 +1,267 @@
1
+ ---
2
+ name: nextjs-react-expert
3
+ description: React and Next.js performance optimization from Vercel Engineering. Use when building React components, optimizing performance, eliminating waterfalls, reducing bundle size, reviewing code for performance issues, or implementing server/client-side optimizations.
4
+ allowed-tools: Read, Write, Edit, Glob, Grep, Bash
5
+ ---
6
+
7
+ # Next.js & React Performance Expert
8
+
9
+ > **From Vercel Engineering** - 57 optimization rules prioritized by impact
10
+ > **Philosophy:** Eliminate waterfalls first, optimize bundles second, then micro-optimize.
11
+
12
+ ---
13
+
14
+ ## 🎯 Selective Reading Rule (MANDATORY)
15
+
16
+ **Read ONLY sections relevant to your task!** Check the content map below and load what you need.
17
+
18
+ > 🔴 **For performance reviews: Start with CRITICAL sections (1-2), then move to HIGH/MEDIUM.**
19
+
20
+ ---
21
+
22
+ ## 📑 Content Map
23
+
24
+ | File | Impact | Rules | When to Read |
25
+ |------|--------|-------|--------------|
26
+ | `1-async-eliminating-waterfalls.md` | 🔴 **CRITICAL** | 5 rules | Slow page loads, sequential API calls, data fetching waterfalls |
27
+ | `2-bundle-bundle-size-optimization.md` | 🔴 **CRITICAL** | 5 rules | Large bundle size, slow Time to Interactive, First Load issues |
28
+ | `3-server-server-side-performance.md` | 🟠 **HIGH** | 7 rules | Slow SSR, API route optimization, server-side waterfalls |
29
+ | `4-client-client-side-data-fetching.md` | 🟡 **MEDIUM-HIGH** | 4 rules | Client data management, SWR patterns, deduplication |
30
+ | `5-rerender-re-render-optimization.md` | 🟡 **MEDIUM** | 12 rules | Excessive re-renders, React performance, memoization |
31
+ | `6-rendering-rendering-performance.md` | 🟡 **MEDIUM** | 9 rules | Rendering bottlenecks, virtualization, image optimization |
32
+ | `7-js-javascript-performance.md` | ⚪ **LOW-MEDIUM** | 12 rules | Micro-optimizations, caching, loop performance |
33
+ | `8-advanced-advanced-patterns.md` | 🔵 **VARIABLE** | 3 rules | Advanced React patterns, useLatest, init-once |
34
+
35
+ **Total: 57 rules across 8 categories**
36
+
37
+ ---
38
+
39
+ ## 🚀 Quick Decision Tree
40
+
41
+ **What's your performance issue?**
42
+
43
+ ```
44
+ 🐌 Slow page loads / Long Time to Interactive
45
+ → Read Section 1: Eliminating Waterfalls
46
+ → Read Section 2: Bundle Size Optimization
47
+
48
+ 📦 Large bundle size (> 200KB)
49
+ → Read Section 2: Bundle Size Optimization
50
+ → Check: Dynamic imports, barrel imports, tree-shaking
51
+
52
+ 🖥️ Slow Server-Side Rendering
53
+ → Read Section 3: Server-Side Performance
54
+ → Check: Parallel data fetching, streaming
55
+
56
+ 🔄 Too many re-renders / UI lag
57
+ → Read Section 5: Re-render Optimization
58
+ → Check: React.memo, useMemo, useCallback
59
+
60
+ 🎨 Rendering performance issues
61
+ → Read Section 6: Rendering Performance
62
+ → Check: Virtualization, layout thrashing
63
+
64
+ 🌐 Client-side data fetching problems
65
+ → Read Section 4: Client-Side Data Fetching
66
+ → Check: SWR deduplication, localStorage
67
+
68
+ ✨ Need advanced patterns
69
+ → Read Section 8: Advanced Patterns
70
+ ```
71
+
72
+ ---
73
+
74
+ ## 📊 Impact Priority Guide
75
+
76
+ **Use this order when doing comprehensive optimization:**
77
+
78
+ ```
79
+ 1️⃣ CRITICAL (Biggest Gains - Do First):
80
+ ├─ Section 1: Eliminating Waterfalls
81
+ │ └─ Each waterfall adds full network latency (100-500ms+)
82
+ └─ Section 2: Bundle Size Optimization
83
+ └─ Affects Time to Interactive and Largest Contentful Paint
84
+
85
+ 2️⃣ HIGH (Significant Impact - Do Second):
86
+ └─ Section 3: Server-Side Performance
87
+ └─ Eliminates server-side waterfalls, faster response times
88
+
89
+ 3️⃣ MEDIUM (Moderate Gains - Do Third):
90
+ ├─ Section 4: Client-Side Data Fetching
91
+ ├─ Section 5: Re-render Optimization
92
+ └─ Section 6: Rendering Performance
93
+
94
+ 4️⃣ LOW (Polish - Do Last):
95
+ ├─ Section 7: JavaScript Performance
96
+ └─ Section 8: Advanced Patterns
97
+ ```
98
+
99
+ ---
100
+
101
+ ## 🔗 Related Skills
102
+
103
+ | Need | Skill |
104
+ |------|-------|
105
+ | API design patterns | `@[skills/api-patterns]` |
106
+ | Database optimization | `@[skills/database-design]` |
107
+ | Testing strategies | `@[skills/testing-patterns]` |
108
+ | UI/UX design principles | `@[skills/frontend-design]` |
109
+ | TypeScript patterns | `@[skills/typescript-expert]` |
110
+ | Deployment & DevOps | `@[skills/deployment-procedures]` |
111
+
112
+ ---
113
+
114
+ ## ✅ Performance Review Checklist
115
+
116
+ Before shipping to production:
117
+
118
+ **Critical (Must Fix):**
119
+ - [ ] No sequential data fetching (waterfalls eliminated)
120
+ - [ ] Bundle size < 200KB for main bundle
121
+ - [ ] No barrel imports in app code
122
+ - [ ] Dynamic imports used for large components
123
+ - [ ] Parallel data fetching where possible
124
+
125
+ **High Priority:**
126
+ - [ ] Server components used where appropriate
127
+ - [ ] API routes optimized (no N+1 queries)
128
+ - [ ] Suspense boundaries for data fetching
129
+ - [ ] Static generation used where possible
130
+
131
+ **Medium Priority:**
132
+ - [ ] Expensive computations memoized
133
+ - [ ] List rendering virtualized (if > 100 items)
134
+ - [ ] Images optimized with next/image
135
+ - [ ] No unnecessary re-renders
136
+
137
+ **Low Priority (Polish):**
138
+ - [ ] Hot path loops optimized
139
+ - [ ] RegExp patterns hoisted
140
+ - [ ] Property access cached in loops
141
+
142
+ ---
143
+
144
+ ## ❌ Anti-Patterns (Common Mistakes)
145
+
146
+ **DON'T:**
147
+ - ❌ Use sequential `await` for independent operations
148
+ - ❌ Import entire libraries when you need one function
149
+ - ❌ Use barrel exports (`index.ts` re-exports) in app code
150
+ - ❌ Skip dynamic imports for large components/libraries
151
+ - ❌ Fetch data in useEffect without deduplication
152
+ - ❌ Forget to memoize expensive computations
153
+ - ❌ Use client components when server components work
154
+
155
+ **DO:**
156
+ - ✅ Fetch data in parallel with `Promise.all()`
157
+ - ✅ Use dynamic imports: `const Comp = dynamic(() => import('./Heavy'))`
158
+ - ✅ Import directly: `import { specific } from 'library/specific'`
159
+ - ✅ Use Suspense boundaries for better UX
160
+ - ✅ Leverage React Server Components
161
+ - ✅ Measure performance before optimizing
162
+ - ✅ Use Next.js built-in optimizations (next/image, next/font)
163
+
164
+ ---
165
+
166
+ ## 🎯 How to Use This Skill
167
+
168
+ ### For New Features:
169
+ 1. Check **Section 1 & 2** while building (prevent waterfalls, keep bundle small)
170
+ 2. Use server components by default (Section 3)
171
+ 3. Apply memoization for expensive operations (Section 5)
172
+
173
+ ### For Performance Reviews:
174
+ 1. Start with **Section 1** (waterfalls = biggest impact)
175
+ 2. Then **Section 2** (bundle size)
176
+ 3. Then **Section 3** (server-side)
177
+ 4. Finally other sections as needed
178
+
179
+ ### For Debugging Slow Performance:
180
+ 1. Identify the symptom (slow load, lag, etc.)
181
+ 2. Use Quick Decision Tree above
182
+ 3. Read relevant section
183
+ 4. Apply fixes in priority order
184
+
185
+ ---
186
+
187
+ ## 📚 Learning Path
188
+
189
+ **Beginner (Focus on Critical):**
190
+ → Section 1: Eliminating Waterfalls
191
+ → Section 2: Bundle Size Optimization
192
+
193
+ **Intermediate (Add High Priority):**
194
+ → Section 3: Server-Side Performance
195
+ → Section 5: Re-render Optimization
196
+
197
+ **Advanced (Full Optimization):**
198
+ → All sections + Section 8: Advanced Patterns
199
+
200
+ ---
201
+
202
+ ## 🔍 Validation Script
203
+
204
+ | Script | Purpose | Command |
205
+ |--------|---------|---------|
206
+ | `scripts/react_performance_checker.py` | Automated performance audit | `python scripts/react_performance_checker.py <project_path>` |
207
+
208
+ ---
209
+
210
+ ## 📖 Section Details
211
+
212
+ ### Section 1: Eliminating Waterfalls (CRITICAL)
213
+ **Impact:** Each waterfall adds 100-500ms+ latency
214
+ **Key Concepts:** Parallel fetching, Promise.all(), Suspense boundaries, preloading
215
+
216
+ ### Section 2: Bundle Size Optimization (CRITICAL)
217
+ **Impact:** Directly affects Time to Interactive, Largest Contentful Paint
218
+ **Key Concepts:** Dynamic imports, tree-shaking, barrel import avoidance
219
+
220
+ ### Section 3: Server-Side Performance (HIGH)
221
+ **Impact:** Faster server responses, better SEO
222
+ **Key Concepts:** Parallel server fetching, streaming, API route optimization
223
+
224
+ ### Section 4: Client-Side Data Fetching (MEDIUM-HIGH)
225
+ **Impact:** Reduces redundant requests, better UX
226
+ **Key Concepts:** SWR deduplication, localStorage caching, event listeners
227
+
228
+ ### Section 5: Re-render Optimization (MEDIUM)
229
+ **Impact:** Smoother UI, less wasted computation
230
+ **Key Concepts:** React.memo, useMemo, useCallback, component structure
231
+
232
+ ### Section 6: Rendering Performance (MEDIUM)
233
+ **Impact:** Better rendering efficiency
234
+ **Key Concepts:** Virtualization, image optimization, layout thrashing
235
+
236
+ ### Section 7: JavaScript Performance (LOW-MEDIUM)
237
+ **Impact:** Incremental improvements in hot paths
238
+ **Key Concepts:** Loop optimization, caching, RegExp hoisting
239
+
240
+ ### Section 8: Advanced Patterns (VARIABLE)
241
+ **Impact:** Specific use cases
242
+ **Key Concepts:** useLatest hook, init-once patterns, event handler refs
243
+
244
+ ---
245
+
246
+ ## 🎓 Best Practices Summary
247
+
248
+ **Golden Rules:**
249
+ 1. **Measure first** - Use React DevTools Profiler, Chrome DevTools
250
+ 2. **Biggest impact first** - Waterfalls → Bundle → Server → Micro
251
+ 3. **Don't over-optimize** - Focus on real bottlenecks
252
+ 4. **Use platform features** - Next.js has optimizations built-in
253
+ 5. **Think about users** - Real-world conditions matter
254
+
255
+ **Performance Mindset:**
256
+ - Every `await` in sequence = potential waterfall
257
+ - Every `import` = potential bundle bloat
258
+ - Every re-render = wasted computation (if unnecessary)
259
+ - Server components = less JavaScript to ship
260
+ - Measure, don't guess
261
+
262
+ ---
263
+
264
+ **Source:** Vercel Engineering
265
+ **Date:** January 2026
266
+ **Version:** 1.0.0
267
+ **Total Rules:** 57 across 8 categories
@@ -0,0 +1,222 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Conversion Script: React Best Practices → .agent Format
4
+ Merges 59 individual rules into 8 grouped section files
5
+ """
6
+
7
+ import os
8
+ import re
9
+ from pathlib import Path
10
+ from typing import Dict, List, Tuple
11
+
12
+ # Section metadata from _sections.md
13
+ SECTIONS = {
14
+ 'async': {
15
+ 'number': 1,
16
+ 'title': 'Eliminating Waterfalls',
17
+ 'impact': 'CRITICAL',
18
+ 'description': 'Waterfalls are the #1 performance killer. Each sequential await adds full network latency. Eliminating them yields the largest gains.'
19
+ },
20
+ 'bundle': {
21
+ 'number': 2,
22
+ 'title': 'Bundle Size Optimization',
23
+ 'impact': 'CRITICAL',
24
+ 'description': 'Reducing initial bundle size improves Time to Interactive and Largest Contentful Paint.'
25
+ },
26
+ 'server': {
27
+ 'number': 3,
28
+ 'title': 'Server-Side Performance',
29
+ 'impact': 'HIGH',
30
+ 'description': 'Optimizing server-side rendering and data fetching eliminates server-side waterfalls and reduces response times.'
31
+ },
32
+ 'client': {
33
+ 'number': 4,
34
+ 'title': 'Client-Side Data Fetching',
35
+ 'impact': 'MEDIUM-HIGH',
36
+ 'description': 'Automatic deduplication and efficient data fetching patterns reduce redundant network requests.'
37
+ },
38
+ 'rerender': {
39
+ 'number': 5,
40
+ 'title': 'Re-render Optimization',
41
+ 'impact': 'MEDIUM',
42
+ 'description': 'Reducing unnecessary re-renders minimizes wasted computation and improves UI responsiveness.'
43
+ },
44
+ 'rendering': {
45
+ 'number': 6,
46
+ 'title': 'Rendering Performance',
47
+ 'impact': 'MEDIUM',
48
+ 'description': 'Optimizing the rendering process reduces the work the browser needs to do.'
49
+ },
50
+ 'js': {
51
+ 'number': 7,
52
+ 'title': 'JavaScript Performance',
53
+ 'impact': 'LOW-MEDIUM',
54
+ 'description': 'Micro-optimizations for hot paths can add up to meaningful improvements.'
55
+ },
56
+ 'advanced': {
57
+ 'number': 8,
58
+ 'title': 'Advanced Patterns',
59
+ 'impact': 'VARIABLE',
60
+ 'description': 'Advanced patterns for specific cases that require careful implementation.'
61
+ }
62
+ }
63
+
64
+
65
+ def parse_frontmatter(content: str) -> Tuple[Dict, str]:
66
+ """Parse markdown frontmatter and body"""
67
+ if not content.startswith('---'):
68
+ return {}, content
69
+
70
+ parts = content.split('---', 2)
71
+ if len(parts) < 3:
72
+ return {}, content
73
+
74
+ # Parse YAML frontmatter manually (simple key: value)
75
+ frontmatter = {}
76
+ for line in parts[1].strip().split('\n'):
77
+ if ':' in line:
78
+ key, value = line.split(':', 1)
79
+ frontmatter[key.strip()] = value.strip()
80
+
81
+ body = parts[2].strip()
82
+ return frontmatter, body
83
+
84
+
85
+ def parse_rule_file(filepath: Path) -> Dict:
86
+ """Parse a single rule file"""
87
+ with open(filepath, 'r', encoding='utf-8') as f:
88
+ content = f.read()
89
+
90
+ frontmatter, body = parse_frontmatter(content)
91
+
92
+ # Extract prefix from filename
93
+ filename = filepath.stem
94
+ prefix = filename.split('-')[0]
95
+
96
+ return {
97
+ 'filename': filepath.name,
98
+ 'prefix': prefix,
99
+ 'title': frontmatter.get('title', filename),
100
+ 'impact': frontmatter.get('impact', ''),
101
+ 'impactDescription': frontmatter.get('impactDescription', ''),
102
+ 'tags': frontmatter.get('tags', ''),
103
+ 'body': body,
104
+ 'frontmatter': frontmatter
105
+ }
106
+
107
+
108
+ def group_rules_by_section(rules_dir: Path) -> Dict[str, List[Dict]]:
109
+ """Group all rules by their section prefix"""
110
+ grouped = {prefix: [] for prefix in SECTIONS.keys()}
111
+
112
+ for rule_file in sorted(rules_dir.glob('*.md')):
113
+ # Skip special files
114
+ if rule_file.name.startswith('_'):
115
+ continue
116
+
117
+ rule = parse_rule_file(rule_file)
118
+ prefix = rule['prefix']
119
+
120
+ if prefix in grouped:
121
+ grouped[prefix].append(rule)
122
+ else:
123
+ print(f"[WARNING] Unknown prefix '{prefix}' in file: {rule_file.name}")
124
+
125
+ return grouped
126
+
127
+
128
+ def generate_section_file(section_prefix: str, rules: List[Dict], output_dir: Path):
129
+ """Generate a merged section file"""
130
+ if not rules:
131
+ print(f"[WARNING] No rules found for section: {section_prefix}")
132
+ return
133
+
134
+ section_meta = SECTIONS[section_prefix]
135
+ section_num = section_meta['number']
136
+ section_title = section_meta['title']
137
+ impact = section_meta['impact']
138
+ description = section_meta['description']
139
+
140
+ # Sort rules by title
141
+ rules.sort(key=lambda r: r['title'])
142
+
143
+ # Build content
144
+ content = f"""# {section_num}. {section_title}
145
+
146
+ > **Impact:** {impact}
147
+ > **Focus:** {description}
148
+
149
+ ---
150
+
151
+ ## Overview
152
+
153
+ This section contains **{len(rules)} rules** focused on {section_title.lower()}.
154
+
155
+ """
156
+
157
+ # Add each rule
158
+ for i, rule in enumerate(rules, 1):
159
+ rule_id = f"{section_num}.{i}"
160
+ title = rule['title']
161
+ rule_impact = rule['impact']
162
+ tags = rule['tags']
163
+ body = rule['body']
164
+
165
+ content += f"""---
166
+
167
+ ## Rule {rule_id}: {title}
168
+
169
+ """
170
+
171
+ if rule_impact:
172
+ content += f"**Impact:** {rule_impact} \n"
173
+
174
+ if tags:
175
+ content += f"**Tags:** {tags} \n"
176
+
177
+ content += f"\n{body}\n\n"
178
+
179
+ # Write file
180
+ output_file = output_dir / f"{section_num}-{section_prefix}-{section_title.lower().replace(' ', '-')}.md"
181
+ output_file.write_text(content, encoding='utf-8')
182
+ print(f"[OK] Generated: {output_file.name} ({len(rules)} rules)")
183
+
184
+
185
+ def main():
186
+ """Main conversion function"""
187
+ # Paths
188
+ base_dir = Path(__file__).parent.parent.parent.parent.parent
189
+ rules_dir = base_dir / "others/agent-skills/skills/react-best-practices/rules"
190
+ output_dir = base_dir / ".agent/skills/nextjs-react-expert"
191
+
192
+ print(f"[*] Reading rules from: {rules_dir}")
193
+ print(f"[*] Output to: {output_dir}")
194
+ print()
195
+
196
+ # Check if rules directory exists
197
+ if not rules_dir.exists():
198
+ print(f"[ERROR] Rules directory not found: {rules_dir}")
199
+ return
200
+
201
+ # Group rules
202
+ print("[*] Grouping rules by section...")
203
+ grouped_rules = group_rules_by_section(rules_dir)
204
+
205
+ # Stats
206
+ total_rules = sum(len(rules) for rules in grouped_rules.values())
207
+ print(f"[*] Found {total_rules} total rules")
208
+ print()
209
+
210
+ # Generate section files
211
+ print("[*] Generating section files...")
212
+ for section_prefix in SECTIONS.keys():
213
+ rules = grouped_rules[section_prefix]
214
+ generate_section_file(section_prefix, rules, output_dir)
215
+
216
+ print()
217
+ print("[SUCCESS] Conversion complete!")
218
+ print(f"[*] Generated 8 section files from {total_rules} rules")
219
+
220
+
221
+ if __name__ == '__main__':
222
+ main()