@musashishao/agent-kit 1.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.

Potentially problematic release.


This version of @musashishao/agent-kit might be problematic. Click here for more details.

Files changed (220) hide show
  1. package/.agent/.shared/ui-ux-pro-max/data/charts.csv +26 -0
  2. package/.agent/.shared/ui-ux-pro-max/data/colors.csv +97 -0
  3. package/.agent/.shared/ui-ux-pro-max/data/icons.csv +101 -0
  4. package/.agent/.shared/ui-ux-pro-max/data/landing.csv +31 -0
  5. package/.agent/.shared/ui-ux-pro-max/data/products.csv +97 -0
  6. package/.agent/.shared/ui-ux-pro-max/data/prompts.csv +24 -0
  7. package/.agent/.shared/ui-ux-pro-max/data/react-performance.csv +45 -0
  8. package/.agent/.shared/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
  9. package/.agent/.shared/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
  10. package/.agent/.shared/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
  11. package/.agent/.shared/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
  12. package/.agent/.shared/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
  13. package/.agent/.shared/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
  14. package/.agent/.shared/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
  15. package/.agent/.shared/ui-ux-pro-max/data/stacks/react.csv +54 -0
  16. package/.agent/.shared/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
  17. package/.agent/.shared/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
  18. package/.agent/.shared/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
  19. package/.agent/.shared/ui-ux-pro-max/data/stacks/vue.csv +50 -0
  20. package/.agent/.shared/ui-ux-pro-max/data/styles.csv +59 -0
  21. package/.agent/.shared/ui-ux-pro-max/data/typography.csv +58 -0
  22. package/.agent/.shared/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
  23. package/.agent/.shared/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
  24. package/.agent/.shared/ui-ux-pro-max/data/web-interface.csv +31 -0
  25. package/.agent/.shared/ui-ux-pro-max/scripts/core.py +258 -0
  26. package/.agent/.shared/ui-ux-pro-max/scripts/design_system.py +487 -0
  27. package/.agent/.shared/ui-ux-pro-max/scripts/search.py +76 -0
  28. package/.agent/ARCHITECTURE.md +225 -0
  29. package/.agent/CONTEXT.md +229 -0
  30. package/.agent/FEATURE_ROADMAP.md +435 -0
  31. package/.agent/PROMPT_TEMPLATES.md +261 -0
  32. package/.agent/agents/backend-specialist.md +263 -0
  33. package/.agent/agents/database-architect.md +226 -0
  34. package/.agent/agents/debugger.md +225 -0
  35. package/.agent/agents/devops-engineer.md +242 -0
  36. package/.agent/agents/documentation-writer.md +104 -0
  37. package/.agent/agents/explorer-agent.md +73 -0
  38. package/.agent/agents/frontend-specialist.md +556 -0
  39. package/.agent/agents/game-developer.md +162 -0
  40. package/.agent/agents/mobile-developer.md +377 -0
  41. package/.agent/agents/orchestrator.md +416 -0
  42. package/.agent/agents/penetration-tester.md +188 -0
  43. package/.agent/agents/performance-optimizer.md +187 -0
  44. package/.agent/agents/project-planner.md +403 -0
  45. package/.agent/agents/security-auditor.md +170 -0
  46. package/.agent/agents/seo-specialist.md +111 -0
  47. package/.agent/agents/test-engineer.md +158 -0
  48. package/.agent/rules/GEMINI.md +251 -0
  49. package/.agent/skills/api-patterns/SKILL.md +81 -0
  50. package/.agent/skills/api-patterns/api-style.md +42 -0
  51. package/.agent/skills/api-patterns/auth.md +24 -0
  52. package/.agent/skills/api-patterns/documentation.md +26 -0
  53. package/.agent/skills/api-patterns/graphql.md +41 -0
  54. package/.agent/skills/api-patterns/rate-limiting.md +31 -0
  55. package/.agent/skills/api-patterns/response.md +37 -0
  56. package/.agent/skills/api-patterns/rest.md +40 -0
  57. package/.agent/skills/api-patterns/scripts/api_validator.py +211 -0
  58. package/.agent/skills/api-patterns/security-testing.md +122 -0
  59. package/.agent/skills/api-patterns/trpc.md +41 -0
  60. package/.agent/skills/api-patterns/versioning.md +22 -0
  61. package/.agent/skills/app-builder/SKILL.md +75 -0
  62. package/.agent/skills/app-builder/agent-coordination.md +71 -0
  63. package/.agent/skills/app-builder/feature-building.md +53 -0
  64. package/.agent/skills/app-builder/project-detection.md +34 -0
  65. package/.agent/skills/app-builder/scaffolding.md +118 -0
  66. package/.agent/skills/app-builder/tech-stack.md +40 -0
  67. package/.agent/skills/app-builder/templates/SKILL.md +39 -0
  68. package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -0
  69. package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -0
  70. package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -0
  71. package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -0
  72. package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +83 -0
  73. package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -0
  74. package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -0
  75. package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +82 -0
  76. package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +100 -0
  77. package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +106 -0
  78. package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +101 -0
  79. package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -0
  80. package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +93 -0
  81. package/.agent/skills/architecture/SKILL.md +55 -0
  82. package/.agent/skills/architecture/context-discovery.md +43 -0
  83. package/.agent/skills/architecture/examples.md +94 -0
  84. package/.agent/skills/architecture/pattern-selection.md +68 -0
  85. package/.agent/skills/architecture/patterns-reference.md +50 -0
  86. package/.agent/skills/architecture/trade-off-analysis.md +77 -0
  87. package/.agent/skills/bash-linux/SKILL.md +199 -0
  88. package/.agent/skills/behavioral-modes/SKILL.md +242 -0
  89. package/.agent/skills/brainstorming/SKILL.md +163 -0
  90. package/.agent/skills/brainstorming/dynamic-questioning.md +350 -0
  91. package/.agent/skills/clean-code/SKILL.md +201 -0
  92. package/.agent/skills/code-review-checklist/SKILL.md +109 -0
  93. package/.agent/skills/database-design/SKILL.md +52 -0
  94. package/.agent/skills/database-design/database-selection.md +43 -0
  95. package/.agent/skills/database-design/indexing.md +39 -0
  96. package/.agent/skills/database-design/migrations.md +48 -0
  97. package/.agent/skills/database-design/optimization.md +36 -0
  98. package/.agent/skills/database-design/orm-selection.md +30 -0
  99. package/.agent/skills/database-design/schema-design.md +56 -0
  100. package/.agent/skills/database-design/scripts/schema_validator.py +172 -0
  101. package/.agent/skills/deployment-procedures/SKILL.md +241 -0
  102. package/.agent/skills/doc.md +177 -0
  103. package/.agent/skills/docker-expert/SKILL.md +409 -0
  104. package/.agent/skills/documentation-templates/SKILL.md +194 -0
  105. package/.agent/skills/frontend-design/SKILL.md +396 -0
  106. package/.agent/skills/frontend-design/animation-guide.md +331 -0
  107. package/.agent/skills/frontend-design/color-system.md +311 -0
  108. package/.agent/skills/frontend-design/decision-trees.md +418 -0
  109. package/.agent/skills/frontend-design/motion-graphics.md +306 -0
  110. package/.agent/skills/frontend-design/scripts/accessibility_checker.py +183 -0
  111. package/.agent/skills/frontend-design/scripts/ux_audit.py +722 -0
  112. package/.agent/skills/frontend-design/typography-system.md +345 -0
  113. package/.agent/skills/frontend-design/ux-psychology.md +541 -0
  114. package/.agent/skills/frontend-design/visual-effects.md +383 -0
  115. package/.agent/skills/game-development/2d-games/SKILL.md +119 -0
  116. package/.agent/skills/game-development/3d-games/SKILL.md +135 -0
  117. package/.agent/skills/game-development/SKILL.md +167 -0
  118. package/.agent/skills/game-development/game-art/SKILL.md +185 -0
  119. package/.agent/skills/game-development/game-audio/SKILL.md +190 -0
  120. package/.agent/skills/game-development/game-design/SKILL.md +129 -0
  121. package/.agent/skills/game-development/mobile-games/SKILL.md +108 -0
  122. package/.agent/skills/game-development/multiplayer/SKILL.md +132 -0
  123. package/.agent/skills/game-development/pc-games/SKILL.md +144 -0
  124. package/.agent/skills/game-development/vr-ar/SKILL.md +123 -0
  125. package/.agent/skills/game-development/web-games/SKILL.md +150 -0
  126. package/.agent/skills/geo-fundamentals/SKILL.md +156 -0
  127. package/.agent/skills/geo-fundamentals/scripts/geo_checker.py +289 -0
  128. package/.agent/skills/i18n-localization/SKILL.md +154 -0
  129. package/.agent/skills/i18n-localization/scripts/i18n_checker.py +241 -0
  130. package/.agent/skills/lint-and-validate/SKILL.md +45 -0
  131. package/.agent/skills/lint-and-validate/scripts/lint_runner.py +172 -0
  132. package/.agent/skills/lint-and-validate/scripts/type_coverage.py +173 -0
  133. package/.agent/skills/mcp-builder/SKILL.md +176 -0
  134. package/.agent/skills/mobile-design/SKILL.md +394 -0
  135. package/.agent/skills/mobile-design/decision-trees.md +516 -0
  136. package/.agent/skills/mobile-design/mobile-backend.md +491 -0
  137. package/.agent/skills/mobile-design/mobile-color-system.md +420 -0
  138. package/.agent/skills/mobile-design/mobile-debugging.md +122 -0
  139. package/.agent/skills/mobile-design/mobile-design-thinking.md +357 -0
  140. package/.agent/skills/mobile-design/mobile-navigation.md +458 -0
  141. package/.agent/skills/mobile-design/mobile-performance.md +767 -0
  142. package/.agent/skills/mobile-design/mobile-testing.md +356 -0
  143. package/.agent/skills/mobile-design/mobile-typography.md +433 -0
  144. package/.agent/skills/mobile-design/platform-android.md +666 -0
  145. package/.agent/skills/mobile-design/platform-ios.md +561 -0
  146. package/.agent/skills/mobile-design/scripts/mobile_audit.py +670 -0
  147. package/.agent/skills/mobile-design/touch-psychology.md +537 -0
  148. package/.agent/skills/nestjs-expert/SKILL.md +552 -0
  149. package/.agent/skills/nextjs-best-practices/SKILL.md +203 -0
  150. package/.agent/skills/nodejs-best-practices/SKILL.md +333 -0
  151. package/.agent/skills/parallel-agents/SKILL.md +175 -0
  152. package/.agent/skills/performance-profiling/SKILL.md +143 -0
  153. package/.agent/skills/performance-profiling/scripts/lighthouse_audit.py +76 -0
  154. package/.agent/skills/plan-writing/SKILL.md +152 -0
  155. package/.agent/skills/powershell-windows/SKILL.md +167 -0
  156. package/.agent/skills/prisma-expert/SKILL.md +355 -0
  157. package/.agent/skills/python-patterns/SKILL.md +441 -0
  158. package/.agent/skills/react-patterns/SKILL.md +198 -0
  159. package/.agent/skills/red-team-tactics/SKILL.md +199 -0
  160. package/.agent/skills/seo-fundamentals/SKILL.md +129 -0
  161. package/.agent/skills/seo-fundamentals/scripts/seo_checker.py +219 -0
  162. package/.agent/skills/server-management/SKILL.md +161 -0
  163. package/.agent/skills/systematic-debugging/SKILL.md +109 -0
  164. package/.agent/skills/tailwind-patterns/SKILL.md +269 -0
  165. package/.agent/skills/tdd-workflow/SKILL.md +149 -0
  166. package/.agent/skills/testing-patterns/SKILL.md +178 -0
  167. package/.agent/skills/testing-patterns/scripts/test_runner.py +219 -0
  168. package/.agent/skills/typescript-expert/SKILL.md +429 -0
  169. package/.agent/skills/typescript-expert/references/tsconfig-strict.json +92 -0
  170. package/.agent/skills/typescript-expert/references/typescript-cheatsheet.md +383 -0
  171. package/.agent/skills/typescript-expert/references/utility-types.ts +335 -0
  172. package/.agent/skills/typescript-expert/scripts/ts_diagnostic.py +203 -0
  173. package/.agent/skills/ui-ux-pro-max/SKILL.md +351 -0
  174. package/.agent/skills/ui-ux-pro-max/data/charts.csv +26 -0
  175. package/.agent/skills/ui-ux-pro-max/data/colors.csv +97 -0
  176. package/.agent/skills/ui-ux-pro-max/data/icons.csv +101 -0
  177. package/.agent/skills/ui-ux-pro-max/data/landing.csv +31 -0
  178. package/.agent/skills/ui-ux-pro-max/data/products.csv +97 -0
  179. package/.agent/skills/ui-ux-pro-max/data/prompts.csv +24 -0
  180. package/.agent/skills/ui-ux-pro-max/data/react-performance.csv +45 -0
  181. package/.agent/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
  182. package/.agent/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
  183. package/.agent/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
  184. package/.agent/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
  185. package/.agent/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
  186. package/.agent/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
  187. package/.agent/skills/ui-ux-pro-max/data/stacks/react.csv +54 -0
  188. package/.agent/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
  189. package/.agent/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
  190. package/.agent/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
  191. package/.agent/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -0
  192. package/.agent/skills/ui-ux-pro-max/data/styles.csv +59 -0
  193. package/.agent/skills/ui-ux-pro-max/data/typography.csv +58 -0
  194. package/.agent/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
  195. package/.agent/skills/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
  196. package/.agent/skills/ui-ux-pro-max/data/web-interface.csv +31 -0
  197. package/.agent/skills/ui-ux-pro-max/scripts/core.py +257 -0
  198. package/.agent/skills/ui-ux-pro-max/scripts/design_system.py +487 -0
  199. package/.agent/skills/ui-ux-pro-max/scripts/search.py +76 -0
  200. package/.agent/skills/vulnerability-scanner/SKILL.md +276 -0
  201. package/.agent/skills/vulnerability-scanner/checklists.md +121 -0
  202. package/.agent/skills/vulnerability-scanner/scripts/security_scan.py +458 -0
  203. package/.agent/skills/webapp-testing/SKILL.md +187 -0
  204. package/.agent/skills/webapp-testing/scripts/playwright_runner.py +173 -0
  205. package/.agent/workflows/brainstorm.md +113 -0
  206. package/.agent/workflows/create.md +59 -0
  207. package/.agent/workflows/debug.md +103 -0
  208. package/.agent/workflows/deploy.md +176 -0
  209. package/.agent/workflows/enhance.md +63 -0
  210. package/.agent/workflows/orchestrate.md +237 -0
  211. package/.agent/workflows/plan.md +89 -0
  212. package/.agent/workflows/preview.md +80 -0
  213. package/.agent/workflows/status.md +86 -0
  214. package/.agent/workflows/test.md +144 -0
  215. package/.agent/workflows/ui-ux-pro-max.md +231 -0
  216. package/LICENSE +21 -0
  217. package/README.md +101 -0
  218. package/bin/cli.js +235 -0
  219. package/index.js +1 -0
  220. package/package.json +43 -0
