quiver-cli 1.3.0 → 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 (384) 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 -51
  12. package/template/.agents/skills/apps/skybridge/SKILL.md +0 -50
  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 -247
  95. package/template/.agents/skills/data/prisma-cli/references/db-execute.md +0 -78
  96. package/template/.agents/skills/data/prisma-cli/references/db-pull.md +0 -185
  97. package/template/.agents/skills/data/prisma-cli/references/db-push.md +0 -148
  98. package/template/.agents/skills/data/prisma-cli/references/db-seed.md +0 -188
  99. package/template/.agents/skills/data/prisma-cli/references/debug.md +0 -46
  100. package/template/.agents/skills/data/prisma-cli/references/dev.md +0 -157
  101. package/template/.agents/skills/data/prisma-cli/references/format.md +0 -48
  102. package/template/.agents/skills/data/prisma-cli/references/generate.md +0 -173
  103. package/template/.agents/skills/data/prisma-cli/references/init.md +0 -136
  104. package/template/.agents/skills/data/prisma-cli/references/mcp.md +0 -38
  105. package/template/.agents/skills/data/prisma-cli/references/migrate-deploy.md +0 -127
  106. package/template/.agents/skills/data/prisma-cli/references/migrate-dev.md +0 -145
  107. package/template/.agents/skills/data/prisma-cli/references/migrate-diff.md +0 -89
  108. package/template/.agents/skills/data/prisma-cli/references/migrate-reset.md +0 -78
  109. package/template/.agents/skills/data/prisma-cli/references/migrate-resolve.md +0 -57
  110. package/template/.agents/skills/data/prisma-cli/references/migrate-status.md +0 -65
  111. package/template/.agents/skills/data/prisma-cli/references/studio.md +0 -137
  112. package/template/.agents/skills/data/prisma-cli/references/validate.md +0 -53
  113. package/template/.agents/skills/data/prisma-client-api/SKILL.md +0 -216
  114. package/template/.agents/skills/data/prisma-client-api/references/client-methods.md +0 -223
  115. package/template/.agents/skills/data/prisma-client-api/references/constructor.md +0 -208
  116. package/template/.agents/skills/data/prisma-client-api/references/filters.md +0 -256
  117. package/template/.agents/skills/data/prisma-client-api/references/model-queries.md +0 -281
  118. package/template/.agents/skills/data/prisma-client-api/references/query-options.md +0 -276
  119. package/template/.agents/skills/data/prisma-client-api/references/raw-queries.md +0 -194
  120. package/template/.agents/skills/data/prisma-client-api/references/relations.md +0 -308
  121. package/template/.agents/skills/data/prisma-client-api/references/transactions.md +0 -184
  122. package/template/.agents/skills/design/impeccable/SKILL.md +0 -84
  123. package/template/.agents/skills/design/impeccable/reference/adapt.md +0 -312
  124. package/template/.agents/skills/design/impeccable/reference/adapt.native.md +0 -58
  125. package/template/.agents/skills/design/impeccable/reference/android.md +0 -40
  126. package/template/.agents/skills/design/impeccable/reference/animate.md +0 -86
  127. package/template/.agents/skills/design/impeccable/reference/audit.md +0 -136
  128. package/template/.agents/skills/design/impeccable/reference/audit.native.md +0 -139
  129. package/template/.agents/skills/design/impeccable/reference/bolder.md +0 -31
  130. package/template/.agents/skills/design/impeccable/reference/clarify.md +0 -94
  131. package/template/.agents/skills/design/impeccable/reference/colorize.md +0 -86
  132. package/template/.agents/skills/design/impeccable/reference/craft-floor.md +0 -42
  133. package/template/.agents/skills/design/impeccable/reference/craft.md +0 -5
  134. package/template/.agents/skills/design/impeccable/reference/critique.md +0 -788
  135. package/template/.agents/skills/design/impeccable/reference/degraded/asset-producer.md +0 -90
  136. package/template/.agents/skills/design/impeccable/reference/degraded/documenter.md +0 -24
  137. package/template/.agents/skills/design/impeccable/reference/degraded/finish-reviewer.md +0 -37
  138. package/template/.agents/skills/design/impeccable/reference/degraded/manual-edit-applier.md +0 -92
  139. package/template/.agents/skills/design/impeccable/reference/delight.md +0 -70
  140. package/template/.agents/skills/design/impeccable/reference/distill.md +0 -111
  141. package/template/.agents/skills/design/impeccable/reference/doctor.md +0 -53
  142. package/template/.agents/skills/design/impeccable/reference/document.md +0 -416
  143. package/template/.agents/skills/design/impeccable/reference/extract.md +0 -69
  144. package/template/.agents/skills/design/impeccable/reference/harden.md +0 -336
  145. package/template/.agents/skills/design/impeccable/reference/hooks.md +0 -105
  146. package/template/.agents/skills/design/impeccable/reference/init.md +0 -125
  147. package/template/.agents/skills/design/impeccable/reference/ios.md +0 -45
  148. package/template/.agents/skills/design/impeccable/reference/layout.md +0 -84
  149. package/template/.agents/skills/design/impeccable/reference/live-setup.md +0 -102
  150. package/template/.agents/skills/design/impeccable/reference/live.md +0 -323
  151. package/template/.agents/skills/design/impeccable/reference/new-work.md +0 -105
  152. package/template/.agents/skills/design/impeccable/reference/onboard.md +0 -234
  153. package/template/.agents/skills/design/impeccable/reference/operate.md +0 -61
  154. package/template/.agents/skills/design/impeccable/reference/optimize.md +0 -258
  155. package/template/.agents/skills/design/impeccable/reference/overdrive.md +0 -127
  156. package/template/.agents/skills/design/impeccable/reference/polish.md +0 -97
  157. package/template/.agents/skills/design/impeccable/reference/quieter.md +0 -99
  158. package/template/.agents/skills/design/impeccable/reference/routing.md +0 -18
  159. package/template/.agents/skills/design/impeccable/reference/shape.md +0 -59
  160. package/template/.agents/skills/design/impeccable/reference/typeset.md +0 -80
  161. package/template/.agents/skills/design/impeccable/reference/visualize.md +0 -47
  162. package/template/.agents/skills/design/impeccable/scripts/command-metadata.json +0 -94
  163. package/template/.agents/skills/design/impeccable/scripts/concept-seed.mjs +0 -558
  164. package/template/.agents/skills/design/impeccable/scripts/context-signals.mjs +0 -334
  165. package/template/.agents/skills/design/impeccable/scripts/context.mjs +0 -1450
  166. package/template/.agents/skills/design/impeccable/scripts/critique-storage.mjs +0 -213
  167. package/template/.agents/skills/design/impeccable/scripts/detect-csp.mjs +0 -198
  168. package/template/.agents/skills/design/impeccable/scripts/detect.mjs +0 -21
  169. package/template/.agents/skills/design/impeccable/scripts/detector/browser/injected/index.mjs +0 -2023
  170. package/template/.agents/skills/design/impeccable/scripts/detector/cli/main.mjs +0 -438
  171. package/template/.agents/skills/design/impeccable/scripts/detector/design-system.mjs +0 -983
  172. package/template/.agents/skills/design/impeccable/scripts/detector/detect-antipatterns-browser.js +0 -8283
  173. package/template/.agents/skills/design/impeccable/scripts/detector/detect-antipatterns.mjs +0 -50
  174. package/template/.agents/skills/design/impeccable/scripts/detector/engines/browser/detect-url.mjs +0 -372
  175. package/template/.agents/skills/design/impeccable/scripts/detector/engines/regex/detect-text.mjs +0 -768
  176. package/template/.agents/skills/design/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +0 -1186
  177. package/template/.agents/skills/design/impeccable/scripts/detector/engines/static-html/detect-html.mjs +0 -264
  178. package/template/.agents/skills/design/impeccable/scripts/detector/engines/visual/screenshot-contrast.mjs +0 -189
  179. package/template/.agents/skills/design/impeccable/scripts/detector/findings.mjs +0 -18
  180. package/template/.agents/skills/design/impeccable/scripts/detector/node/file-system.mjs +0 -212
  181. package/template/.agents/skills/design/impeccable/scripts/detector/profile/profiler.mjs +0 -166
  182. package/template/.agents/skills/design/impeccable/scripts/detector/registry/antipatterns.mjs +0 -617
  183. package/template/.agents/skills/design/impeccable/scripts/detector/rules/checks.mjs +0 -5580
  184. package/template/.agents/skills/design/impeccable/scripts/detector/shared/color.mjs +0 -124
  185. package/template/.agents/skills/design/impeccable/scripts/detector/shared/constants.mjs +0 -112
  186. package/template/.agents/skills/design/impeccable/scripts/detector/shared/fonts.mjs +0 -30
  187. package/template/.agents/skills/design/impeccable/scripts/detector/shared/inline-ignores.mjs +0 -148
  188. package/template/.agents/skills/design/impeccable/scripts/detector/shared/page.mjs +0 -7
  189. package/template/.agents/skills/design/impeccable/scripts/doctor.mjs +0 -336
  190. package/template/.agents/skills/design/impeccable/scripts/embed-prompt.mjs +0 -133
  191. package/template/.agents/skills/design/impeccable/scripts/generate-image.mjs +0 -240
  192. package/template/.agents/skills/design/impeccable/scripts/hook-admin.mjs +0 -741
  193. package/template/.agents/skills/design/impeccable/scripts/hook-before-edit.mjs +0 -516
  194. package/template/.agents/skills/design/impeccable/scripts/hook-lib.mjs +0 -2100
  195. package/template/.agents/skills/design/impeccable/scripts/hook.mjs +0 -78
  196. package/template/.agents/skills/design/impeccable/scripts/lib/artifact-schema.mjs +0 -93
  197. package/template/.agents/skills/design/impeccable/scripts/lib/composition-catalog.mjs +0 -200
  198. package/template/.agents/skills/design/impeccable/scripts/lib/concept-catalog.mjs +0 -357
  199. package/template/.agents/skills/design/impeccable/scripts/lib/design-parser.mjs +0 -842
  200. package/template/.agents/skills/design/impeccable/scripts/lib/impeccable-config.mjs +0 -658
  201. package/template/.agents/skills/design/impeccable/scripts/lib/impeccable-paths.mjs +0 -137
  202. package/template/.agents/skills/design/impeccable/scripts/lib/is-generated.mjs +0 -69
  203. package/template/.agents/skills/design/impeccable/scripts/lib/provider.mjs +0 -5
  204. package/template/.agents/skills/design/impeccable/scripts/lib/roll-selection.mjs +0 -362
  205. package/template/.agents/skills/design/impeccable/scripts/lib/staleness-deep.mjs +0 -457
  206. package/template/.agents/skills/design/impeccable/scripts/lib/staleness-notice.mjs +0 -169
  207. package/template/.agents/skills/design/impeccable/scripts/lib/staleness.mjs +0 -457
  208. package/template/.agents/skills/design/impeccable/scripts/lib/surface-briefs.mjs +0 -151
  209. package/template/.agents/skills/design/impeccable/scripts/lib/target-args.mjs +0 -42
  210. package/template/.agents/skills/design/impeccable/scripts/lib/target-slug.mjs +0 -33
  211. package/template/.agents/skills/design/impeccable/scripts/lib/template-extensions.mjs +0 -146
  212. package/template/.agents/skills/design/impeccable/scripts/live/accept-css.mjs +0 -617
  213. package/template/.agents/skills/design/impeccable/scripts/live/accept-verify.mjs +0 -60
  214. package/template/.agents/skills/design/impeccable/scripts/live/browser-script-parts.mjs +0 -55
  215. package/template/.agents/skills/design/impeccable/scripts/live/completion.mjs +0 -28
  216. package/template/.agents/skills/design/impeccable/scripts/live/event-validation.mjs +0 -199
  217. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/astro.mjs +0 -47
  218. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/detect-utils.mjs +0 -73
  219. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/index.mjs +0 -143
  220. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/journal.mjs +0 -197
  221. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/nextjs.mjs +0 -49
  222. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/nuxt.mjs +0 -161
  223. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/script-src.mjs +0 -17
  224. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/static-html.mjs +0 -26
  225. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/sveltekit.mjs +0 -71
  226. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/tag-strategy.mjs +0 -247
  227. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/tanstack-start.mjs +0 -70
  228. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/vite-generic.mjs +0 -42
  229. package/template/.agents/skills/design/impeccable/scripts/live/generation-preflight.mjs +0 -149
  230. package/template/.agents/skills/design/impeccable/scripts/live/insert-ui.mjs +0 -458
  231. package/template/.agents/skills/design/impeccable/scripts/live/instructions.mjs +0 -142
  232. package/template/.agents/skills/design/impeccable/scripts/live/manual-apply.mjs +0 -939
  233. package/template/.agents/skills/design/impeccable/scripts/live/manual-edit-routes.mjs +0 -357
  234. package/template/.agents/skills/design/impeccable/scripts/live/manual-edits-buffer.mjs +0 -152
  235. package/template/.agents/skills/design/impeccable/scripts/live/poll-lanes.mjs +0 -14
  236. package/template/.agents/skills/design/impeccable/scripts/live/roots.mjs +0 -508
  237. package/template/.agents/skills/design/impeccable/scripts/live/session-store.mjs +0 -563
  238. package/template/.agents/skills/design/impeccable/scripts/live/source-lock.mjs +0 -105
  239. package/template/.agents/skills/design/impeccable/scripts/live/source-search.mjs +0 -105
  240. package/template/.agents/skills/design/impeccable/scripts/live/svelte-ast.mjs +0 -961
  241. package/template/.agents/skills/design/impeccable/scripts/live/svelte-component.mjs +0 -1342
  242. package/template/.agents/skills/design/impeccable/scripts/live/sveltekit-adapter.mjs +0 -316
  243. package/template/.agents/skills/design/impeccable/scripts/live/tanstack-adapter.mjs +0 -280
  244. package/template/.agents/skills/design/impeccable/scripts/live/ui-core.mjs +0 -180
  245. package/template/.agents/skills/design/impeccable/scripts/live/vocabulary.mjs +0 -171
  246. package/template/.agents/skills/design/impeccable/scripts/live-accept.mjs +0 -954
  247. package/template/.agents/skills/design/impeccable/scripts/live-browser-dom.js +0 -146
  248. package/template/.agents/skills/design/impeccable/scripts/live-browser-session.js +0 -123
  249. package/template/.agents/skills/design/impeccable/scripts/live-browser.js +0 -12512
  250. package/template/.agents/skills/design/impeccable/scripts/live-commit-manual-edits.mjs +0 -1244
  251. package/template/.agents/skills/design/impeccable/scripts/live-complete.mjs +0 -107
  252. package/template/.agents/skills/design/impeccable/scripts/live-copy-edit-agent.mjs +0 -683
  253. package/template/.agents/skills/design/impeccable/scripts/live-discard-manual-edits.mjs +0 -51
  254. package/template/.agents/skills/design/impeccable/scripts/live-inject.mjs +0 -503
  255. package/template/.agents/skills/design/impeccable/scripts/live-insert.mjs +0 -292
  256. package/template/.agents/skills/design/impeccable/scripts/live-manual-edit-evidence.mjs +0 -368
  257. package/template/.agents/skills/design/impeccable/scripts/live-poll.mjs +0 -429
  258. package/template/.agents/skills/design/impeccable/scripts/live-resume.mjs +0 -123
  259. package/template/.agents/skills/design/impeccable/scripts/live-server.mjs +0 -1661
  260. package/template/.agents/skills/design/impeccable/scripts/live-status.mjs +0 -71
  261. package/template/.agents/skills/design/impeccable/scripts/live-target.mjs +0 -30
  262. package/template/.agents/skills/design/impeccable/scripts/live-wrap.mjs +0 -927
  263. package/template/.agents/skills/design/impeccable/scripts/live.mjs +0 -359
  264. package/template/.agents/skills/design/impeccable/scripts/modern-screenshot.umd.js +0 -14
  265. package/template/.agents/skills/design/impeccable/scripts/palette.mjs +0 -628
  266. package/template/.agents/skills/design/impeccable/scripts/pin.mjs +0 -221
  267. package/template/.agents/skills/design/impeccable/scripts/serve-question.mjs +0 -932
  268. package/template/.agents/skills/design/impeccable/scripts/surface-brief.mjs +0 -74
  269. package/template/.agents/skills/design/shadcn/SKILL.md +0 -277
  270. package/template/.agents/skills/design/shadcn/agents/openai.yml +0 -5
  271. package/template/.agents/skills/design/shadcn/assets/shadcn-small.png +0 -0
  272. package/template/.agents/skills/design/shadcn/assets/shadcn.png +0 -0
  273. package/template/.agents/skills/design/shadcn/cli.md +0 -290
  274. package/template/.agents/skills/design/shadcn/customization.md +0 -209
  275. package/template/.agents/skills/design/shadcn/evals/evals.json +0 -77
  276. package/template/.agents/skills/design/shadcn/mcp.md +0 -105
  277. package/template/.agents/skills/design/shadcn/registry.md +0 -277
  278. package/template/.agents/skills/design/shadcn/rules/base-vs-radix.md +0 -306
  279. package/template/.agents/skills/design/shadcn/rules/chat.md +0 -224
  280. package/template/.agents/skills/design/shadcn/rules/composition.md +0 -213
  281. package/template/.agents/skills/design/shadcn/rules/forms.md +0 -192
  282. package/template/.agents/skills/design/shadcn/rules/icons.md +0 -101
  283. package/template/.agents/skills/design/shadcn/rules/styling.md +0 -185
  284. package/template/.agents/skills/find-skills/SKILL.md +0 -141
  285. package/template/.agents/skills/hono/SKILL.md +0 -579
  286. package/template/.agents/skills/integrations/langfuse/SKILL.md +0 -146
  287. package/template/.agents/skills/integrations/langfuse/references/ci-cd.md +0 -41
  288. package/template/.agents/skills/integrations/langfuse/references/cli.md +0 -60
  289. package/template/.agents/skills/integrations/langfuse/references/error-analysis.md +0 -88
  290. package/template/.agents/skills/integrations/langfuse/references/instrumentation.md +0 -121
  291. package/template/.agents/skills/integrations/langfuse/references/judge-calibration.md +0 -291
  292. package/template/.agents/skills/integrations/langfuse/references/prompt-engineering.md +0 -35
  293. package/template/.agents/skills/integrations/langfuse/references/prompt-migration.md +0 -79
  294. package/template/.agents/skills/integrations/langfuse/references/skill-feedback.md +0 -55
  295. package/template/.agents/skills/integrations/langfuse/references/trace-evaluator-upgrade.md +0 -76
  296. package/template/.agents/skills/integrations/langfuse/references/user-feedback.md +0 -92
  297. package/template/.agents/skills/integrations/langfuse/references/v4-project-migration.md +0 -73
  298. package/template/.agents/skills/integrations/posthog/SKILL.md +0 -102
  299. package/template/.agents/skills/integrations/posthog/references/error-tracking-alerts.md +0 -63
  300. package/template/.agents/skills/integrations/posthog/references/error-tracking-assigning-issues.md +0 -77
  301. package/template/.agents/skills/integrations/posthog/references/error-tracking-fingerprints.md +0 -57
  302. package/template/.agents/skills/integrations/posthog/references/error-tracking-monitoring.md +0 -140
  303. package/template/.agents/skills/integrations/posthog/references/error-tracking-nextjs.md +0 -490
  304. package/template/.agents/skills/integrations/posthog/references/error-tracking-source-maps.md +0 -45
  305. package/template/.agents/skills/integrations/posthog/references/feature-flags-best-practices.md +0 -139
  306. package/template/.agents/skills/integrations/posthog/references/feature-flags-react.md +0 -302
  307. package/template/.agents/skills/integrations/posthog/references/identify-users.md +0 -202
  308. package/template/.agents/skills/integrations/posthog/references/integration-example.md +0 -706
  309. package/template/.agents/skills/integrations/posthog/references/integration-nextjs.md +0 -385
  310. package/template/.agents/skills/integrations/posthog/references/integration-step-1-begin.md +0 -43
  311. package/template/.agents/skills/integrations/posthog/references/integration-step-2-edit.md +0 -37
  312. package/template/.agents/skills/integrations/posthog/references/integration-step-3-revise.md +0 -22
  313. package/template/.agents/skills/integrations/posthog/references/integration-step-4-conclude.md +0 -38
  314. package/template/.agents/skills/integrations/posthog/references/llm-analytics-anthropic.md +0 -200
  315. package/template/.agents/skills/integrations/posthog/references/llm-analytics-basics.md +0 -62
  316. package/template/.agents/skills/integrations/posthog/references/llm-analytics-costs.md +0 -197
  317. package/template/.agents/skills/integrations/posthog/references/llm-analytics-manual-capture.md +0 -397
  318. package/template/.agents/skills/integrations/posthog/references/llm-analytics-traces.md +0 -98
  319. package/template/.agents/skills/integrations/posthog/references/llm-analytics-vercel-ai.md +0 -120
  320. package/template/.agents/skills/repo/repo-ci/SKILL.md +0 -265
  321. package/template/.agents/skills/repo/repo-init-next-js/SKILL.md +0 -129
  322. package/template/.agents/skills/repo/repo-init-next-js/references/file-contents.md +0 -800
  323. package/template/.agents/skills/repo/repo-init-next-js/scripts/setup.sh +0 -47
  324. package/template/.agents/skills/repo/repo-init-node/SKILL.md +0 -196
  325. package/template/.agents/skills/skill-creator/LICENSE.txt +0 -202
  326. package/template/.agents/skills/skill-creator/SKILL.md +0 -485
  327. package/template/.agents/skills/skill-creator/agents/analyzer.md +0 -274
  328. package/template/.agents/skills/skill-creator/agents/comparator.md +0 -202
  329. package/template/.agents/skills/skill-creator/agents/grader.md +0 -223
  330. package/template/.agents/skills/skill-creator/assets/eval_review.html +0 -146
  331. package/template/.agents/skills/skill-creator/eval-viewer/generate_review.py +0 -471
  332. package/template/.agents/skills/skill-creator/eval-viewer/viewer.html +0 -1325
  333. package/template/.agents/skills/skill-creator/references/schemas.md +0 -430
  334. package/template/.agents/skills/skill-creator/scripts/__init__.py +0 -0
  335. package/template/.agents/skills/skill-creator/scripts/aggregate_benchmark.py +0 -401
  336. package/template/.agents/skills/skill-creator/scripts/generate_report.py +0 -326
  337. package/template/.agents/skills/skill-creator/scripts/improve_description.py +0 -247
  338. package/template/.agents/skills/skill-creator/scripts/package_skill.py +0 -136
  339. package/template/.agents/skills/skill-creator/scripts/quick_validate.py +0 -103
  340. package/template/.agents/skills/skill-creator/scripts/run_eval.py +0 -310
  341. package/template/.agents/skills/skill-creator/scripts/run_loop.py +0 -328
  342. package/template/.agents/skills/skill-creator/scripts/utils.py +0 -47
  343. package/template/.agents/skills/supabase/CHANGELOG.md +0 -71
  344. package/template/.agents/skills/supabase/SKILL.md +0 -145
  345. package/template/.agents/skills/supabase/assets/feedback-issue-template.md +0 -17
  346. package/template/.agents/skills/supabase/references/skill-feedback.md +0 -17
  347. package/template/.agents/skills/supabase-postgres-best-practices/CHANGELOG.md +0 -73
  348. package/template/.agents/skills/supabase-postgres-best-practices/SKILL.md +0 -64
  349. package/template/.agents/skills/supabase-postgres-best-practices/references/_contributing.md +0 -170
  350. package/template/.agents/skills/supabase-postgres-best-practices/references/_sections.md +0 -39
  351. package/template/.agents/skills/supabase-postgres-best-practices/references/_template.md +0 -34
  352. package/template/.agents/skills/supabase-postgres-best-practices/references/advanced-full-text-search.md +0 -55
  353. package/template/.agents/skills/supabase-postgres-best-practices/references/advanced-jsonb-indexing.md +0 -49
  354. package/template/.agents/skills/supabase-postgres-best-practices/references/conn-idle-timeout.md +0 -46
  355. package/template/.agents/skills/supabase-postgres-best-practices/references/conn-limits.md +0 -44
  356. package/template/.agents/skills/supabase-postgres-best-practices/references/conn-pooling.md +0 -41
  357. package/template/.agents/skills/supabase-postgres-best-practices/references/conn-prepared-statements.md +0 -46
  358. package/template/.agents/skills/supabase-postgres-best-practices/references/data-batch-inserts.md +0 -54
  359. package/template/.agents/skills/supabase-postgres-best-practices/references/data-n-plus-one.md +0 -53
  360. package/template/.agents/skills/supabase-postgres-best-practices/references/data-pagination.md +0 -50
  361. package/template/.agents/skills/supabase-postgres-best-practices/references/data-upsert.md +0 -50
  362. package/template/.agents/skills/supabase-postgres-best-practices/references/lock-advisory.md +0 -56
  363. package/template/.agents/skills/supabase-postgres-best-practices/references/lock-deadlock-prevention.md +0 -68
  364. package/template/.agents/skills/supabase-postgres-best-practices/references/lock-short-transactions.md +0 -50
  365. package/template/.agents/skills/supabase-postgres-best-practices/references/lock-skip-locked.md +0 -54
  366. package/template/.agents/skills/supabase-postgres-best-practices/references/monitor-explain-analyze.md +0 -45
  367. package/template/.agents/skills/supabase-postgres-best-practices/references/monitor-pg-stat-statements.md +0 -55
  368. package/template/.agents/skills/supabase-postgres-best-practices/references/monitor-vacuum-analyze.md +0 -55
  369. package/template/.agents/skills/supabase-postgres-best-practices/references/query-composite-indexes.md +0 -44
  370. package/template/.agents/skills/supabase-postgres-best-practices/references/query-covering-indexes.md +0 -40
  371. package/template/.agents/skills/supabase-postgres-best-practices/references/query-index-types.md +0 -48
  372. package/template/.agents/skills/supabase-postgres-best-practices/references/query-missing-indexes.md +0 -43
  373. package/template/.agents/skills/supabase-postgres-best-practices/references/query-partial-indexes.md +0 -45
  374. package/template/.agents/skills/supabase-postgres-best-practices/references/schema-constraints.md +0 -80
  375. package/template/.agents/skills/supabase-postgres-best-practices/references/schema-data-types.md +0 -46
  376. package/template/.agents/skills/supabase-postgres-best-practices/references/schema-foreign-key-indexes.md +0 -59
  377. package/template/.agents/skills/supabase-postgres-best-practices/references/schema-lowercase-identifiers.md +0 -55
  378. package/template/.agents/skills/supabase-postgres-best-practices/references/schema-partitioning.md +0 -55
  379. package/template/.agents/skills/supabase-postgres-best-practices/references/schema-primary-keys.md +0 -61
  380. package/template/.agents/skills/supabase-postgres-best-practices/references/security-privileges.md +0 -54
  381. package/template/.agents/skills/supabase-postgres-best-practices/references/security-rls-basics.md +0 -50
  382. package/template/.agents/skills/supabase-postgres-best-practices/references/security-rls-performance.md +0 -63
  383. package/template/.agents/skills/writing/humanizer/SKILL.md +0 -621
  384. package/template/.agents/upstreams.json +0 -116
@@ -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)