quiver-cli 1.3.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (407) hide show
  1. package/README.md +197 -239
  2. package/dist/cli.js +3163 -2040
  3. package/package.json +10 -11
  4. package/template/.agents/AGENTS.md +0 -26
  5. package/template/.agents/commands/cp.md +0 -108
  6. package/template/.agents/commands/next-setup.md +0 -1064
  7. package/template/.agents/commands/review.md +0 -68
  8. package/template/.agents/commands/terraform-readme.md +0 -38
  9. package/template/.agents/config.json +0 -80
  10. package/template/.agents/plugins/opencode/rtk.ts +0 -34
  11. package/template/.agents/skills/agent-browser/SKILL.md +0 -52
  12. package/template/.agents/skills/apps/skybridge/SKILL.md +0 -52
  13. package/template/.agents/skills/code/cleanup/SKILL.md +0 -26
  14. package/template/.agents/skills/code/improve/SKILL.md +0 -122
  15. package/template/.agents/skills/code/improve/references/audit-playbook.md +0 -130
  16. package/template/.agents/skills/code/improve/references/closing-the-loop.md +0 -96
  17. package/template/.agents/skills/code/improve/references/plan-template.md +0 -197
  18. package/template/.agents/skills/code/vercel-react-best-practices/AGENTS.md +0 -3810
  19. package/template/.agents/skills/code/vercel-react-best-practices/README.md +0 -123
  20. package/template/.agents/skills/code/vercel-react-best-practices/SKILL.md +0 -149
  21. package/template/.agents/skills/code/vercel-react-best-practices/metadata.json +0 -15
  22. package/template/.agents/skills/code/vercel-react-best-practices/rules/_sections.md +0 -46
  23. package/template/.agents/skills/code/vercel-react-best-practices/rules/_template.md +0 -28
  24. package/template/.agents/skills/code/vercel-react-best-practices/rules/advanced-effect-event-deps.md +0 -56
  25. package/template/.agents/skills/code/vercel-react-best-practices/rules/advanced-event-handler-refs.md +0 -55
  26. package/template/.agents/skills/code/vercel-react-best-practices/rules/advanced-init-once.md +0 -42
  27. package/template/.agents/skills/code/vercel-react-best-practices/rules/advanced-use-latest.md +0 -39
  28. package/template/.agents/skills/code/vercel-react-best-practices/rules/async-api-routes.md +0 -38
  29. package/template/.agents/skills/code/vercel-react-best-practices/rules/async-cheap-condition-before-await.md +0 -37
  30. package/template/.agents/skills/code/vercel-react-best-practices/rules/async-defer-await.md +0 -82
  31. package/template/.agents/skills/code/vercel-react-best-practices/rules/async-dependencies.md +0 -51
  32. package/template/.agents/skills/code/vercel-react-best-practices/rules/async-parallel.md +0 -28
  33. package/template/.agents/skills/code/vercel-react-best-practices/rules/async-suspense-boundaries.md +0 -99
  34. package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-analyzable-paths.md +0 -63
  35. package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-barrel-imports.md +0 -60
  36. package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-conditional.md +0 -31
  37. package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-defer-third-party.md +0 -49
  38. package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-dynamic-imports.md +0 -35
  39. package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-preload.md +0 -50
  40. package/template/.agents/skills/code/vercel-react-best-practices/rules/client-event-listeners.md +0 -74
  41. package/template/.agents/skills/code/vercel-react-best-practices/rules/client-localstorage-schema.md +0 -71
  42. package/template/.agents/skills/code/vercel-react-best-practices/rules/client-passive-event-listeners.md +0 -48
  43. package/template/.agents/skills/code/vercel-react-best-practices/rules/client-swr-dedup.md +0 -56
  44. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-batch-dom-css.md +0 -107
  45. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-cache-function-results.md +0 -80
  46. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-cache-property-access.md +0 -28
  47. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-cache-storage.md +0 -70
  48. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-combine-iterations.md +0 -32
  49. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-early-exit.md +0 -50
  50. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-flatmap-filter.md +0 -60
  51. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-hoist-regexp.md +0 -45
  52. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-index-maps.md +0 -37
  53. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-length-check-first.md +0 -49
  54. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-min-max-loop.md +0 -82
  55. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-request-idle-callback.md +0 -105
  56. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-set-map-lookups.md +0 -24
  57. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-tosorted-immutable.md +0 -57
  58. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-activity.md +0 -26
  59. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +0 -47
  60. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-conditional-render.md +0 -40
  61. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-content-visibility.md +0 -38
  62. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-hoist-jsx.md +0 -46
  63. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +0 -82
  64. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +0 -30
  65. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-resource-hints.md +0 -85
  66. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-script-defer-async.md +0 -68
  67. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-svg-precision.md +0 -28
  68. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-usetransition-loading.md +0 -75
  69. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-defer-reads.md +0 -39
  70. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-dependencies.md +0 -45
  71. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +0 -40
  72. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-derived-state.md +0 -29
  73. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-functional-setstate.md +0 -74
  74. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-lazy-state-init.md +0 -58
  75. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +0 -38
  76. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-memo.md +0 -44
  77. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +0 -45
  78. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-no-inline-components.md +0 -82
  79. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +0 -35
  80. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-split-combined-hooks.md +0 -64
  81. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-transitions.md +0 -40
  82. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-use-deferred-value.md +0 -59
  83. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +0 -73
  84. package/template/.agents/skills/code/vercel-react-best-practices/rules/server-after-nonblocking.md +0 -73
  85. package/template/.agents/skills/code/vercel-react-best-practices/rules/server-auth-actions.md +0 -96
  86. package/template/.agents/skills/code/vercel-react-best-practices/rules/server-cache-lru.md +0 -41
  87. package/template/.agents/skills/code/vercel-react-best-practices/rules/server-cache-react.md +0 -76
  88. package/template/.agents/skills/code/vercel-react-best-practices/rules/server-dedup-props.md +0 -65
  89. package/template/.agents/skills/code/vercel-react-best-practices/rules/server-hoist-static-io.md +0 -149
  90. package/template/.agents/skills/code/vercel-react-best-practices/rules/server-no-shared-module-state.md +0 -50
  91. package/template/.agents/skills/code/vercel-react-best-practices/rules/server-parallel-fetching.md +0 -83
  92. package/template/.agents/skills/code/vercel-react-best-practices/rules/server-parallel-nested-fetching.md +0 -34
  93. package/template/.agents/skills/code/vercel-react-best-practices/rules/server-serialization.md +0 -38
  94. package/template/.agents/skills/data/prisma-cli/SKILL.md +0 -265
  95. package/template/.agents/skills/data/prisma-cli/references/agent-safety.md +0 -27
  96. package/template/.agents/skills/data/prisma-cli/references/complete.md +0 -22
  97. package/template/.agents/skills/data/prisma-cli/references/db-execute.md +0 -78
  98. package/template/.agents/skills/data/prisma-cli/references/db-pull.md +0 -185
  99. package/template/.agents/skills/data/prisma-cli/references/db-push.md +0 -150
  100. package/template/.agents/skills/data/prisma-cli/references/db-seed.md +0 -188
  101. package/template/.agents/skills/data/prisma-cli/references/debug.md +0 -46
  102. package/template/.agents/skills/data/prisma-cli/references/dev.md +0 -157
  103. package/template/.agents/skills/data/prisma-cli/references/format.md +0 -48
  104. package/template/.agents/skills/data/prisma-cli/references/generate.md +0 -173
  105. package/template/.agents/skills/data/prisma-cli/references/init.md +0 -139
  106. package/template/.agents/skills/data/prisma-cli/references/mcp.md +0 -39
  107. package/template/.agents/skills/data/prisma-cli/references/migrate-deploy.md +0 -127
  108. package/template/.agents/skills/data/prisma-cli/references/migrate-dev.md +0 -145
  109. package/template/.agents/skills/data/prisma-cli/references/migrate-diff.md +0 -89
  110. package/template/.agents/skills/data/prisma-cli/references/migrate-reset.md +0 -80
  111. package/template/.agents/skills/data/prisma-cli/references/migrate-resolve.md +0 -57
  112. package/template/.agents/skills/data/prisma-cli/references/migrate-status.md +0 -65
  113. package/template/.agents/skills/data/prisma-cli/references/studio.md +0 -137
  114. package/template/.agents/skills/data/prisma-cli/references/validate.md +0 -53
  115. package/template/.agents/skills/data/prisma-client-api/SKILL.md +0 -216
  116. package/template/.agents/skills/data/prisma-client-api/references/client-methods.md +0 -223
  117. package/template/.agents/skills/data/prisma-client-api/references/constructor.md +0 -221
  118. package/template/.agents/skills/data/prisma-client-api/references/filters.md +0 -256
  119. package/template/.agents/skills/data/prisma-client-api/references/model-queries.md +0 -281
  120. package/template/.agents/skills/data/prisma-client-api/references/query-options.md +0 -276
  121. package/template/.agents/skills/data/prisma-client-api/references/raw-queries.md +0 -198
  122. package/template/.agents/skills/data/prisma-client-api/references/relations.md +0 -308
  123. package/template/.agents/skills/data/prisma-client-api/references/transactions.md +0 -184
  124. package/template/.agents/skills/design/impeccable/SKILL.md +0 -84
  125. package/template/.agents/skills/design/impeccable/reference/adapt.md +0 -312
  126. package/template/.agents/skills/design/impeccable/reference/adapt.native.md +0 -58
  127. package/template/.agents/skills/design/impeccable/reference/android.md +0 -46
  128. package/template/.agents/skills/design/impeccable/reference/animate.md +0 -89
  129. package/template/.agents/skills/design/impeccable/reference/audit.md +0 -136
  130. package/template/.agents/skills/design/impeccable/reference/audit.native.md +0 -139
  131. package/template/.agents/skills/design/impeccable/reference/bolder.md +0 -33
  132. package/template/.agents/skills/design/impeccable/reference/clarify.md +0 -94
  133. package/template/.agents/skills/design/impeccable/reference/colorize.md +0 -86
  134. package/template/.agents/skills/design/impeccable/reference/craft-floor.md +0 -44
  135. package/template/.agents/skills/design/impeccable/reference/craft.md +0 -5
  136. package/template/.agents/skills/design/impeccable/reference/critique.md +0 -806
  137. package/template/.agents/skills/design/impeccable/reference/degraded/asset-producer.md +0 -37
  138. package/template/.agents/skills/design/impeccable/reference/degraded/documenter.md +0 -24
  139. package/template/.agents/skills/design/impeccable/reference/degraded/finish-reviewer.md +0 -38
  140. package/template/.agents/skills/design/impeccable/reference/degraded/manual-edit-applier.md +0 -92
  141. package/template/.agents/skills/design/impeccable/reference/delight.md +0 -70
  142. package/template/.agents/skills/design/impeccable/reference/distill.md +0 -111
  143. package/template/.agents/skills/design/impeccable/reference/doctor.md +0 -54
  144. package/template/.agents/skills/design/impeccable/reference/document.md +0 -416
  145. package/template/.agents/skills/design/impeccable/reference/extract.md +0 -69
  146. package/template/.agents/skills/design/impeccable/reference/harden.md +0 -336
  147. package/template/.agents/skills/design/impeccable/reference/hooks.md +0 -111
  148. package/template/.agents/skills/design/impeccable/reference/init.md +0 -131
  149. package/template/.agents/skills/design/impeccable/reference/ios.md +0 -51
  150. package/template/.agents/skills/design/impeccable/reference/layout.md +0 -84
  151. package/template/.agents/skills/design/impeccable/reference/live-setup.md +0 -102
  152. package/template/.agents/skills/design/impeccable/reference/live.md +0 -323
  153. package/template/.agents/skills/design/impeccable/reference/new-work.md +0 -145
  154. package/template/.agents/skills/design/impeccable/reference/onboard.md +0 -234
  155. package/template/.agents/skills/design/impeccable/reference/operate.md +0 -61
  156. package/template/.agents/skills/design/impeccable/reference/optimize.md +0 -258
  157. package/template/.agents/skills/design/impeccable/reference/overdrive.md +0 -127
  158. package/template/.agents/skills/design/impeccable/reference/polish.md +0 -105
  159. package/template/.agents/skills/design/impeccable/reference/quieter.md +0 -99
  160. package/template/.agents/skills/design/impeccable/reference/routing.md +0 -18
  161. package/template/.agents/skills/design/impeccable/reference/shape.md +0 -59
  162. package/template/.agents/skills/design/impeccable/reference/typeset.md +0 -80
  163. package/template/.agents/skills/design/impeccable/reference/visualize.md +0 -46
  164. package/template/.agents/skills/design/impeccable/scripts/build-phase.mjs +0 -1022
  165. package/template/.agents/skills/design/impeccable/scripts/command-metadata.json +0 -94
  166. package/template/.agents/skills/design/impeccable/scripts/comp-diff.mjs +0 -391
  167. package/template/.agents/skills/design/impeccable/scripts/comp-spec.mjs +0 -513
  168. package/template/.agents/skills/design/impeccable/scripts/concept-seed.mjs +0 -814
  169. package/template/.agents/skills/design/impeccable/scripts/context-signals.mjs +0 -325
  170. package/template/.agents/skills/design/impeccable/scripts/context.mjs +0 -1565
  171. package/template/.agents/skills/design/impeccable/scripts/critique-storage.mjs +0 -473
  172. package/template/.agents/skills/design/impeccable/scripts/data/font-index-failures.json +0 -121
  173. package/template/.agents/skills/design/impeccable/scripts/data/font-index.json +0 -1
  174. package/template/.agents/skills/design/impeccable/scripts/detect-csp.mjs +0 -198
  175. package/template/.agents/skills/design/impeccable/scripts/detect.mjs +0 -30
  176. package/template/.agents/skills/design/impeccable/scripts/detector/browser/injected/index.mjs +0 -2204
  177. package/template/.agents/skills/design/impeccable/scripts/detector/cli/main.mjs +0 -432
  178. package/template/.agents/skills/design/impeccable/scripts/detector/design-system.mjs +0 -1311
  179. package/template/.agents/skills/design/impeccable/scripts/detector/detect-antipatterns-browser.js +0 -9043
  180. package/template/.agents/skills/design/impeccable/scripts/detector/detect-antipatterns.mjs +0 -51
  181. package/template/.agents/skills/design/impeccable/scripts/detector/engines/browser/detect-url.mjs +0 -434
  182. package/template/.agents/skills/design/impeccable/scripts/detector/engines/regex/detect-text.mjs +0 -1319
  183. package/template/.agents/skills/design/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +0 -1241
  184. package/template/.agents/skills/design/impeccable/scripts/detector/engines/static-html/detect-html.mjs +0 -288
  185. package/template/.agents/skills/design/impeccable/scripts/detector/engines/visual/screenshot-contrast.mjs +0 -189
  186. package/template/.agents/skills/design/impeccable/scripts/detector/findings.mjs +0 -18
  187. package/template/.agents/skills/design/impeccable/scripts/detector/node/file-system.mjs +0 -213
  188. package/template/.agents/skills/design/impeccable/scripts/detector/profile/profiler.mjs +0 -166
  189. package/template/.agents/skills/design/impeccable/scripts/detector/registry/antipatterns.mjs +0 -635
  190. package/template/.agents/skills/design/impeccable/scripts/detector/rules/checks.mjs +0 -5681
  191. package/template/.agents/skills/design/impeccable/scripts/detector/shared/color.mjs +0 -596
  192. package/template/.agents/skills/design/impeccable/scripts/detector/shared/constants.mjs +0 -127
  193. package/template/.agents/skills/design/impeccable/scripts/detector/shared/fonts.mjs +0 -30
  194. package/template/.agents/skills/design/impeccable/scripts/detector/shared/inline-ignores.mjs +0 -148
  195. package/template/.agents/skills/design/impeccable/scripts/detector/shared/page.mjs +0 -7
  196. package/template/.agents/skills/design/impeccable/scripts/doctor.mjs +0 -329
  197. package/template/.agents/skills/design/impeccable/scripts/embed-prompt.mjs +0 -166
  198. package/template/.agents/skills/design/impeccable/scripts/font-match.mjs +0 -457
  199. package/template/.agents/skills/design/impeccable/scripts/generate-image.mjs +0 -447
  200. package/template/.agents/skills/design/impeccable/scripts/hook-admin.mjs +0 -819
  201. package/template/.agents/skills/design/impeccable/scripts/hook-before-edit.mjs +0 -538
  202. package/template/.agents/skills/design/impeccable/scripts/hook-lib.mjs +0 -2490
  203. package/template/.agents/skills/design/impeccable/scripts/hook.mjs +0 -79
  204. package/template/.agents/skills/design/impeccable/scripts/lib/artifact-schema.mjs +0 -93
  205. package/template/.agents/skills/design/impeccable/scripts/lib/composition-catalog.mjs +0 -200
  206. package/template/.agents/skills/design/impeccable/scripts/lib/concept-catalog.mjs +0 -396
  207. package/template/.agents/skills/design/impeccable/scripts/lib/design-parser.mjs +0 -880
  208. package/template/.agents/skills/design/impeccable/scripts/lib/font-fingerprint.mjs +0 -564
  209. package/template/.agents/skills/design/impeccable/scripts/lib/font-index.mjs +0 -130
  210. package/template/.agents/skills/design/impeccable/scripts/lib/hero-checks.mjs +0 -246
  211. package/template/.agents/skills/design/impeccable/scripts/lib/image-metrics.mjs +0 -306
  212. package/template/.agents/skills/design/impeccable/scripts/lib/impeccable-config.mjs +0 -640
  213. package/template/.agents/skills/design/impeccable/scripts/lib/impeccable-paths.mjs +0 -137
  214. package/template/.agents/skills/design/impeccable/scripts/lib/is-generated.mjs +0 -72
  215. package/template/.agents/skills/design/impeccable/scripts/lib/live-path-globs.mjs +0 -37
  216. package/template/.agents/skills/design/impeccable/scripts/lib/open-system-browser.mjs +0 -26
  217. package/template/.agents/skills/design/impeccable/scripts/lib/png.mjs +0 -281
  218. package/template/.agents/skills/design/impeccable/scripts/lib/provider.mjs +0 -5
  219. package/template/.agents/skills/design/impeccable/scripts/lib/raster.mjs +0 -194
  220. package/template/.agents/skills/design/impeccable/scripts/lib/roll-selection.mjs +0 -369
  221. package/template/.agents/skills/design/impeccable/scripts/lib/staleness-deep.mjs +0 -485
  222. package/template/.agents/skills/design/impeccable/scripts/lib/staleness-notice.mjs +0 -169
  223. package/template/.agents/skills/design/impeccable/scripts/lib/staleness.mjs +0 -533
  224. package/template/.agents/skills/design/impeccable/scripts/lib/surface-briefs.mjs +0 -149
  225. package/template/.agents/skills/design/impeccable/scripts/lib/target-args.mjs +0 -42
  226. package/template/.agents/skills/design/impeccable/scripts/lib/target-slug.mjs +0 -33
  227. package/template/.agents/skills/design/impeccable/scripts/lib/template-extensions.mjs +0 -146
  228. package/template/.agents/skills/design/impeccable/scripts/live/accept-css.mjs +0 -617
  229. package/template/.agents/skills/design/impeccable/scripts/live/accept-verify.mjs +0 -60
  230. package/template/.agents/skills/design/impeccable/scripts/live/browser-script-parts.mjs +0 -84
  231. package/template/.agents/skills/design/impeccable/scripts/live/completion.mjs +0 -28
  232. package/template/.agents/skills/design/impeccable/scripts/live/event-validation.mjs +0 -199
  233. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/astro.mjs +0 -47
  234. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/detect-utils.mjs +0 -73
  235. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/index.mjs +0 -143
  236. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/journal.mjs +0 -197
  237. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/nextjs.mjs +0 -49
  238. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/nuxt.mjs +0 -161
  239. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/script-src.mjs +0 -17
  240. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/static-html.mjs +0 -26
  241. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/sveltekit.mjs +0 -71
  242. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/tag-strategy.mjs +0 -247
  243. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/tanstack-start.mjs +0 -70
  244. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/vite-generic.mjs +0 -42
  245. package/template/.agents/skills/design/impeccable/scripts/live/generation-preflight.mjs +0 -149
  246. package/template/.agents/skills/design/impeccable/scripts/live/insert-ui.mjs +0 -458
  247. package/template/.agents/skills/design/impeccable/scripts/live/instructions.mjs +0 -142
  248. package/template/.agents/skills/design/impeccable/scripts/live/manual-apply.mjs +0 -939
  249. package/template/.agents/skills/design/impeccable/scripts/live/manual-edit-routes.mjs +0 -357
  250. package/template/.agents/skills/design/impeccable/scripts/live/manual-edits-buffer.mjs +0 -152
  251. package/template/.agents/skills/design/impeccable/scripts/live/poll-lanes.mjs +0 -14
  252. package/template/.agents/skills/design/impeccable/scripts/live/project-ignores.mjs +0 -139
  253. package/template/.agents/skills/design/impeccable/scripts/live/roots.mjs +0 -508
  254. package/template/.agents/skills/design/impeccable/scripts/live/session-store.mjs +0 -563
  255. package/template/.agents/skills/design/impeccable/scripts/live/source-lock.mjs +0 -105
  256. package/template/.agents/skills/design/impeccable/scripts/live/source-search.mjs +0 -105
  257. package/template/.agents/skills/design/impeccable/scripts/live/svelte-ast.mjs +0 -969
  258. package/template/.agents/skills/design/impeccable/scripts/live/svelte-component.mjs +0 -1366
  259. package/template/.agents/skills/design/impeccable/scripts/live/sveltekit-adapter.mjs +0 -304
  260. package/template/.agents/skills/design/impeccable/scripts/live/tanstack-adapter.mjs +0 -259
  261. package/template/.agents/skills/design/impeccable/scripts/live/ui-surfaces.mjs +0 -75
  262. package/template/.agents/skills/design/impeccable/scripts/live/vocabulary.mjs +0 -171
  263. package/template/.agents/skills/design/impeccable/scripts/live-accept.mjs +0 -938
  264. package/template/.agents/skills/design/impeccable/scripts/live-browser-dom.js +0 -146
  265. package/template/.agents/skills/design/impeccable/scripts/live-browser-ignores.js +0 -242
  266. package/template/.agents/skills/design/impeccable/scripts/live-browser-session.js +0 -123
  267. package/template/.agents/skills/design/impeccable/scripts/live-browser.js +0 -12551
  268. package/template/.agents/skills/design/impeccable/scripts/live-commit-manual-edits.mjs +0 -1200
  269. package/template/.agents/skills/design/impeccable/scripts/live-complete.mjs +0 -107
  270. package/template/.agents/skills/design/impeccable/scripts/live-copy-edit-agent.mjs +0 -800
  271. package/template/.agents/skills/design/impeccable/scripts/live-discard-manual-edits.mjs +0 -51
  272. package/template/.agents/skills/design/impeccable/scripts/live-inject.mjs +0 -463
  273. package/template/.agents/skills/design/impeccable/scripts/live-insert.mjs +0 -292
  274. package/template/.agents/skills/design/impeccable/scripts/live-manual-edit-evidence.mjs +0 -368
  275. package/template/.agents/skills/design/impeccable/scripts/live-poll.mjs +0 -430
  276. package/template/.agents/skills/design/impeccable/scripts/live-resume.mjs +0 -123
  277. package/template/.agents/skills/design/impeccable/scripts/live-server.mjs +0 -1698
  278. package/template/.agents/skills/design/impeccable/scripts/live-status.mjs +0 -71
  279. package/template/.agents/skills/design/impeccable/scripts/live-target.mjs +0 -30
  280. package/template/.agents/skills/design/impeccable/scripts/live-wrap.mjs +0 -927
  281. package/template/.agents/skills/design/impeccable/scripts/live.mjs +0 -334
  282. package/template/.agents/skills/design/impeccable/scripts/modern-screenshot.umd.js +0 -14
  283. package/template/.agents/skills/design/impeccable/scripts/palette.mjs +0 -628
  284. package/template/.agents/skills/design/impeccable/scripts/pin.mjs +0 -224
  285. package/template/.agents/skills/design/impeccable/scripts/serve-question.mjs +0 -1783
  286. package/template/.agents/skills/design/impeccable/scripts/surface-brief.mjs +0 -74
  287. package/template/.agents/skills/design/shadcn/SKILL.md +0 -277
  288. package/template/.agents/skills/design/shadcn/agents/openai.yml +0 -5
  289. package/template/.agents/skills/design/shadcn/assets/shadcn-small.png +0 -0
  290. package/template/.agents/skills/design/shadcn/assets/shadcn.png +0 -0
  291. package/template/.agents/skills/design/shadcn/cli.md +0 -290
  292. package/template/.agents/skills/design/shadcn/customization.md +0 -209
  293. package/template/.agents/skills/design/shadcn/evals/evals.json +0 -77
  294. package/template/.agents/skills/design/shadcn/mcp.md +0 -105
  295. package/template/.agents/skills/design/shadcn/registry.md +0 -277
  296. package/template/.agents/skills/design/shadcn/rules/base-vs-radix.md +0 -306
  297. package/template/.agents/skills/design/shadcn/rules/chat.md +0 -250
  298. package/template/.agents/skills/design/shadcn/rules/composition.md +0 -213
  299. package/template/.agents/skills/design/shadcn/rules/forms.md +0 -192
  300. package/template/.agents/skills/design/shadcn/rules/icons.md +0 -101
  301. package/template/.agents/skills/design/shadcn/rules/styling.md +0 -185
  302. package/template/.agents/skills/find-skills/SKILL.md +0 -141
  303. package/template/.agents/skills/hono/SKILL.md +0 -593
  304. package/template/.agents/skills/integrations/langfuse/SKILL.md +0 -150
  305. package/template/.agents/skills/integrations/langfuse/references/ci-cd.md +0 -41
  306. package/template/.agents/skills/integrations/langfuse/references/cli.md +0 -60
  307. package/template/.agents/skills/integrations/langfuse/references/create-dataset.md +0 -35
  308. package/template/.agents/skills/integrations/langfuse/references/error-analysis.md +0 -87
  309. package/template/.agents/skills/integrations/langfuse/references/instrumentation.md +0 -121
  310. package/template/.agents/skills/integrations/langfuse/references/judge-calibration.md +0 -293
  311. package/template/.agents/skills/integrations/langfuse/references/prompt-engineering.md +0 -35
  312. package/template/.agents/skills/integrations/langfuse/references/prompt-migration.md +0 -79
  313. package/template/.agents/skills/integrations/langfuse/references/sdk-upgrade.md +0 -34
  314. package/template/.agents/skills/integrations/langfuse/references/setting-up-evals.md +0 -65
  315. package/template/.agents/skills/integrations/langfuse/references/skill-feedback.md +0 -35
  316. package/template/.agents/skills/integrations/langfuse/references/trace-evaluator-upgrade.md +0 -76
  317. package/template/.agents/skills/integrations/langfuse/references/user-feedback.md +0 -66
  318. package/template/.agents/skills/integrations/langfuse/references/v4-project-migration.md +0 -75
  319. package/template/.agents/skills/integrations/posthog/SKILL.md +0 -102
  320. package/template/.agents/skills/integrations/posthog/references/error-tracking-alerts.md +0 -63
  321. package/template/.agents/skills/integrations/posthog/references/error-tracking-assigning-issues.md +0 -77
  322. package/template/.agents/skills/integrations/posthog/references/error-tracking-fingerprints.md +0 -57
  323. package/template/.agents/skills/integrations/posthog/references/error-tracking-monitoring.md +0 -140
  324. package/template/.agents/skills/integrations/posthog/references/error-tracking-nextjs.md +0 -490
  325. package/template/.agents/skills/integrations/posthog/references/error-tracking-source-maps.md +0 -45
  326. package/template/.agents/skills/integrations/posthog/references/feature-flags-best-practices.md +0 -139
  327. package/template/.agents/skills/integrations/posthog/references/feature-flags-react.md +0 -302
  328. package/template/.agents/skills/integrations/posthog/references/identify-users.md +0 -202
  329. package/template/.agents/skills/integrations/posthog/references/integration-example.md +0 -706
  330. package/template/.agents/skills/integrations/posthog/references/integration-nextjs.md +0 -385
  331. package/template/.agents/skills/integrations/posthog/references/integration-step-1-begin.md +0 -43
  332. package/template/.agents/skills/integrations/posthog/references/integration-step-2-edit.md +0 -37
  333. package/template/.agents/skills/integrations/posthog/references/integration-step-3-revise.md +0 -22
  334. package/template/.agents/skills/integrations/posthog/references/integration-step-4-conclude.md +0 -38
  335. package/template/.agents/skills/integrations/posthog/references/llm-analytics-anthropic.md +0 -200
  336. package/template/.agents/skills/integrations/posthog/references/llm-analytics-basics.md +0 -62
  337. package/template/.agents/skills/integrations/posthog/references/llm-analytics-costs.md +0 -197
  338. package/template/.agents/skills/integrations/posthog/references/llm-analytics-manual-capture.md +0 -397
  339. package/template/.agents/skills/integrations/posthog/references/llm-analytics-traces.md +0 -98
  340. package/template/.agents/skills/integrations/posthog/references/llm-analytics-vercel-ai.md +0 -120
  341. package/template/.agents/skills/repo/repo-ci/SKILL.md +0 -265
  342. package/template/.agents/skills/repo/repo-init-next-js/SKILL.md +0 -129
  343. package/template/.agents/skills/repo/repo-init-next-js/references/file-contents.md +0 -800
  344. package/template/.agents/skills/repo/repo-init-next-js/scripts/setup.sh +0 -47
  345. package/template/.agents/skills/repo/repo-init-node/SKILL.md +0 -196
  346. package/template/.agents/skills/skill-creator/LICENSE.txt +0 -202
  347. package/template/.agents/skills/skill-creator/SKILL.md +0 -485
  348. package/template/.agents/skills/skill-creator/agents/analyzer.md +0 -274
  349. package/template/.agents/skills/skill-creator/agents/comparator.md +0 -202
  350. package/template/.agents/skills/skill-creator/agents/grader.md +0 -223
  351. package/template/.agents/skills/skill-creator/assets/eval_review.html +0 -146
  352. package/template/.agents/skills/skill-creator/eval-viewer/generate_review.py +0 -471
  353. package/template/.agents/skills/skill-creator/eval-viewer/viewer.html +0 -1325
  354. package/template/.agents/skills/skill-creator/references/schemas.md +0 -430
  355. package/template/.agents/skills/skill-creator/scripts/__init__.py +0 -0
  356. package/template/.agents/skills/skill-creator/scripts/aggregate_benchmark.py +0 -401
  357. package/template/.agents/skills/skill-creator/scripts/generate_report.py +0 -326
  358. package/template/.agents/skills/skill-creator/scripts/improve_description.py +0 -247
  359. package/template/.agents/skills/skill-creator/scripts/package_skill.py +0 -136
  360. package/template/.agents/skills/skill-creator/scripts/quick_validate.py +0 -103
  361. package/template/.agents/skills/skill-creator/scripts/run_eval.py +0 -310
  362. package/template/.agents/skills/skill-creator/scripts/run_loop.py +0 -328
  363. package/template/.agents/skills/skill-creator/scripts/utils.py +0 -47
  364. package/template/.agents/skills/supabase/CHANGELOG.md +0 -78
  365. package/template/.agents/skills/supabase/SKILL.md +0 -149
  366. package/template/.agents/skills/supabase/assets/feedback-issue-template.md +0 -17
  367. package/template/.agents/skills/supabase/references/skill-feedback.md +0 -17
  368. package/template/.agents/skills/supabase-postgres-best-practices/CHANGELOG.md +0 -73
  369. package/template/.agents/skills/supabase-postgres-best-practices/SKILL.md +0 -64
  370. package/template/.agents/skills/supabase-postgres-best-practices/references/_contributing.md +0 -170
  371. package/template/.agents/skills/supabase-postgres-best-practices/references/_sections.md +0 -39
  372. package/template/.agents/skills/supabase-postgres-best-practices/references/_template.md +0 -34
  373. package/template/.agents/skills/supabase-postgres-best-practices/references/advanced-full-text-search.md +0 -55
  374. package/template/.agents/skills/supabase-postgres-best-practices/references/advanced-jsonb-indexing.md +0 -49
  375. package/template/.agents/skills/supabase-postgres-best-practices/references/conn-idle-timeout.md +0 -46
  376. package/template/.agents/skills/supabase-postgres-best-practices/references/conn-limits.md +0 -44
  377. package/template/.agents/skills/supabase-postgres-best-practices/references/conn-pooling.md +0 -41
  378. package/template/.agents/skills/supabase-postgres-best-practices/references/conn-prepared-statements.md +0 -46
  379. package/template/.agents/skills/supabase-postgres-best-practices/references/data-batch-inserts.md +0 -54
  380. package/template/.agents/skills/supabase-postgres-best-practices/references/data-n-plus-one.md +0 -53
  381. package/template/.agents/skills/supabase-postgres-best-practices/references/data-pagination.md +0 -50
  382. package/template/.agents/skills/supabase-postgres-best-practices/references/data-upsert.md +0 -50
  383. package/template/.agents/skills/supabase-postgres-best-practices/references/lock-advisory.md +0 -56
  384. package/template/.agents/skills/supabase-postgres-best-practices/references/lock-deadlock-prevention.md +0 -68
  385. package/template/.agents/skills/supabase-postgres-best-practices/references/lock-short-transactions.md +0 -50
  386. package/template/.agents/skills/supabase-postgres-best-practices/references/lock-skip-locked.md +0 -54
  387. package/template/.agents/skills/supabase-postgres-best-practices/references/monitor-explain-analyze.md +0 -45
  388. package/template/.agents/skills/supabase-postgres-best-practices/references/monitor-pg-stat-statements.md +0 -55
  389. package/template/.agents/skills/supabase-postgres-best-practices/references/monitor-vacuum-analyze.md +0 -55
  390. package/template/.agents/skills/supabase-postgres-best-practices/references/query-composite-indexes.md +0 -44
  391. package/template/.agents/skills/supabase-postgres-best-practices/references/query-covering-indexes.md +0 -40
  392. package/template/.agents/skills/supabase-postgres-best-practices/references/query-index-types.md +0 -48
  393. package/template/.agents/skills/supabase-postgres-best-practices/references/query-missing-indexes.md +0 -43
  394. package/template/.agents/skills/supabase-postgres-best-practices/references/query-partial-indexes.md +0 -45
  395. package/template/.agents/skills/supabase-postgres-best-practices/references/schema-constraints.md +0 -80
  396. package/template/.agents/skills/supabase-postgres-best-practices/references/schema-data-types.md +0 -46
  397. package/template/.agents/skills/supabase-postgres-best-practices/references/schema-foreign-key-indexes.md +0 -59
  398. package/template/.agents/skills/supabase-postgres-best-practices/references/schema-lowercase-identifiers.md +0 -55
  399. package/template/.agents/skills/supabase-postgres-best-practices/references/schema-partitioning.md +0 -55
  400. package/template/.agents/skills/supabase-postgres-best-practices/references/schema-primary-keys.md +0 -61
  401. package/template/.agents/skills/supabase-postgres-best-practices/references/security-privileges.md +0 -54
  402. package/template/.agents/skills/supabase-postgres-best-practices/references/security-rls-basics.md +0 -50
  403. package/template/.agents/skills/supabase-postgres-best-practices/references/security-rls-performance.md +0 -63
  404. package/template/.agents/skills/writing/humanizer/LICENSE +0 -21
  405. package/template/.agents/skills/writing/humanizer/README.md +0 -209
  406. package/template/.agents/skills/writing/humanizer/SKILL.md +0 -456
  407. package/template/.agents/upstreams.json +0 -115