@@ -0,0 +1,355 @@
1
+ ---
2
+ name: prisma-expert
3
+ description: Prisma ORM expert for schema design, migrations, query optimization, relations modeling, and database operations. Use PROACTIVELY for Prisma schema issues, migration problems, query performance, relation design, or database connection issues.
4
+ ---
5
+
6
+ # Prisma Expert
7
+
8
+ You are an expert in Prisma ORM with deep knowledge of schema design, migrations, query optimization, relations modeling, and database operations across PostgreSQL, MySQL, and SQLite.
9
+
10
+ ## When Invoked
11
+
12
+ ### Step 0: Recommend Specialist and Stop
13
+ If the issue is specifically about:
14
+ - **Raw SQL optimization**: Stop and recommend postgres-expert or mongodb-expert
15
+ - **Database server configuration**: Stop and recommend database-expert
16
+ - **Connection pooling at infrastructure level**: Stop and recommend devops-expert
17
+
18
+ ### Environment Detection
19
+ ```bash
20
+ # Check Prisma version
21
+ npx prisma --version 2>/dev/null || echo "Prisma not installed"
22
+
23
+ # Check database provider
24
+ grep "provider" prisma/schema.prisma 2>/dev/null | head -1
25
+
26
+ # Check for existing migrations
27
+ ls -la prisma/migrations/ 2>/dev/null | head -5
28
+
29
+ # Check Prisma Client generation status
30
+ ls -la node_modules/.prisma/client/ 2>/dev/null | head -3
31
+ ```
32
+
33
+ ### Apply Strategy
34
+ 1. Identify the Prisma-specific issue category
35
+ 2. Check for common anti-patterns in schema or queries
36
+ 3. Apply progressive fixes (minimal → better → complete)
37
+ 4. Validate with Prisma CLI and testing
38
+
39
+ ## Problem Playbooks
40
+
41
+ ### Schema Design
42
+ **Common Issues:**
43
+ - Incorrect relation definitions causing runtime errors
44
+ - Missing indexes for frequently queried fields
45
+ - Enum synchronization issues between schema and database
46
+ - Field type mismatches
47
+
48
+ **Diagnosis:**
49
+ ```bash
50
+ # Validate schema
51
+ npx prisma validate
52
+
53
+ # Check for schema drift
54
+ npx prisma migrate diff --from-schema-datamodel prisma/schema.prisma --to-schema-datasource prisma/schema.prisma
55
+
56
+ # Format schema
57
+ npx prisma format
58
+ ```
59
+
60
+ **Prioritized Fixes:**
61
+ 1. **Minimal**: Fix relation annotations, add missing `@relation` directives
62
+ 2. **Better**: Add proper indexes with `@@index`, optimize field types
63
+ 3. **Complete**: Restructure schema with proper normalization, add composite keys
64
+
65
+ **Best Practices:**
66
+ ```prisma
67
+ // Good: Explicit relations with clear naming
68
+ model User {
69
+ id String @id @default(cuid())
70
+ email String @unique
71
+ posts Post[] @relation("UserPosts")
72
+ profile Profile? @relation("UserProfile")
73
+
74
+ createdAt DateTime @default(now())
75
+ updatedAt DateTime @updatedAt
76
+
77
+ @@index([email])
78
+ @@map("users")
79
+ }
80
+
81
+ model Post {
82
+ id String @id @default(cuid())
83
+ title String
84
+ author User @relation("UserPosts", fields: [authorId], references: [id], onDelete: Cascade)
85
+ authorId String
86
+
87
+ @@index([authorId])
88
+ @@map("posts")
89
+ }
90
+ ```
91
+
92
+ **Resources:**
93
+ - https://www.prisma.io/docs/concepts/components/prisma-schema
94
+ - https://www.prisma.io/docs/concepts/components/prisma-schema/relations
95
+
96
+ ### Migrations
97
+ **Common Issues:**
98
+ - Migration conflicts in team environments
99
+ - Failed migrations leaving database in inconsistent state
100
+ - Shadow database issues during development
101
+ - Production deployment migration failures
102
+
103
+ **Diagnosis:**
104
+ ```bash
105
+ # Check migration status
106
+ npx prisma migrate status
107
+
108
+ # View pending migrations
109
+ ls -la prisma/migrations/
110
+
111
+ # Check migration history table
112
+ # (use database-specific command)
113
+ ```
114
+
115
+ **Prioritized Fixes:**
116
+ 1. **Minimal**: Reset development database with `prisma migrate reset`
117
+ 2. **Better**: Manually fix migration SQL, use `prisma migrate resolve`
118
+ 3. **Complete**: Squash migrations, create baseline for fresh setup
119
+
120
+ **Safe Migration Workflow:**
121
+ ```bash
122
+ # Development
123
+ npx prisma migrate dev --name descriptive_name
124
+
125
+ # Production (never use migrate dev!)
126
+ npx prisma migrate deploy
127
+
128
+ # If migration fails in production
129
+ npx prisma migrate resolve --applied "migration_name"
130
+ # or
131
+ npx prisma migrate resolve --rolled-back "migration_name"
132
+ ```
133
+
134
+ **Resources:**
135
+ - https://www.prisma.io/docs/concepts/components/prisma-migrate
136
+ - https://www.prisma.io/docs/guides/deployment/deploy-database-changes
137
+
138
+ ### Query Optimization
139
+ **Common Issues:**
140
+ - N+1 query problems with relations
141
+ - Over-fetching data with excessive includes
142
+ - Missing select for large models
143
+ - Slow queries without proper indexing
144
+
145
+ **Diagnosis:**
146
+ ```bash
147
+ # Enable query logging
148
+ # In schema.prisma or client initialization:
149
+ # log: ['query', 'info', 'warn', 'error']
150
+ ```
151
+
152
+ ```typescript
153
+ // Enable query events
154
+ const prisma = new PrismaClient({
155
+ log: [
156
+ { emit: 'event', level: 'query' },
157
+ ],
158
+ });
159
+
160
+ prisma.$on('query', (e) => {
161
+ console.log('Query: ' + e.query);
162
+ console.log('Duration: ' + e.duration + 'ms');
163
+ });
164
+ ```
165
+
166
+ **Prioritized Fixes:**
167
+ 1. **Minimal**: Add includes for related data to avoid N+1
168
+ 2. **Better**: Use select to fetch only needed fields
169
+ 3. **Complete**: Use raw queries for complex aggregations, implement caching
170
+
171
+ **Optimized Query Patterns:**
172
+ ```typescript
173
+ // BAD: N+1 problem
174
+ const users = await prisma.user.findMany();
175
+ for (const user of users) {
176
+ const posts = await prisma.post.findMany({ where: { authorId: user.id } });
177
+ }
178
+
179
+ // GOOD: Include relations
180
+ const users = await prisma.user.findMany({
181
+ include: { posts: true }
182
+ });
183
+
184
+ // BETTER: Select only needed fields
185
+ const users = await prisma.user.findMany({
186
+ select: {
187
+ id: true,
188
+ email: true,
189
+ posts: {
190
+ select: { id: true, title: true }
191
+ }
192
+ }
193
+ });
194
+
195
+ // BEST for complex queries: Use $queryRaw
196
+ const result = await prisma.$queryRaw`
197
+ SELECT u.id, u.email, COUNT(p.id) as post_count
198
+ FROM users u
199
+ LEFT JOIN posts p ON p.author_id = u.id
200
+ GROUP BY u.id
201
+ `;
202
+ ```
203
+
204
+ **Resources:**
205
+ - https://www.prisma.io/docs/guides/performance-and-optimization
206
+ - https://www.prisma.io/docs/concepts/components/prisma-client/raw-database-access
207
+
208
+ ### Connection Management
209
+ **Common Issues:**
210
+ - Connection pool exhaustion
211
+ - "Too many connections" errors
212
+ - Connection leaks in serverless environments
213
+ - Slow initial connections
214
+
215
+ **Diagnosis:**
216
+ ```bash
217
+ # Check current connections (PostgreSQL)
218
+ psql -c "SELECT count(*) FROM pg_stat_activity WHERE datname = 'your_db';"
219
+ ```
220
+
221
+ **Prioritized Fixes:**
222
+ 1. **Minimal**: Configure connection limit in DATABASE_URL
223
+ 2. **Better**: Implement proper connection lifecycle management
224
+ 3. **Complete**: Use connection pooler (PgBouncer) for high-traffic apps
225
+
226
+ **Connection Configuration:**
227
+ ```typescript
228
+ // For serverless (Vercel, AWS Lambda)
229
+ import { PrismaClient } from '@prisma/client';
230
+
231
+ const globalForPrisma = global as unknown as { prisma: PrismaClient };
232
+
233
+ export const prisma =
234
+ globalForPrisma.prisma ||
235
+ new PrismaClient({
236
+ log: process.env.NODE_ENV === 'development' ? ['query'] : [],
237
+ });
238
+
239
+ if (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma;
240
+
241
+ // Graceful shutdown
242
+ process.on('beforeExit', async () => {
243
+ await prisma.$disconnect();
244
+ });
245
+ ```
246
+
247
+ ```env
248
+ # Connection URL with pool settings
249
+ DATABASE_URL="postgresql://user:pass@host:5432/db?connection_limit=5&pool_timeout=10"
250
+ ```
251
+
252
+ **Resources:**
253
+ - https://www.prisma.io/docs/guides/performance-and-optimization/connection-management
254
+ - https://www.prisma.io/docs/guides/deployment/deployment-guides/deploying-to-vercel
255
+
256
+ ### Transaction Patterns
257
+ **Common Issues:**
258
+ - Inconsistent data from non-atomic operations
259
+ - Deadlocks in concurrent transactions
260
+ - Long-running transactions blocking reads
261
+ - Nested transaction confusion
262
+
263
+ **Diagnosis:**
264
+ ```typescript
265
+ // Check for transaction issues
266
+ try {
267
+ const result = await prisma.$transaction([...]);
268
+ } catch (e) {
269
+ if (e.code === 'P2034') {
270
+ console.log('Transaction conflict detected');
271
+ }
272
+ }
273
+ ```
274
+
275
+ **Transaction Patterns:**
276
+ ```typescript
277
+ // Sequential operations (auto-transaction)
278
+ const [user, profile] = await prisma.$transaction([
279
+ prisma.user.create({ data: userData }),
280
+ prisma.profile.create({ data: profileData }),
281
+ ]);
282
+
283
+ // Interactive transaction with manual control
284
+ const result = await prisma.$transaction(async (tx) => {
285
+ const user = await tx.user.create({ data: userData });
286
+
287
+ // Business logic validation
288
+ if (user.email.endsWith('@blocked.com')) {
289
+ throw new Error('Email domain blocked');
290
+ }
291
+
292
+ const profile = await tx.profile.create({
293
+ data: { ...profileData, userId: user.id }
294
+ });
295
+
296
+ return { user, profile };
297
+ }, {
298
+ maxWait: 5000, // Wait for transaction slot
299
+ timeout: 10000, // Transaction timeout
300
+ isolationLevel: 'Serializable', // Strictest isolation
301
+ });
302
+
303
+ // Optimistic concurrency control
304
+ const updateWithVersion = await prisma.post.update({
305
+ where: {
306
+ id: postId,
307
+ version: currentVersion // Only update if version matches
308
+ },
309
+ data: {
310
+ content: newContent,
311
+ version: { increment: 1 }
312
+ }
313
+ });
314
+ ```
315
+
316
+ **Resources:**
317
+ - https://www.prisma.io/docs/concepts/components/prisma-client/transactions
318
+
319
+ ## Code Review Checklist
320
+
321
+ ### Schema Quality
322
+ - [ ] All models have appropriate `@id` and primary keys
323
+ - [ ] Relations use explicit `@relation` with `fields` and `references`
324
+ - [ ] Cascade behaviors defined (`onDelete`, `onUpdate`)
325
+ - [ ] Indexes added for frequently queried fields
326
+ - [ ] Enums used for fixed value sets
327
+ - [ ] `@@map` used for table naming conventions
328
+
329
+ ### Query Patterns
330
+ - [ ] No N+1 queries (relations included when needed)
331
+ - [ ] `select` used to fetch only required fields
332
+ - [ ] Pagination implemented for list queries
333
+ - [ ] Raw queries used for complex aggregations
334
+ - [ ] Proper error handling for database operations
335
+
336
+ ### Performance
337
+ - [ ] Connection pooling configured appropriately
338
+ - [ ] Indexes exist for WHERE clause fields
339
+ - [ ] Composite indexes for multi-column queries
340
+ - [ ] Query logging enabled in development
341
+ - [ ] Slow queries identified and optimized
342
+
343
+ ### Migration Safety
344
+ - [ ] Migrations tested before production deployment
345
+ - [ ] Backward-compatible schema changes (no data loss)
346
+ - [ ] Migration scripts reviewed for correctness
347
+ - [ ] Rollback strategy documented
348
+
349
+ ## Anti-Patterns to Avoid
350
+
351
+ 1. **Implicit Many-to-Many Overhead**: Always use explicit join tables for complex relationships
352
+ 2. **Over-Including**: Don't include relations you don't need
353
+ 3. **Ignoring Connection Limits**: Always configure pool size for your environment
354
+ 4. **Raw Query Abuse**: Use Prisma queries when possible, raw only for complex cases
355
+ 5. **Migration in Production Dev Mode**: Never use `migrate dev` in production