cfsa-antigravity 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (378) hide show
  1. package/bin/cli.mjs +324 -0
  2. package/package.json +34 -0
  3. package/template/.agent/instructions/commands.md +48 -0
  4. package/template/.agent/instructions/patterns.md +61 -0
  5. package/template/.agent/instructions/structure.md +29 -0
  6. package/template/.agent/instructions/tech-stack.md +43 -0
  7. package/template/.agent/instructions/workflow.md +41 -0
  8. package/template/.agent/kit-sync.md +15 -0
  9. package/template/.agent/rules/boundary-not-placeholder.md +146 -0
  10. package/template/.agent/rules/completion-checklist.md +48 -0
  11. package/template/.agent/rules/decision-classification.md +103 -0
  12. package/template/.agent/rules/extensibility.md +47 -0
  13. package/template/.agent/rules/question-vs-command.md +81 -0
  14. package/template/.agent/rules/security-first.md +43 -0
  15. package/template/.agent/rules/specificity-standards.md +54 -0
  16. package/template/.agent/rules/tdd-contract-first.md +57 -0
  17. package/template/.agent/rules/vertical-slices.md +42 -0
  18. package/template/.agent/skill-library/MANIFEST.md +480 -0
  19. package/template/.agent/skill-library/README.md +38 -0
  20. package/template/.agent/skill-library/meta/brand-guidelines/SKILL.md +73 -0
  21. package/template/.agent/skill-library/meta/claude-code/README.md +9 -0
  22. package/template/.agent/skill-library/meta/claude-code/agent-development/SKILL.md +415 -0
  23. package/template/.agent/skill-library/meta/claude-code/hook-development/SKILL.md +712 -0
  24. package/template/.agent/skill-library/meta/claude-code/plugin-structure/SKILL.md +476 -0
  25. package/template/.agent/skill-library/meta/git-advanced/SKILL.md +972 -0
  26. package/template/.agent/skill-library/meta/mcp-builder/SKILL.md +236 -0
  27. package/template/.agent/skill-library/meta/product-marketing-context/SKILL.md +241 -0
  28. package/template/.agent/skill-library/meta/regex-patterns/SKILL.md +751 -0
  29. package/template/.agent/skill-library/meta/tmux-processes/SKILL.md +210 -0
  30. package/template/.agent/skill-library/meta/using-tmux-for-interactive-commands/SKILL.md +178 -0
  31. package/template/.agent/skill-library/stack/3d/threejs-pro/SKILL.md +300 -0
  32. package/template/.agent/skill-library/stack/ai/ai-sdk/SKILL.md +77 -0
  33. package/template/.agent/skill-library/stack/ai/langchain/SKILL.md +530 -0
  34. package/template/.agent/skill-library/stack/ai/ollama/SKILL.md +321 -0
  35. package/template/.agent/skill-library/stack/ai/openai-sdk/SKILL.md +549 -0
  36. package/template/.agent/skill-library/stack/analytics/google-analytics/SKILL.md +153 -0
  37. package/template/.agent/skill-library/stack/api/graphql/SKILL.md +1061 -0
  38. package/template/.agent/skill-library/stack/api/trpc/SKILL.md +576 -0
  39. package/template/.agent/skill-library/stack/auth/authjs/SKILL.md +569 -0
  40. package/template/.agent/skill-library/stack/auth/clerk/SKILL.md +590 -0
  41. package/template/.agent/skill-library/stack/auth/firebase-auth/SKILL.md +734 -0
  42. package/template/.agent/skill-library/stack/cms/payload-cms/SKILL.md +573 -0
  43. package/template/.agent/skill-library/stack/cms/shopify/SKILL.md +1193 -0
  44. package/template/.agent/skill-library/stack/cms/wordpress/SKILL.md +1104 -0
  45. package/template/.agent/skill-library/stack/css/sass-scss/SKILL.md +1121 -0
  46. package/template/.agent/skill-library/stack/css/tailwind-css-patterns/SKILL.md +863 -0
  47. package/template/.agent/skill-library/stack/css/tailwind-design-system/SKILL.md +490 -0
  48. package/template/.agent/skill-library/stack/css/vanilla-css/SKILL.md +1078 -0
  49. package/template/.agent/skill-library/stack/databases/clickhouse/SKILL.md +311 -0
  50. package/template/.agent/skill-library/stack/databases/influxdb/SKILL.md +280 -0
  51. package/template/.agent/skill-library/stack/databases/lancedb/SKILL.md +415 -0
  52. package/template/.agent/skill-library/stack/databases/mongodb/SKILL.md +1169 -0
  53. package/template/.agent/skill-library/stack/databases/neo4j/SKILL.md +839 -0
  54. package/template/.agent/skill-library/stack/databases/pgvector/SKILL.md +241 -0
  55. package/template/.agent/skill-library/stack/databases/pinecone/SKILL.md +212 -0
  56. package/template/.agent/skill-library/stack/databases/postgresql/SKILL.md +658 -0
  57. package/template/.agent/skill-library/stack/databases/qdrant/SKILL.md +312 -0
  58. package/template/.agent/skill-library/stack/databases/redis/SKILL.md +1079 -0
  59. package/template/.agent/skill-library/stack/databases/spacetimedb/SKILL.md +532 -0
  60. package/template/.agent/skill-library/stack/databases/sqlite/SKILL.md +1132 -0
  61. package/template/.agent/skill-library/stack/databases/supabase/SKILL.md +640 -0
  62. package/template/.agent/skill-library/stack/databases/surrealdb-expert/SKILL.md +945 -0
  63. package/template/.agent/skill-library/stack/databases/timescaledb/SKILL.md +745 -0
  64. package/template/.agent/skill-library/stack/databases/weaviate/SKILL.md +218 -0
  65. package/template/.agent/skill-library/stack/devops/github-actions/SKILL.md +554 -0
  66. package/template/.agent/skill-library/stack/devops/kubernetes/SKILL.md +950 -0
  67. package/template/.agent/skill-library/stack/devops/nginx/SKILL.md +841 -0
  68. package/template/.agent/skill-library/stack/devops/terraform/SKILL.md +860 -0
  69. package/template/.agent/skill-library/stack/email/resend/SKILL.md +391 -0
  70. package/template/.agent/skill-library/stack/engines/godot/SKILL.md +488 -0
  71. package/template/.agent/skill-library/stack/extensions/chrome-extension/SKILL.md +375 -0
  72. package/template/.agent/skill-library/stack/extensions/vscode-extension/SKILL.md +453 -0
  73. package/template/.agent/skill-library/stack/frameworks/astro-framework/SKILL.md +162 -0
  74. package/template/.agent/skill-library/stack/frameworks/electron/SKILL.md +1286 -0
  75. package/template/.agent/skill-library/stack/frameworks/fastapi/SKILL.md +650 -0
  76. package/template/.agent/skill-library/stack/frameworks/hono/SKILL.md +90 -0
  77. package/template/.agent/skill-library/stack/frameworks/nestjs/SKILL.md +878 -0
  78. package/template/.agent/skill-library/stack/frameworks/nextjs/SKILL.md +635 -0
  79. package/template/.agent/skill-library/stack/frameworks/nuxt/SKILL.md +564 -0
  80. package/template/.agent/skill-library/stack/frameworks/sveltekit/SKILL.md +614 -0
  81. package/template/.agent/skill-library/stack/frameworks/tauri/SKILL.md +920 -0
  82. package/template/.agent/skill-library/stack/gamedev/godot/SKILL.md +1032 -0
  83. package/template/.agent/skill-library/stack/gamedev/unity/SKILL.md +1175 -0
  84. package/template/.agent/skill-library/stack/hosting/aws/SKILL.md +467 -0
  85. package/template/.agent/skill-library/stack/hosting/cloudflare/SKILL.md +201 -0
  86. package/template/.agent/skill-library/stack/hosting/docker-expert/SKILL.md +409 -0
  87. package/template/.agent/skill-library/stack/hosting/vercel/SKILL.md +484 -0
  88. package/template/.agent/skill-library/stack/languages/bash-scripting/SKILL.md +773 -0
  89. package/template/.agent/skill-library/stack/languages/c-cpp/SKILL.md +712 -0
  90. package/template/.agent/skill-library/stack/languages/gdscript/SKILL.md +789 -0
  91. package/template/.agent/skill-library/stack/languages/go/SKILL.md +664 -0
  92. package/template/.agent/skill-library/stack/languages/java/SKILL.md +778 -0
  93. package/template/.agent/skill-library/stack/languages/kotlin/SKILL.md +665 -0
  94. package/template/.agent/skill-library/stack/languages/python/SKILL.md +678 -0
  95. package/template/.agent/skill-library/stack/languages/rust/SKILL.md +673 -0
  96. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/SKILL.md +141 -0
  97. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/advanced-generics.md +90 -0
  98. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/branded-types.md +57 -0
  99. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/builder-pattern.md +71 -0
  100. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/common-pitfalls.md +135 -0
  101. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/conditional-types.md +27 -0
  102. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/decorators.md +98 -0
  103. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/discriminated-unions.md +62 -0
  104. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/mapped-types.md +53 -0
  105. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/performance-best-practices.md +104 -0
  106. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/template-literal-types.md +49 -0
  107. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/testing-types.md +112 -0
  108. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/type-guards.md +70 -0
  109. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/type-inference.md +101 -0
  110. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/utility-types.md +98 -0
  111. package/template/.agent/skill-library/stack/languages/vanilla-javascript/SKILL.md +803 -0
  112. package/template/.agent/skill-library/stack/messaging/kafka/SKILL.md +235 -0
  113. package/template/.agent/skill-library/stack/mobile/expo-react-native/SKILL.md +665 -0
  114. package/template/.agent/skill-library/stack/mobile/flutter/SKILL.md +316 -0
  115. package/template/.agent/skill-library/stack/mobile/react-native/SKILL.md +337 -0
  116. package/template/.agent/skill-library/stack/monitoring/posthog/SKILL.md +396 -0
  117. package/template/.agent/skill-library/stack/monitoring/sentry/SKILL.md +509 -0
  118. package/template/.agent/skill-library/stack/observability/datadog/SKILL.md +179 -0
  119. package/template/.agent/skill-library/stack/observability/distributed-tracing/SKILL.md +140 -0
  120. package/template/.agent/skill-library/stack/observability/logging-best-practices/SKILL.md +168 -0
  121. package/template/.agent/skill-library/stack/observability/opentelemetry/SKILL.md +164 -0
  122. package/template/.agent/skill-library/stack/observability/prometheus-grafana/SKILL.md +246 -0
  123. package/template/.agent/skill-library/stack/observability/python-observability/SKILL.md +158 -0
  124. package/template/.agent/skill-library/stack/orm/drizzle-orm/SKILL.md +613 -0
  125. package/template/.agent/skill-library/stack/orm/prisma/SKILL.md +744 -0
  126. package/template/.agent/skill-library/stack/payments/lemonsqueezy/SKILL.md +393 -0
  127. package/template/.agent/skill-library/stack/payments/stripe-integration/SKILL.md +457 -0
  128. package/template/.agent/skill-library/stack/queue/bullmq/SKILL.md +385 -0
  129. package/template/.agent/skill-library/stack/queue/inngest/SKILL.md +438 -0
  130. package/template/.agent/skill-library/stack/realtime/socketio/SKILL.md +595 -0
  131. package/template/.agent/skill-library/stack/search/elasticsearch/SKILL.md +248 -0
  132. package/template/.agent/skill-library/stack/search/meilisearch/SKILL.md +385 -0
  133. package/template/.agent/skill-library/stack/security/crypto-patterns/SKILL.md +437 -0
  134. package/template/.agent/skill-library/stack/security/csp-cors-headers/SKILL.md +588 -0
  135. package/template/.agent/skill-library/stack/security/dependency-auditing/SKILL.md +560 -0
  136. package/template/.agent/skill-library/stack/security/input-sanitization/SKILL.md +430 -0
  137. package/template/.agent/skill-library/stack/security/owasp-web-security/SKILL.md +421 -0
  138. package/template/.agent/skill-library/stack/state/tanstack-query/SKILL.md +637 -0
  139. package/template/.agent/skill-library/stack/state/zustand/SKILL.md +483 -0
  140. package/template/.agent/skill-library/stack/storage/aws-s3/SKILL.md +415 -0
  141. package/template/.agent/skill-library/stack/testing/playwright/SKILL.md +641 -0
  142. package/template/.agent/skill-library/stack/testing/storybook/SKILL.md +923 -0
  143. package/template/.agent/skill-library/stack/testing/testing-library/SKILL.md +872 -0
  144. package/template/.agent/skill-library/stack/testing/vitest/SKILL.md +714 -0
  145. package/template/.agent/skill-library/stack/ui/react-best-practices/SKILL.md +877 -0
  146. package/template/.agent/skill-library/stack/ui/react-composition-patterns/SKILL.md +1107 -0
  147. package/template/.agent/skill-library/stack/ui/react-flow/SKILL.md +425 -0
  148. package/template/.agent/skill-library/stack/ui/shadcn-ui/SKILL.md +703 -0
  149. package/template/.agent/skill-library/surface/api/api-caching/SKILL.md +458 -0
  150. package/template/.agent/skill-library/surface/api/api-documentation-openapi/SKILL.md +697 -0
  151. package/template/.agent/skill-library/surface/api/api-error-handling/SKILL.md +478 -0
  152. package/template/.agent/skill-library/surface/api/api-security-checklist/SKILL.md +147 -0
  153. package/template/.agent/skill-library/surface/api/api-versioning/SKILL.md +420 -0
  154. package/template/.agent/skill-library/surface/api/email-best-practices/SKILL.md +59 -0
  155. package/template/.agent/skill-library/surface/api/rate-limiting-abuse-protection/SKILL.md +147 -0
  156. package/template/.agent/skill-library/surface/api/rest-api-design/SKILL.md +478 -0
  157. package/template/.agent/skill-library/surface/api/webhook-design/SKILL.md +752 -0
  158. package/template/.agent/skill-library/surface/cli/cli-configuration-management/SKILL.md +445 -0
  159. package/template/.agent/skill-library/surface/cli/cli-error-diagnostics/SKILL.md +515 -0
  160. package/template/.agent/skill-library/surface/cli/cli-shell-integration/SKILL.md +479 -0
  161. package/template/.agent/skill-library/surface/cli/cli-ux-design/SKILL.md +477 -0
  162. package/template/.agent/skill-library/surface/desktop/desktop-app-distribution/SKILL.md +416 -0
  163. package/template/.agent/skill-library/surface/desktop/desktop-security-sandboxing/SKILL.md +407 -0
  164. package/template/.agent/skill-library/surface/desktop/desktop-ux-conventions/SKILL.md +361 -0
  165. package/template/.agent/skill-library/surface/desktop/native-os-integration/SKILL.md +563 -0
  166. package/template/.agent/skill-library/surface/extension/browser-extension-patterns/SKILL.md +482 -0
  167. package/template/.agent/skill-library/surface/extension/plugin-architecture-design/SKILL.md +632 -0
  168. package/template/.agent/skill-library/surface/extension/vscode-extension-development/SKILL.md +728 -0
  169. package/template/.agent/skill-library/surface/mobile/app-store-submission/SKILL.md +304 -0
  170. package/template/.agent/skill-library/surface/mobile/mobile-offline-sync/SKILL.md +443 -0
  171. package/template/.agent/skill-library/surface/mobile/mobile-responsive-patterns/SKILL.md +432 -0
  172. package/template/.agent/skill-library/surface/mobile/push-notifications/SKILL.md +495 -0
  173. package/template/.agent/skill-library/surface/web/accessibility-compliance/SKILL.md +827 -0
  174. package/template/.agent/skill-library/surface/web/ai-seo/SKILL.md +398 -0
  175. package/template/.agent/skill-library/surface/web/ai-seo/references/content-patterns.md +285 -0
  176. package/template/.agent/skill-library/surface/web/ai-seo/references/platform-ranking-factors.md +152 -0
  177. package/template/.agent/skill-library/surface/web/analytics-tracking/SKILL.md +309 -0
  178. package/template/.agent/skill-library/surface/web/analytics-tracking/references/event-library.md +260 -0
  179. package/template/.agent/skill-library/surface/web/analytics-tracking/references/ga4-implementation.md +300 -0
  180. package/template/.agent/skill-library/surface/web/analytics-tracking/references/gtm-implementation.md +390 -0
  181. package/template/.agent/skill-library/surface/web/authentication-ui-flows/SKILL.md +530 -0
  182. package/template/.agent/skill-library/surface/web/dark-mode-theming/SKILL.md +516 -0
  183. package/template/.agent/skill-library/surface/web/design-reference-data/SKILL.md +105 -0
  184. package/template/.agent/skill-library/surface/web/design-reference-data/data/charts.csv +26 -0
  185. package/template/.agent/skill-library/surface/web/design-reference-data/data/colors.csv +97 -0
  186. package/template/.agent/skill-library/surface/web/design-reference-data/data/landing.csv +31 -0
  187. package/template/.agent/skill-library/surface/web/design-reference-data/data/styles.csv +59 -0
  188. package/template/.agent/skill-library/surface/web/design-reference-data/data/typography.csv +58 -0
  189. package/template/.agent/skill-library/surface/web/design-reference-data/data/ux-guidelines.csv +100 -0
  190. package/template/.agent/skill-library/surface/web/design-reference-data/scripts/core.py +258 -0
  191. package/template/.agent/skill-library/surface/web/design-reference-data/scripts/design_system.py +1067 -0
  192. package/template/.agent/skill-library/surface/web/design-reference-data/scripts/search.py +106 -0
  193. package/template/.agent/skill-library/surface/web/form-handling-validation/SKILL.md +675 -0
  194. package/template/.agent/skill-library/surface/web/frontend-design/SKILL.md +1393 -0
  195. package/template/.agent/skill-library/surface/web/frontend-design/templates/cppn-hero.tsx +299 -0
  196. package/template/.agent/skill-library/surface/web/frontend-design/templates/wave-hero.tsx +875 -0
  197. package/template/.agent/skill-library/surface/web/frontend-verification/SKILL.md +111 -0
  198. package/template/.agent/skill-library/surface/web/frontend-verification/scripts/ux_audit.py +739 -0
  199. package/template/.agent/skill-library/surface/web/i18n-localization/SKILL.md +154 -0
  200. package/template/.agent/skill-library/surface/web/offline-first-pwa/SKILL.md +657 -0
  201. package/template/.agent/skill-library/surface/web/page-cro/SKILL.md +182 -0
  202. package/template/.agent/skill-library/surface/web/page-cro/references/experiments.md +248 -0
  203. package/template/.agent/skill-library/surface/web/programmatic-seo/SKILL.md +238 -0
  204. package/template/.agent/skill-library/surface/web/programmatic-seo/references/playbooks.md +308 -0
  205. package/template/.agent/skill-library/surface/web/schema-markup/SKILL.md +179 -0
  206. package/template/.agent/skill-library/surface/web/schema-markup/references/schema-examples.md +398 -0
  207. package/template/.agent/skill-library/surface/web/seo-audit/SKILL.md +394 -0
  208. package/template/.agent/skill-library/surface/web/seo-audit/references/ai-writing-detection.md +200 -0
  209. package/template/.agent/skill-library/surface/web/web-performance-optimization/SKILL.md +646 -0
  210. package/template/.agent/skill-library/surface/web/web-scraping/SKILL.md +58 -0
  211. package/template/.agent/skills/accessibility/SKILL.md +522 -0
  212. package/template/.agent/skills/accessibility/references/WCAG.md +162 -0
  213. package/template/.agent/skills/adversarial-review/SKILL.md +90 -0
  214. package/template/.agent/skills/antigravity-workflows/SKILL.md +81 -0
  215. package/template/.agent/skills/antigravity-workflows/resources/implementation-playbook.md +36 -0
  216. package/template/.agent/skills/api-design-principles/SKILL.md +37 -0
  217. package/template/.agent/skills/api-design-principles/assets/api-design-checklist.md +155 -0
  218. package/template/.agent/skills/api-design-principles/assets/rest-api-template.py +182 -0
  219. package/template/.agent/skills/api-design-principles/references/graphql-schema-design.md +583 -0
  220. package/template/.agent/skills/api-design-principles/references/rest-best-practices.md +408 -0
  221. package/template/.agent/skills/api-design-principles/resources/implementation-playbook.md +513 -0
  222. package/template/.agent/skills/api-versioning/SKILL.md +420 -0
  223. package/template/.agent/skills/architecture-mapping/SKILL.md +219 -0
  224. package/template/.agent/skills/bootstrap-agents/SKILL.md +259 -0
  225. package/template/.agent/skills/brainstorming/SKILL.md +236 -0
  226. package/template/.agent/skills/brand-guidelines/SKILL.md +44 -0
  227. package/template/.agent/skills/clean-code/SKILL.md +94 -0
  228. package/template/.agent/skills/code-review-pro/SKILL.md +152 -0
  229. package/template/.agent/skills/concise-planning/SKILL.md +68 -0
  230. package/template/.agent/skills/cross-layer-consistency/SKILL.md +117 -0
  231. package/template/.agent/skills/database-schema-design/SKILL.md +429 -0
  232. package/template/.agent/skills/deployment-procedures/SKILL.md +241 -0
  233. package/template/.agent/skills/design-anti-cliche/SKILL.md +159 -0
  234. package/template/.agent/skills/design-direction/SKILL.md +45 -0
  235. package/template/.agent/skills/error-handling-patterns/SKILL.md +721 -0
  236. package/template/.agent/skills/find-skills/SKILL.md +145 -0
  237. package/template/.agent/skills/git-advanced/SKILL.md +972 -0
  238. package/template/.agent/skills/git-workflow/SKILL.md +420 -0
  239. package/template/.agent/skills/idea-extraction/SKILL.md +271 -0
  240. package/template/.agent/skills/logging-best-practices/SKILL.md +851 -0
  241. package/template/.agent/skills/migration-management/SKILL.md +384 -0
  242. package/template/.agent/skills/minimalist-surgical-development/SKILL.md +69 -0
  243. package/template/.agent/skills/parallel-agents/SKILL.md +165 -0
  244. package/template/.agent/skills/parallel-debugging/SKILL.md +135 -0
  245. package/template/.agent/skills/parallel-feature-development/SKILL.md +166 -0
  246. package/template/.agent/skills/performance-budgeting/SKILL.md +144 -0
  247. package/template/.agent/skills/pipeline-rubrics/SKILL.md +51 -0
  248. package/template/.agent/skills/pipeline-rubrics/references/architecture-rubric.md +19 -0
  249. package/template/.agent/skills/pipeline-rubrics/references/be-rubric.md +21 -0
  250. package/template/.agent/skills/pipeline-rubrics/references/fe-rubric.md +20 -0
  251. package/template/.agent/skills/pipeline-rubrics/references/ia-rubric.md +19 -0
  252. package/template/.agent/skills/pipeline-rubrics/references/scoring.md +28 -0
  253. package/template/.agent/skills/pipeline-rubrics/references/vision-rubric.md +11 -0
  254. package/template/.agent/skills/prd-templates/SKILL.md +88 -0
  255. package/template/.agent/skills/prd-templates/references/architecture-design-template.md +88 -0
  256. package/template/.agent/skills/prd-templates/references/be-spec-template.md +101 -0
  257. package/template/.agent/skills/prd-templates/references/data-placement-template.md +74 -0
  258. package/template/.agent/skills/prd-templates/references/decomposition-templates.md +211 -0
  259. package/template/.agent/skills/prd-templates/references/design-system-decisions.md +198 -0
  260. package/template/.agent/skills/prd-templates/references/engineering-standards-template.md +124 -0
  261. package/template/.agent/skills/prd-templates/references/fe-classification-procedures.md +47 -0
  262. package/template/.agent/skills/prd-templates/references/fe-spec-template.md +84 -0
  263. package/template/.agent/skills/prd-templates/references/infrastructure-report-template.md +71 -0
  264. package/template/.agent/skills/prd-templates/references/operational-templates.md +116 -0
  265. package/template/.agent/skills/prd-templates/references/placeholder-guard-template.md +21 -0
  266. package/template/.agent/skills/prd-templates/references/surface-model.md +61 -0
  267. package/template/.agent/skills/prd-templates/references/vision-template.md +66 -0
  268. package/template/.agent/skills/prompt-engineer/README.md +659 -0
  269. package/template/.agent/skills/prompt-engineer/SKILL.md +249 -0
  270. package/template/.agent/skills/regex-patterns/SKILL.md +751 -0
  271. package/template/.agent/skills/resolve-ambiguity/SKILL.md +278 -0
  272. package/template/.agent/skills/rest-api-design/SKILL.md +478 -0
  273. package/template/.agent/skills/security-scanning-security-hardening/SKILL.md +231 -0
  274. package/template/.agent/skills/session-continuity/SKILL.md +730 -0
  275. package/template/.agent/skills/session-continuity/protocols/01-session-resumption.md +38 -0
  276. package/template/.agent/skills/session-continuity/protocols/02-progress-generation.md +85 -0
  277. package/template/.agent/skills/session-continuity/protocols/03-progress-update.md +70 -0
  278. package/template/.agent/skills/session-continuity/protocols/04-pattern-extraction.md +60 -0
  279. package/template/.agent/skills/session-continuity/protocols/05-session-close.md +37 -0
  280. package/template/.agent/skills/session-continuity/protocols/06-decision-analysis.md +84 -0
  281. package/template/.agent/skills/session-continuity/protocols/07-spec-pipeline-generation.md +48 -0
  282. package/template/.agent/skills/session-continuity/protocols/08-spec-pipeline-update.md +43 -0
  283. package/template/.agent/skills/session-continuity/protocols/09-parallel-claim.md +122 -0
  284. package/template/.agent/skills/session-continuity/protocols/10-placeholder-verification-gate.md +104 -0
  285. package/template/.agent/skills/session-continuity/protocols/ambiguity-gates.md +48 -0
  286. package/template/.agent/skills/skill-creator/LICENSE.txt +202 -0
  287. package/template/.agent/skills/skill-creator/README.md +270 -0
  288. package/template/.agent/skills/skill-creator/SKILL.md +590 -0
  289. package/template/.agent/skills/skill-creator/references/output-patterns.md +82 -0
  290. package/template/.agent/skills/skill-creator/references/workflows.md +28 -0
  291. package/template/.agent/skills/skill-creator/scripts/init_skill.py +303 -0
  292. package/template/.agent/skills/skill-creator/scripts/package_skill.py +110 -0
  293. package/template/.agent/skills/skill-creator/scripts/quick_validate.py +95 -0
  294. package/template/.agent/skills/spec-writing/SKILL.md +110 -0
  295. package/template/.agent/skills/systematic-debugging/CREATION-LOG.md +119 -0
  296. package/template/.agent/skills/systematic-debugging/SKILL.md +297 -0
  297. package/template/.agent/skills/systematic-debugging/condition-based-waiting-example.ts +158 -0
  298. package/template/.agent/skills/systematic-debugging/condition-based-waiting.md +115 -0
  299. package/template/.agent/skills/systematic-debugging/defense-in-depth.md +122 -0
  300. package/template/.agent/skills/systematic-debugging/find-polluter.sh +63 -0
  301. package/template/.agent/skills/systematic-debugging/root-cause-tracing.md +169 -0
  302. package/template/.agent/skills/systematic-debugging/test-academic.md +14 -0
  303. package/template/.agent/skills/systematic-debugging/test-pressure-1.md +58 -0
  304. package/template/.agent/skills/systematic-debugging/test-pressure-2.md +68 -0
  305. package/template/.agent/skills/systematic-debugging/test-pressure-3.md +69 -0
  306. package/template/.agent/skills/tdd-workflow/SKILL.md +409 -0
  307. package/template/.agent/skills/tech-stack-catalog/SKILL.md +49 -0
  308. package/template/.agent/skills/tech-stack-catalog/references/constraint-questions.md +21 -0
  309. package/template/.agent/skills/tech-stack-catalog/references/dev-tooling-decisions.md +37 -0
  310. package/template/.agent/skills/tech-stack-catalog/references/surface-decision-tables.md +69 -0
  311. package/template/.agent/skills/technical-writer/SKILL.md +242 -0
  312. package/template/.agent/skills/testing-strategist/SKILL.md +932 -0
  313. package/template/.agent/skills/verification-before-completion/SKILL.md +145 -0
  314. package/template/.agent/skills/workflow-automation/SKILL.md +73 -0
  315. package/template/.agent/workflows/audit-ambiguity-execute.md +165 -0
  316. package/template/.agent/workflows/audit-ambiguity-rubrics.md +83 -0
  317. package/template/.agent/workflows/audit-ambiguity.md +64 -0
  318. package/template/.agent/workflows/bootstrap-agents-fill.md +201 -0
  319. package/template/.agent/workflows/bootstrap-agents-provision.md +197 -0
  320. package/template/.agent/workflows/bootstrap-agents.md +66 -0
  321. package/template/.agent/workflows/create-prd-architecture.md +119 -0
  322. package/template/.agent/workflows/create-prd-compile.md +138 -0
  323. package/template/.agent/workflows/create-prd-design-system.md +135 -0
  324. package/template/.agent/workflows/create-prd-security.md +113 -0
  325. package/template/.agent/workflows/create-prd-stack.md +91 -0
  326. package/template/.agent/workflows/create-prd.md +168 -0
  327. package/template/.agent/workflows/decompose-architecture-structure.md +82 -0
  328. package/template/.agent/workflows/decompose-architecture-validate.md +119 -0
  329. package/template/.agent/workflows/decompose-architecture.md +111 -0
  330. package/template/.agent/workflows/evolve-contract.md +98 -0
  331. package/template/.agent/workflows/evolve-feature-cascade.md +140 -0
  332. package/template/.agent/workflows/evolve-feature-classify.md +116 -0
  333. package/template/.agent/workflows/evolve-feature.md +56 -0
  334. package/template/.agent/workflows/ideate-discover.md +144 -0
  335. package/template/.agent/workflows/ideate-extract.md +129 -0
  336. package/template/.agent/workflows/ideate-validate.md +117 -0
  337. package/template/.agent/workflows/ideate.md +113 -0
  338. package/template/.agent/workflows/implement-slice-setup.md +113 -0
  339. package/template/.agent/workflows/implement-slice-tdd.md +198 -0
  340. package/template/.agent/workflows/implement-slice.md +50 -0
  341. package/template/.agent/workflows/plan-phase.md +202 -0
  342. package/template/.agent/workflows/propagate-decision-apply.md +135 -0
  343. package/template/.agent/workflows/propagate-decision-scan.md +147 -0
  344. package/template/.agent/workflows/propagate-decision.md +56 -0
  345. package/template/.agent/workflows/remediate-pipeline-assess.md +138 -0
  346. package/template/.agent/workflows/remediate-pipeline-execute.md +135 -0
  347. package/template/.agent/workflows/remediate-pipeline.md +55 -0
  348. package/template/.agent/workflows/resolve-ambiguity.md +82 -0
  349. package/template/.agent/workflows/sync-kit.md +209 -0
  350. package/template/.agent/workflows/update-architecture-map.md +74 -0
  351. package/template/.agent/workflows/validate-phase.md +219 -0
  352. package/template/.agent/workflows/verify-infrastructure.md +207 -0
  353. package/template/.agent/workflows/write-architecture-spec-deepen.md +139 -0
  354. package/template/.agent/workflows/write-architecture-spec-design.md +202 -0
  355. package/template/.agent/workflows/write-architecture-spec.md +63 -0
  356. package/template/.agent/workflows/write-be-spec-classify.md +165 -0
  357. package/template/.agent/workflows/write-be-spec-write.md +98 -0
  358. package/template/.agent/workflows/write-be-spec.md +76 -0
  359. package/template/.agent/workflows/write-fe-spec-classify.md +170 -0
  360. package/template/.agent/workflows/write-fe-spec-write.md +94 -0
  361. package/template/.agent/workflows/write-fe-spec.md +71 -0
  362. package/template/AGENTS.md +176 -0
  363. package/template/GEMINI.md +177 -0
  364. package/template/docs/README.md +187 -0
  365. package/template/docs/audits/.gitkeep +0 -0
  366. package/template/docs/audits/README.md +10 -0
  367. package/template/docs/plans/.gitkeep +0 -0
  368. package/template/docs/plans/README.md +21 -0
  369. package/template/docs/plans/be/.gitkeep +0 -0
  370. package/template/docs/plans/be/README.md +11 -0
  371. package/template/docs/plans/fe/.gitkeep +0 -0
  372. package/template/docs/plans/fe/README.md +11 -0
  373. package/template/docs/plans/ia/.gitkeep +0 -0
  374. package/template/docs/plans/ia/README.md +17 -0
  375. package/template/docs/plans/ia/deep-dives/.gitkeep +0 -0
  376. package/template/docs/plans/ia/deep-dives/README.md +5 -0
  377. package/template/docs/plans/phases/.gitkeep +0 -0
  378. package/template/docs/plans/phases/README.md +11 -0