@@ -1,48 +0,0 @@
1
- ---
2
- title: Choose the Right Index Type for Your Data
3
- impact: HIGH
4
- impactDescription: 10-100x improvement with correct index type
5
- tags: indexes, btree, gin, gist, brin, hash, index-types
6
- ---
7
-
8
- ## Choose the Right Index Type for Your Data
9
-
10
- Different index types excel at different query patterns. The default B-tree isn't always optimal.
11
-
12
- **Incorrect (B-tree for JSONB containment):**
13
-
14
- ```sql
15
- -- B-tree cannot optimize containment operators
16
- create index products_attrs_idx on products (attributes);
17
- select * from products where attributes @> '{"color": "red"}';
18
- -- Full table scan - B-tree doesn't support @> operator
19
- ```
20
-
21
- **Correct (GIN for JSONB):**
22
-
23
- ```sql
24
- -- GIN supports @>, ?, ?&, ?| operators
25
- create index products_attrs_idx on products using gin (attributes);
26
- select * from products where attributes @> '{"color": "red"}';
27
- ```
28
-
29
- Index type guide:
30
-
31
- ```sql
32
- -- B-tree (default): =, <, >, BETWEEN, IN, IS NULL
33
- create index users_created_idx on users (created_at);
34
-
35
- -- GIN: arrays, JSONB, full-text search
36
- create index posts_tags_idx on posts using gin (tags);
37
-
38
- -- GiST: geometric data, range types, nearest-neighbor (KNN) queries
39
- create index locations_idx on places using gist (location);
40
-
41
- -- BRIN: large time-series tables (10-100x smaller)
42
- create index events_time_idx on events using brin (created_at);
43
-
44
- -- Hash: equality-only (slightly faster than B-tree for =)
45
- create index sessions_token_idx on sessions using hash (token);
46
- ```
47
-
48
- Reference: [Index Types](https://www.postgresql.org/docs/current/indexes-types.html)
@@ -1,43 +0,0 @@
1
- ---
2
- title: Add Indexes on WHERE and JOIN Columns
3
- impact: CRITICAL
4
- impactDescription: 100-1000x faster queries on large tables
5
- tags: indexes, performance, sequential-scan, query-optimization
6
- ---
7
-
8
- ## Add Indexes on WHERE and JOIN Columns
9
-
10
- Queries filtering or joining on unindexed columns cause full table scans, which become exponentially slower as tables grow.
11
-
12
- **Incorrect (sequential scan on large table):**
13
-
14
- ```sql
15
- -- No index on customer_id causes full table scan
16
- select * from orders where customer_id = 123;
17
-
18
- -- EXPLAIN shows: Seq Scan on orders (cost=0.00..25000.00 rows=100 width=85)
19
- ```
20
-
21
- **Correct (index scan):**
22
-
23
- ```sql
24
- -- Create index on frequently filtered column
25
- create index orders_customer_id_idx on orders (customer_id);
26
-
27
- select * from orders where customer_id = 123;
28
-
29
- -- EXPLAIN shows: Index Scan using orders_customer_id_idx (cost=0.42..8.44 rows=100 width=85)
30
- ```
31
-
32
- For JOIN columns, always index the foreign key side:
33
-
34
- ```sql
35
- -- Index the referencing column
36
- create index orders_customer_id_idx on orders (customer_id);
37
-
38
- select c.name, o.total
39
- from customers c
40
- join orders o on o.customer_id = c.id;
41
- ```
42
-
43
- Reference: [Query Optimization](https://supabase.com/docs/guides/database/query-optimization)
@@ -1,45 +0,0 @@
1
- ---
2
- title: Use Partial Indexes for Filtered Queries
3
- impact: HIGH
4
- impactDescription: 5-20x smaller indexes, faster writes and queries
5
- tags: indexes, partial-index, query-optimization, storage
6
- ---
7
-
8
- ## Use Partial Indexes for Filtered Queries
9
-
10
- Partial indexes only include rows matching a WHERE condition, making them smaller and faster when queries consistently filter on the same condition.
11
-
12
- **Incorrect (full index includes irrelevant rows):**
13
-
14
- ```sql
15
- -- Index includes all rows, even soft-deleted ones
16
- create index users_email_idx on users (email);
17
-
18
- -- Query always filters active users
19
- select * from users where email = 'user@example.com' and deleted_at is null;
20
- ```
21
-
22
- **Correct (partial index matches query filter):**
23
-
24
- ```sql
25
- -- Index only includes active users
26
- create index users_active_email_idx on users (email)
27
- where deleted_at is null;
28
-
29
- -- Query uses the smaller, faster index
30
- select * from users where email = 'user@example.com' and deleted_at is null;
31
- ```
32
-
33
- Common use cases for partial indexes:
34
-
35
- ```sql
36
- -- Only pending orders (status rarely changes once completed)
37
- create index orders_pending_idx on orders (created_at)
38
- where status = 'pending';
39
-
40
- -- Only non-null values
41
- create index products_sku_idx on products (sku)
42
- where sku is not null;
43
- ```
44
-
45
- Reference: [Partial Indexes](https://www.postgresql.org/docs/current/indexes-partial.html)
@@ -1,80 +0,0 @@
1
- ---
2
- title: Add Constraints Safely in Migrations
3
- impact: HIGH
4
- impactDescription: Prevents migration failures and enables idempotent schema changes
5
- tags: constraints, migrations, schema, alter-table
6
- ---
7
-
8
- ## Add Constraints Safely in Migrations
9
-
10
- PostgreSQL does not support `ADD CONSTRAINT IF NOT EXISTS`. Migrations using this syntax will fail.
11
-
12
- **Incorrect (causes syntax error):**
13
-
14
- ```sql
15
- -- ERROR: syntax error at or near "not" (SQLSTATE 42601)
16
- alter table public.profiles
17
- add constraint if not exists profiles_birthchart_id_unique unique (birthchart_id);
18
- ```
19
-
20
- **Correct (idempotent constraint creation):**
21
-
22
- ```sql
23
- -- Use DO block to check before adding
24
- do $$
25
- begin
26
- if not exists (
27
- select 1 from pg_constraint
28
- where conname = 'profiles_birthchart_id_unique'
29
- and conrelid = 'public.profiles'::regclass
30
- ) then
31
- alter table public.profiles
32
- add constraint profiles_birthchart_id_unique unique (birthchart_id);
33
- end if;
34
- end $$;
35
- ```
36
-
37
- For all constraint types:
38
-
39
- ```sql
40
- -- Check constraints
41
- do $$
42
- begin
43
- if not exists (
44
- select 1 from pg_constraint
45
- where conname = 'check_age_positive'
46
- ) then
47
- alter table users add constraint check_age_positive check (age > 0);
48
- end if;
49
- end $$;
50
-
51
- -- Foreign keys
52
- do $$
53
- begin
54
- if not exists (
55
- select 1 from pg_constraint
56
- where conname = 'profiles_birthchart_id_fkey'
57
- ) then
58
- alter table profiles
59
- add constraint profiles_birthchart_id_fkey
60
- foreign key (birthchart_id) references birthcharts(id);
61
- end if;
62
- end $$;
63
- ```
64
-
65
- Check if constraint exists:
66
-
67
- ```sql
68
- -- Query to check constraint existence
69
- select conname, contype, pg_get_constraintdef(oid)
70
- from pg_constraint
71
- where conrelid = 'public.profiles'::regclass;
72
-
73
- -- contype values:
74
- -- 'p' = PRIMARY KEY
75
- -- 'f' = FOREIGN KEY
76
- -- 'u' = UNIQUE
77
- -- 'c' = CHECK
78
- ```
79
-
80
- Reference: [Constraints](https://www.postgresql.org/docs/current/ddl-constraints.html)
@@ -1,46 +0,0 @@
1
- ---
2
- title: Choose Appropriate Data Types
3
- impact: HIGH
4
- impactDescription: 50% storage reduction, faster comparisons
5
- tags: data-types, schema, storage, performance
6
- ---
7
-
8
- ## Choose Appropriate Data Types
9
-
10
- Using the right data types reduces storage, improves query performance, and prevents bugs.
11
-
12
- **Incorrect (wrong data types):**
13
-
14
- ```sql
15
- create table users (
16
- id int, -- Will overflow at 2.1 billion
17
- email varchar(255), -- Unnecessary length limit
18
- created_at timestamp, -- Missing timezone info
19
- is_active varchar(5), -- String for boolean
20
- price varchar(20) -- String for numeric
21
- );
22
- ```
23
-
24
- **Correct (appropriate data types):**
25
-
26
- ```sql
27
- create table users (
28
- id bigint generated always as identity primary key, -- 9 quintillion max
29
- email text, -- No artificial limit, same performance as varchar
30
- created_at timestamptz, -- Always store timezone-aware timestamps
31
- is_active boolean default true, -- 1 byte vs variable string length
32
- price numeric(10,2) -- Exact decimal arithmetic
33
- );
34
- ```
35
-
36
- Key guidelines:
37
-
38
- ```sql
39
- -- IDs: use bigint, not int (future-proofing)
40
- -- Strings: use text, not varchar(n) unless constraint needed
41
- -- Time: use timestamptz, not timestamp
42
- -- Money: use numeric, not float (precision matters)
43
- -- Enums: use text with check constraint or create enum type
44
- ```
45
-
46
- Reference: [Data Types](https://www.postgresql.org/docs/current/datatype.html)
@@ -1,59 +0,0 @@
1
- ---
2
- title: Index Foreign Key Columns
3
- impact: HIGH
4
- impactDescription: 10-100x faster JOINs and CASCADE operations
5
- tags: foreign-key, indexes, joins, schema
6
- ---
7
-
8
- ## Index Foreign Key Columns
9
-
10
- Postgres does not automatically index foreign key columns. Missing indexes cause slow JOINs and CASCADE operations.
11
-
12
- **Incorrect (unindexed foreign key):**
13
-
14
- ```sql
15
- create table orders (
16
- id bigint generated always as identity primary key,
17
- customer_id bigint references customers(id) on delete cascade,
18
- total numeric(10,2)
19
- );
20
-
21
- -- No index on customer_id!
22
- -- JOINs and ON DELETE CASCADE both require full table scan
23
- select * from orders where customer_id = 123; -- Seq Scan
24
- delete from customers where id = 123; -- Locks table, scans all orders
25
- ```
26
-
27
- **Correct (indexed foreign key):**
28
-
29
- ```sql
30
- create table orders (
31
- id bigint generated always as identity primary key,
32
- customer_id bigint references customers(id) on delete cascade,
33
- total numeric(10,2)
34
- );
35
-
36
- -- Always index the FK column
37
- create index orders_customer_id_idx on orders (customer_id);
38
-
39
- -- Now JOINs and cascades are fast
40
- select * from orders where customer_id = 123; -- Index Scan
41
- delete from customers where id = 123; -- Uses index, fast cascade
42
- ```
43
-
44
- Find missing FK indexes:
45
-
46
- ```sql
47
- select
48
- conrelid::regclass as table_name,
49
- a.attname as fk_column
50
- from pg_constraint c
51
- join pg_attribute a on a.attrelid = c.conrelid and a.attnum = any(c.conkey)
52
- where c.contype = 'f'
53
- and not exists (
54
- select 1 from pg_index i
55
- where i.indrelid = c.conrelid and a.attnum = any(i.indkey)
56
- );
57
- ```
58
-
59
- Reference: [Foreign Keys](https://www.postgresql.org/docs/current/ddl-constraints.html#DDL-CONSTRAINTS-FK)
@@ -1,55 +0,0 @@
1
- ---
2
- title: Use Lowercase Identifiers for Compatibility
3
- impact: MEDIUM
4
- impactDescription: Avoid case-sensitivity bugs with tools, ORMs, and AI assistants
5
- tags: naming, identifiers, case-sensitivity, schema, conventions
6
- ---
7
-
8
- ## Use Lowercase Identifiers for Compatibility
9
-
10
- PostgreSQL folds unquoted identifiers to lowercase. Quoted mixed-case identifiers require quotes forever and cause issues with tools, ORMs, and AI assistants that may not recognize them.
11
-
12
- **Incorrect (mixed-case identifiers):**
13
-
14
- ```sql
15
- -- Quoted identifiers preserve case but require quotes everywhere
16
- CREATE TABLE "Users" (
17
- "userId" bigint PRIMARY KEY,
18
- "firstName" text,
19
- "lastName" text
20
- );
21
-
22
- -- Must always quote or queries fail
23
- SELECT "firstName" FROM "Users" WHERE "userId" = 1;
24
-
25
- -- This fails - Users becomes users without quotes
26
- SELECT firstName FROM Users;
27
- -- ERROR: relation "users" does not exist
28
- ```
29
-
30
- **Correct (lowercase snake_case):**
31
-
32
- ```sql
33
- -- Unquoted lowercase identifiers are portable and tool-friendly
34
- CREATE TABLE users (
35
- user_id bigint PRIMARY KEY,
36
- first_name text,
37
- last_name text
38
- );
39
-
40
- -- Works without quotes, recognized by all tools
41
- SELECT first_name FROM users WHERE user_id = 1;
42
- ```
43
-
44
- Common sources of mixed-case identifiers:
45
-
46
- ```sql
47
- -- ORMs often generate quoted camelCase - configure them to use snake_case
48
- -- Migrations from other databases may preserve original casing
49
- -- Some GUI tools quote identifiers by default - disable this
50
-
51
- -- If stuck with mixed-case, create views as a compatibility layer
52
- CREATE VIEW users AS SELECT "userId" AS user_id, "firstName" AS first_name FROM "Users";
53
- ```
54
-
55
- Reference: [Identifiers and Key Words](https://www.postgresql.org/docs/current/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS)
@@ -1,55 +0,0 @@
1
- ---
2
- title: Partition Large Tables for Better Performance
3
- impact: MEDIUM-HIGH
4
- impactDescription: 5-20x faster queries and maintenance on large tables
5
- tags: partitioning, large-tables, time-series, performance
6
- ---
7
-
8
- ## Partition Large Tables for Better Performance
9
-
10
- Partitioning splits a large table into smaller pieces, improving query performance and maintenance operations.
11
-
12
- **Incorrect (single large table):**
13
-
14
- ```sql
15
- create table events (
16
- id bigint generated always as identity,
17
- created_at timestamptz,
18
- data jsonb
19
- );
20
-
21
- -- 500M rows, queries scan everything
22
- select * from events where created_at > '2024-01-01'; -- Slow
23
- vacuum events; -- Takes hours, locks table
24
- ```
25
-
26
- **Correct (partitioned by time range):**
27
-
28
- ```sql
29
- create table events (
30
- id bigint generated always as identity,
31
- created_at timestamptz not null,
32
- data jsonb
33
- ) partition by range (created_at);
34
-
35
- -- Create partitions for each month
36
- create table events_2024_01 partition of events
37
- for values from ('2024-01-01') to ('2024-02-01');
38
-
39
- create table events_2024_02 partition of events
40
- for values from ('2024-02-01') to ('2024-03-01');
41
-
42
- -- Queries only scan relevant partitions
43
- select * from events where created_at > '2024-01-15'; -- Only scans events_2024_01+
44
-
45
- -- Drop old data instantly
46
- drop table events_2023_01; -- Instant vs DELETE taking hours
47
- ```
48
-
49
- When to partition:
50
-
51
- - Tables > 100M rows
52
- - Time-series data with date-based queries
53
- - Need to efficiently drop old data
54
-
55
- Reference: [Table Partitioning](https://www.postgresql.org/docs/current/ddl-partitioning.html)
@@ -1,61 +0,0 @@
1
- ---
2
- title: Select Optimal Primary Key Strategy
3
- impact: HIGH
4
- impactDescription: Better index locality, reduced fragmentation
5
- tags: primary-key, identity, uuid, serial, schema
6
- ---
7
-
8
- ## Select Optimal Primary Key Strategy
9
-
10
- Primary key choice affects insert performance, index size, and replication
11
- efficiency.
12
-
13
- **Incorrect (problematic PK choices):**
14
-
15
- ```sql
16
- -- identity is the SQL-standard approach
17
- create table users (
18
- id serial primary key -- Works, but IDENTITY is recommended
19
- );
20
-
21
- -- Random UUIDs (v4) cause index fragmentation
22
- create table orders (
23
- id uuid default gen_random_uuid() primary key -- UUIDv4 = random = scattered inserts
24
- );
25
- ```
26
-
27
- **Correct (optimal PK strategies):**
28
-
29
- ```sql
30
- -- Use IDENTITY for sequential IDs (SQL-standard, best for most cases)
31
- create table users (
32
- id bigint generated always as identity primary key
33
- );
34
-
35
- -- For distributed systems needing UUIDs, use UUIDv7 (time-ordered)
36
- -- Requires pg_uuidv7 extension: create extension pg_uuidv7;
37
- create table orders (
38
- id uuid default uuid_generate_v7() primary key -- Time-ordered, no fragmentation
39
- );
40
-
41
- -- Alternative: time-prefixed IDs for sortable, distributed IDs (no extension needed)
42
- create table events (
43
- id text default concat(
44
- to_char(now() at time zone 'utc', 'YYYYMMDDHH24MISSMS'),
45
- gen_random_uuid()::text
46
- ) primary key
47
- );
48
- ```
49
-
50
- Guidelines:
51
-
52
- - Single database: `bigint identity` (sequential, 8 bytes, SQL-standard)
53
- - Distributed/exposed IDs: UUIDv7 (requires pg_uuidv7) or ULID (time-ordered, no
54
- fragmentation)
55
- - `serial` works but `identity` is SQL-standard and preferred for new
56
- applications
57
- - Avoid random UUIDs (v4) as primary keys on large tables (causes index
58
- fragmentation)
59
-
60
- Reference:
61
- [Identity Columns](https://www.postgresql.org/docs/current/sql-createtable.html#SQL-CREATETABLE-PARMS-GENERATED-IDENTITY)
@@ -1,54 +0,0 @@
1
- ---
2
- title: Apply Principle of Least Privilege
3
- impact: MEDIUM
4
- impactDescription: Reduced attack surface, better audit trail
5
- tags: privileges, security, roles, permissions
6
- ---
7
-
8
- ## Apply Principle of Least Privilege
9
-
10
- Grant only the minimum permissions required. Never use superuser for application queries.
11
-
12
- **Incorrect (overly broad permissions):**
13
-
14
- ```sql
15
- -- Application uses superuser connection
16
- -- Or grants ALL to application role
17
- grant all privileges on all tables in schema public to app_user;
18
- grant all privileges on all sequences in schema public to app_user;
19
-
20
- -- Any SQL injection becomes catastrophic
21
- -- drop table users; cascades to everything
22
- ```
23
-
24
- **Correct (minimal, specific grants):**
25
-
26
- ```sql
27
- -- Create role with no default privileges
28
- create role app_readonly nologin;
29
-
30
- -- Grant only SELECT on specific tables
31
- grant usage on schema public to app_readonly;
32
- grant select on public.products, public.categories to app_readonly;
33
-
34
- -- Create role for writes with limited scope
35
- create role app_writer nologin;
36
- grant usage on schema public to app_writer;
37
- grant select, insert, update on public.orders to app_writer;
38
- grant usage on sequence orders_id_seq to app_writer;
39
- -- No DELETE permission
40
-
41
- -- Login role inherits from these
42
- create role app_user login password 'xxx';
43
- grant app_writer to app_user;
44
- ```
45
-
46
- Revoke public defaults:
47
-
48
- ```sql
49
- -- Revoke default public access
50
- revoke all on schema public from public;
51
- revoke all on all tables in schema public from public;
52
- ```
53
-
54
- Reference: [Roles and Privileges](https://supabase.com/blog/postgres-roles-and-privileges)
@@ -1,50 +0,0 @@
1
- ---
2
- title: Enable Row Level Security for Multi-Tenant Data
3
- impact: CRITICAL
4
- impactDescription: Database-enforced tenant isolation, prevent data leaks
5
- tags: rls, row-level-security, multi-tenant, security
6
- ---
7
-
8
- ## Enable Row Level Security for Multi-Tenant Data
9
-
10
- Row Level Security (RLS) enforces data access at the database level, ensuring users only see their own data.
11
-
12
- **Incorrect (application-level filtering only):**
13
-
14
- ```sql
15
- -- Relying only on application to filter
16
- select * from orders where user_id = $current_user_id;
17
-
18
- -- Bug or bypass means all data is exposed!
19
- select * from orders; -- Returns ALL orders
20
- ```
21
-
22
- **Correct (database-enforced RLS):**
23
-
24
- ```sql
25
- -- Enable RLS on the table
26
- alter table orders enable row level security;
27
-
28
- -- Create policy for users to see only their orders
29
- create policy orders_user_policy on orders
30
- for all
31
- using (user_id = current_setting('app.current_user_id')::bigint);
32
-
33
- -- Force RLS even for table owners
34
- alter table orders force row level security;
35
-
36
- -- Set user context and query
37
- set app.current_user_id = '123';
38
- select * from orders; -- Only returns orders for user 123
39
- ```
40
-
41
- Policy for authenticated role:
42
-
43
- ```sql
44
- create policy orders_user_policy on orders
45
- for all
46
- to authenticated
47
- using (user_id = auth.uid());
48
- ```
49
-
50
- Reference: [Row Level Security](https://supabase.com/docs/guides/database/postgres/row-level-security)
@@ -1,63 +0,0 @@
1
- ---
2
- title: Optimize RLS Policies for Performance
3
- impact: HIGH
4
- impactDescription: 5-10x faster RLS queries with proper patterns
5
- tags: rls, performance, security, optimization
6
- ---
7
-
8
- ## Optimize RLS Policies for Performance
9
-
10
- Poorly written RLS policies can cause severe performance issues. Use subqueries and indexes strategically.
11
-
12
- **Incorrect (function called for every row):**
13
-
14
- ```sql
15
- create policy orders_policy on orders
16
- using (auth.uid() = user_id); -- auth.uid() called per row!
17
-
18
- -- With 1M rows, auth.uid() is called 1M times
19
- ```
20
-
21
- **Correct (wrap functions in SELECT):**
22
-
23
- ```sql
24
- create policy orders_policy on orders
25
- using ((select auth.uid()) = user_id); -- Called once, cached
26
-
27
- -- 100x+ faster on large tables
28
- ```
29
-
30
- Use security definer functions for complex checks:
31
-
32
- `SECURITY DEFINER` functions run with the creator's privileges and bypass RLS on any tables they touch — which is what makes them useful for internal lookups, but also what makes them dangerous if misused. Always include an explicit `auth.uid()` check inside the function body, keep them in a non-exposed schema, and revoke `EXECUTE` from any role that shouldn't call them directly.
33
-
34
- ```sql
35
- -- Create helper function in a private schema
36
- create or replace function private.is_team_member(team_id bigint)
37
- returns boolean
38
- language sql
39
- security definer
40
- set search_path = ''
41
- as $$
42
- select exists (
43
- select 1 from public.team_members
44
- -- always check the calling user's identity inside the function
45
- where team_id = $1 and user_id = (select auth.uid())
46
- );
47
- $$;
48
-
49
- -- Revoke direct execution from public roles
50
- revoke execute on function private.is_team_member(bigint) from PUBLIC, anon, authenticated, service_role;
51
-
52
- -- Use in policy (indexed lookup, not per-row check)
53
- create policy team_orders_policy on orders
54
- using ((select private.is_team_member(team_id)));
55
- ```
56
-
57
- Always add indexes on columns used in RLS policies:
58
-
59
- ```sql
60
- create index orders_user_id_idx on orders (user_id);
61
- ```
62
-
63
- Reference: [RLS Performance](https://supabase.com/docs/guides/database/postgres/row-level-security#rls-performance-recommendations)
@@ -1,21 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) 2025 Siqi Chen
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.