@minhduydev/mdpi 0.3.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 (561) hide show
  1. package/README.md +31 -0
  2. package/dist/index.js +1187 -0
  3. package/dist/template/.pi/.env.example +28 -0
  4. package/dist/template/.pi/AGENTS.md +226 -0
  5. package/dist/template/.pi/QUALITY.md +13 -0
  6. package/dist/template/.pi/README.md +452 -0
  7. package/dist/template/.pi/VERSION +1 -0
  8. package/dist/template/.pi/agents/INDEX.md +54 -0
  9. package/dist/template/.pi/agents/build.md +194 -0
  10. package/dist/template/.pi/agents/explore.md +85 -0
  11. package/dist/template/.pi/agents/general.md +189 -0
  12. package/dist/template/.pi/agents/plan.md +407 -0
  13. package/dist/template/.pi/agents/review.md +198 -0
  14. package/dist/template/.pi/agents/scout.md +142 -0
  15. package/dist/template/.pi/agents/vision.md +157 -0
  16. package/dist/template/.pi/artifacts/example/plan.md +12 -0
  17. package/dist/template/.pi/artifacts/example/progress.md +4 -0
  18. package/dist/template/.pi/artifacts/example/research.md +4 -0
  19. package/dist/template/.pi/artifacts/example/spec.md +16 -0
  20. package/dist/template/.pi/context/architecture.md +141 -0
  21. package/dist/template/.pi/context/fallow.md +137 -0
  22. package/dist/template/.pi/extensions/templates-injector.ts +76 -0
  23. package/dist/template/.pi/extensions/workflows-runner.ts +301 -0
  24. package/dist/template/.pi/guard.example.json +75 -0
  25. package/dist/template/.pi/prompts/INDEX.md +78 -0
  26. package/dist/template/.pi/prompts/audit.md +109 -0
  27. package/dist/template/.pi/prompts/close.md +88 -0
  28. package/dist/template/.pi/prompts/create.md +197 -0
  29. package/dist/template/.pi/prompts/fix.md +117 -0
  30. package/dist/template/.pi/prompts/gc.md +112 -0
  31. package/dist/template/.pi/prompts/init.md +206 -0
  32. package/dist/template/.pi/prompts/loop-check.md +87 -0
  33. package/dist/template/.pi/prompts/loop-init.md +157 -0
  34. package/dist/template/.pi/prompts/loop-review.md +90 -0
  35. package/dist/template/.pi/prompts/plan.md +254 -0
  36. package/dist/template/.pi/prompts/research.md +136 -0
  37. package/dist/template/.pi/prompts/ship.md +219 -0
  38. package/dist/template/.pi/prompts/status.md +92 -0
  39. package/dist/template/.pi/prompts/verify.md +154 -0
  40. package/dist/template/.pi/scripts/gc-check.sh +86 -0
  41. package/dist/template/.pi/settings.json +15 -0
  42. package/dist/template/.pi/skills/INDEX.md +331 -0
  43. package/dist/template/.pi/skills/accessibility-audit/SKILL.md +205 -0
  44. package/dist/template/.pi/skills/accessibility-audit/references/accessibility-checklist.md +109 -0
  45. package/dist/template/.pi/skills/agent-code-quality-gate/SKILL.md +131 -0
  46. package/dist/template/.pi/skills/api-and-interface-design/SKILL.md +159 -0
  47. package/dist/template/.pi/skills/behavioral-kernel/SKILL.md +92 -0
  48. package/dist/template/.pi/skills/brainstorming/SKILL.md +138 -0
  49. package/dist/template/.pi/skills/browser-testing-with-devtools/SKILL.md +90 -0
  50. package/dist/template/.pi/skills/chrome-devtools/SKILL.md +129 -0
  51. package/dist/template/.pi/skills/ci-cd-and-automation/SKILL.md +199 -0
  52. package/dist/template/.pi/skills/cloudflare/SKILL.md +271 -0
  53. package/dist/template/.pi/skills/cloudflare/references/agents-sdk/README.md +35 -0
  54. package/dist/template/.pi/skills/cloudflare/references/agents-sdk/api.md +100 -0
  55. package/dist/template/.pi/skills/cloudflare/references/agents-sdk/configuration.md +99 -0
  56. package/dist/template/.pi/skills/cloudflare/references/agents-sdk/gotchas.md +59 -0
  57. package/dist/template/.pi/skills/cloudflare/references/agents-sdk/patterns.md +89 -0
  58. package/dist/template/.pi/skills/cloudflare/references/ai-gateway/README.md +695 -0
  59. package/dist/template/.pi/skills/cloudflare/references/ai-search/README.md +14 -0
  60. package/dist/template/.pi/skills/cloudflare/references/ai-search/api.md +38 -0
  61. package/dist/template/.pi/skills/cloudflare/references/ai-search/configuration.md +52 -0
  62. package/dist/template/.pi/skills/cloudflare/references/ai-search/gotchas.md +41 -0
  63. package/dist/template/.pi/skills/cloudflare/references/ai-search/patterns.md +45 -0
  64. package/dist/template/.pi/skills/cloudflare/references/analytics-engine/README.md +14 -0
  65. package/dist/template/.pi/skills/cloudflare/references/analytics-engine/api.md +27 -0
  66. package/dist/template/.pi/skills/cloudflare/references/analytics-engine/configuration.md +45 -0
  67. package/dist/template/.pi/skills/cloudflare/references/analytics-engine/gotchas.md +3 -0
  68. package/dist/template/.pi/skills/cloudflare/references/analytics-engine/patterns.md +36 -0
  69. package/dist/template/.pi/skills/cloudflare/references/api/README.md +21 -0
  70. package/dist/template/.pi/skills/cloudflare/references/api/api.md +31 -0
  71. package/dist/template/.pi/skills/cloudflare/references/api/configuration.md +20 -0
  72. package/dist/template/.pi/skills/cloudflare/references/api/gotchas.md +28 -0
  73. package/dist/template/.pi/skills/cloudflare/references/api/patterns.md +47 -0
  74. package/dist/template/.pi/skills/cloudflare/references/api-shield/README.md +20 -0
  75. package/dist/template/.pi/skills/cloudflare/references/api-shield/api.md +78 -0
  76. package/dist/template/.pi/skills/cloudflare/references/api-shield/configuration.md +128 -0
  77. package/dist/template/.pi/skills/cloudflare/references/api-shield/gotchas.md +51 -0
  78. package/dist/template/.pi/skills/cloudflare/references/api-shield/patterns.md +145 -0
  79. package/dist/template/.pi/skills/cloudflare/references/argo-smart-routing/README.md +16 -0
  80. package/dist/template/.pi/skills/cloudflare/references/argo-smart-routing/api.md +50 -0
  81. package/dist/template/.pi/skills/cloudflare/references/argo-smart-routing/configuration.md +53 -0
  82. package/dist/template/.pi/skills/cloudflare/references/argo-smart-routing/gotchas.md +16 -0
  83. package/dist/template/.pi/skills/cloudflare/references/argo-smart-routing/patterns.md +45 -0
  84. package/dist/template/.pi/skills/cloudflare/references/bindings/README.md +14 -0
  85. package/dist/template/.pi/skills/cloudflare/references/bindings/api.md +3 -0
  86. package/dist/template/.pi/skills/cloudflare/references/bindings/configuration.md +58 -0
  87. package/dist/template/.pi/skills/cloudflare/references/bindings/gotchas.md +35 -0
  88. package/dist/template/.pi/skills/cloudflare/references/bindings/patterns.md +37 -0
  89. package/dist/template/.pi/skills/cloudflare/references/bot-management/README.md +71 -0
  90. package/dist/template/.pi/skills/cloudflare/references/bot-management/api.md +168 -0
  91. package/dist/template/.pi/skills/cloudflare/references/bot-management/configuration.md +114 -0
  92. package/dist/template/.pi/skills/cloudflare/references/bot-management/gotchas.md +99 -0
  93. package/dist/template/.pi/skills/cloudflare/references/bot-management/patterns.md +125 -0
  94. package/dist/template/.pi/skills/cloudflare/references/browser-rendering/README.md +16 -0
  95. package/dist/template/.pi/skills/cloudflare/references/browser-rendering/api.md +54 -0
  96. package/dist/template/.pi/skills/cloudflare/references/browser-rendering/configuration.md +47 -0
  97. package/dist/template/.pi/skills/cloudflare/references/browser-rendering/gotchas.md +29 -0
  98. package/dist/template/.pi/skills/cloudflare/references/browser-rendering/patterns.md +29 -0
  99. package/dist/template/.pi/skills/cloudflare/references/c3/README.md +264 -0
  100. package/dist/template/.pi/skills/cloudflare/references/cache-reserve/README.md +93 -0
  101. package/dist/template/.pi/skills/cloudflare/references/cache-reserve/api.md +176 -0
  102. package/dist/template/.pi/skills/cloudflare/references/cache-reserve/configuration.md +164 -0
  103. package/dist/template/.pi/skills/cloudflare/references/cache-reserve/gotchas.md +203 -0
  104. package/dist/template/.pi/skills/cloudflare/references/cache-reserve/patterns.md +180 -0
  105. package/dist/template/.pi/skills/cloudflare/references/containers/README.md +16 -0
  106. package/dist/template/.pi/skills/cloudflare/references/containers/api.md +43 -0
  107. package/dist/template/.pi/skills/cloudflare/references/containers/configuration.md +56 -0
  108. package/dist/template/.pi/skills/cloudflare/references/containers/gotchas.md +21 -0
  109. package/dist/template/.pi/skills/cloudflare/references/containers/patterns.md +40 -0
  110. package/dist/template/.pi/skills/cloudflare/references/cron-triggers/README.md +85 -0
  111. package/dist/template/.pi/skills/cloudflare/references/cron-triggers/api.md +198 -0
  112. package/dist/template/.pi/skills/cloudflare/references/cron-triggers/configuration.md +151 -0
  113. package/dist/template/.pi/skills/cloudflare/references/cron-triggers/gotchas.md +129 -0
  114. package/dist/template/.pi/skills/cloudflare/references/cron-triggers/patterns.md +122 -0
  115. package/dist/template/.pi/skills/cloudflare/references/d1/README.md +92 -0
  116. package/dist/template/.pi/skills/cloudflare/references/d1/api.md +141 -0
  117. package/dist/template/.pi/skills/cloudflare/references/d1/configuration.md +127 -0
  118. package/dist/template/.pi/skills/cloudflare/references/d1/gotchas.md +70 -0
  119. package/dist/template/.pi/skills/cloudflare/references/d1/patterns.md +144 -0
  120. package/dist/template/.pi/skills/cloudflare/references/ddos/README.md +34 -0
  121. package/dist/template/.pi/skills/cloudflare/references/ddos/api.md +136 -0
  122. package/dist/template/.pi/skills/cloudflare/references/ddos/configuration.md +67 -0
  123. package/dist/template/.pi/skills/cloudflare/references/ddos/gotchas.md +114 -0
  124. package/dist/template/.pi/skills/cloudflare/references/ddos/patterns.md +158 -0
  125. package/dist/template/.pi/skills/cloudflare/references/do-storage/README.md +62 -0
  126. package/dist/template/.pi/skills/cloudflare/references/do-storage/api.md +89 -0
  127. package/dist/template/.pi/skills/cloudflare/references/do-storage/configuration.md +116 -0
  128. package/dist/template/.pi/skills/cloudflare/references/do-storage/gotchas.md +93 -0
  129. package/dist/template/.pi/skills/cloudflare/references/do-storage/patterns.md +112 -0
  130. package/dist/template/.pi/skills/cloudflare/references/durable-objects/README.md +125 -0
  131. package/dist/template/.pi/skills/cloudflare/references/durable-objects/api.md +152 -0
  132. package/dist/template/.pi/skills/cloudflare/references/durable-objects/configuration.md +148 -0
  133. package/dist/template/.pi/skills/cloudflare/references/durable-objects/gotchas.md +158 -0
  134. package/dist/template/.pi/skills/cloudflare/references/durable-objects/patterns.md +255 -0
  135. package/dist/template/.pi/skills/cloudflare/references/email-routing/README.md +18 -0
  136. package/dist/template/.pi/skills/cloudflare/references/email-routing/api.md +46 -0
  137. package/dist/template/.pi/skills/cloudflare/references/email-routing/configuration.md +63 -0
  138. package/dist/template/.pi/skills/cloudflare/references/email-routing/gotchas.md +16 -0
  139. package/dist/template/.pi/skills/cloudflare/references/email-routing/patterns.md +46 -0
  140. package/dist/template/.pi/skills/cloudflare/references/email-workers/README.md +598 -0
  141. package/dist/template/.pi/skills/cloudflare/references/hyperdrive/README.md +62 -0
  142. package/dist/template/.pi/skills/cloudflare/references/hyperdrive/api.md +137 -0
  143. package/dist/template/.pi/skills/cloudflare/references/hyperdrive/configuration.md +133 -0
  144. package/dist/template/.pi/skills/cloudflare/references/hyperdrive/gotchas.md +184 -0
  145. package/dist/template/.pi/skills/cloudflare/references/hyperdrive/patterns.md +176 -0
  146. package/dist/template/.pi/skills/cloudflare/references/images/README.md +14 -0
  147. package/dist/template/.pi/skills/cloudflare/references/images/api.md +3 -0
  148. package/dist/template/.pi/skills/cloudflare/references/images/configuration.md +45 -0
  149. package/dist/template/.pi/skills/cloudflare/references/images/gotchas.md +23 -0
  150. package/dist/template/.pi/skills/cloudflare/references/images/patterns.md +31 -0
  151. package/dist/template/.pi/skills/cloudflare/references/kv/README.md +60 -0
  152. package/dist/template/.pi/skills/cloudflare/references/kv/api.md +114 -0
  153. package/dist/template/.pi/skills/cloudflare/references/kv/configuration.md +92 -0
  154. package/dist/template/.pi/skills/cloudflare/references/kv/gotchas.md +117 -0
  155. package/dist/template/.pi/skills/cloudflare/references/kv/patterns.md +139 -0
  156. package/dist/template/.pi/skills/cloudflare/references/miniflare/README.md +64 -0
  157. package/dist/template/.pi/skills/cloudflare/references/miniflare/api.md +144 -0
  158. package/dist/template/.pi/skills/cloudflare/references/miniflare/configuration.md +203 -0
  159. package/dist/template/.pi/skills/cloudflare/references/miniflare/gotchas.md +187 -0
  160. package/dist/template/.pi/skills/cloudflare/references/miniflare/patterns.md +211 -0
  161. package/dist/template/.pi/skills/cloudflare/references/network-interconnect/README.md +60 -0
  162. package/dist/template/.pi/skills/cloudflare/references/network-interconnect/api.md +240 -0
  163. package/dist/template/.pi/skills/cloudflare/references/network-interconnect/configuration.md +127 -0
  164. package/dist/template/.pi/skills/cloudflare/references/network-interconnect/gotchas.md +171 -0
  165. package/dist/template/.pi/skills/cloudflare/references/network-interconnect/patterns.md +171 -0
  166. package/dist/template/.pi/skills/cloudflare/references/observability/README.md +18 -0
  167. package/dist/template/.pi/skills/cloudflare/references/observability/api.md +51 -0
  168. package/dist/template/.pi/skills/cloudflare/references/observability/configuration.md +60 -0
  169. package/dist/template/.pi/skills/cloudflare/references/observability/gotchas.md +36 -0
  170. package/dist/template/.pi/skills/cloudflare/references/observability/patterns.md +42 -0
  171. package/dist/template/.pi/skills/cloudflare/references/pages/README.md +76 -0
  172. package/dist/template/.pi/skills/cloudflare/references/pages/api.md +200 -0
  173. package/dist/template/.pi/skills/cloudflare/references/pages/configuration.md +228 -0
  174. package/dist/template/.pi/skills/cloudflare/references/pages/gotchas.md +161 -0
  175. package/dist/template/.pi/skills/cloudflare/references/pages/patterns.md +145 -0
  176. package/dist/template/.pi/skills/cloudflare/references/pages-functions/README.md +57 -0
  177. package/dist/template/.pi/skills/cloudflare/references/pages-functions/api.md +201 -0
  178. package/dist/template/.pi/skills/cloudflare/references/pages-functions/configuration.md +159 -0
  179. package/dist/template/.pi/skills/cloudflare/references/pages-functions/gotchas.md +151 -0
  180. package/dist/template/.pi/skills/cloudflare/references/pages-functions/patterns.md +190 -0
  181. package/dist/template/.pi/skills/cloudflare/references/pipelines/README.md +664 -0
  182. package/dist/template/.pi/skills/cloudflare/references/pulumi/README.md +107 -0
  183. package/dist/template/.pi/skills/cloudflare/references/pulumi/api.md +194 -0
  184. package/dist/template/.pi/skills/cloudflare/references/pulumi/configuration.md +216 -0
  185. package/dist/template/.pi/skills/cloudflare/references/pulumi/gotchas.md +223 -0
  186. package/dist/template/.pi/skills/cloudflare/references/pulumi/patterns.md +139 -0
  187. package/dist/template/.pi/skills/cloudflare/references/queues/README.md +69 -0
  188. package/dist/template/.pi/skills/cloudflare/references/queues/api.md +138 -0
  189. package/dist/template/.pi/skills/cloudflare/references/queues/configuration.md +125 -0
  190. package/dist/template/.pi/skills/cloudflare/references/queues/gotchas.md +112 -0
  191. package/dist/template/.pi/skills/cloudflare/references/queues/patterns.md +155 -0
  192. package/dist/template/.pi/skills/cloudflare/references/r2/README.md +61 -0
  193. package/dist/template/.pi/skills/cloudflare/references/r2/api.md +127 -0
  194. package/dist/template/.pi/skills/cloudflare/references/r2/configuration.md +76 -0
  195. package/dist/template/.pi/skills/cloudflare/references/r2/gotchas.md +94 -0
  196. package/dist/template/.pi/skills/cloudflare/references/r2/patterns.md +127 -0
  197. package/dist/template/.pi/skills/cloudflare/references/r2-data-catalog/README.md +18 -0
  198. package/dist/template/.pi/skills/cloudflare/references/r2-data-catalog/api.md +29 -0
  199. package/dist/template/.pi/skills/cloudflare/references/r2-data-catalog/configuration.md +39 -0
  200. package/dist/template/.pi/skills/cloudflare/references/r2-data-catalog/gotchas.md +20 -0
  201. package/dist/template/.pi/skills/cloudflare/references/r2-data-catalog/patterns.md +46 -0
  202. package/dist/template/.pi/skills/cloudflare/references/r2-sql/README.md +512 -0
  203. package/dist/template/.pi/skills/cloudflare/references/realtime-sfu/README.md +21 -0
  204. package/dist/template/.pi/skills/cloudflare/references/realtime-sfu/api.md +135 -0
  205. package/dist/template/.pi/skills/cloudflare/references/realtime-sfu/configuration.md +63 -0
  206. package/dist/template/.pi/skills/cloudflare/references/realtime-sfu/gotchas.md +75 -0
  207. package/dist/template/.pi/skills/cloudflare/references/realtime-sfu/patterns.md +102 -0
  208. package/dist/template/.pi/skills/cloudflare/references/realtimekit/README.md +81 -0
  209. package/dist/template/.pi/skills/cloudflare/references/realtimekit/api.md +164 -0
  210. package/dist/template/.pi/skills/cloudflare/references/realtimekit/configuration.md +147 -0
  211. package/dist/template/.pi/skills/cloudflare/references/realtimekit/gotchas.md +172 -0
  212. package/dist/template/.pi/skills/cloudflare/references/realtimekit/patterns.md +155 -0
  213. package/dist/template/.pi/skills/cloudflare/references/sandbox/README.md +90 -0
  214. package/dist/template/.pi/skills/cloudflare/references/sandbox/api.md +178 -0
  215. package/dist/template/.pi/skills/cloudflare/references/sandbox/configuration.md +131 -0
  216. package/dist/template/.pi/skills/cloudflare/references/sandbox/gotchas.md +156 -0
  217. package/dist/template/.pi/skills/cloudflare/references/sandbox/patterns.md +203 -0
  218. package/dist/template/.pi/skills/cloudflare/references/secrets-store/README.md +58 -0
  219. package/dist/template/.pi/skills/cloudflare/references/secrets-store/api.md +182 -0
  220. package/dist/template/.pi/skills/cloudflare/references/secrets-store/configuration.md +140 -0
  221. package/dist/template/.pi/skills/cloudflare/references/secrets-store/gotchas.md +129 -0
  222. package/dist/template/.pi/skills/cloudflare/references/secrets-store/patterns.md +218 -0
  223. package/dist/template/.pi/skills/cloudflare/references/smart-placement/README.md +91 -0
  224. package/dist/template/.pi/skills/cloudflare/references/smart-placement/api.md +139 -0
  225. package/dist/template/.pi/skills/cloudflare/references/smart-placement/configuration.md +129 -0
  226. package/dist/template/.pi/skills/cloudflare/references/smart-placement/gotchas.md +87 -0
  227. package/dist/template/.pi/skills/cloudflare/references/smart-placement/patterns.md +135 -0
  228. package/dist/template/.pi/skills/cloudflare/references/snippets/README.md +15 -0
  229. package/dist/template/.pi/skills/cloudflare/references/snippets/api.md +47 -0
  230. package/dist/template/.pi/skills/cloudflare/references/snippets/configuration.md +33 -0
  231. package/dist/template/.pi/skills/cloudflare/references/snippets/gotchas.md +21 -0
  232. package/dist/template/.pi/skills/cloudflare/references/snippets/patterns.md +34 -0
  233. package/dist/template/.pi/skills/cloudflare/references/spectrum/README.md +16 -0
  234. package/dist/template/.pi/skills/cloudflare/references/spectrum/api.md +24 -0
  235. package/dist/template/.pi/skills/cloudflare/references/spectrum/configuration.md +43 -0
  236. package/dist/template/.pi/skills/cloudflare/references/spectrum/gotchas.md +42 -0
  237. package/dist/template/.pi/skills/cloudflare/references/spectrum/patterns.md +40 -0
  238. package/dist/template/.pi/skills/cloudflare/references/static-assets/README.md +14 -0
  239. package/dist/template/.pi/skills/cloudflare/references/static-assets/api.md +3 -0
  240. package/dist/template/.pi/skills/cloudflare/references/static-assets/configuration.md +47 -0
  241. package/dist/template/.pi/skills/cloudflare/references/static-assets/gotchas.md +44 -0
  242. package/dist/template/.pi/skills/cloudflare/references/static-assets/patterns.md +42 -0
  243. package/dist/template/.pi/skills/cloudflare/references/stream/README.md +103 -0
  244. package/dist/template/.pi/skills/cloudflare/references/stream/api.md +204 -0
  245. package/dist/template/.pi/skills/cloudflare/references/stream/configuration.md +127 -0
  246. package/dist/template/.pi/skills/cloudflare/references/stream/gotchas.md +131 -0
  247. package/dist/template/.pi/skills/cloudflare/references/stream/patterns.md +152 -0
  248. package/dist/template/.pi/skills/cloudflare/references/tail-workers/README.md +640 -0
  249. package/dist/template/.pi/skills/cloudflare/references/terraform/README.md +76 -0
  250. package/dist/template/.pi/skills/cloudflare/references/terraform/api.md +159 -0
  251. package/dist/template/.pi/skills/cloudflare/references/terraform/configuration.md +156 -0
  252. package/dist/template/.pi/skills/cloudflare/references/terraform/gotchas.md +207 -0
  253. package/dist/template/.pi/skills/cloudflare/references/terraform/patterns.md +135 -0
  254. package/dist/template/.pi/skills/cloudflare/references/tunnel/README.md +82 -0
  255. package/dist/template/.pi/skills/cloudflare/references/tunnel/api.md +105 -0
  256. package/dist/template/.pi/skills/cloudflare/references/tunnel/configuration.md +113 -0
  257. package/dist/template/.pi/skills/cloudflare/references/tunnel/gotchas.md +115 -0
  258. package/dist/template/.pi/skills/cloudflare/references/tunnel/patterns.md +157 -0
  259. package/dist/template/.pi/skills/cloudflare/references/turn/README.md +699 -0
  260. package/dist/template/.pi/skills/cloudflare/references/turnstile/README.md +14 -0
  261. package/dist/template/.pi/skills/cloudflare/references/turnstile/api.md +3 -0
  262. package/dist/template/.pi/skills/cloudflare/references/turnstile/configuration.md +19 -0
  263. package/dist/template/.pi/skills/cloudflare/references/turnstile/gotchas.md +27 -0
  264. package/dist/template/.pi/skills/cloudflare/references/turnstile/patterns.md +41 -0
  265. package/dist/template/.pi/skills/cloudflare/references/vectorize/README.md +682 -0
  266. package/dist/template/.pi/skills/cloudflare/references/waf/README.md +14 -0
  267. package/dist/template/.pi/skills/cloudflare/references/waf/api.md +3 -0
  268. package/dist/template/.pi/skills/cloudflare/references/waf/configuration.md +44 -0
  269. package/dist/template/.pi/skills/cloudflare/references/waf/gotchas.md +24 -0
  270. package/dist/template/.pi/skills/cloudflare/references/waf/patterns.md +29 -0
  271. package/dist/template/.pi/skills/cloudflare/references/web-analytics/README.md +19 -0
  272. package/dist/template/.pi/skills/cloudflare/references/web-analytics/api.md +52 -0
  273. package/dist/template/.pi/skills/cloudflare/references/web-analytics/configuration.md +31 -0
  274. package/dist/template/.pi/skills/cloudflare/references/web-analytics/gotchas.md +28 -0
  275. package/dist/template/.pi/skills/cloudflare/references/web-analytics/patterns.md +52 -0
  276. package/dist/template/.pi/skills/cloudflare/references/workerd/README.md +47 -0
  277. package/dist/template/.pi/skills/cloudflare/references/workerd/api.md +199 -0
  278. package/dist/template/.pi/skills/cloudflare/references/workerd/configuration.md +185 -0
  279. package/dist/template/.pi/skills/cloudflare/references/workerd/gotchas.md +203 -0
  280. package/dist/template/.pi/skills/cloudflare/references/workerd/patterns.md +216 -0
  281. package/dist/template/.pi/skills/cloudflare/references/workers/README.md +96 -0
  282. package/dist/template/.pi/skills/cloudflare/references/workers/api.md +137 -0
  283. package/dist/template/.pi/skills/cloudflare/references/workers/configuration.md +147 -0
  284. package/dist/template/.pi/skills/cloudflare/references/workers/gotchas.md +99 -0
  285. package/dist/template/.pi/skills/cloudflare/references/workers/patterns.md +149 -0
  286. package/dist/template/.pi/skills/cloudflare/references/workers-ai/README.md +116 -0
  287. package/dist/template/.pi/skills/cloudflare/references/workers-for-platforms/README.md +48 -0
  288. package/dist/template/.pi/skills/cloudflare/references/workers-for-platforms/api.md +169 -0
  289. package/dist/template/.pi/skills/cloudflare/references/workers-for-platforms/configuration.md +136 -0
  290. package/dist/template/.pi/skills/cloudflare/references/workers-for-platforms/gotchas.md +130 -0
  291. package/dist/template/.pi/skills/cloudflare/references/workers-for-platforms/patterns.md +170 -0
  292. package/dist/template/.pi/skills/cloudflare/references/workers-playground/README.md +16 -0
  293. package/dist/template/.pi/skills/cloudflare/references/workers-playground/api.md +20 -0
  294. package/dist/template/.pi/skills/cloudflare/references/workers-playground/configuration.md +3 -0
  295. package/dist/template/.pi/skills/cloudflare/references/workers-playground/gotchas.md +35 -0
  296. package/dist/template/.pi/skills/cloudflare/references/workers-playground/patterns.md +42 -0
  297. package/dist/template/.pi/skills/cloudflare/references/workers-vpc/README.md +579 -0
  298. package/dist/template/.pi/skills/cloudflare/references/workflows/README.md +62 -0
  299. package/dist/template/.pi/skills/cloudflare/references/workflows/api.md +125 -0
  300. package/dist/template/.pi/skills/cloudflare/references/workflows/configuration.md +177 -0
  301. package/dist/template/.pi/skills/cloudflare/references/workflows/gotchas.md +136 -0
  302. package/dist/template/.pi/skills/cloudflare/references/workflows/patterns.md +132 -0
  303. package/dist/template/.pi/skills/cloudflare/references/wrangler/README.md +90 -0
  304. package/dist/template/.pi/skills/cloudflare/references/wrangler/api.md +140 -0
  305. package/dist/template/.pi/skills/cloudflare/references/wrangler/configuration.md +128 -0
  306. package/dist/template/.pi/skills/cloudflare/references/wrangler/gotchas.md +93 -0
  307. package/dist/template/.pi/skills/cloudflare/references/wrangler/patterns.md +150 -0
  308. package/dist/template/.pi/skills/cloudflare/references/zaraz/README.md +360 -0
  309. package/dist/template/.pi/skills/code-cleanup/SKILL.md +232 -0
  310. package/dist/template/.pi/skills/code-review-and-quality/SKILL.md +344 -0
  311. package/dist/template/.pi/skills/code-simplification/SKILL.md +348 -0
  312. package/dist/template/.pi/skills/context-engineering/SKILL.md +296 -0
  313. package/dist/template/.pi/skills/core-data-expert/SKILL.md +117 -0
  314. package/dist/template/.pi/skills/core-data-expert/references/batch-operations.md +543 -0
  315. package/dist/template/.pi/skills/core-data-expert/references/cloudkit-integration.md +259 -0
  316. package/dist/template/.pi/skills/core-data-expert/references/concurrency.md +522 -0
  317. package/dist/template/.pi/skills/core-data-expert/references/fetch-requests.md +643 -0
  318. package/dist/template/.pi/skills/core-data-expert/references/glossary.md +233 -0
  319. package/dist/template/.pi/skills/core-data-expert/references/migration.md +393 -0
  320. package/dist/template/.pi/skills/core-data-expert/references/model-configuration.md +597 -0
  321. package/dist/template/.pi/skills/core-data-expert/references/performance.md +300 -0
  322. package/dist/template/.pi/skills/core-data-expert/references/persistent-history.md +553 -0
  323. package/dist/template/.pi/skills/core-data-expert/references/project-audit.md +60 -0
  324. package/dist/template/.pi/skills/core-data-expert/references/saving.md +574 -0
  325. package/dist/template/.pi/skills/core-data-expert/references/stack-setup.md +625 -0
  326. package/dist/template/.pi/skills/core-data-expert/references/testing.md +300 -0
  327. package/dist/template/.pi/skills/core-data-expert/references/threading.md +589 -0
  328. package/dist/template/.pi/skills/debugging-and-error-recovery/SKILL.md +274 -0
  329. package/dist/template/.pi/skills/deep-module-design/SKILL.md +218 -0
  330. package/dist/template/.pi/skills/defense-in-depth/SKILL.md +161 -0
  331. package/dist/template/.pi/skills/deprecation-and-migration/SKILL.md +186 -0
  332. package/dist/template/.pi/skills/design-system-audit/SKILL.md +176 -0
  333. package/dist/template/.pi/skills/design-taste-frontend/SKILL.md +255 -0
  334. package/dist/template/.pi/skills/development-lifecycle/SKILL.md +285 -0
  335. package/dist/template/.pi/skills/documentation-and-adrs/SKILL.md +217 -0
  336. package/dist/template/.pi/skills/doubt-driven-development/SKILL.md +207 -0
  337. package/dist/template/.pi/skills/fallow/SKILL.md +457 -0
  338. package/dist/template/.pi/skills/fallow/references/cli-reference.md +1905 -0
  339. package/dist/template/.pi/skills/fallow/references/gotchas.md +644 -0
  340. package/dist/template/.pi/skills/fallow/references/patterns.md +791 -0
  341. package/dist/template/.pi/skills/figma/SKILL.md +241 -0
  342. package/dist/template/.pi/skills/frontend-design/SKILL.md +262 -0
  343. package/dist/template/.pi/skills/frontend-design/references/animation/motion-advanced.md +224 -0
  344. package/dist/template/.pi/skills/frontend-design/references/animation/motion-core.md +181 -0
  345. package/dist/template/.pi/skills/frontend-design/references/canvas/execution.md +90 -0
  346. package/dist/template/.pi/skills/frontend-design/references/canvas/philosophy.md +94 -0
  347. package/dist/template/.pi/skills/frontend-design/references/design/color-system.md +111 -0
  348. package/dist/template/.pi/skills/frontend-design/references/design/interaction.md +149 -0
  349. package/dist/template/.pi/skills/frontend-design/references/design/typography-rules.md +106 -0
  350. package/dist/template/.pi/skills/frontend-design/references/design/ux-writing.md +99 -0
  351. package/dist/template/.pi/skills/frontend-design/references/shadcn/accessibility.md +132 -0
  352. package/dist/template/.pi/skills/frontend-design/references/shadcn/core-components.md +153 -0
  353. package/dist/template/.pi/skills/frontend-design/references/shadcn/form-components.md +158 -0
  354. package/dist/template/.pi/skills/frontend-design/references/shadcn/setup.md +69 -0
  355. package/dist/template/.pi/skills/frontend-design/references/shadcn/theming.md +152 -0
  356. package/dist/template/.pi/skills/frontend-design/references/tailwind/responsive.md +112 -0
  357. package/dist/template/.pi/skills/frontend-design/references/tailwind/utilities-layout.md +134 -0
  358. package/dist/template/.pi/skills/frontend-design/references/tailwind/utilities-styling.md +165 -0
  359. package/dist/template/.pi/skills/frontend-design/references/tailwind/v4-config.md +147 -0
  360. package/dist/template/.pi/skills/frontend-design/references/tailwind/v4-features.md +128 -0
  361. package/dist/template/.pi/skills/frontend-ui-engineering/SKILL.md +217 -0
  362. package/dist/template/.pi/skills/gemini-large-context/SKILL.md +238 -0
  363. package/dist/template/.pi/skills/git-workflow-and-versioning/SKILL.md +217 -0
  364. package/dist/template/.pi/skills/grill-me/SKILL.md +162 -0
  365. package/dist/template/.pi/skills/high-end-visual-design/SKILL.md +128 -0
  366. package/dist/template/.pi/skills/idea-refine/SKILL.md +195 -0
  367. package/dist/template/.pi/skills/idea-refine/examples.md +62 -0
  368. package/dist/template/.pi/skills/idea-refine/frameworks.md +63 -0
  369. package/dist/template/.pi/skills/idea-refine/refinement-criteria.md +56 -0
  370. package/dist/template/.pi/skills/incremental-implementation/SKILL.md +190 -0
  371. package/dist/template/.pi/skills/industrial-brutalist-ui/SKILL.md +131 -0
  372. package/dist/template/.pi/skills/interview-me/SKILL.md +227 -0
  373. package/dist/template/.pi/skills/jira/SKILL.md +306 -0
  374. package/dist/template/.pi/skills/loop-audit/SKILL.md +141 -0
  375. package/dist/template/.pi/skills/loop-cost/SKILL.md +130 -0
  376. package/dist/template/.pi/skills/loop-engineering/SKILL.md +175 -0
  377. package/dist/template/.pi/skills/minimalist-ui/SKILL.md +124 -0
  378. package/dist/template/.pi/skills/mockup-to-code/SKILL.md +197 -0
  379. package/dist/template/.pi/skills/observability-and-instrumentation/SKILL.md +202 -0
  380. package/dist/template/.pi/skills/opensrc/SKILL.md +297 -0
  381. package/dist/template/.pi/skills/opensrc/references/architecture.md +176 -0
  382. package/dist/template/.pi/skills/opensrc/references/cli-usage.md +176 -0
  383. package/dist/template/.pi/skills/opensrc/references/registry-support.md +137 -0
  384. package/dist/template/.pi/skills/pdf-extract/SKILL.md +461 -0
  385. package/dist/template/.pi/skills/performance-optimization/SKILL.md +233 -0
  386. package/dist/template/.pi/skills/performance-optimization/references/performance-checklist.md +85 -0
  387. package/dist/template/.pi/skills/planning-and-task-breakdown/SKILL.md +204 -0
  388. package/dist/template/.pi/skills/playwright/SKILL.md +404 -0
  389. package/dist/template/.pi/skills/playwright/references/agent-browser-cli.md +405 -0
  390. package/dist/template/.pi/skills/polar/SKILL.md +125 -0
  391. package/dist/template/.pi/skills/react-best-practices/SKILL.md +156 -0
  392. package/dist/template/.pi/skills/react-best-practices/rules/_sections.md +46 -0
  393. package/dist/template/.pi/skills/react-best-practices/rules/_template.md +28 -0
  394. package/dist/template/.pi/skills/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  395. package/dist/template/.pi/skills/react-best-practices/rules/advanced-use-latest.md +49 -0
  396. package/dist/template/.pi/skills/react-best-practices/rules/async-api-routes.md +38 -0
  397. package/dist/template/.pi/skills/react-best-practices/rules/async-defer-await.md +80 -0
  398. package/dist/template/.pi/skills/react-best-practices/rules/async-dependencies.md +36 -0
  399. package/dist/template/.pi/skills/react-best-practices/rules/async-parallel.md +28 -0
  400. package/dist/template/.pi/skills/react-best-practices/rules/async-suspense-boundaries.md +99 -0
  401. package/dist/template/.pi/skills/react-best-practices/rules/bundle-barrel-imports.md +59 -0
  402. package/dist/template/.pi/skills/react-best-practices/rules/bundle-conditional.md +31 -0
  403. package/dist/template/.pi/skills/react-best-practices/rules/bundle-defer-third-party.md +49 -0
  404. package/dist/template/.pi/skills/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  405. package/dist/template/.pi/skills/react-best-practices/rules/bundle-preload.md +50 -0
  406. package/dist/template/.pi/skills/react-best-practices/rules/client-event-listeners.md +74 -0
  407. package/dist/template/.pi/skills/react-best-practices/rules/client-localstorage-schema.md +71 -0
  408. package/dist/template/.pi/skills/react-best-practices/rules/client-passive-event-listeners.md +48 -0
  409. package/dist/template/.pi/skills/react-best-practices/rules/client-swr-dedup.md +56 -0
  410. package/dist/template/.pi/skills/react-best-practices/rules/js-batch-dom-css.md +82 -0
  411. package/dist/template/.pi/skills/react-best-practices/rules/js-cache-function-results.md +80 -0
  412. package/dist/template/.pi/skills/react-best-practices/rules/js-cache-property-access.md +28 -0
  413. package/dist/template/.pi/skills/react-best-practices/rules/js-cache-storage.md +70 -0
  414. package/dist/template/.pi/skills/react-best-practices/rules/js-combine-iterations.md +32 -0
  415. package/dist/template/.pi/skills/react-best-practices/rules/js-early-exit.md +50 -0
  416. package/dist/template/.pi/skills/react-best-practices/rules/js-hoist-regexp.md +45 -0
  417. package/dist/template/.pi/skills/react-best-practices/rules/js-index-maps.md +37 -0
  418. package/dist/template/.pi/skills/react-best-practices/rules/js-length-check-first.md +49 -0
  419. package/dist/template/.pi/skills/react-best-practices/rules/js-min-max-loop.md +82 -0
  420. package/dist/template/.pi/skills/react-best-practices/rules/js-set-map-lookups.md +24 -0
  421. package/dist/template/.pi/skills/react-best-practices/rules/js-tosorted-immutable.md +57 -0
  422. package/dist/template/.pi/skills/react-best-practices/rules/rendering-activity.md +26 -0
  423. package/dist/template/.pi/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  424. package/dist/template/.pi/skills/react-best-practices/rules/rendering-conditional-render.md +40 -0
  425. package/dist/template/.pi/skills/react-best-practices/rules/rendering-content-visibility.md +38 -0
  426. package/dist/template/.pi/skills/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  427. package/dist/template/.pi/skills/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  428. package/dist/template/.pi/skills/react-best-practices/rules/rendering-svg-precision.md +28 -0
  429. package/dist/template/.pi/skills/react-best-practices/rules/rerender-defer-reads.md +39 -0
  430. package/dist/template/.pi/skills/react-best-practices/rules/rerender-dependencies.md +45 -0
  431. package/dist/template/.pi/skills/react-best-practices/rules/rerender-derived-state.md +29 -0
  432. package/dist/template/.pi/skills/react-best-practices/rules/rerender-functional-setstate.md +74 -0
  433. package/dist/template/.pi/skills/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  434. package/dist/template/.pi/skills/react-best-practices/rules/rerender-memo.md +44 -0
  435. package/dist/template/.pi/skills/react-best-practices/rules/rerender-transitions.md +40 -0
  436. package/dist/template/.pi/skills/react-best-practices/rules/server-after-nonblocking.md +73 -0
  437. package/dist/template/.pi/skills/react-best-practices/rules/server-cache-lru.md +41 -0
  438. package/dist/template/.pi/skills/react-best-practices/rules/server-cache-react.md +76 -0
  439. package/dist/template/.pi/skills/react-best-practices/rules/server-parallel-fetching.md +83 -0
  440. package/dist/template/.pi/skills/react-best-practices/rules/server-serialization.md +38 -0
  441. package/dist/template/.pi/skills/redesign-existing-projects/SKILL.md +217 -0
  442. package/dist/template/.pi/skills/resend/SKILL.md +196 -0
  443. package/dist/template/.pi/skills/resend/references/react-email.md +287 -0
  444. package/dist/template/.pi/skills/resend/references/receive-email.md +248 -0
  445. package/dist/template/.pi/skills/resend/references/send-email.md +318 -0
  446. package/dist/template/.pi/skills/root-cause-tracing/SKILL.md +216 -0
  447. package/dist/template/.pi/skills/security-and-hardening/SKILL.md +293 -0
  448. package/dist/template/.pi/skills/security-and-hardening/references/security-checklist.md +105 -0
  449. package/dist/template/.pi/skills/shipping-and-launch/SKILL.md +101 -0
  450. package/dist/template/.pi/skills/source-driven-development/SKILL.md +108 -0
  451. package/dist/template/.pi/skills/spec-driven-development/SKILL.md +177 -0
  452. package/dist/template/.pi/skills/srcwalk/SKILL.md +182 -0
  453. package/dist/template/.pi/skills/subagent-driven-development/SKILL.md +253 -0
  454. package/dist/template/.pi/skills/supabase/SKILL.md +153 -0
  455. package/dist/template/.pi/skills/supabase-postgres-best-practices/SKILL.md +88 -0
  456. package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/advanced-full-text-search.md +55 -0
  457. package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/advanced-jsonb-indexing.md +49 -0
  458. package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/conn-idle-timeout.md +46 -0
  459. package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/conn-limits.md +44 -0
  460. package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/conn-pooling.md +41 -0
  461. package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/conn-prepared-statements.md +46 -0
  462. package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/data-batch-inserts.md +54 -0
  463. package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/data-n-plus-one.md +53 -0
  464. package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/data-pagination.md +50 -0
  465. package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/data-upsert.md +50 -0
  466. package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/lock-advisory.md +56 -0
  467. package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/lock-deadlock-prevention.md +68 -0
  468. package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/lock-short-transactions.md +50 -0
  469. package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/lock-skip-locked.md +54 -0
  470. package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/monitor-explain-analyze.md +45 -0
  471. package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/monitor-pg-stat-statements.md +55 -0
  472. package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/monitor-vacuum-analyze.md +55 -0
  473. package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/query-composite-indexes.md +44 -0
  474. package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/query-covering-indexes.md +40 -0
  475. package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/query-index-types.md +45 -0
  476. package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/query-missing-indexes.md +43 -0
  477. package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/query-partial-indexes.md +45 -0
  478. package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/schema-data-types.md +46 -0
  479. package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/schema-foreign-key-indexes.md +59 -0
  480. package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/schema-lowercase-identifiers.md +55 -0
  481. package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/schema-partitioning.md +55 -0
  482. package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/schema-primary-keys.md +61 -0
  483. package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/security-privileges.md +54 -0
  484. package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/security-rls-basics.md +50 -0
  485. package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/security-rls-performance.md +57 -0
  486. package/dist/template/.pi/skills/swift-concurrency/SKILL.md +290 -0
  487. package/dist/template/.pi/skills/swift-concurrency/references/actors.md +640 -0
  488. package/dist/template/.pi/skills/swift-concurrency/references/async-algorithms.md +822 -0
  489. package/dist/template/.pi/skills/swift-concurrency/references/async-await-basics.md +249 -0
  490. package/dist/template/.pi/skills/swift-concurrency/references/async-sequences.md +670 -0
  491. package/dist/template/.pi/skills/swift-concurrency/references/core-data.md +533 -0
  492. package/dist/template/.pi/skills/swift-concurrency/references/glossary.md +128 -0
  493. package/dist/template/.pi/skills/swift-concurrency/references/linting.md +142 -0
  494. package/dist/template/.pi/skills/swift-concurrency/references/memory-management.md +542 -0
  495. package/dist/template/.pi/skills/swift-concurrency/references/migration.md +1076 -0
  496. package/dist/template/.pi/skills/swift-concurrency/references/performance.md +574 -0
  497. package/dist/template/.pi/skills/swift-concurrency/references/sendable.md +578 -0
  498. package/dist/template/.pi/skills/swift-concurrency/references/tasks.md +604 -0
  499. package/dist/template/.pi/skills/swift-concurrency/references/testing.md +565 -0
  500. package/dist/template/.pi/skills/swift-concurrency/references/threading.md +452 -0
  501. package/dist/template/.pi/skills/swiftui-expert-skill/SKILL.md +343 -0
  502. package/dist/template/.pi/skills/swiftui-expert-skill/references/animation-advanced.md +351 -0
  503. package/dist/template/.pi/skills/swiftui-expert-skill/references/animation-basics.md +284 -0
  504. package/dist/template/.pi/skills/swiftui-expert-skill/references/animation-transitions.md +326 -0
  505. package/dist/template/.pi/skills/swiftui-expert-skill/references/image-optimization.md +286 -0
  506. package/dist/template/.pi/skills/swiftui-expert-skill/references/layout-best-practices.md +312 -0
  507. package/dist/template/.pi/skills/swiftui-expert-skill/references/liquid-glass.md +377 -0
  508. package/dist/template/.pi/skills/swiftui-expert-skill/references/list-patterns.md +153 -0
  509. package/dist/template/.pi/skills/swiftui-expert-skill/references/modern-apis.md +400 -0
  510. package/dist/template/.pi/skills/swiftui-expert-skill/references/performance-patterns.md +377 -0
  511. package/dist/template/.pi/skills/swiftui-expert-skill/references/scroll-patterns.md +305 -0
  512. package/dist/template/.pi/skills/swiftui-expert-skill/references/sheet-navigation-patterns.md +292 -0
  513. package/dist/template/.pi/skills/swiftui-expert-skill/references/state-management.md +447 -0
  514. package/dist/template/.pi/skills/swiftui-expert-skill/references/text-formatting.md +285 -0
  515. package/dist/template/.pi/skills/swiftui-expert-skill/references/view-structure.md +276 -0
  516. package/dist/template/.pi/skills/test-driven-development/SKILL.md +400 -0
  517. package/dist/template/.pi/skills/test-driven-development/references/testing-patterns.md +155 -0
  518. package/dist/template/.pi/skills/testing-anti-patterns/SKILL.md +339 -0
  519. package/dist/template/.pi/skills/using-agent-skills/SKILL.md +371 -0
  520. package/dist/template/.pi/skills/using-git-worktrees/SKILL.md +275 -0
  521. package/dist/template/.pi/skills/vercel-deploy-claimable/SKILL.md +144 -0
  522. package/dist/template/.pi/skills/vercel-deploy-claimable/scripts/deploy.sh +249 -0
  523. package/dist/template/.pi/skills/verification-before-completion/SKILL.md +348 -0
  524. package/dist/template/.pi/skills/webclaw/SKILL.md +188 -0
  525. package/dist/template/.pi/skills/writing-skills/SKILL.md +329 -0
  526. package/dist/template/.pi/skills/writing-skills/references/anti-patterns.md +25 -0
  527. package/dist/template/.pi/skills/writing-skills/references/claude-search-optimization.md +140 -0
  528. package/dist/template/.pi/skills/writing-skills/references/discovery-workflow.md +11 -0
  529. package/dist/template/.pi/skills/writing-skills/references/file-organization.md +32 -0
  530. package/dist/template/.pi/skills/writing-skills/references/flowcharts-and-examples.md +57 -0
  531. package/dist/template/.pi/skills/writing-skills/references/rationalization-hardening.md +75 -0
  532. package/dist/template/.pi/skills/writing-skills/references/testing-methodology.md +397 -0
  533. package/dist/template/.pi/skills/writing-skills/references/testing-skill-types.md +52 -0
  534. package/dist/template/.pi/subagents.json +10 -0
  535. package/dist/template/.pi/templates/adr.md +47 -0
  536. package/dist/template/.pi/templates/design.md +61 -0
  537. package/dist/template/.pi/templates/loop-github-action.yml +162 -0
  538. package/dist/template/.pi/templates/loop-orchestrator.sh +514 -0
  539. package/dist/template/.pi/templates/loop-orchestrator.test.ts +332 -0
  540. package/dist/template/.pi/templates/loop-orchestrator.ts +936 -0
  541. package/dist/template/.pi/templates/loop-state.json +24 -0
  542. package/dist/template/.pi/templates/loop-state.md +98 -0
  543. package/dist/template/.pi/templates/loop-vision.md +110 -0
  544. package/dist/template/.pi/templates/prd.md +204 -0
  545. package/dist/template/.pi/templates/progress.md +55 -0
  546. package/dist/template/.pi/templates/project.md +58 -0
  547. package/dist/template/.pi/templates/proposal.md +40 -0
  548. package/dist/template/.pi/templates/review-state.json +20 -0
  549. package/dist/template/.pi/templates/roadmap.md +93 -0
  550. package/dist/template/.pi/templates/state.md +97 -0
  551. package/dist/template/.pi/templates/tasks.md +202 -0
  552. package/dist/template/.pi/templates/tech-stack.md +85 -0
  553. package/dist/template/.pi/templates/user.md +26 -0
  554. package/dist/template/.pi/workflows/INDEX.md +63 -0
  555. package/dist/template/.pi/workflows/audit-pattern.md +84 -0
  556. package/dist/template/.pi/workflows/batch-implement.md +121 -0
  557. package/dist/template/.pi/workflows/deep-research.md +89 -0
  558. package/dist/template/.pi/workflows/development-lifecycle-workflow.md +175 -0
  559. package/dist/template/.pi/workflows/garbage-collection.md +144 -0
  560. package/dist/template/.pi/workflows/quality-loop.md +211 -0
  561. package/package.json +57 -0