@@ -0,0 +1,703 @@
1
+ ---
2
+ name: shadcn-ui
3
+ description: "Comprehensive shadcn/ui guide covering component installation, customization, theming, forms, data tables, composition patterns, and accessibility. Use when building UIs with shadcn/ui, customizing components, implementing forms with react-hook-form + zod, or building data tables."
4
+ version: 1.0.0
5
+ ---
6
+
7
+ # shadcn/ui
8
+
9
+ ## 1. Philosophy
10
+
11
+ shadcn/ui is **not a component library**. It is a collection of reusable components that you copy into your project and own. You can modify them freely. There is no `node_modules` dependency to update -- the code is yours.
12
+
13
+ **Key implications**:
14
+ - Components live in your codebase (typically `src/components/ui/`)
15
+ - You can and should customize them to match your design system
16
+ - Updates are opt-in: re-run the CLI to pull new versions, then merge
17
+ - No version lock-in, no breaking upgrades forced on you
18
+
19
+ ---
20
+
21
+ ## 2. Installation and CLI
22
+
23
+ ### Initial Setup
24
+
25
+ ```bash
26
+ # Initialize shadcn/ui in your project (interactive)
27
+ npx shadcn@latest init
28
+
29
+ # Non-interactive with defaults
30
+ npx shadcn@latest init -d
31
+ ```
32
+
33
+ The init command:
34
+ 1. Creates `components.json` (configuration)
35
+ 2. Sets up CSS variables for theming
36
+ 3. Configures `cn()` utility (`lib/utils.ts`)
37
+ 4. Sets up Tailwind CSS configuration
38
+
39
+ ### Adding Components
40
+
41
+ ```bash
42
+ # Add a single component
43
+ npx shadcn@latest add button
44
+
45
+ # Add multiple components at once
46
+ npx shadcn@latest add button card dialog input label
47
+
48
+ # Add all components
49
+ npx shadcn@latest add --all
50
+
51
+ # View available components
52
+ npx shadcn@latest add --list
53
+ ```
54
+
55
+ ### Configuration (components.json)
56
+
57
+ ```json
58
+ {
59
+ "$schema": "https://ui.shadcn.com/schema.json",
60
+ "style": "new-york",
61
+ "rsc": true,
62
+ "tsx": true,
63
+ "tailwind": {
64
+ "config": "tailwind.config.ts",
65
+ "css": "src/app/globals.css",
66
+ "baseColor": "zinc",
67
+ "cssVariables": true
68
+ },
69
+ "aliases": {
70
+ "components": "@/components",
71
+ "utils": "@/lib/utils",
72
+ "ui": "@/components/ui",
73
+ "lib": "@/lib",
74
+ "hooks": "@/hooks"
75
+ }
76
+ }
77
+ ```
78
+
79
+ ---
80
+
81
+ ## 3. Theming with CSS Variables
82
+
83
+ ### Theme Structure
84
+
85
+ ```css
86
+ /* globals.css */
87
+ @layer base {
88
+ :root {
89
+ --background: 0 0% 100%;
90
+ --foreground: 240 10% 3.9%;
91
+ --card: 0 0% 100%;
92
+ --card-foreground: 240 10% 3.9%;
93
+ --popover: 0 0% 100%;
94
+ --popover-foreground: 240 10% 3.9%;
95
+ --primary: 240 5.9% 10%;
96
+ --primary-foreground: 0 0% 98%;
97
+ --secondary: 240 4.8% 95.9%;
98
+ --secondary-foreground: 240 5.9% 10%;
99
+ --muted: 240 4.8% 95.9%;
100
+ --muted-foreground: 240 3.8% 46.1%;
101
+ --accent: 240 4.8% 95.9%;
102
+ --accent-foreground: 240 5.9% 10%;
103
+ --destructive: 0 84.2% 60.2%;
104
+ --destructive-foreground: 0 0% 98%;
105
+ --border: 240 5.9% 90%;
106
+ --input: 240 5.9% 90%;
107
+ --ring: 240 5.9% 10%;
108
+ --radius: 0.5rem;
109
+ }
110
+
111
+ .dark {
112
+ --background: 240 10% 3.9%;
113
+ --foreground: 0 0% 98%;
114
+ --primary: 0 0% 98%;
115
+ --primary-foreground: 240 5.9% 10%;
116
+ /* ... override all variables for dark mode */
117
+ }
118
+ }
119
+ ```
120
+
121
+ ### Custom Brand Colors
122
+
123
+ ```css
124
+ :root {
125
+ /* Override primary to your brand color */
126
+ --primary: 221 83% 53%; /* Blue */
127
+ --primary-foreground: 0 0% 100%;
128
+
129
+ /* Add custom semantic colors */
130
+ --success: 142 76% 36%;
131
+ --success-foreground: 0 0% 100%;
132
+ --warning: 38 92% 50%;
133
+ --warning-foreground: 0 0% 100%;
134
+ }
135
+ ```
136
+
137
+ ### Dark Mode Implementation
138
+
139
+ ```tsx
140
+ // Using next-themes
141
+ // app/providers.tsx
142
+ 'use client';
143
+ import { ThemeProvider } from 'next-themes';
144
+
145
+ export function Providers({ children }: { children: React.ReactNode }) {
146
+ return (
147
+ <ThemeProvider attribute="class" defaultTheme="system" enableSystem disableTransitionOnChange>
148
+ {children}
149
+ </ThemeProvider>
150
+ );
151
+ }
152
+
153
+ // Theme toggle component
154
+ 'use client';
155
+ import { useTheme } from 'next-themes';
156
+ import { Button } from '@/components/ui/button';
157
+ import { Moon, Sun } from 'lucide-react';
158
+
159
+ export function ThemeToggle() {
160
+ const { setTheme, theme } = useTheme();
161
+
162
+ return (
163
+ <Button
164
+ variant="ghost"
165
+ size="icon"
166
+ onClick={() => setTheme(theme === 'dark' ? 'light' : 'dark')}
167
+ >
168
+ <Sun className="h-5 w-5 rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0" />
169
+ <Moon className="absolute h-5 w-5 rotate-90 scale-0 transition-all dark:rotate-0 dark:scale-100" />
170
+ <span className="sr-only">Toggle theme</span>
171
+ </Button>
172
+ );
173
+ }
174
+ ```
175
+
176
+ ---
177
+
178
+ ## 4. Component Composition Patterns
179
+
180
+ ### Extending Components with Variants
181
+
182
+ ```tsx
183
+ // components/ui/button.tsx -- the base component (installed by CLI)
184
+ // Add custom variants by editing the cva() call directly
185
+
186
+ import { cva, type VariantProps } from 'class-variance-authority';
187
+
188
+ const buttonVariants = cva(
189
+ 'inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50',
190
+ {
191
+ variants: {
192
+ variant: {
193
+ default: 'bg-primary text-primary-foreground hover:bg-primary/90',
194
+ destructive: 'bg-destructive text-destructive-foreground hover:bg-destructive/90',
195
+ outline: 'border border-input bg-background hover:bg-accent hover:text-accent-foreground',
196
+ secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/80',
197
+ ghost: 'hover:bg-accent hover:text-accent-foreground',
198
+ link: 'text-primary underline-offset-4 hover:underline',
199
+ // Add your own variants:
200
+ success: 'bg-success text-success-foreground hover:bg-success/90',
201
+ warning: 'bg-warning text-warning-foreground hover:bg-warning/90',
202
+ },
203
+ size: {
204
+ default: 'h-10 px-4 py-2',
205
+ sm: 'h-9 rounded-md px-3',
206
+ lg: 'h-11 rounded-md px-8',
207
+ icon: 'h-10 w-10',
208
+ // Custom size:
209
+ xs: 'h-7 rounded px-2 text-xs',
210
+ },
211
+ },
212
+ defaultVariants: {
213
+ variant: 'default',
214
+ size: 'default',
215
+ },
216
+ }
217
+ );
218
+ ```
219
+
220
+ ### Composing Higher-Level Components
221
+
222
+ Build domain-specific components from shadcn/ui primitives.
223
+
224
+ ```tsx
225
+ // components/confirm-dialog.tsx
226
+ import {
227
+ AlertDialog,
228
+ AlertDialogAction,
229
+ AlertDialogCancel,
230
+ AlertDialogContent,
231
+ AlertDialogDescription,
232
+ AlertDialogFooter,
233
+ AlertDialogHeader,
234
+ AlertDialogTitle,
235
+ AlertDialogTrigger,
236
+ } from '@/components/ui/alert-dialog';
237
+
238
+ interface ConfirmDialogProps {
239
+ trigger: React.ReactNode;
240
+ title: string;
241
+ description: string;
242
+ confirmLabel?: string;
243
+ cancelLabel?: string;
244
+ variant?: 'default' | 'destructive';
245
+ onConfirm: () => void | Promise<void>;
246
+ }
247
+
248
+ export function ConfirmDialog({
249
+ trigger,
250
+ title,
251
+ description,
252
+ confirmLabel = 'Confirm',
253
+ cancelLabel = 'Cancel',
254
+ variant = 'default',
255
+ onConfirm,
256
+ }: ConfirmDialogProps) {
257
+ return (
258
+ <AlertDialog>
259
+ <AlertDialogTrigger asChild>{trigger}</AlertDialogTrigger>
260
+ <AlertDialogContent>
261
+ <AlertDialogHeader>
262
+ <AlertDialogTitle>{title}</AlertDialogTitle>
263
+ <AlertDialogDescription>{description}</AlertDialogDescription>
264
+ </AlertDialogHeader>
265
+ <AlertDialogFooter>
266
+ <AlertDialogCancel>{cancelLabel}</AlertDialogCancel>
267
+ <AlertDialogAction
268
+ onClick={onConfirm}
269
+ className={variant === 'destructive' ? 'bg-destructive text-destructive-foreground hover:bg-destructive/90' : ''}
270
+ >
271
+ {confirmLabel}
272
+ </AlertDialogAction>
273
+ </AlertDialogFooter>
274
+ </AlertDialogContent>
275
+ </AlertDialog>
276
+ );
277
+ }
278
+ ```
279
+
280
+ ---
281
+
282
+ ## 5. Forms with react-hook-form + Zod
283
+
284
+ This is the recommended pattern for forms in shadcn/ui.
285
+
286
+ ```tsx
287
+ // Install dependencies: react-hook-form, @hookform/resolvers, zod
288
+
289
+ // 1. Define schema
290
+ import { z } from 'zod';
291
+
292
+ const profileSchema = z.object({
293
+ name: z.string().min(2, 'Name must be at least 2 characters'),
294
+ email: z.string().email('Invalid email address'),
295
+ bio: z.string().max(500, 'Bio must be 500 characters or less').optional(),
296
+ role: z.enum(['user', 'admin', 'moderator'], { required_error: 'Please select a role' }),
297
+ notifications: z.boolean().default(false),
298
+ });
299
+
300
+ type ProfileFormValues = z.infer<typeof profileSchema>;
301
+
302
+ // 2. Build the form
303
+ 'use client';
304
+ import { useForm } from 'react-hook-form';
305
+ import { zodResolver } from '@hookform/resolvers/zod';
306
+ import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage } from '@/components/ui/form';
307
+ import { Input } from '@/components/ui/input';
308
+ import { Textarea } from '@/components/ui/textarea';
309
+ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select';
310
+ import { Switch } from '@/components/ui/switch';
311
+ import { Button } from '@/components/ui/button';
312
+
313
+ export function ProfileForm() {
314
+ const form = useForm<ProfileFormValues>({
315
+ resolver: zodResolver(profileSchema),
316
+ defaultValues: {
317
+ name: '',
318
+ email: '',
319
+ bio: '',
320
+ notifications: false,
321
+ },
322
+ });
323
+
324
+ async function onSubmit(values: ProfileFormValues) {
325
+ // values is fully typed and validated
326
+ await updateProfile(values);
327
+ }
328
+
329
+ return (
330
+ <Form {...form}>
331
+ <form onSubmit={form.handleSubmit(onSubmit)} className="space-y-6">
332
+ <FormField
333
+ control={form.control}
334
+ name="name"
335
+ render={({ field }) => (
336
+ <FormItem>
337
+ <FormLabel>Name</FormLabel>
338
+ <FormControl>
339
+ <Input placeholder="Your name" {...field} />
340
+ </FormControl>
341
+ <FormMessage />
342
+ </FormItem>
343
+ )}
344
+ />
345
+
346
+ <FormField
347
+ control={form.control}
348
+ name="email"
349
+ render={({ field }) => (
350
+ <FormItem>
351
+ <FormLabel>Email</FormLabel>
352
+ <FormControl>
353
+ <Input type="email" placeholder="email@example.com" {...field} />
354
+ </FormControl>
355
+ <FormMessage />
356
+ </FormItem>
357
+ )}
358
+ />
359
+
360
+ <FormField
361
+ control={form.control}
362
+ name="bio"
363
+ render={({ field }) => (
364
+ <FormItem>
365
+ <FormLabel>Bio</FormLabel>
366
+ <FormControl>
367
+ <Textarea placeholder="Tell us about yourself" className="resize-none" {...field} />
368
+ </FormControl>
369
+ <FormDescription>Max 500 characters.</FormDescription>
370
+ <FormMessage />
371
+ </FormItem>
372
+ )}
373
+ />
374
+
375
+ <FormField
376
+ control={form.control}
377
+ name="role"
378
+ render={({ field }) => (
379
+ <FormItem>
380
+ <FormLabel>Role</FormLabel>
381
+ <Select onValueChange={field.onChange} defaultValue={field.value}>
382
+ <FormControl>
383
+ <SelectTrigger>
384
+ <SelectValue placeholder="Select a role" />
385
+ </SelectTrigger>
386
+ </FormControl>
387
+ <SelectContent>
388
+ <SelectItem value="user">User</SelectItem>
389
+ <SelectItem value="admin">Admin</SelectItem>
390
+ <SelectItem value="moderator">Moderator</SelectItem>
391
+ </SelectContent>
392
+ </Select>
393
+ <FormMessage />
394
+ </FormItem>
395
+ )}
396
+ />
397
+
398
+ <FormField
399
+ control={form.control}
400
+ name="notifications"
401
+ render={({ field }) => (
402
+ <FormItem className="flex items-center justify-between rounded-lg border p-4">
403
+ <div className="space-y-0.5">
404
+ <FormLabel className="text-base">Notifications</FormLabel>
405
+ <FormDescription>Receive email notifications.</FormDescription>
406
+ </div>
407
+ <FormControl>
408
+ <Switch checked={field.value} onCheckedChange={field.onChange} />
409
+ </FormControl>
410
+ </FormItem>
411
+ )}
412
+ />
413
+
414
+ <Button type="submit" disabled={form.formState.isSubmitting}>
415
+ {form.formState.isSubmitting ? 'Saving...' : 'Save'}
416
+ </Button>
417
+ </form>
418
+ </Form>
419
+ );
420
+ }
421
+ ```
422
+
423
+ ---
424
+
425
+ ## 6. Data Table with TanStack Table
426
+
427
+ ```tsx
428
+ // 1. Define columns
429
+ 'use client';
430
+ import { type ColumnDef } from '@tanstack/react-table';
431
+ import { Badge } from '@/components/ui/badge';
432
+ import { Button } from '@/components/ui/button';
433
+ import { ArrowUpDown, MoreHorizontal } from 'lucide-react';
434
+ import {
435
+ DropdownMenu, DropdownMenuContent, DropdownMenuItem,
436
+ DropdownMenuTrigger,
437
+ } from '@/components/ui/dropdown-menu';
438
+
439
+ type User = { id: string; name: string; email: string; role: string; active: boolean };
440
+
441
+ export const columns: ColumnDef<User>[] = [
442
+ {
443
+ accessorKey: 'name',
444
+ header: ({ column }) => (
445
+ <Button variant="ghost" onClick={() => column.toggleSorting(column.getIsSorted() === 'asc')}>
446
+ Name <ArrowUpDown className="ml-2 h-4 w-4" />
447
+ </Button>
448
+ ),
449
+ },
450
+ {
451
+ accessorKey: 'email',
452
+ header: 'Email',
453
+ },
454
+ {
455
+ accessorKey: 'role',
456
+ header: 'Role',
457
+ cell: ({ row }) => <Badge variant="outline">{row.getValue('role')}</Badge>,
458
+ },
459
+ {
460
+ accessorKey: 'active',
461
+ header: 'Status',
462
+ cell: ({ row }) => (
463
+ <Badge variant={row.getValue('active') ? 'default' : 'secondary'}>
464
+ {row.getValue('active') ? 'Active' : 'Inactive'}
465
+ </Badge>
466
+ ),
467
+ },
468
+ {
469
+ id: 'actions',
470
+ cell: ({ row }) => (
471
+ <DropdownMenu>
472
+ <DropdownMenuTrigger asChild>
473
+ <Button variant="ghost" className="h-8 w-8 p-0">
474
+ <MoreHorizontal className="h-4 w-4" />
475
+ </Button>
476
+ </DropdownMenuTrigger>
477
+ <DropdownMenuContent align="end">
478
+ <DropdownMenuItem onClick={() => navigator.clipboard.writeText(row.original.id)}>
479
+ Copy ID
480
+ </DropdownMenuItem>
481
+ <DropdownMenuItem>Edit</DropdownMenuItem>
482
+ <DropdownMenuItem className="text-destructive">Delete</DropdownMenuItem>
483
+ </DropdownMenuContent>
484
+ </DropdownMenu>
485
+ ),
486
+ },
487
+ ];
488
+
489
+ // 2. Use in a page (server component fetches data, client component renders table)
490
+ // app/users/page.tsx
491
+ import { DataTable } from '@/components/ui/data-table';
492
+ import { columns } from './columns';
493
+
494
+ export default async function UsersPage() {
495
+ const users = await db.query.users.findMany();
496
+ return <DataTable columns={columns} data={users} />;
497
+ }
498
+ ```
499
+
500
+ ---
501
+
502
+ ## 7. Toast / Sonner Notifications
503
+
504
+ ```tsx
505
+ // Setup: add <Toaster /> to your root layout
506
+ import { Toaster } from '@/components/ui/sonner';
507
+
508
+ export default function RootLayout({ children }: { children: React.ReactNode }) {
509
+ return (
510
+ <html lang="en">
511
+ <body>
512
+ {children}
513
+ <Toaster />
514
+ </body>
515
+ </html>
516
+ );
517
+ }
518
+
519
+ // Usage anywhere in client components
520
+ import { toast } from 'sonner';
521
+
522
+ function handleSave() {
523
+ toast.promise(saveData(), {
524
+ loading: 'Saving...',
525
+ success: 'Changes saved successfully',
526
+ error: 'Failed to save changes',
527
+ });
528
+ }
529
+
530
+ // Variants
531
+ toast('Default notification');
532
+ toast.success('Operation completed');
533
+ toast.error('Something went wrong');
534
+ toast.warning('Check your input');
535
+ toast.info('New update available');
536
+
537
+ // With action
538
+ toast('File deleted', {
539
+ action: { label: 'Undo', onClick: () => restoreFile() },
540
+ });
541
+ ```
542
+
543
+ ---
544
+
545
+ ## 8. Common Patterns
546
+
547
+ ### Command Palette (cmdk)
548
+
549
+ ```tsx
550
+ import { CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList } from '@/components/ui/command';
551
+
552
+ export function CommandMenu() {
553
+ const [open, setOpen] = useState(false);
554
+
555
+ useEffect(() => {
556
+ const down = (e: KeyboardEvent) => {
557
+ if (e.key === 'k' && (e.metaKey || e.ctrlKey)) {
558
+ e.preventDefault();
559
+ setOpen((prev) => !prev);
560
+ }
561
+ };
562
+ document.addEventListener('keydown', down);
563
+ return () => document.removeEventListener('keydown', down);
564
+ }, []);
565
+
566
+ return (
567
+ <CommandDialog open={open} onOpenChange={setOpen}>
568
+ <CommandInput placeholder="Type a command or search..." />
569
+ <CommandList>
570
+ <CommandEmpty>No results found.</CommandEmpty>
571
+ <CommandGroup heading="Navigation">
572
+ <CommandItem onSelect={() => router.push('/dashboard')}>Dashboard</CommandItem>
573
+ <CommandItem onSelect={() => router.push('/settings')}>Settings</CommandItem>
574
+ </CommandGroup>
575
+ <CommandGroup heading="Actions">
576
+ <CommandItem onSelect={() => setTheme('dark')}>Dark Mode</CommandItem>
577
+ <CommandItem onSelect={() => setTheme('light')}>Light Mode</CommandItem>
578
+ </CommandGroup>
579
+ </CommandList>
580
+ </CommandDialog>
581
+ );
582
+ }
583
+ ```
584
+
585
+ ### Responsive Sheet/Dialog
586
+
587
+ Use `Dialog` on desktop, `Drawer` on mobile.
588
+
589
+ ```tsx
590
+ import { useMediaQuery } from '@/hooks/use-media-query';
591
+ import { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui/dialog';
592
+ import { Drawer, DrawerContent, DrawerHeader, DrawerTitle } from '@/components/ui/drawer';
593
+
594
+ export function ResponsiveModal({ open, onOpenChange, title, children }: Props) {
595
+ const isDesktop = useMediaQuery('(min-width: 768px)');
596
+
597
+ if (isDesktop) {
598
+ return (
599
+ <Dialog open={open} onOpenChange={onOpenChange}>
600
+ <DialogContent>
601
+ <DialogHeader><DialogTitle>{title}</DialogTitle></DialogHeader>
602
+ {children}
603
+ </DialogContent>
604
+ </Dialog>
605
+ );
606
+ }
607
+
608
+ return (
609
+ <Drawer open={open} onOpenChange={onOpenChange}>
610
+ <DrawerContent>
611
+ <DrawerHeader><DrawerTitle>{title}</DrawerTitle></DrawerHeader>
612
+ <div className="p-4">{children}</div>
613
+ </DrawerContent>
614
+ </Drawer>
615
+ );
616
+ }
617
+ ```
618
+
619
+ ---
620
+
621
+ ## 9. Accessibility
622
+
623
+ shadcn/ui components are built on Radix UI primitives, which provide:
624
+
625
+ - Full keyboard navigation (Tab, Arrow keys, Enter, Escape)
626
+ - ARIA attributes automatically applied
627
+ - Focus management and focus trapping in modals
628
+ - Screen reader announcements
629
+
630
+ **Your responsibilities**:
631
+ - Always provide text content or `sr-only` labels for icon-only buttons
632
+ - Use `FormLabel` with form controls (linked via `htmlFor`)
633
+ - Set meaningful `aria-label` on `DialogTitle` and `AlertDialogTitle`
634
+ - Test with keyboard navigation (no mouse)
635
+ - Verify color contrast meets WCAG 2.1 AA (4.5:1 for text)
636
+
637
+ ```tsx
638
+ // Icon-only button: always include sr-only text
639
+ <Button variant="ghost" size="icon">
640
+ <Trash2 className="h-4 w-4" />
641
+ <span className="sr-only">Delete item</span>
642
+ </Button>
643
+
644
+ // Visually hidden dialog title (when using a custom header)
645
+ <DialogHeader>
646
+ <DialogTitle className="sr-only">Edit Profile</DialogTitle>
647
+ <div>Your custom header content</div>
648
+ </DialogHeader>
649
+ ```
650
+
651
+ ---
652
+
653
+ ## 10. Extending Without Breaking
654
+
655
+ When you customize a shadcn/ui component, follow these patterns to keep future CLI updates mergeable:
656
+
657
+ ```tsx
658
+ // GOOD: Add variants to the existing cva() config
659
+ // The CLI overwrites the file, but your additions are easy to re-apply
660
+
661
+ // GOOD: Wrap the base component in a domain-specific component
662
+ // components/app-button.tsx
663
+ import { Button, type ButtonProps } from '@/components/ui/button';
664
+ import { Loader2 } from 'lucide-react';
665
+
666
+ interface AppButtonProps extends ButtonProps {
667
+ loading?: boolean;
668
+ }
669
+
670
+ export function AppButton({ loading, children, disabled, ...props }: AppButtonProps) {
671
+ return (
672
+ <Button disabled={disabled || loading} {...props}>
673
+ {loading && <Loader2 className="mr-2 h-4 w-4 animate-spin" />}
674
+ {children}
675
+ </Button>
676
+ );
677
+ }
678
+
679
+ // BAD: Modifying the base component in ways that are hard to merge
680
+ // If the CLI re-generates button.tsx, your changes are lost
681
+ ```
682
+
683
+ ---
684
+
685
+ ## 11. Critical Reminders
686
+
687
+ ### ALWAYS
688
+
689
+ - Use `cn()` for conditional class merging (never raw string concatenation)
690
+ - Provide `sr-only` text for icon-only buttons
691
+ - Use `FormField` + `FormItem` + `FormLabel` + `FormControl` + `FormMessage` for forms
692
+ - Set `asChild` on triggers when wrapping custom elements
693
+ - Test keyboard navigation on dialogs, dropdowns, and menus
694
+ - Use CSS variables for theming (not hardcoded colors)
695
+
696
+ ### NEVER
697
+
698
+ - Install shadcn/ui as an npm package (it is a CLI copy tool, not a dependency)
699
+ - Override Radix UI accessibility attributes
700
+ - Remove `role`, `aria-*`, or `data-state` attributes from components
701
+ - Use `z-index` wars -- shadcn/ui manages stacking contexts via Radix portals
702
+ - Hardcode colors instead of using semantic CSS variables (`--primary`, `--destructive`, etc.)
703
+ - Skip the `<Toaster />` in the root layout when using toast notifications