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,923 @@
1
+ ---
2
+ name: storybook
3
+ description: "Comprehensive Storybook component development guide covering Component Story Format (CSF3), args and argTypes, decorators, play functions for interaction testing, visual regression testing with Chromatic, auto-docs, MDX documentation, addons (a11y, viewport, controls, actions), composition, design systems, testing with @storybook/test, portable stories, MSW integration, CI pipeline, and performance optimization. Use when building component libraries, design systems, or interactive documentation."
4
+ version: 1.0.0
5
+ ---
6
+
7
+ # Storybook Component Development
8
+
9
+ ## 1. Component Story Format (CSF3)
10
+
11
+ ### Basic Story
12
+
13
+ ```typescript
14
+ // Button.stories.tsx
15
+ import type { Meta, StoryObj } from '@storybook/react';
16
+ import { Button } from './Button';
17
+
18
+ const meta = {
19
+ title: 'Components/Button',
20
+ component: Button,
21
+ tags: ['autodocs'],
22
+ parameters: {
23
+ layout: 'centered',
24
+ },
25
+ } satisfies Meta<typeof Button>;
26
+
27
+ export default meta;
28
+ type Story = StoryObj<typeof meta>;
29
+
30
+ export const Primary: Story = {
31
+ args: {
32
+ variant: 'primary',
33
+ children: 'Click me',
34
+ },
35
+ };
36
+
37
+ export const Secondary: Story = {
38
+ args: {
39
+ variant: 'secondary',
40
+ children: 'Secondary action',
41
+ },
42
+ };
43
+
44
+ export const Disabled: Story = {
45
+ args: {
46
+ variant: 'primary',
47
+ children: 'Disabled',
48
+ disabled: true,
49
+ },
50
+ };
51
+
52
+ export const Loading: Story = {
53
+ args: {
54
+ variant: 'primary',
55
+ children: 'Submitting...',
56
+ loading: true,
57
+ },
58
+ };
59
+ ```
60
+
61
+ ### Args and ArgTypes
62
+
63
+ ```typescript
64
+ const meta = {
65
+ title: 'Components/Button',
66
+ component: Button,
67
+ argTypes: {
68
+ // Control type override
69
+ variant: {
70
+ control: 'select',
71
+ options: ['primary', 'secondary', 'danger', 'ghost'],
72
+ description: 'Visual style of the button',
73
+ table: {
74
+ type: { summary: 'string' },
75
+ defaultValue: { summary: 'primary' },
76
+ },
77
+ },
78
+ size: {
79
+ control: 'radio',
80
+ options: ['sm', 'md', 'lg'],
81
+ },
82
+ // Color picker
83
+ backgroundColor: {
84
+ control: 'color',
85
+ },
86
+ // Range slider
87
+ borderRadius: {
88
+ control: { type: 'range', min: 0, max: 20, step: 1 },
89
+ },
90
+ // Disable a control
91
+ children: {
92
+ control: false,
93
+ },
94
+ // Action logging
95
+ onClick: {
96
+ action: 'clicked',
97
+ description: 'Callback when button is clicked',
98
+ },
99
+ },
100
+ args: {
101
+ // Default args for all stories in this file
102
+ variant: 'primary',
103
+ size: 'md',
104
+ children: 'Button',
105
+ },
106
+ } satisfies Meta<typeof Button>;
107
+ ```
108
+
109
+ ---
110
+
111
+ ## 2. Decorators
112
+
113
+ ### Layout and Provider Decorators
114
+
115
+ ```typescript
116
+ // .storybook/preview.tsx
117
+ import type { Preview } from '@storybook/react';
118
+ import { ThemeProvider } from '../src/theme';
119
+ import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
120
+ import '../src/styles/globals.css';
121
+
122
+ const queryClient = new QueryClient({
123
+ defaultOptions: {
124
+ queries: { retry: false, gcTime: 0 },
125
+ },
126
+ });
127
+
128
+ const preview: Preview = {
129
+ decorators: [
130
+ // Theme provider wrapper
131
+ (Story) => (
132
+ <ThemeProvider>
133
+ <Story />
134
+ </ThemeProvider>
135
+ ),
136
+ // React Query provider
137
+ (Story) => (
138
+ <QueryClientProvider client={queryClient}>
139
+ <Story />
140
+ </QueryClientProvider>
141
+ ),
142
+ // Layout wrapper
143
+ (Story) => (
144
+ <div style={{ padding: '2rem', maxWidth: '800px', margin: '0 auto' }}>
145
+ <Story />
146
+ </div>
147
+ ),
148
+ ],
149
+ parameters: {
150
+ controls: {
151
+ matchers: {
152
+ color: /(background|color)$/i,
153
+ date: /Date$/i,
154
+ },
155
+ },
156
+ },
157
+ };
158
+
159
+ export default preview;
160
+ ```
161
+
162
+ ### Per-Story Decorators
163
+
164
+ ```typescript
165
+ export const InSidebar: Story = {
166
+ decorators: [
167
+ (Story) => (
168
+ <div style={{ width: '250px', background: '#f5f5f5', padding: '1rem' }}>
169
+ <Story />
170
+ </div>
171
+ ),
172
+ ],
173
+ args: {
174
+ children: 'Sidebar Item',
175
+ },
176
+ };
177
+
178
+ // Router decorator for components that use routing
179
+ export const WithRouter: Story = {
180
+ decorators: [
181
+ (Story) => (
182
+ <MemoryRouter initialEntries={['/profile']}>
183
+ <Routes>
184
+ <Route path="/profile" element={<Story />} />
185
+ </Routes>
186
+ </MemoryRouter>
187
+ ),
188
+ ],
189
+ };
190
+ ```
191
+
192
+ ---
193
+
194
+ ## 3. Play Functions (Interaction Testing)
195
+
196
+ ```typescript
197
+ import type { Meta, StoryObj } from '@storybook/react';
198
+ import { expect, fn, userEvent, within, waitFor } from '@storybook/test';
199
+ import { LoginForm } from './LoginForm';
200
+
201
+ const meta = {
202
+ title: 'Forms/LoginForm',
203
+ component: LoginForm,
204
+ args: {
205
+ onSubmit: fn(),
206
+ },
207
+ } satisfies Meta<typeof LoginForm>;
208
+
209
+ export default meta;
210
+ type Story = StoryObj<typeof meta>;
211
+
212
+ export const FilledForm: Story = {
213
+ play: async ({ canvasElement, args }) => {
214
+ const canvas = within(canvasElement);
215
+ const user = userEvent.setup();
216
+
217
+ // Type into form fields
218
+ await user.type(canvas.getByLabelText('Email'), 'user@example.com');
219
+ await user.type(canvas.getByLabelText('Password'), 'password123');
220
+
221
+ // Click submit
222
+ await user.click(canvas.getByRole('button', { name: 'Sign in' }));
223
+
224
+ // Assert the callback was called
225
+ await waitFor(() => {
226
+ expect(args.onSubmit).toHaveBeenCalledWith({
227
+ email: 'user@example.com',
228
+ password: 'password123',
229
+ });
230
+ });
231
+ },
232
+ };
233
+
234
+ export const ValidationErrors: Story = {
235
+ play: async ({ canvasElement }) => {
236
+ const canvas = within(canvasElement);
237
+ const user = userEvent.setup();
238
+
239
+ // Submit empty form
240
+ await user.click(canvas.getByRole('button', { name: 'Sign in' }));
241
+
242
+ // Assert validation errors appear
243
+ await waitFor(() => {
244
+ expect(canvas.getByText('Email is required')).toBeInTheDocument();
245
+ expect(canvas.getByText('Password is required')).toBeInTheDocument();
246
+ });
247
+ },
248
+ };
249
+
250
+ export const PasswordToggle: Story = {
251
+ play: async ({ canvasElement }) => {
252
+ const canvas = within(canvasElement);
253
+ const user = userEvent.setup();
254
+
255
+ const passwordInput = canvas.getByLabelText('Password');
256
+ await user.type(passwordInput, 'secret');
257
+
258
+ // Password should be masked
259
+ expect(passwordInput).toHaveAttribute('type', 'password');
260
+
261
+ // Toggle visibility
262
+ await user.click(canvas.getByRole('button', { name: 'Show password' }));
263
+ expect(passwordInput).toHaveAttribute('type', 'text');
264
+ },
265
+ };
266
+ ```
267
+
268
+ ### Composing Play Functions
269
+
270
+ ```typescript
271
+ export const FullFlow: Story = {
272
+ play: async (context) => {
273
+ // Run the FilledForm play function first
274
+ await FilledForm.play!(context);
275
+
276
+ const canvas = within(context.canvasElement);
277
+
278
+ // Then continue with additional interactions
279
+ await waitFor(() => {
280
+ expect(canvas.getByText('Welcome back!')).toBeInTheDocument();
281
+ });
282
+ },
283
+ };
284
+ ```
285
+
286
+ ---
287
+
288
+ ## 4. Visual Regression Testing (Chromatic)
289
+
290
+ ### Setup
291
+
292
+ ```bash
293
+ # Install Chromatic
294
+ npm install --save-dev chromatic
295
+
296
+ # Run visual tests
297
+ npx chromatic --project-token=YOUR_TOKEN
298
+
299
+ # In CI (GitHub Actions)
300
+ # .github/workflows/chromatic.yml
301
+ ```
302
+
303
+ ```yaml
304
+ # .github/workflows/chromatic.yml
305
+ name: Chromatic
306
+ on: push
307
+
308
+ jobs:
309
+ chromatic:
310
+ runs-on: ubuntu-latest
311
+ steps:
312
+ - uses: actions/checkout@v4
313
+ with:
314
+ fetch-depth: 0
315
+ - uses: actions/setup-node@v4
316
+ with:
317
+ node-version: 20
318
+ - run: npm ci
319
+ - uses: chromaui/action@latest
320
+ with:
321
+ projectToken: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
322
+ exitZeroOnChanges: true
323
+ ```
324
+
325
+ ### Controlling Snapshots
326
+
327
+ ```typescript
328
+ export const AnimatedComponent: Story = {
329
+ parameters: {
330
+ // Disable Chromatic snapshot for animated stories
331
+ chromatic: { disableSnapshot: true },
332
+ },
333
+ };
334
+
335
+ export const ResponsiveLayout: Story = {
336
+ parameters: {
337
+ // Capture at multiple viewport widths
338
+ chromatic: {
339
+ viewports: [320, 768, 1200],
340
+ },
341
+ },
342
+ };
343
+
344
+ export const DarkMode: Story = {
345
+ parameters: {
346
+ chromatic: {
347
+ // Capture both themes
348
+ modes: {
349
+ light: { theme: 'light' },
350
+ dark: { theme: 'dark' },
351
+ },
352
+ },
353
+ },
354
+ };
355
+
356
+ // Delay snapshot until animations complete
357
+ export const WithAnimation: Story = {
358
+ parameters: {
359
+ chromatic: { delay: 500 },
360
+ },
361
+ };
362
+ ```
363
+
364
+ ---
365
+
366
+ ## 5. Auto-Docs and MDX Documentation
367
+
368
+ ### Auto-Docs (Generated from Stories)
369
+
370
+ ```typescript
371
+ // Enable by adding 'autodocs' tag
372
+ const meta = {
373
+ title: 'Components/Button',
374
+ component: Button,
375
+ tags: ['autodocs'], // Generates a Docs page automatically
376
+ parameters: {
377
+ docs: {
378
+ description: {
379
+ component: 'Primary UI button component. Supports multiple variants, '
380
+ + 'sizes, and states including loading and disabled.',
381
+ },
382
+ },
383
+ },
384
+ } satisfies Meta<typeof Button>;
385
+ ```
386
+
387
+ ### Custom MDX Documentation
388
+
389
+ ```mdx
390
+ {/* Button.mdx */}
391
+ import { Meta, Story, Canvas, Controls, Source } from '@storybook/blocks';
392
+ import * as ButtonStories from './Button.stories';
393
+
394
+ <Meta of={ButtonStories} />
395
+
396
+ # Button
397
+
398
+ The Button component is the primary action element in the design system.
399
+
400
+ ## Usage Guidelines
401
+
402
+ - Use **Primary** for the main call-to-action on a page.
403
+ - Use **Secondary** for less important actions.
404
+ - Use **Danger** for destructive actions (delete, remove).
405
+ - Never place two Primary buttons side by side.
406
+
407
+ ## Interactive Example
408
+
409
+ <Canvas of={ButtonStories.Primary} />
410
+
411
+ ## Controls
412
+
413
+ <Controls />
414
+
415
+ ## Variants
416
+
417
+ <Canvas>
418
+ <Story of={ButtonStories.Primary} />
419
+ <Story of={ButtonStories.Secondary} />
420
+ <Story of={ButtonStories.Danger} />
421
+ </Canvas>
422
+
423
+ ## Accessibility
424
+
425
+ - All buttons have a visible focus ring.
426
+ - Disabled buttons use `aria-disabled` instead of the `disabled` attribute
427
+ to remain in the tab order for screen readers.
428
+ - Loading buttons announce their state via `aria-busy="true"`.
429
+
430
+ ## Source Code
431
+
432
+ <Source of={ButtonStories.Primary} />
433
+ ```
434
+
435
+ ---
436
+
437
+ ## 6. Addons
438
+
439
+ ### Accessibility Addon (@storybook/addon-a11y)
440
+
441
+ ```typescript
442
+ // .storybook/main.ts
443
+ const config: StorybookConfig = {
444
+ addons: [
445
+ '@storybook/addon-a11y',
446
+ // ... other addons
447
+ ],
448
+ };
449
+
450
+ // Per-story a11y configuration
451
+ export const ContrastIssue: Story = {
452
+ parameters: {
453
+ a11y: {
454
+ config: {
455
+ rules: [
456
+ {
457
+ id: 'color-contrast',
458
+ enabled: true,
459
+ },
460
+ ],
461
+ },
462
+ },
463
+ },
464
+ };
465
+
466
+ // Disable a11y for a specific story (rare, document why)
467
+ export const DecorativeOnly: Story = {
468
+ parameters: {
469
+ a11y: { disable: true },
470
+ },
471
+ };
472
+ ```
473
+
474
+ ### Viewport Addon
475
+
476
+ ```typescript
477
+ // .storybook/preview.ts
478
+ const preview: Preview = {
479
+ parameters: {
480
+ viewport: {
481
+ viewports: {
482
+ mobile: {
483
+ name: 'Mobile',
484
+ styles: { width: '375px', height: '812px' },
485
+ },
486
+ tablet: {
487
+ name: 'Tablet',
488
+ styles: { width: '768px', height: '1024px' },
489
+ },
490
+ desktop: {
491
+ name: 'Desktop',
492
+ styles: { width: '1440px', height: '900px' },
493
+ },
494
+ },
495
+ },
496
+ },
497
+ };
498
+
499
+ // Set default viewport for a story
500
+ export const MobileLayout: Story = {
501
+ parameters: {
502
+ viewport: {
503
+ defaultViewport: 'mobile',
504
+ },
505
+ },
506
+ };
507
+ ```
508
+
509
+ ### Actions Addon
510
+
511
+ ```typescript
512
+ // Automatic action logging for props matching patterns
513
+ const meta = {
514
+ title: 'Components/Button',
515
+ component: Button,
516
+ argTypes: {
517
+ onClick: { action: 'clicked' },
518
+ onHover: { action: 'hovered' },
519
+ },
520
+ } satisfies Meta<typeof Button>;
521
+
522
+ // Or use fn() from @storybook/test for assertions in play functions
523
+ import { fn } from '@storybook/test';
524
+
525
+ const meta = {
526
+ args: {
527
+ onClick: fn(),
528
+ },
529
+ } satisfies Meta<typeof Button>;
530
+ ```
531
+
532
+ ---
533
+
534
+ ## 7. MSW Integration
535
+
536
+ ### Setup
537
+
538
+ ```typescript
539
+ // .storybook/preview.ts
540
+ import { initialize, mswLoader } from 'msw-storybook-addon';
541
+
542
+ // Initialize MSW
543
+ initialize();
544
+
545
+ const preview: Preview = {
546
+ loaders: [mswLoader],
547
+ };
548
+
549
+ export default preview;
550
+ ```
551
+
552
+ ### Per-Story API Mocking
553
+
554
+ ```typescript
555
+ import { http, HttpResponse } from 'msw';
556
+
557
+ export const WithData: Story = {
558
+ parameters: {
559
+ msw: {
560
+ handlers: [
561
+ http.get('/api/users', () => {
562
+ return HttpResponse.json([
563
+ { id: '1', name: 'Alice', role: 'Admin' },
564
+ { id: '2', name: 'Bob', role: 'User' },
565
+ ]);
566
+ }),
567
+ ],
568
+ },
569
+ },
570
+ };
571
+
572
+ export const Loading: Story = {
573
+ parameters: {
574
+ msw: {
575
+ handlers: [
576
+ http.get('/api/users', async () => {
577
+ // Never resolves -- shows loading state forever
578
+ await new Promise(() => {});
579
+ }),
580
+ ],
581
+ },
582
+ },
583
+ };
584
+
585
+ export const Error: Story = {
586
+ parameters: {
587
+ msw: {
588
+ handlers: [
589
+ http.get('/api/users', () => {
590
+ return HttpResponse.json(
591
+ { error: 'Internal Server Error' },
592
+ { status: 500 }
593
+ );
594
+ }),
595
+ ],
596
+ },
597
+ },
598
+ };
599
+
600
+ export const Empty: Story = {
601
+ parameters: {
602
+ msw: {
603
+ handlers: [
604
+ http.get('/api/users', () => {
605
+ return HttpResponse.json([]);
606
+ }),
607
+ ],
608
+ },
609
+ },
610
+ };
611
+ ```
612
+
613
+ ---
614
+
615
+ ## 8. Portable Stories
616
+
617
+ Run Storybook stories inside any test runner (Vitest, Jest, Playwright).
618
+
619
+ ```typescript
620
+ // Button.test.tsx
621
+ import { composeStories } from '@storybook/react';
622
+ import { render, screen } from '@testing-library/react';
623
+ import * as stories from './Button.stories';
624
+
625
+ const { Primary, Disabled, Loading } = composeStories(stories);
626
+
627
+ test('Primary button renders correctly', () => {
628
+ render(<Primary />);
629
+ expect(screen.getByRole('button')).toHaveTextContent('Click me');
630
+ });
631
+
632
+ test('Disabled button is not clickable', () => {
633
+ render(<Disabled />);
634
+ expect(screen.getByRole('button')).toBeDisabled();
635
+ });
636
+
637
+ test('Loading button shows spinner', () => {
638
+ render(<Loading />);
639
+ expect(screen.getByRole('progressbar')).toBeInTheDocument();
640
+ });
641
+
642
+ // Run play functions in tests
643
+ test('FilledForm play function', async () => {
644
+ const { FilledForm } = composeStories(stories);
645
+ const { container } = render(<FilledForm />);
646
+ await FilledForm.play!({ canvasElement: container });
647
+ });
648
+ ```
649
+
650
+ ---
651
+
652
+ ## 9. Building Design Systems
653
+
654
+ ### Token-Based Stories
655
+
656
+ ```typescript
657
+ // tokens/Colors.stories.tsx
658
+ import type { Meta, StoryObj } from '@storybook/react';
659
+
660
+ const meta = {
661
+ title: 'Design Tokens/Colors',
662
+ tags: ['autodocs'],
663
+ } satisfies Meta;
664
+
665
+ export default meta;
666
+
667
+ const colors = {
668
+ primary: { 50: '#eff6ff', 500: '#3b82f6', 900: '#1e3a5f' },
669
+ neutral: { 50: '#fafafa', 500: '#737373', 900: '#171717' },
670
+ success: { 500: '#22c55e' },
671
+ danger: { 500: '#ef4444' },
672
+ warning: { 500: '#f59e0b' },
673
+ };
674
+
675
+ export const ColorPalette: StoryObj = {
676
+ render: () => (
677
+ <div style={{ display: 'grid', gap: '1rem' }}>
678
+ {Object.entries(colors).map(([name, shades]) => (
679
+ <div key={name}>
680
+ <h3>{name}</h3>
681
+ <div style={{ display: 'flex', gap: '0.5rem' }}>
682
+ {Object.entries(shades).map(([shade, value]) => (
683
+ <div key={shade} style={{ textAlign: 'center' }}>
684
+ <div
685
+ style={{
686
+ width: 64,
687
+ height: 64,
688
+ backgroundColor: value,
689
+ borderRadius: 8,
690
+ border: '1px solid #e5e7eb',
691
+ }}
692
+ />
693
+ <small>{shade}</small>
694
+ </div>
695
+ ))}
696
+ </div>
697
+ </div>
698
+ ))}
699
+ </div>
700
+ ),
701
+ };
702
+ ```
703
+
704
+ ### Component Status Badges
705
+
706
+ ```typescript
707
+ // .storybook/preview.ts
708
+ const preview: Preview = {
709
+ parameters: {
710
+ badges: {
711
+ stable: {
712
+ title: 'Stable',
713
+ color: '#22c55e',
714
+ },
715
+ beta: {
716
+ title: 'Beta',
717
+ color: '#f59e0b',
718
+ },
719
+ deprecated: {
720
+ title: 'Deprecated',
721
+ color: '#ef4444',
722
+ },
723
+ },
724
+ },
725
+ };
726
+
727
+ // In stories
728
+ const meta = {
729
+ title: 'Components/Button',
730
+ component: Button,
731
+ parameters: {
732
+ badges: ['stable'],
733
+ },
734
+ } satisfies Meta<typeof Button>;
735
+ ```
736
+
737
+ ---
738
+
739
+ ## 10. Storybook Configuration
740
+
741
+ ### main.ts
742
+
743
+ ```typescript
744
+ // .storybook/main.ts
745
+ import type { StorybookConfig } from '@storybook/react-vite';
746
+
747
+ const config: StorybookConfig = {
748
+ stories: [
749
+ '../src/**/*.mdx',
750
+ '../src/**/*.stories.@(js|jsx|mjs|ts|tsx)',
751
+ ],
752
+ addons: [
753
+ '@storybook/addon-onboarding',
754
+ '@storybook/addon-essentials',
755
+ '@storybook/addon-interactions',
756
+ '@storybook/addon-a11y',
757
+ '@storybook/addon-coverage',
758
+ ],
759
+ framework: {
760
+ name: '@storybook/react-vite',
761
+ options: {},
762
+ },
763
+ docs: {
764
+ autodocs: 'tag',
765
+ },
766
+ staticDirs: ['../public'],
767
+ // TypeScript configuration
768
+ typescript: {
769
+ reactDocgen: 'react-docgen-typescript',
770
+ reactDocgenTypescriptOptions: {
771
+ shouldExtractLiteralValuesFromEnum: true,
772
+ propFilter: (prop) => {
773
+ // Filter out HTML attributes from docs
774
+ return prop.parent
775
+ ? !/node_modules/.test(prop.parent.fileName)
776
+ : true;
777
+ },
778
+ },
779
+ },
780
+ };
781
+
782
+ export default config;
783
+ ```
784
+
785
+ ---
786
+
787
+ ## 11. CI Integration
788
+
789
+ ### GitHub Actions
790
+
791
+ ```yaml
792
+ name: Storybook CI
793
+ on:
794
+ pull_request:
795
+ branches: [main]
796
+
797
+ jobs:
798
+ storybook:
799
+ runs-on: ubuntu-latest
800
+ steps:
801
+ - uses: actions/checkout@v4
802
+ - uses: actions/setup-node@v4
803
+ with:
804
+ node-version: 20
805
+ cache: 'npm'
806
+ - run: npm ci
807
+
808
+ # Build Storybook (catches build errors)
809
+ - run: npm run build-storybook
810
+
811
+ # Run interaction tests
812
+ - name: Run Storybook tests
813
+ run: |
814
+ npx concurrently -k -s first \
815
+ "npx http-server storybook-static --port 6006 --silent" \
816
+ "npx wait-on tcp:6006 && npx test-storybook"
817
+
818
+ # Upload as artifact
819
+ - uses: actions/upload-artifact@v4
820
+ with:
821
+ name: storybook
822
+ path: storybook-static/
823
+ ```
824
+
825
+ ### test-storybook Configuration
826
+
827
+ ```typescript
828
+ // .storybook/test-runner.ts
829
+ import type { TestRunnerConfig } from '@storybook/test-runner';
830
+ import { getStoryContext } from '@storybook/test-runner';
831
+ import { injectAxe, checkA11y } from 'axe-playwright';
832
+
833
+ const config: TestRunnerConfig = {
834
+ async preVisit(page) {
835
+ await injectAxe(page);
836
+ },
837
+ async postVisit(page, context) {
838
+ // Run a11y checks on every story automatically
839
+ const storyContext = await getStoryContext(page, context);
840
+
841
+ if (storyContext.parameters?.a11y?.disable) {
842
+ return;
843
+ }
844
+
845
+ await checkA11y(page, '#storybook-root', {
846
+ detailedReport: true,
847
+ detailedReportOptions: {
848
+ html: true,
849
+ },
850
+ });
851
+ },
852
+ };
853
+
854
+ export default config;
855
+ ```
856
+
857
+ ---
858
+
859
+ ## 12. Performance Optimization
860
+
861
+ ### Lazy Loading Stories
862
+
863
+ ```typescript
864
+ // Only load heavy dependencies when the story renders
865
+ export const HeavyComponent: Story = {
866
+ render: () => {
867
+ const [Component, setComponent] = useState<React.ComponentType | null>(null);
868
+
869
+ useEffect(() => {
870
+ import('../components/HeavyChart').then((mod) => {
871
+ setComponent(() => mod.HeavyChart);
872
+ });
873
+ }, []);
874
+
875
+ if (!Component) return <div>Loading...</div>;
876
+ return <Component data={sampleData} />;
877
+ },
878
+ };
879
+ ```
880
+
881
+ ### Build Optimization
882
+
883
+ ```typescript
884
+ // .storybook/main.ts
885
+ const config: StorybookConfig = {
886
+ // ...
887
+ core: {
888
+ disableTelemetry: true,
889
+ },
890
+ // Reduce build size by limiting stories in CI
891
+ stories: process.env.CI
892
+ ? ['../src/components/**/*.stories.tsx']
893
+ : ['../src/**/*.stories.@(ts|tsx|mdx)'],
894
+ };
895
+ ```
896
+
897
+ ---
898
+
899
+ ## 13. Anti-Patterns
900
+
901
+ ### NEVER
902
+
903
+ - Write stories without proper args (always make stories configurable via Controls)
904
+ - Skip play functions for interactive components (forms, modals, dropdowns)
905
+ - Use hardcoded test data inline (extract to shared fixtures)
906
+ - Create stories that depend on external services without MSW mocks
907
+ - Ignore accessibility addon warnings (fix them or document exceptions)
908
+ - Put business logic inside stories (stories render components, nothing more)
909
+ - Skip autodocs tags on public components (every public component needs docs)
910
+ - Use `.storyName` when the export name suffices (use clear export names)
911
+
912
+ ### ALWAYS
913
+
914
+ - Write at least one story per visual state (default, loading, error, empty, disabled)
915
+ - Include play functions for interactive components
916
+ - Set up global decorators for providers (theme, routing, query client)
917
+ - Use `fn()` for event handler props to enable action logging and assertions
918
+ - Configure viewport addon for responsive components
919
+ - Enable the a11y addon globally and fix all warnings
920
+ - Use CSF3 format (object-based stories with `args`)
921
+ - Test stories in CI with `test-storybook`
922
+ - Organize stories by domain: `Components/Forms/Input`, `Components/Layout/Grid`
923
+ - Document component usage guidelines in MDX or autodocs descriptions