@@ -0,0 +1,153 @@
1
+ ---
2
+ name: supabase
3
+ description: Use when working with any Supabase service — database operations, edge functions, auth, storage, or project management. MUST load before writing Supabase queries, RLS policies, or edge functions.
4
+ ---
5
+
6
+ # Supabase Platform (MCP)
7
+
8
+ ## When to Use
9
+
10
+ - When you need to manage Supabase projects, databases, or edge functions via MCP.
11
+
12
+ ## When NOT to Use
13
+
14
+ - When the backend is not Supabase or MCP access is unavailable.
15
+
16
+
17
+ ## Available Tools
18
+
19
+ ### Account & Projects
20
+
21
+ - `list_projects` - Lists all Supabase projects
22
+ - `get_project` - Gets details for a specific project
23
+ - `list_organizations` - Lists all organizations
24
+
25
+ ### Database
26
+
27
+ - `list_tables` - Lists all tables in specified schemas
28
+ - `list_extensions` - Lists PostgreSQL extensions
29
+ - `list_migrations` - Lists database migrations
30
+ - `execute_sql` - Executes raw SQL queries
31
+
32
+ ### Development
33
+
34
+ - `get_project_url` - Gets the API URL for a project
35
+ - `get_publishable_keys` - Gets anonymous API keys (client-safe)
36
+ - `generate_typescript_types` - Generates TypeScript types from schema
37
+
38
+ ### Edge Functions
39
+
40
+ - `list_edge_functions` - Lists all Edge Functions
41
+ - `get_edge_function` - Retrieves Edge Function file contents
42
+ - `deploy_edge_function` - Deploys or updates an Edge Function
43
+
44
+ ### Debugging
45
+
46
+ - `get_logs` - Retrieves logs by service type
47
+ - `get_advisors` - Gets security/performance advisory notices
48
+
49
+ ### Documentation
50
+
51
+ - `search_docs` - Searches Supabase documentation
52
+
53
+ ## Workflow
54
+
55
+ ### Quick Start
56
+
57
+ ```
58
+ # List projects
59
+ skill_mcp(skill_name="supabase", tool_name="list_projects")
60
+
61
+ # List tables in database
62
+ skill_mcp(skill_name="supabase", tool_name="list_tables")
63
+
64
+ # Execute SQL query
65
+ skill_mcp(skill_name="supabase", tool_name="execute_sql", arguments='{"query": "SELECT * FROM users LIMIT 10"}')
66
+
67
+ # Generate TypeScript types
68
+ skill_mcp(skill_name="supabase", tool_name="generate_typescript_types")
69
+
70
+ # Search docs
71
+ skill_mcp(skill_name="supabase", tool_name="search_docs", arguments='{"query": "auth custom claims"}')
72
+ ```
73
+
74
+ ### Get Project Credentials
75
+
76
+ ```
77
+ # Get API URL and keys for project
78
+ skill_mcp(skill_name="supabase", tool_name="get_project_url")
79
+ skill_mcp(skill_name="supabase", tool_name="get_publishable_keys")
80
+
81
+ # List Edge Functions
82
+ skill_mcp(skill_name="supabase", tool_name="list_edge_functions")
83
+
84
+ # Deploy Edge Function
85
+ skill_mcp(skill_name="supabase", tool_name="deploy_edge_function", arguments='{"name": "my-function", "import_map": {...}, "entrypoint": "index.ts"}')
86
+ ```
87
+
88
+ ### Debug Issues
89
+
90
+ ```
91
+ # Get logs by service
92
+ skill_mcp(skill_name="supabase", tool_name="get_logs", arguments='{"service": "postgres", "limit": 100}')
93
+
94
+ # Check advisories
95
+ skill_mcp(skill_name="supabase", tool_name="get_advisors")
96
+ ```
97
+
98
+ ## Security Notes
99
+
100
+ - **Read-only mode**: Set `"read_only": true` in mcp.json to disable write operations
101
+ - **Project scoping**: Use `project_ref` to limit access to specific projects
102
+ - **Environment variables**: Set `SUPABASE_ACCESS_TOKEN` for authentication
103
+
104
+ ## Server Options
105
+
106
+ For advanced usage, modify `mcp.json`:
107
+
108
+ ```json
109
+ {
110
+ "supabase": {
111
+ "command": "npx",
112
+ "args": ["-y", "@supabase/mcp@latest"],
113
+ "env": {
114
+ "SUPABASE_ACCESS_TOKEN": "your-token-here"
115
+ },
116
+ "includeTools": ["list_tables", "execute_sql", "..."]
117
+ }
118
+ }
119
+ ```
120
+
121
+ Configuration options:
122
+
123
+ - `project_ref` - Scope to specific project (recommended)
124
+ - `read_only` - Restrict to read-only operations (recommended)
125
+ - `features` - Enable specific tool groups
126
+
127
+ > **Note**: This skill loads 14 essential tools. Excludes experimental (branching) and storage tools that require paid plans.
128
+
129
+ ## Common Rationalizations
130
+
131
+ | Rationalization | Reality |
132
+ |---|---|
133
+ | "I'll disable RLS during development" | RLS is your security boundary. Disabling it in dev creates habits that leak to production. |
134
+ | "The auto-generated API is fine as-is" | Auto-generated APIs expose everything. Restrict to what the client actually needs. |
135
+ | "I'll add indexes when queries get slow" | Missing indexes on Supabase hit hard under even moderate load. Index from the start. |
136
+
137
+ ## Red Flags
138
+
139
+ - RLS policies disabled or set to permissive
140
+ - Service role key used in client-side code
141
+ - No row-level security defined for user-specific data
142
+ - Real-time subscriptions without cleanup on component unmount
143
+ - Database functions without SECURITY DEFINER review
144
+
145
+ ## Verification
146
+
147
+ After implementing Supabase:
148
+
149
+ - [ ] RLS policies are defined and tested for each table
150
+ - [ ] Service role key is never used in client-side code
151
+ - [ ] Row-level security correctly scopes data to the authenticated user
152
+ - [ ] Real-time subscriptions are cleaned up on component unmount
153
+ - [ ] Database functions are reviewed for SECURITY DEFINER implications
@@ -0,0 +1,88 @@
1
+ ---
2
+ name: supabase-postgres-best-practices
3
+ description: MUST load when writing, reviewing, or optimizing Postgres queries, schema designs, indexes, or RLS policies in Supabase. Covers Supabase-specific Postgres performance patterns and common pitfalls.
4
+ ---
5
+
6
+ # Supabase Postgres Best Practices
7
+
8
+ ## When to Use
9
+
10
+ - When optimizing or reviewing Postgres performance, schemas, or queries with Supabase guidance.
11
+
12
+ ## When NOT to Use
13
+
14
+ - When the task is not related to Postgres performance or schema design.
15
+
16
+
17
+ ## When to Apply
18
+
19
+ Reference these guidelines when:
20
+
21
+ - Writing SQL queries or designing schemas
22
+ - Implementing indexes or query optimization
23
+ - Reviewing database performance issues
24
+ - Configuring connection pooling or scaling
25
+ - Optimizing for Postgres-specific features
26
+ - Working with Row-Level Security (RLS)
27
+
28
+ ## Rule Categories by Priority
29
+
30
+ | Priority | Category | Impact | Prefix |
31
+ | -------- | ------------------------ | ----------- | ----------- |
32
+ | 1 | Query Performance | CRITICAL | `query-` |
33
+ | 2 | Connection Management | CRITICAL | `conn-` |
34
+ | 3 | Security & RLS | CRITICAL | `security-` |
35
+ | 4 | Schema Design | HIGH | `schema-` |
36
+ | 5 | Concurrency & Locking | MEDIUM-HIGH | `lock-` |
37
+ | 6 | Data Access Patterns | MEDIUM | `data-` |
38
+ | 7 | Monitoring & Diagnostics | LOW-MEDIUM | `monitor-` |
39
+ | 8 | Advanced Features | LOW | `advanced-` |
40
+
41
+ ## How to Use
42
+
43
+ Read individual rule files for detailed explanations and SQL examples:
44
+
45
+ ```
46
+ rules/query-missing-indexes.md
47
+ rules/schema-partial-indexes.md
48
+ rules/_sections.md
49
+ ```
50
+
51
+ Each rule file contains:
52
+
53
+ - Brief explanation of why it matters
54
+ - Incorrect SQL example with explanation
55
+ - Correct SQL example with explanation
56
+ - Optional EXPLAIN output or metrics
57
+ - Additional context and references
58
+ - Supabase-specific notes (when applicable)
59
+
60
+ ## Full Compiled Document
61
+
62
+ For the complete guide with all rules expanded: `AGENTS.md`
63
+
64
+ ## Common Rationalizations
65
+
66
+ | Rationalization | Reality |
67
+ |---|---|
68
+ | "The ORM handles query optimization" | ORMs generate correct SQL, not efficient SQL. Review query plans. |
69
+ | "This query is fast enough for now" | "Fast enough" at 100 rows is broken at 100K rows. Test with realistic data volumes. |
70
+ | "I don't need to understand EXPLAIN output" | EXPLAIN is the difference between guessing and knowing. Learn it. |
71
+
72
+ ## Red Flags
73
+
74
+ - Queries without EXPLAIN ANALYZE review
75
+ - Missing indexes on foreign key columns used in JOINs
76
+ - SELECT * on tables with large text/JSONB columns
77
+ - No connection pooling configured
78
+ - COUNT(*) used without WHERE on large tables
79
+
80
+ ## Verification
81
+
82
+ After writing Supabase Postgres queries:
83
+
84
+ - [ ] EXPLAIN ANALYZE output reviewed for each new query
85
+ - [ ] Indexes exist on columns used in WHERE, JOIN, and ORDER BY
86
+ - [ ] COUNT(*) queries on large tables use estimates or caching
87
+ - [ ] Connection pooling is configured for production
88
+ - [ ] Query performance is measured under realistic data volume
@@ -0,0 +1,55 @@
1
+ ---
2
+ title: Use tsvector for Full-Text Search
3
+ impact: MEDIUM
4
+ impactDescription: 100x faster than LIKE, with ranking support
5
+ tags: full-text-search, tsvector, gin, search
6
+ ---
7
+
8
+ ## Use tsvector for Full-Text Search
9
+
10
+ LIKE with wildcards can't use indexes. Full-text search with tsvector is orders of magnitude faster.
11
+
12
+ **Incorrect (LIKE pattern matching):**
13
+
14
+ ```sql
15
+ -- Cannot use index, scans all rows
16
+ select * from articles where content like '%postgresql%';
17
+
18
+ -- Case-insensitive makes it worse
19
+ select * from articles where lower(content) like '%postgresql%';
20
+ ```
21
+
22
+ **Correct (full-text search with tsvector):**
23
+
24
+ ```sql
25
+ -- Add tsvector column and index
26
+ alter table articles add column search_vector tsvector
27
+ generated always as (to_tsvector('english', coalesce(title,'') || ' ' || coalesce(content,''))) stored;
28
+
29
+ create index articles_search_idx on articles using gin (search_vector);
30
+
31
+ -- Fast full-text search
32
+ select * from articles
33
+ where search_vector @@ to_tsquery('english', 'postgresql & performance');
34
+
35
+ -- With ranking
36
+ select *, ts_rank(search_vector, query) as rank
37
+ from articles, to_tsquery('english', 'postgresql') query
38
+ where search_vector @@ query
39
+ order by rank desc;
40
+ ```
41
+
42
+ Search multiple terms:
43
+
44
+ ```sql
45
+ -- AND: both terms required
46
+ to_tsquery('postgresql & performance')
47
+
48
+ -- OR: either term
49
+ to_tsquery('postgresql | mysql')
50
+
51
+ -- Prefix matching
52
+ to_tsquery('post:*')
53
+ ```
54
+
55
+ Reference: [Full Text Search](https://supabase.com/docs/guides/database/full-text-search)
@@ -0,0 +1,49 @@
1
+ ---
2
+ title: Index JSONB Columns for Efficient Querying
3
+ impact: MEDIUM
4
+ impactDescription: 10-100x faster JSONB queries with proper indexing
5
+ tags: jsonb, gin, indexes, json
6
+ ---
7
+
8
+ ## Index JSONB Columns for Efficient Querying
9
+
10
+ JSONB queries without indexes scan the entire table. Use GIN indexes for containment queries.
11
+
12
+ **Incorrect (no index on JSONB):**
13
+
14
+ ```sql
15
+ create table products (
16
+ id bigint primary key,
17
+ attributes jsonb
18
+ );
19
+
20
+ -- Full table scan for every query
21
+ select * from products where attributes @> '{"color": "red"}';
22
+ select * from products where attributes->>'brand' = 'Nike';
23
+ ```
24
+
25
+ **Correct (GIN index for JSONB):**
26
+
27
+ ```sql
28
+ -- GIN index for containment operators (@>, ?, ?&, ?|)
29
+ create index products_attrs_gin on products using gin (attributes);
30
+
31
+ -- Now containment queries use the index
32
+ select * from products where attributes @> '{"color": "red"}';
33
+
34
+ -- For specific key lookups, use expression index
35
+ create index products_brand_idx on products ((attributes->>'brand'));
36
+ select * from products where attributes->>'brand' = 'Nike';
37
+ ```
38
+
39
+ Choose the right operator class:
40
+
41
+ ```sql
42
+ -- jsonb_ops (default): supports all operators, larger index
43
+ create index idx1 on products using gin (attributes);
44
+
45
+ -- jsonb_path_ops: only @> operator, but 2-3x smaller index
46
+ create index idx2 on products using gin (attributes jsonb_path_ops);
47
+ ```
48
+
49
+ Reference: [JSONB Indexes](https://www.postgresql.org/docs/current/datatype-json.html#JSON-INDEXING)
@@ -0,0 +1,46 @@
1
+ ---
2
+ title: Configure Idle Connection Timeouts
3
+ impact: HIGH
4
+ impactDescription: Reclaim 30-50% of connection slots from idle clients
5
+ tags: connections, timeout, idle, resource-management
6
+ ---
7
+
8
+ ## Configure Idle Connection Timeouts
9
+
10
+ Idle connections waste resources. Configure timeouts to automatically reclaim them.
11
+
12
+ **Incorrect (connections held indefinitely):**
13
+
14
+ ```sql
15
+ -- No timeout configured
16
+ show idle_in_transaction_session_timeout; -- 0 (disabled)
17
+
18
+ -- Connections stay open forever, even when idle
19
+ select pid, state, state_change, query
20
+ from pg_stat_activity
21
+ where state = 'idle in transaction';
22
+ -- Shows transactions idle for hours, holding locks
23
+ ```
24
+
25
+ **Correct (automatic cleanup of idle connections):**
26
+
27
+ ```sql
28
+ -- Terminate connections idle in transaction after 30 seconds
29
+ alter system set idle_in_transaction_session_timeout = '30s';
30
+
31
+ -- Terminate completely idle connections after 10 minutes
32
+ alter system set idle_session_timeout = '10min';
33
+
34
+ -- Reload configuration
35
+ select pg_reload_conf();
36
+ ```
37
+
38
+ For pooled connections, configure at the pooler level:
39
+
40
+ ```ini
41
+ # pgbouncer.ini
42
+ server_idle_timeout = 60
43
+ client_idle_timeout = 300
44
+ ```
45
+
46
+ Reference: [Connection Timeouts](https://www.postgresql.org/docs/current/runtime-config-client.html#GUC-IDLE-IN-TRANSACTION-SESSION-TIMEOUT)
@@ -0,0 +1,44 @@
1
+ ---
2
+ title: Set Appropriate Connection Limits
3
+ impact: CRITICAL
4
+ impactDescription: Prevent database crashes and memory exhaustion
5
+ tags: connections, max-connections, limits, stability
6
+ ---
7
+
8
+ ## Set Appropriate Connection Limits
9
+
10
+ Too many connections exhaust memory and degrade performance. Set limits based on available resources.
11
+
12
+ **Incorrect (unlimited or excessive connections):**
13
+
14
+ ```sql
15
+ -- Default max_connections = 100, but often increased blindly
16
+ show max_connections; -- 500 (way too high for 4GB RAM)
17
+
18
+ -- Each connection uses 1-3MB RAM
19
+ -- 500 connections * 2MB = 1GB just for connections!
20
+ -- Out of memory errors under load
21
+ ```
22
+
23
+ **Correct (calculate based on resources):**
24
+
25
+ ```sql
26
+ -- Formula: max_connections = (RAM in MB / 5MB per connection) - reserved
27
+ -- For 4GB RAM: (4096 / 5) - 10 = ~800 theoretical max
28
+ -- But practically, 100-200 is better for query performance
29
+
30
+ -- Recommended settings for 4GB RAM
31
+ alter system set max_connections = 100;
32
+
33
+ -- Also set work_mem appropriately
34
+ -- work_mem * max_connections should not exceed 25% of RAM
35
+ alter system set work_mem = '8MB'; -- 8MB * 100 = 800MB max
36
+ ```
37
+
38
+ Monitor connection usage:
39
+
40
+ ```sql
41
+ select count(*), state from pg_stat_activity group by state;
42
+ ```
43
+
44
+ Reference: [Database Connections](https://supabase.com/docs/guides/platform/performance#connection-management)
@@ -0,0 +1,41 @@
1
+ ---
2
+ title: Use Connection Pooling for All Applications
3
+ impact: CRITICAL
4
+ impactDescription: Handle 10-100x more concurrent users
5
+ tags: connection-pooling, pgbouncer, performance, scalability
6
+ ---
7
+
8
+ ## Use Connection Pooling for All Applications
9
+
10
+ Postgres connections are expensive (1-3MB RAM each). Without pooling, applications exhaust connections under load.
11
+
12
+ **Incorrect (new connection per request):**
13
+
14
+ ```sql
15
+ -- Each request creates a new connection
16
+ -- Application code: db.connect() per request
17
+ -- Result: 500 concurrent users = 500 connections = crashed database
18
+
19
+ -- Check current connections
20
+ select count(*) from pg_stat_activity; -- 487 connections!
21
+ ```
22
+
23
+ **Correct (connection pooling):**
24
+
25
+ ```sql
26
+ -- Use a pooler like PgBouncer between app and database
27
+ -- Application connects to pooler, pooler reuses a small pool to Postgres
28
+
29
+ -- Configure pool_size based on: (CPU cores * 2) + spindle_count
30
+ -- Example for 4 cores: pool_size = 10
31
+
32
+ -- Result: 500 concurrent users share 10 actual connections
33
+ select count(*) from pg_stat_activity; -- 10 connections
34
+ ```
35
+
36
+ Pool modes:
37
+
38
+ - **Transaction mode**: connection returned after each transaction (best for most apps)
39
+ - **Session mode**: connection held for entire session (needed for prepared statements, temp tables)
40
+
41
+ Reference: [Connection Pooling](https://supabase.com/docs/guides/database/connecting-to-postgres#connection-pooler)
@@ -0,0 +1,46 @@
1
+ ---
2
+ title: Use Prepared Statements Correctly with Pooling
3
+ impact: HIGH
4
+ impactDescription: Avoid prepared statement conflicts in pooled environments
5
+ tags: prepared-statements, connection-pooling, transaction-mode
6
+ ---
7
+
8
+ ## Use Prepared Statements Correctly with Pooling
9
+
10
+ Prepared statements are tied to individual database connections. In transaction-mode pooling, connections are shared, causing conflicts.
11
+
12
+ **Incorrect (named prepared statements with transaction pooling):**
13
+
14
+ ```sql
15
+ -- Named prepared statement
16
+ prepare get_user as select * from users where id = $1;
17
+
18
+ -- In transaction mode pooling, next request may get different connection
19
+ execute get_user(123);
20
+ -- ERROR: prepared statement "get_user" does not exist
21
+ ```
22
+
23
+ **Correct (use unnamed statements or session mode):**
24
+
25
+ ```sql
26
+ -- Option 1: Use unnamed prepared statements (most ORMs do this automatically)
27
+ -- The query is prepared and executed in a single protocol message
28
+
29
+ -- Option 2: Deallocate after use in transaction mode
30
+ prepare get_user as select * from users where id = $1;
31
+ execute get_user(123);
32
+ deallocate get_user;
33
+
34
+ -- Option 3: Use session mode pooling (port 5432 vs 6543)
35
+ -- Connection is held for entire session, prepared statements persist
36
+ ```
37
+
38
+ Check your driver settings:
39
+
40
+ ```sql
41
+ -- Many drivers use prepared statements by default
42
+ -- Node.js pg: { prepare: false } to disable
43
+ -- JDBC: prepareThreshold=0 to disable
44
+ ```
45
+
46
+ Reference: [Prepared Statements with Pooling](https://supabase.com/docs/guides/database/connecting-to-postgres#connection-pool-modes)
@@ -0,0 +1,54 @@
1
+ ---
2
+ title: Batch INSERT Statements for Bulk Data
3
+ impact: MEDIUM
4
+ impactDescription: 10-50x faster bulk inserts
5
+ tags: batch, insert, bulk, performance, copy
6
+ ---
7
+
8
+ ## Batch INSERT Statements for Bulk Data
9
+
10
+ Individual INSERT statements have high overhead. Batch multiple rows in single statements or use COPY.
11
+
12
+ **Incorrect (individual inserts):**
13
+
14
+ ```sql
15
+ -- Each insert is a separate transaction and round trip
16
+ insert into events (user_id, action) values (1, 'click');
17
+ insert into events (user_id, action) values (1, 'view');
18
+ insert into events (user_id, action) values (2, 'click');
19
+ -- ... 1000 more individual inserts
20
+
21
+ -- 1000 inserts = 1000 round trips = slow
22
+ ```
23
+
24
+ **Correct (batch insert):**
25
+
26
+ ```sql
27
+ -- Multiple rows in single statement
28
+ insert into events (user_id, action) values
29
+ (1, 'click'),
30
+ (1, 'view'),
31
+ (2, 'click'),
32
+ -- ... up to ~1000 rows per batch
33
+ (999, 'view');
34
+
35
+ -- One round trip for 1000 rows
36
+ ```
37
+
38
+ For large imports, use COPY:
39
+
40
+ ```sql
41
+ -- COPY is fastest for bulk loading
42
+ copy events (user_id, action, created_at)
43
+ from '/path/to/data.csv'
44
+ with (format csv, header true);
45
+
46
+ -- Or from stdin in application
47
+ copy events (user_id, action) from stdin with (format csv);
48
+ 1,click
49
+ 1,view
50
+ 2,click
51
+ \.
52
+ ```
53
+
54
+ Reference: [COPY](https://www.postgresql.org/docs/current/sql-copy.html)
@@ -0,0 +1,53 @@
1
+ ---
2
+ title: Eliminate N+1 Queries with Batch Loading
3
+ impact: MEDIUM-HIGH
4
+ impactDescription: 10-100x fewer database round trips
5
+ tags: n-plus-one, batch, performance, queries
6
+ ---
7
+
8
+ ## Eliminate N+1 Queries with Batch Loading
9
+
10
+ N+1 queries execute one query per item in a loop. Batch them into a single query using arrays or JOINs.
11
+
12
+ **Incorrect (N+1 queries):**
13
+
14
+ ```sql
15
+ -- First query: get all users
16
+ select id from users where active = true; -- Returns 100 IDs
17
+
18
+ -- Then N queries, one per user
19
+ select * from orders where user_id = 1;
20
+ select * from orders where user_id = 2;
21
+ select * from orders where user_id = 3;
22
+ -- ... 97 more queries!
23
+
24
+ -- Total: 101 round trips to database
25
+ ```
26
+
27
+ **Correct (single batch query):**
28
+
29
+ ```sql
30
+ -- Collect IDs and query once with ANY
31
+ select * from orders where user_id = any(array[1, 2, 3, ...]);
32
+
33
+ -- Or use JOIN instead of loop
34
+ select u.id, u.name, o.*
35
+ from users u
36
+ left join orders o on o.user_id = u.id
37
+ where u.active = true;
38
+
39
+ -- Total: 1 round trip
40
+ ```
41
+
42
+ Application pattern:
43
+
44
+ ```sql
45
+ -- Instead of looping in application code:
46
+ -- for user in users: db.query("SELECT * FROM orders WHERE user_id = $1", user.id)
47
+
48
+ -- Pass array parameter:
49
+ select * from orders where user_id = any($1::bigint[]);
50
+ -- Application passes: [1, 2, 3, 4, 5, ...]
51
+ ```
52
+
53
+ Reference: [N+1 Query Problem](https://supabase.com/docs/guides/database/query-optimization)
@@ -0,0 +1,50 @@
1
+ ---
2
+ title: Use Cursor-Based Pagination Instead of OFFSET
3
+ impact: MEDIUM-HIGH
4
+ impactDescription: Consistent O(1) performance regardless of page depth
5
+ tags: pagination, cursor, keyset, offset, performance
6
+ ---
7
+
8
+ ## Use Cursor-Based Pagination Instead of OFFSET
9
+
10
+ OFFSET-based pagination scans all skipped rows, getting slower on deeper pages. Cursor pagination is O(1).
11
+
12
+ **Incorrect (OFFSET pagination):**
13
+
14
+ ```sql
15
+ -- Page 1: scans 20 rows
16
+ select * from products order by id limit 20 offset 0;
17
+
18
+ -- Page 100: scans 2000 rows to skip 1980
19
+ select * from products order by id limit 20 offset 1980;
20
+
21
+ -- Page 10000: scans 200,000 rows!
22
+ select * from products order by id limit 20 offset 199980;
23
+ ```
24
+
25
+ **Correct (cursor/keyset pagination):**
26
+
27
+ ```sql
28
+ -- Page 1: get first 20
29
+ select * from products order by id limit 20;
30
+ -- Application stores last_id = 20
31
+
32
+ -- Page 2: start after last ID
33
+ select * from products where id > 20 order by id limit 20;
34
+ -- Uses index, always fast regardless of page depth
35
+
36
+ -- Page 10000: same speed as page 1
37
+ select * from products where id > 199980 order by id limit 20;
38
+ ```
39
+
40
+ For multi-column sorting:
41
+
42
+ ```sql
43
+ -- Cursor must include all sort columns
44
+ select * from products
45
+ where (created_at, id) > ('2024-01-15 10:00:00', 12345)
46
+ order by created_at, id
47
+ limit 20;
48
+ ```
49
+
50
+ Reference: [Pagination](https://supabase.com/docs/guides/database/pagination)