@hybridlabor-api/bdb-antigravity-skills 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 (792) hide show
  1. package/GEMINI.md +29 -0
  2. package/README.md +64 -0
  3. package/installer.sh +97 -0
  4. package/mcp_config.json +32 -0
  5. package/package.json +20 -0
  6. package/skills/global_config/MCP_Manage/SKILL.md +39 -0
  7. package/skills/global_config/agent-manager-skill/SKILL.md +47 -0
  8. package/skills/global_config/agent-memory-mcp/SKILL.md +92 -0
  9. package/skills/global_config/agent-orchestrator/SKILL.md +321 -0
  10. package/skills/global_config/agent-orchestrator/references/capability-taxonomy.md +85 -0
  11. package/skills/global_config/agent-orchestrator/references/orchestration-patterns.md +129 -0
  12. package/skills/global_config/agent-orchestrator/scripts/match_skills.py +329 -0
  13. package/skills/global_config/agent-orchestrator/scripts/orchestrate.py +304 -0
  14. package/skills/global_config/agent-orchestrator/scripts/requirements.txt +1 -0
  15. package/skills/global_config/agent-orchestrator/scripts/scan_registry.py +508 -0
  16. package/skills/global_config/agent-tool-builder/SKILL.md +714 -0
  17. package/skills/global_config/ai-agent-development/SKILL.md +178 -0
  18. package/skills/global_config/ai-product/SKILL.md +753 -0
  19. package/skills/global_config/api-design-principles/SKILL.md +45 -0
  20. package/skills/global_config/api-design-principles/assets/api-design-checklist.md +155 -0
  21. package/skills/global_config/api-design-principles/assets/rest-api-template.py +182 -0
  22. package/skills/global_config/api-design-principles/references/graphql-schema-design.md +583 -0
  23. package/skills/global_config/api-design-principles/references/rest-best-practices.md +408 -0
  24. package/skills/global_config/api-design-principles/resources/implementation-playbook.md +513 -0
  25. package/skills/global_config/api-patterns/SKILL.md +90 -0
  26. package/skills/global_config/api-patterns/api-style.md +42 -0
  27. package/skills/global_config/api-patterns/auth.md +24 -0
  28. package/skills/global_config/api-patterns/documentation.md +26 -0
  29. package/skills/global_config/api-patterns/graphql.md +41 -0
  30. package/skills/global_config/api-patterns/rate-limiting.md +31 -0
  31. package/skills/global_config/api-patterns/response.md +37 -0
  32. package/skills/global_config/api-patterns/rest.md +40 -0
  33. package/skills/global_config/api-patterns/scripts/api_validator.py +211 -0
  34. package/skills/global_config/api-patterns/security-testing.md +122 -0
  35. package/skills/global_config/api-patterns/trpc.md +41 -0
  36. package/skills/global_config/api-patterns/versioning.md +22 -0
  37. package/skills/global_config/apify-lead-generation/SKILL.md +131 -0
  38. package/skills/global_config/apify-lead-generation/reference/scripts/run_actor.js +363 -0
  39. package/skills/global_config/apify-ultimate-scraper/SKILL.md +241 -0
  40. package/skills/global_config/apify-ultimate-scraper/reference/scripts/run_actor.js +363 -0
  41. package/skills/global_config/architect-review/SKILL.md +177 -0
  42. package/skills/global_config/bash-linux/SKILL.md +209 -0
  43. package/skills/global_config/bdbrainstorm/SKILL.md +37 -0
  44. package/skills/global_config/browser-automation/SKILL.md +1116 -0
  45. package/skills/global_config/clean-code/SKILL.md +99 -0
  46. package/skills/global_config/cloudflare-workers-expert/SKILL.md +94 -0
  47. package/skills/global_config/concise-planning/SKILL.md +73 -0
  48. package/skills/global_config/copywriting/SKILL.md +254 -0
  49. package/skills/global_config/crewai/SKILL.md +458 -0
  50. package/skills/global_config/database-design/SKILL.md +62 -0
  51. package/skills/global_config/database-design/database-selection.md +43 -0
  52. package/skills/global_config/database-design/indexing.md +39 -0
  53. package/skills/global_config/database-design/migrations.md +48 -0
  54. package/skills/global_config/database-design/optimization.md +36 -0
  55. package/skills/global_config/database-design/orm-selection.md +30 -0
  56. package/skills/global_config/database-design/schema-design.md +56 -0
  57. package/skills/global_config/database-design/scripts/schema_validator.py +172 -0
  58. package/skills/global_config/debugger/SKILL.md +58 -0
  59. package/skills/global_config/deep-research/SKILL.md +120 -0
  60. package/skills/global_config/design-spells/SKILL.md +41 -0
  61. package/skills/global_config/design-taste-frontend/SKILL.md +247 -0
  62. package/skills/global_config/docker-expert/SKILL.md +418 -0
  63. package/skills/global_config/documentation/SKILL.md +265 -0
  64. package/skills/global_config/drizzle-orm-expert/SKILL.md +368 -0
  65. package/skills/global_config/executing-plans/SKILL.md +87 -0
  66. package/skills/global_config/frontend-design/LICENSE.txt +177 -0
  67. package/skills/global_config/frontend-design/SKILL.md +282 -0
  68. package/skills/global_config/frontend-dev-guidelines/SKILL.md +369 -0
  69. package/skills/global_config/frontend-dev-guidelines/resources/common-patterns.md +331 -0
  70. package/skills/global_config/frontend-dev-guidelines/resources/complete-examples.md +872 -0
  71. package/skills/global_config/frontend-dev-guidelines/resources/component-patterns.md +502 -0
  72. package/skills/global_config/frontend-dev-guidelines/resources/data-fetching.md +767 -0
  73. package/skills/global_config/frontend-dev-guidelines/resources/file-organization.md +502 -0
  74. package/skills/global_config/frontend-dev-guidelines/resources/loading-and-error-states.md +501 -0
  75. package/skills/global_config/frontend-dev-guidelines/resources/performance.md +406 -0
  76. package/skills/global_config/frontend-dev-guidelines/resources/routing-guide.md +364 -0
  77. package/skills/global_config/frontend-dev-guidelines/resources/styling-guide.md +428 -0
  78. package/skills/global_config/frontend-dev-guidelines/resources/typescript-standards.md +418 -0
  79. package/skills/global_config/gemini-api-dev/SKILL.md +138 -0
  80. package/skills/global_config/gemini-api-integration/SKILL.md +193 -0
  81. package/skills/global_config/geo-fundamentals/SKILL.md +165 -0
  82. package/skills/global_config/geo-fundamentals/scripts/geo_checker.py +289 -0
  83. package/skills/global_config/git-advanced-workflows/SKILL.md +420 -0
  84. package/skills/global_config/git-pr-review/SKILL.md +179 -0
  85. package/skills/global_config/github/SKILL.md +80 -0
  86. package/skills/global_config/github/agents/openai.yaml +4 -0
  87. package/skills/global_config/github-actions-templates/SKILL.md +353 -0
  88. package/skills/global_config/github-workflow-automation/SKILL.md +854 -0
  89. package/skills/global_config/go-concurrency-patterns/SKILL.md +41 -0
  90. package/skills/global_config/go-concurrency-patterns/resources/implementation-playbook.md +654 -0
  91. package/skills/global_config/go-playwright/SKILL.md +76 -0
  92. package/skills/global_config/go-playwright/resources/implementation-playbook.md +110 -0
  93. package/skills/global_config/golang-pro/SKILL.md +181 -0
  94. package/skills/global_config/google-sheets-automation/SKILL.md +149 -0
  95. package/skills/global_config/landing-page-generator/SKILL.md +213 -0
  96. package/skills/global_config/landing-page-generator/references/conversion-patterns.md +176 -0
  97. package/skills/global_config/landing-page-generator/references/frameworks.md +177 -0
  98. package/skills/global_config/landing-page-generator/references/landing-page-patterns.md +98 -0
  99. package/skills/global_config/landing-page-generator/references/seo-checklist.md +109 -0
  100. package/skills/global_config/landing-page-generator/scripts/landing_page_scaffolder.py +568 -0
  101. package/skills/global_config/linear-claude-skill/SKILL.md +523 -0
  102. package/skills/global_config/llm-app-patterns/SKILL.md +768 -0
  103. package/skills/global_config/llm-application-dev-ai-assistant/SKILL.md +43 -0
  104. package/skills/global_config/llm-application-dev-ai-assistant/resources/implementation-playbook.md +1236 -0
  105. package/skills/global_config/llm-prompt-optimizer/SKILL.md +187 -0
  106. package/skills/global_config/llm-structured-output/SKILL.md +212 -0
  107. package/skills/global_config/local-llm-expert/SKILL.md +88 -0
  108. package/skills/global_config/microservices-patterns/SKILL.md +43 -0
  109. package/skills/global_config/microservices-patterns/resources/implementation-playbook.md +607 -0
  110. package/skills/global_config/modern-javascript-patterns/SKILL.md +43 -0
  111. package/skills/global_config/modern-javascript-patterns/resources/implementation-playbook.md +910 -0
  112. package/skills/global_config/monorepo-management/SKILL.md +43 -0
  113. package/skills/global_config/monorepo-management/resources/implementation-playbook.md +621 -0
  114. package/skills/global_config/n8n-code-javascript/SKILL.md +706 -0
  115. package/skills/global_config/n8n-code-python/SKILL.md +755 -0
  116. package/skills/global_config/n8n-expression-syntax/SKILL.md +528 -0
  117. package/skills/global_config/n8n-mcp-tools-expert/SKILL.md +654 -0
  118. package/skills/global_config/n8n-workflow-patterns/SKILL.md +423 -0
  119. package/skills/global_config/neon-postgres/SKILL.md +619 -0
  120. package/skills/global_config/nextjs-app-router-patterns/SKILL.md +41 -0
  121. package/skills/global_config/nextjs-app-router-patterns/resources/implementation-playbook.md +543 -0
  122. package/skills/global_config/nextjs-best-practices/SKILL.md +213 -0
  123. package/skills/global_config/notion-automation/SKILL.md +224 -0
  124. package/skills/global_config/obsidian-markdown/SKILL.md +209 -0
  125. package/skills/global_config/obsidian-markdown/references/CALLOUTS.md +58 -0
  126. package/skills/global_config/obsidian-markdown/references/EMBEDS.md +63 -0
  127. package/skills/global_config/obsidian-markdown/references/PROPERTIES.md +61 -0
  128. package/skills/global_config/openapi-spec-generation/SKILL.md +41 -0
  129. package/skills/global_config/openapi-spec-generation/resources/implementation-playbook.md +1027 -0
  130. package/skills/global_config/os-scripting/SKILL.md +433 -0
  131. package/skills/global_config/planning-with-files/SKILL.md +189 -0
  132. package/skills/global_config/planning-with-files/examples.md +202 -0
  133. package/skills/global_config/planning-with-files/reference.md +218 -0
  134. package/skills/global_config/planning-with-files/scripts/check-complete.sh +44 -0
  135. package/skills/global_config/planning-with-files/scripts/init-session.sh +120 -0
  136. package/skills/global_config/planning-with-files/templates/findings.md +95 -0
  137. package/skills/global_config/planning-with-files/templates/progress.md +114 -0
  138. package/skills/global_config/planning-with-files/templates/task_plan.md +132 -0
  139. package/skills/global_config/playwright-skill/API_REFERENCE.md +653 -0
  140. package/skills/global_config/playwright-skill/SKILL.md +469 -0
  141. package/skills/global_config/playwright-skill/lib/helpers.js +441 -0
  142. package/skills/global_config/playwright-skill/package.json +26 -0
  143. package/skills/global_config/playwright-skill/run.js +228 -0
  144. package/skills/global_config/posix-shell-pro/SKILL.md +308 -0
  145. package/skills/global_config/postgres-best-practices/AGENTS.md +1490 -0
  146. package/skills/global_config/postgres-best-practices/README.md +119 -0
  147. package/skills/global_config/postgres-best-practices/SKILL.md +63 -0
  148. package/skills/global_config/postgres-best-practices/metadata.json +13 -0
  149. package/skills/global_config/postgres-best-practices/rules/_contributing.md +171 -0
  150. package/skills/global_config/postgres-best-practices/rules/_sections.md +39 -0
  151. package/skills/global_config/postgres-best-practices/rules/_template.md +34 -0
  152. package/skills/global_config/postgres-best-practices/rules/advanced-full-text-search.md +55 -0
  153. package/skills/global_config/postgres-best-practices/rules/advanced-jsonb-indexing.md +49 -0
  154. package/skills/global_config/postgres-best-practices/rules/conn-idle-timeout.md +46 -0
  155. package/skills/global_config/postgres-best-practices/rules/conn-limits.md +44 -0
  156. package/skills/global_config/postgres-best-practices/rules/conn-pooling.md +41 -0
  157. package/skills/global_config/postgres-best-practices/rules/conn-prepared-statements.md +46 -0
  158. package/skills/global_config/postgres-best-practices/rules/data-batch-inserts.md +54 -0
  159. package/skills/global_config/postgres-best-practices/rules/data-n-plus-one.md +53 -0
  160. package/skills/global_config/postgres-best-practices/rules/data-pagination.md +50 -0
  161. package/skills/global_config/postgres-best-practices/rules/data-upsert.md +50 -0
  162. package/skills/global_config/postgres-best-practices/rules/lock-advisory.md +56 -0
  163. package/skills/global_config/postgres-best-practices/rules/lock-deadlock-prevention.md +68 -0
  164. package/skills/global_config/postgres-best-practices/rules/lock-short-transactions.md +50 -0
  165. package/skills/global_config/postgres-best-practices/rules/lock-skip-locked.md +54 -0
  166. package/skills/global_config/postgres-best-practices/rules/monitor-explain-analyze.md +45 -0
  167. package/skills/global_config/postgres-best-practices/rules/monitor-pg-stat-statements.md +55 -0
  168. package/skills/global_config/postgres-best-practices/rules/monitor-vacuum-analyze.md +55 -0
  169. package/skills/global_config/postgres-best-practices/rules/query-composite-indexes.md +44 -0
  170. package/skills/global_config/postgres-best-practices/rules/query-covering-indexes.md +40 -0
  171. package/skills/global_config/postgres-best-practices/rules/query-index-types.md +45 -0
  172. package/skills/global_config/postgres-best-practices/rules/query-missing-indexes.md +43 -0
  173. package/skills/global_config/postgres-best-practices/rules/query-partial-indexes.md +45 -0
  174. package/skills/global_config/postgres-best-practices/rules/schema-data-types.md +46 -0
  175. package/skills/global_config/postgres-best-practices/rules/schema-foreign-key-indexes.md +59 -0
  176. package/skills/global_config/postgres-best-practices/rules/schema-lowercase-identifiers.md +55 -0
  177. package/skills/global_config/postgres-best-practices/rules/schema-partitioning.md +55 -0
  178. package/skills/global_config/postgres-best-practices/rules/schema-primary-keys.md +61 -0
  179. package/skills/global_config/postgres-best-practices/rules/security-privileges.md +54 -0
  180. package/skills/global_config/postgres-best-practices/rules/security-rls-basics.md +50 -0
  181. package/skills/global_config/postgres-best-practices/rules/security-rls-performance.md +57 -0
  182. package/skills/global_config/postgresql/SKILL.md +233 -0
  183. package/skills/global_config/prisma-expert/SKILL.md +366 -0
  184. package/skills/global_config/product-manager-toolkit/SKILL.md +362 -0
  185. package/skills/global_config/product-manager-toolkit/references/prd_templates.md +317 -0
  186. package/skills/global_config/product-manager-toolkit/scripts/customer_interview_analyzer.py +441 -0
  187. package/skills/global_config/product-manager-toolkit/scripts/rice_prioritizer.py +296 -0
  188. package/skills/global_config/programmatic-seo/SKILL.md +356 -0
  189. package/skills/global_config/prompt-engineer/README.md +659 -0
  190. package/skills/global_config/prompt-engineer/SKILL.md +281 -0
  191. package/skills/global_config/prompt-engineering-patterns/SKILL.md +221 -0
  192. package/skills/global_config/prompt-engineering-patterns/assets/few-shot-examples.json +106 -0
  193. package/skills/global_config/prompt-engineering-patterns/assets/prompt-template-library.md +246 -0
  194. package/skills/global_config/prompt-engineering-patterns/references/chain-of-thought.md +399 -0
  195. package/skills/global_config/prompt-engineering-patterns/references/few-shot-learning.md +369 -0
  196. package/skills/global_config/prompt-engineering-patterns/references/prompt-optimization.md +414 -0
  197. package/skills/global_config/prompt-engineering-patterns/references/prompt-templates.md +470 -0
  198. package/skills/global_config/prompt-engineering-patterns/references/system-prompts.md +189 -0
  199. package/skills/global_config/prompt-engineering-patterns/scripts/optimize-prompt.py +279 -0
  200. package/skills/global_config/python-patterns/SKILL.md +451 -0
  201. package/skills/global_config/python-performance-optimization/SKILL.md +44 -0
  202. package/skills/global_config/python-performance-optimization/resources/implementation-playbook.md +868 -0
  203. package/skills/global_config/python-pro/SKILL.md +161 -0
  204. package/skills/global_config/rag-engineer/SKILL.md +341 -0
  205. package/skills/global_config/rag-implementation/SKILL.md +201 -0
  206. package/skills/global_config/react-best-practices/AGENTS.md +2249 -0
  207. package/skills/global_config/react-best-practices/README.md +123 -0
  208. package/skills/global_config/react-best-practices/SKILL.md +131 -0
  209. package/skills/global_config/react-best-practices/metadata.json +15 -0
  210. package/skills/global_config/react-best-practices/rules/_sections.md +46 -0
  211. package/skills/global_config/react-best-practices/rules/_template.md +28 -0
  212. package/skills/global_config/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  213. package/skills/global_config/react-best-practices/rules/advanced-use-latest.md +49 -0
  214. package/skills/global_config/react-best-practices/rules/async-api-routes.md +38 -0
  215. package/skills/global_config/react-best-practices/rules/async-defer-await.md +80 -0
  216. package/skills/global_config/react-best-practices/rules/async-dependencies.md +36 -0
  217. package/skills/global_config/react-best-practices/rules/async-parallel.md +28 -0
  218. package/skills/global_config/react-best-practices/rules/async-suspense-boundaries.md +99 -0
  219. package/skills/global_config/react-best-practices/rules/bundle-barrel-imports.md +59 -0
  220. package/skills/global_config/react-best-practices/rules/bundle-conditional.md +31 -0
  221. package/skills/global_config/react-best-practices/rules/bundle-defer-third-party.md +49 -0
  222. package/skills/global_config/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  223. package/skills/global_config/react-best-practices/rules/bundle-preload.md +50 -0
  224. package/skills/global_config/react-best-practices/rules/client-event-listeners.md +74 -0
  225. package/skills/global_config/react-best-practices/rules/client-swr-dedup.md +56 -0
  226. package/skills/global_config/react-best-practices/rules/js-batch-dom-css.md +82 -0
  227. package/skills/global_config/react-best-practices/rules/js-cache-function-results.md +80 -0
  228. package/skills/global_config/react-best-practices/rules/js-cache-property-access.md +28 -0
  229. package/skills/global_config/react-best-practices/rules/js-cache-storage.md +70 -0
  230. package/skills/global_config/react-best-practices/rules/js-combine-iterations.md +32 -0
  231. package/skills/global_config/react-best-practices/rules/js-early-exit.md +50 -0
  232. package/skills/global_config/react-best-practices/rules/js-hoist-regexp.md +45 -0
  233. package/skills/global_config/react-best-practices/rules/js-index-maps.md +37 -0
  234. package/skills/global_config/react-best-practices/rules/js-length-check-first.md +49 -0
  235. package/skills/global_config/react-best-practices/rules/js-min-max-loop.md +82 -0
  236. package/skills/global_config/react-best-practices/rules/js-set-map-lookups.md +24 -0
  237. package/skills/global_config/react-best-practices/rules/js-tosorted-immutable.md +57 -0
  238. package/skills/global_config/react-best-practices/rules/rendering-activity.md +26 -0
  239. package/skills/global_config/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  240. package/skills/global_config/react-best-practices/rules/rendering-conditional-render.md +40 -0
  241. package/skills/global_config/react-best-practices/rules/rendering-content-visibility.md +38 -0
  242. package/skills/global_config/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  243. package/skills/global_config/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  244. package/skills/global_config/react-best-practices/rules/rendering-svg-precision.md +28 -0
  245. package/skills/global_config/react-best-practices/rules/rerender-defer-reads.md +39 -0
  246. package/skills/global_config/react-best-practices/rules/rerender-dependencies.md +45 -0
  247. package/skills/global_config/react-best-practices/rules/rerender-derived-state.md +29 -0
  248. package/skills/global_config/react-best-practices/rules/rerender-functional-setstate.md +74 -0
  249. package/skills/global_config/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  250. package/skills/global_config/react-best-practices/rules/rerender-memo.md +44 -0
  251. package/skills/global_config/react-best-practices/rules/rerender-transitions.md +40 -0
  252. package/skills/global_config/react-best-practices/rules/server-after-nonblocking.md +73 -0
  253. package/skills/global_config/react-best-practices/rules/server-cache-lru.md +41 -0
  254. package/skills/global_config/react-best-practices/rules/server-cache-react.md +26 -0
  255. package/skills/global_config/react-best-practices/rules/server-parallel-fetching.md +79 -0
  256. package/skills/global_config/react-best-practices/rules/server-serialization.md +38 -0
  257. package/skills/global_config/react-component-performance/SKILL.md +139 -0
  258. package/skills/global_config/react-component-performance/agents/openai.yaml +4 -0
  259. package/skills/global_config/react-component-performance/references/examples.md +88 -0
  260. package/skills/global_config/react-patterns/SKILL.md +216 -0
  261. package/skills/global_config/readme/SKILL.md +848 -0
  262. package/skills/global_config/remotion/SKILL.md +404 -0
  263. package/skills/global_config/schema-markup/SKILL.md +363 -0
  264. package/skills/global_config/senior-frontend/SKILL.md +495 -0
  265. package/skills/global_config/senior-frontend/references/frontend_best_practices.md +806 -0
  266. package/skills/global_config/senior-frontend/references/nextjs_optimization_guide.md +724 -0
  267. package/skills/global_config/senior-frontend/references/react_patterns.md +746 -0
  268. package/skills/global_config/senior-frontend/scripts/bundle_analyzer.py +407 -0
  269. package/skills/global_config/senior-frontend/scripts/component_generator.py +329 -0
  270. package/skills/global_config/senior-frontend/scripts/frontend_scaffolder.py +1005 -0
  271. package/skills/global_config/senior-fullstack/SKILL.md +220 -0
  272. package/skills/global_config/senior-fullstack/references/architecture_patterns.md +103 -0
  273. package/skills/global_config/senior-fullstack/references/development_workflows.md +103 -0
  274. package/skills/global_config/senior-fullstack/references/tech_stack_guide.md +103 -0
  275. package/skills/global_config/senior-fullstack/scripts/code_quality_analyzer.py +114 -0
  276. package/skills/global_config/senior-fullstack/scripts/fullstack_scaffolder.py +114 -0
  277. package/skills/global_config/senior-fullstack/scripts/project_scaffolder.py +114 -0
  278. package/skills/global_config/seo/SKILL.md +143 -0
  279. package/skills/global_config/seo/references/cwv-thresholds.md +108 -0
  280. package/skills/global_config/seo/references/eeat-framework.md +214 -0
  281. package/skills/global_config/seo/references/quality-gates.md +155 -0
  282. package/skills/global_config/seo/references/schema-types.md +118 -0
  283. package/skills/global_config/seo-audit/SKILL.md +492 -0
  284. package/skills/global_config/seo-technical/SKILL.md +179 -0
  285. package/skills/global_config/shadcn/SKILL.md +254 -0
  286. package/skills/global_config/shadcn/agents/openai.yml +5 -0
  287. package/skills/global_config/shadcn/assets/shadcn-small.png +0 -0
  288. package/skills/global_config/shadcn/assets/shadcn.png +0 -0
  289. package/skills/global_config/shadcn/cli.md +255 -0
  290. package/skills/global_config/shadcn/customization.md +202 -0
  291. package/skills/global_config/shadcn/evals/evals.json +47 -0
  292. package/skills/global_config/shadcn/mcp.md +94 -0
  293. package/skills/global_config/shadcn/rules/base-vs-radix.md +306 -0
  294. package/skills/global_config/shadcn/rules/composition.md +195 -0
  295. package/skills/global_config/shadcn/rules/forms.md +192 -0
  296. package/skills/global_config/shadcn/rules/icons.md +101 -0
  297. package/skills/global_config/shadcn/rules/styling.md +162 -0
  298. package/skills/global_config/simplify-code/SKILL.md +183 -0
  299. package/skills/global_config/slack-automation/SKILL.md +197 -0
  300. package/skills/global_config/software-architecture/SKILL.md +86 -0
  301. package/skills/global_config/spline-3d-integration/SKILL.md +90 -0
  302. package/skills/global_config/spline-3d-integration/examples/interactive-scene.tsx +198 -0
  303. package/skills/global_config/spline-3d-integration/examples/react-spline-wrapper.tsx +124 -0
  304. package/skills/global_config/spline-3d-integration/examples/vanilla-embed.html +146 -0
  305. package/skills/global_config/spline-3d-integration/guides/COMMON_PROBLEMS.md +262 -0
  306. package/skills/global_config/spline-3d-integration/guides/PERFORMANCE.md +163 -0
  307. package/skills/global_config/spline-3d-integration/guides/REACT_INTEGRATION.md +212 -0
  308. package/skills/global_config/spline-3d-integration/guides/VANILLA_INTEGRATION.md +203 -0
  309. package/skills/global_config/subagent-driven-development/SKILL.md +247 -0
  310. package/skills/global_config/subagent-driven-development/code-quality-reviewer-prompt.md +20 -0
  311. package/skills/global_config/subagent-driven-development/implementer-prompt.md +78 -0
  312. package/skills/global_config/subagent-driven-development/spec-reviewer-prompt.md +61 -0
  313. package/skills/global_config/systematic-debugging/CREATION-LOG.md +119 -0
  314. package/skills/global_config/systematic-debugging/SKILL.md +303 -0
  315. package/skills/global_config/systematic-debugging/condition-based-waiting-example.ts +158 -0
  316. package/skills/global_config/systematic-debugging/condition-based-waiting.md +115 -0
  317. package/skills/global_config/systematic-debugging/defense-in-depth.md +122 -0
  318. package/skills/global_config/systematic-debugging/find-polluter.sh +63 -0
  319. package/skills/global_config/systematic-debugging/root-cause-tracing.md +169 -0
  320. package/skills/global_config/systematic-debugging/test-academic.md +14 -0
  321. package/skills/global_config/systematic-debugging/test-pressure-1.md +58 -0
  322. package/skills/global_config/systematic-debugging/test-pressure-2.md +68 -0
  323. package/skills/global_config/systematic-debugging/test-pressure-3.md +69 -0
  324. package/skills/global_config/tailwind-patterns/SKILL.md +279 -0
  325. package/skills/global_config/tanstack-query-expert/SKILL.md +247 -0
  326. package/skills/global_config/tdd-workflow/SKILL.md +159 -0
  327. package/skills/global_config/test-driven-development/SKILL.md +378 -0
  328. package/skills/global_config/test-driven-development/testing-anti-patterns.md +299 -0
  329. package/skills/global_config/threejs-skills/SKILL.md +720 -0
  330. package/skills/global_config/tmux/SKILL.md +375 -0
  331. package/skills/global_config/turborepo-caching/SKILL.md +427 -0
  332. package/skills/global_config/typescript-pro/SKILL.md +58 -0
  333. package/skills/global_config/ui-component/SKILL.md +104 -0
  334. package/skills/global_config/ui-page/SKILL.md +100 -0
  335. package/skills/global_config/ui-pattern/SKILL.md +92 -0
  336. package/skills/global_config/ui-review/SKILL.md +90 -0
  337. package/skills/global_config/ui-tokens/SKILL.md +73 -0
  338. package/skills/global_config/ui-ux-pro-max/SKILL.md +361 -0
  339. package/skills/global_config/ui-ux-pro-max/data/charts.csv +26 -0
  340. package/skills/global_config/ui-ux-pro-max/data/colors.csv +97 -0
  341. package/skills/global_config/ui-ux-pro-max/data/icons.csv +101 -0
  342. package/skills/global_config/ui-ux-pro-max/data/landing.csv +31 -0
  343. package/skills/global_config/ui-ux-pro-max/data/products.csv +97 -0
  344. package/skills/global_config/ui-ux-pro-max/data/prompts.csv +24 -0
  345. package/skills/global_config/ui-ux-pro-max/data/react-performance.csv +45 -0
  346. package/skills/global_config/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
  347. package/skills/global_config/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
  348. package/skills/global_config/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
  349. package/skills/global_config/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
  350. package/skills/global_config/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
  351. package/skills/global_config/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
  352. package/skills/global_config/ui-ux-pro-max/data/stacks/react.csv +54 -0
  353. package/skills/global_config/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
  354. package/skills/global_config/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
  355. package/skills/global_config/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
  356. package/skills/global_config/ui-ux-pro-max/data/stacks/vue.csv +50 -0
  357. package/skills/global_config/ui-ux-pro-max/data/styles.csv +59 -0
  358. package/skills/global_config/ui-ux-pro-max/data/typography.csv +58 -0
  359. package/skills/global_config/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
  360. package/skills/global_config/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
  361. package/skills/global_config/ui-ux-pro-max/data/web-interface.csv +31 -0
  362. package/skills/global_config/ui-ux-pro-max/scripts/__pycache__/core.cpython-313.pyc +0 -0
  363. package/skills/global_config/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-313.pyc +0 -0
  364. package/skills/global_config/ui-ux-pro-max/scripts/core.py +257 -0
  365. package/skills/global_config/ui-ux-pro-max/scripts/design_system.py +487 -0
  366. package/skills/global_config/ui-ux-pro-max/scripts/search.py +76 -0
  367. package/skills/global_config/using-neon/SKILL.md +90 -0
  368. package/skills/global_config/ux-audit/SKILL.md +66 -0
  369. package/skills/global_config/ux-feedback/SKILL.md +68 -0
  370. package/skills/global_config/ux-flow/SKILL.md +72 -0
  371. package/skills/global_config/ux-persuasion-engineer/SKILL.md +119 -0
  372. package/skills/global_config/vector-database-engineer/SKILL.md +68 -0
  373. package/skills/global_config/vercel-ai-sdk-expert/SKILL.md +227 -0
  374. package/skills/global_config/vercel-deployment/SKILL.md +682 -0
  375. package/skills/global_config/wcag-audit-patterns/SKILL.md +49 -0
  376. package/skills/global_config/wcag-audit-patterns/resources/implementation-playbook.md +541 -0
  377. package/skills/global_config/web-artifacts-builder/LICENSE.txt +202 -0
  378. package/skills/global_config/web-artifacts-builder/SKILL.md +84 -0
  379. package/skills/global_config/web-artifacts-builder/scripts/bundle-artifact.sh +54 -0
  380. package/skills/global_config/web-artifacts-builder/scripts/init-artifact.sh +322 -0
  381. package/skills/global_config/web-artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  382. package/skills/global_config/web-performance-optimization/SKILL.md +654 -0
  383. package/skills/global_config/web-scraper/SKILL.md +757 -0
  384. package/skills/global_config/web-scraper/references/data-transforms.md +397 -0
  385. package/skills/global_config/web-scraper/references/extraction-patterns.md +475 -0
  386. package/skills/global_config/web-scraper/references/output-templates.md +481 -0
  387. package/skills/global_config/webapp-testing/LICENSE.txt +202 -0
  388. package/skills/global_config/webapp-testing/SKILL.md +106 -0
  389. package/skills/global_config/webapp-testing/scripts/with_server.py +106 -0
  390. package/skills/global_config/writing-plans/SKILL.md +127 -0
  391. package/skills/global_config/zustand-store-ts/SKILL.md +79 -0
  392. package/skills/global_legacy/agent-manager-skill/SKILL.md +47 -0
  393. package/skills/global_legacy/agent-memory-mcp/SKILL.md +92 -0
  394. package/skills/global_legacy/agent-orchestrator/SKILL.md +321 -0
  395. package/skills/global_legacy/agent-orchestrator/references/capability-taxonomy.md +85 -0
  396. package/skills/global_legacy/agent-orchestrator/references/orchestration-patterns.md +129 -0
  397. package/skills/global_legacy/agent-orchestrator/scripts/match_skills.py +329 -0
  398. package/skills/global_legacy/agent-orchestrator/scripts/orchestrate.py +304 -0
  399. package/skills/global_legacy/agent-orchestrator/scripts/requirements.txt +1 -0
  400. package/skills/global_legacy/agent-orchestrator/scripts/scan_registry.py +508 -0
  401. package/skills/global_legacy/agent-tool-builder/SKILL.md +714 -0
  402. package/skills/global_legacy/ai-agent-development/SKILL.md +178 -0
  403. package/skills/global_legacy/ai-product/SKILL.md +753 -0
  404. package/skills/global_legacy/api-design-principles/SKILL.md +45 -0
  405. package/skills/global_legacy/api-design-principles/assets/api-design-checklist.md +155 -0
  406. package/skills/global_legacy/api-design-principles/assets/rest-api-template.py +182 -0
  407. package/skills/global_legacy/api-design-principles/references/graphql-schema-design.md +583 -0
  408. package/skills/global_legacy/api-design-principles/references/rest-best-practices.md +408 -0
  409. package/skills/global_legacy/api-design-principles/resources/implementation-playbook.md +513 -0
  410. package/skills/global_legacy/api-patterns/SKILL.md +90 -0
  411. package/skills/global_legacy/api-patterns/api-style.md +42 -0
  412. package/skills/global_legacy/api-patterns/auth.md +24 -0
  413. package/skills/global_legacy/api-patterns/documentation.md +26 -0
  414. package/skills/global_legacy/api-patterns/graphql.md +41 -0
  415. package/skills/global_legacy/api-patterns/rate-limiting.md +31 -0
  416. package/skills/global_legacy/api-patterns/response.md +37 -0
  417. package/skills/global_legacy/api-patterns/rest.md +40 -0
  418. package/skills/global_legacy/api-patterns/scripts/api_validator.py +211 -0
  419. package/skills/global_legacy/api-patterns/security-testing.md +122 -0
  420. package/skills/global_legacy/api-patterns/trpc.md +41 -0
  421. package/skills/global_legacy/api-patterns/versioning.md +22 -0
  422. package/skills/global_legacy/apify-lead-generation/SKILL.md +131 -0
  423. package/skills/global_legacy/apify-lead-generation/reference/scripts/run_actor.js +363 -0
  424. package/skills/global_legacy/apify-ultimate-scraper/SKILL.md +241 -0
  425. package/skills/global_legacy/apify-ultimate-scraper/reference/scripts/run_actor.js +363 -0
  426. package/skills/global_legacy/architect-review/SKILL.md +177 -0
  427. package/skills/global_legacy/bash-linux/SKILL.md +209 -0
  428. package/skills/global_legacy/brainstorming/SKILL.md +237 -0
  429. package/skills/global_legacy/browser-automation/SKILL.md +1116 -0
  430. package/skills/global_legacy/clean-code/SKILL.md +99 -0
  431. package/skills/global_legacy/cloudflare-workers-expert/SKILL.md +94 -0
  432. package/skills/global_legacy/concise-planning/SKILL.md +73 -0
  433. package/skills/global_legacy/copywriting/SKILL.md +254 -0
  434. package/skills/global_legacy/crewai/SKILL.md +458 -0
  435. package/skills/global_legacy/database-design/SKILL.md +62 -0
  436. package/skills/global_legacy/database-design/database-selection.md +43 -0
  437. package/skills/global_legacy/database-design/indexing.md +39 -0
  438. package/skills/global_legacy/database-design/migrations.md +48 -0
  439. package/skills/global_legacy/database-design/optimization.md +36 -0
  440. package/skills/global_legacy/database-design/orm-selection.md +30 -0
  441. package/skills/global_legacy/database-design/schema-design.md +56 -0
  442. package/skills/global_legacy/database-design/scripts/schema_validator.py +172 -0
  443. package/skills/global_legacy/debugger/SKILL.md +58 -0
  444. package/skills/global_legacy/deep-research/SKILL.md +120 -0
  445. package/skills/global_legacy/design-spells/SKILL.md +41 -0
  446. package/skills/global_legacy/design-taste-frontend/SKILL.md +247 -0
  447. package/skills/global_legacy/docker-expert/SKILL.md +418 -0
  448. package/skills/global_legacy/documentation/SKILL.md +265 -0
  449. package/skills/global_legacy/drizzle-orm-expert/SKILL.md +368 -0
  450. package/skills/global_legacy/executing-plans/SKILL.md +87 -0
  451. package/skills/global_legacy/frontend-design/LICENSE.txt +177 -0
  452. package/skills/global_legacy/frontend-design/SKILL.md +282 -0
  453. package/skills/global_legacy/frontend-dev-guidelines/SKILL.md +369 -0
  454. package/skills/global_legacy/frontend-dev-guidelines/resources/common-patterns.md +331 -0
  455. package/skills/global_legacy/frontend-dev-guidelines/resources/complete-examples.md +872 -0
  456. package/skills/global_legacy/frontend-dev-guidelines/resources/component-patterns.md +502 -0
  457. package/skills/global_legacy/frontend-dev-guidelines/resources/data-fetching.md +767 -0
  458. package/skills/global_legacy/frontend-dev-guidelines/resources/file-organization.md +502 -0
  459. package/skills/global_legacy/frontend-dev-guidelines/resources/loading-and-error-states.md +501 -0
  460. package/skills/global_legacy/frontend-dev-guidelines/resources/performance.md +406 -0
  461. package/skills/global_legacy/frontend-dev-guidelines/resources/routing-guide.md +364 -0
  462. package/skills/global_legacy/frontend-dev-guidelines/resources/styling-guide.md +428 -0
  463. package/skills/global_legacy/frontend-dev-guidelines/resources/typescript-standards.md +418 -0
  464. package/skills/global_legacy/gemini-api-dev/SKILL.md +138 -0
  465. package/skills/global_legacy/gemini-api-integration/SKILL.md +193 -0
  466. package/skills/global_legacy/geo-fundamentals/SKILL.md +165 -0
  467. package/skills/global_legacy/geo-fundamentals/scripts/geo_checker.py +289 -0
  468. package/skills/global_legacy/git-advanced-workflows/SKILL.md +420 -0
  469. package/skills/global_legacy/git-pr-review/SKILL.md +179 -0
  470. package/skills/global_legacy/github/SKILL.md +80 -0
  471. package/skills/global_legacy/github/agents/openai.yaml +4 -0
  472. package/skills/global_legacy/github-actions-templates/SKILL.md +353 -0
  473. package/skills/global_legacy/github-workflow-automation/SKILL.md +854 -0
  474. package/skills/global_legacy/go-concurrency-patterns/SKILL.md +41 -0
  475. package/skills/global_legacy/go-concurrency-patterns/resources/implementation-playbook.md +654 -0
  476. package/skills/global_legacy/go-playwright/SKILL.md +76 -0
  477. package/skills/global_legacy/go-playwright/resources/implementation-playbook.md +110 -0
  478. package/skills/global_legacy/golang-pro/SKILL.md +181 -0
  479. package/skills/global_legacy/google-sheets-automation/SKILL.md +149 -0
  480. package/skills/global_legacy/landing-page-generator/SKILL.md +213 -0
  481. package/skills/global_legacy/landing-page-generator/references/conversion-patterns.md +176 -0
  482. package/skills/global_legacy/landing-page-generator/references/frameworks.md +177 -0
  483. package/skills/global_legacy/landing-page-generator/references/landing-page-patterns.md +98 -0
  484. package/skills/global_legacy/landing-page-generator/references/seo-checklist.md +109 -0
  485. package/skills/global_legacy/landing-page-generator/scripts/landing_page_scaffolder.py +568 -0
  486. package/skills/global_legacy/linear-claude-skill/SKILL.md +523 -0
  487. package/skills/global_legacy/llm-app-patterns/SKILL.md +768 -0
  488. package/skills/global_legacy/llm-application-dev-ai-assistant/SKILL.md +43 -0
  489. package/skills/global_legacy/llm-application-dev-ai-assistant/resources/implementation-playbook.md +1236 -0
  490. package/skills/global_legacy/llm-prompt-optimizer/SKILL.md +187 -0
  491. package/skills/global_legacy/llm-structured-output/SKILL.md +212 -0
  492. package/skills/global_legacy/local-llm-expert/SKILL.md +88 -0
  493. package/skills/global_legacy/microservices-patterns/SKILL.md +43 -0
  494. package/skills/global_legacy/microservices-patterns/resources/implementation-playbook.md +607 -0
  495. package/skills/global_legacy/modern-javascript-patterns/SKILL.md +43 -0
  496. package/skills/global_legacy/modern-javascript-patterns/resources/implementation-playbook.md +910 -0
  497. package/skills/global_legacy/monorepo-management/SKILL.md +43 -0
  498. package/skills/global_legacy/monorepo-management/resources/implementation-playbook.md +621 -0
  499. package/skills/global_legacy/n8n-code-javascript/SKILL.md +706 -0
  500. package/skills/global_legacy/n8n-code-python/SKILL.md +755 -0
  501. package/skills/global_legacy/n8n-expression-syntax/SKILL.md +528 -0
  502. package/skills/global_legacy/n8n-mcp-tools-expert/SKILL.md +654 -0
  503. package/skills/global_legacy/n8n-workflow-patterns/SKILL.md +423 -0
  504. package/skills/global_legacy/neon-postgres/SKILL.md +619 -0
  505. package/skills/global_legacy/nextjs-app-router-patterns/SKILL.md +41 -0
  506. package/skills/global_legacy/nextjs-app-router-patterns/resources/implementation-playbook.md +543 -0
  507. package/skills/global_legacy/nextjs-best-practices/SKILL.md +213 -0
  508. package/skills/global_legacy/notion-automation/SKILL.md +224 -0
  509. package/skills/global_legacy/obsidian-markdown/SKILL.md +209 -0
  510. package/skills/global_legacy/obsidian-markdown/references/CALLOUTS.md +58 -0
  511. package/skills/global_legacy/obsidian-markdown/references/EMBEDS.md +63 -0
  512. package/skills/global_legacy/obsidian-markdown/references/PROPERTIES.md +61 -0
  513. package/skills/global_legacy/openapi-spec-generation/SKILL.md +41 -0
  514. package/skills/global_legacy/openapi-spec-generation/resources/implementation-playbook.md +1027 -0
  515. package/skills/global_legacy/os-scripting/SKILL.md +433 -0
  516. package/skills/global_legacy/planning-with-files/SKILL.md +189 -0
  517. package/skills/global_legacy/planning-with-files/examples.md +202 -0
  518. package/skills/global_legacy/planning-with-files/reference.md +218 -0
  519. package/skills/global_legacy/planning-with-files/scripts/check-complete.sh +44 -0
  520. package/skills/global_legacy/planning-with-files/scripts/init-session.sh +120 -0
  521. package/skills/global_legacy/planning-with-files/templates/findings.md +95 -0
  522. package/skills/global_legacy/planning-with-files/templates/progress.md +114 -0
  523. package/skills/global_legacy/planning-with-files/templates/task_plan.md +132 -0
  524. package/skills/global_legacy/playwright-skill/API_REFERENCE.md +653 -0
  525. package/skills/global_legacy/playwright-skill/SKILL.md +469 -0
  526. package/skills/global_legacy/playwright-skill/lib/helpers.js +441 -0
  527. package/skills/global_legacy/playwright-skill/package.json +26 -0
  528. package/skills/global_legacy/playwright-skill/run.js +228 -0
  529. package/skills/global_legacy/posix-shell-pro/SKILL.md +308 -0
  530. package/skills/global_legacy/postgres-best-practices/AGENTS.md +1490 -0
  531. package/skills/global_legacy/postgres-best-practices/README.md +119 -0
  532. package/skills/global_legacy/postgres-best-practices/SKILL.md +63 -0
  533. package/skills/global_legacy/postgres-best-practices/metadata.json +13 -0
  534. package/skills/global_legacy/postgres-best-practices/rules/_contributing.md +171 -0
  535. package/skills/global_legacy/postgres-best-practices/rules/_sections.md +39 -0
  536. package/skills/global_legacy/postgres-best-practices/rules/_template.md +34 -0
  537. package/skills/global_legacy/postgres-best-practices/rules/advanced-full-text-search.md +55 -0
  538. package/skills/global_legacy/postgres-best-practices/rules/advanced-jsonb-indexing.md +49 -0
  539. package/skills/global_legacy/postgres-best-practices/rules/conn-idle-timeout.md +46 -0
  540. package/skills/global_legacy/postgres-best-practices/rules/conn-limits.md +44 -0
  541. package/skills/global_legacy/postgres-best-practices/rules/conn-pooling.md +41 -0
  542. package/skills/global_legacy/postgres-best-practices/rules/conn-prepared-statements.md +46 -0
  543. package/skills/global_legacy/postgres-best-practices/rules/data-batch-inserts.md +54 -0
  544. package/skills/global_legacy/postgres-best-practices/rules/data-n-plus-one.md +53 -0
  545. package/skills/global_legacy/postgres-best-practices/rules/data-pagination.md +50 -0
  546. package/skills/global_legacy/postgres-best-practices/rules/data-upsert.md +50 -0
  547. package/skills/global_legacy/postgres-best-practices/rules/lock-advisory.md +56 -0
  548. package/skills/global_legacy/postgres-best-practices/rules/lock-deadlock-prevention.md +68 -0
  549. package/skills/global_legacy/postgres-best-practices/rules/lock-short-transactions.md +50 -0
  550. package/skills/global_legacy/postgres-best-practices/rules/lock-skip-locked.md +54 -0
  551. package/skills/global_legacy/postgres-best-practices/rules/monitor-explain-analyze.md +45 -0
  552. package/skills/global_legacy/postgres-best-practices/rules/monitor-pg-stat-statements.md +55 -0
  553. package/skills/global_legacy/postgres-best-practices/rules/monitor-vacuum-analyze.md +55 -0
  554. package/skills/global_legacy/postgres-best-practices/rules/query-composite-indexes.md +44 -0
  555. package/skills/global_legacy/postgres-best-practices/rules/query-covering-indexes.md +40 -0
  556. package/skills/global_legacy/postgres-best-practices/rules/query-index-types.md +45 -0
  557. package/skills/global_legacy/postgres-best-practices/rules/query-missing-indexes.md +43 -0
  558. package/skills/global_legacy/postgres-best-practices/rules/query-partial-indexes.md +45 -0
  559. package/skills/global_legacy/postgres-best-practices/rules/schema-data-types.md +46 -0
  560. package/skills/global_legacy/postgres-best-practices/rules/schema-foreign-key-indexes.md +59 -0
  561. package/skills/global_legacy/postgres-best-practices/rules/schema-lowercase-identifiers.md +55 -0
  562. package/skills/global_legacy/postgres-best-practices/rules/schema-partitioning.md +55 -0
  563. package/skills/global_legacy/postgres-best-practices/rules/schema-primary-keys.md +61 -0
  564. package/skills/global_legacy/postgres-best-practices/rules/security-privileges.md +54 -0
  565. package/skills/global_legacy/postgres-best-practices/rules/security-rls-basics.md +50 -0
  566. package/skills/global_legacy/postgres-best-practices/rules/security-rls-performance.md +57 -0
  567. package/skills/global_legacy/postgresql/SKILL.md +233 -0
  568. package/skills/global_legacy/prisma-expert/SKILL.md +366 -0
  569. package/skills/global_legacy/product-manager-toolkit/SKILL.md +362 -0
  570. package/skills/global_legacy/product-manager-toolkit/references/prd_templates.md +317 -0
  571. package/skills/global_legacy/product-manager-toolkit/scripts/customer_interview_analyzer.py +441 -0
  572. package/skills/global_legacy/product-manager-toolkit/scripts/rice_prioritizer.py +296 -0
  573. package/skills/global_legacy/programmatic-seo/SKILL.md +356 -0
  574. package/skills/global_legacy/prompt-engineer/README.md +659 -0
  575. package/skills/global_legacy/prompt-engineer/SKILL.md +281 -0
  576. package/skills/global_legacy/prompt-engineering-patterns/SKILL.md +221 -0
  577. package/skills/global_legacy/prompt-engineering-patterns/assets/few-shot-examples.json +106 -0
  578. package/skills/global_legacy/prompt-engineering-patterns/assets/prompt-template-library.md +246 -0
  579. package/skills/global_legacy/prompt-engineering-patterns/references/chain-of-thought.md +399 -0
  580. package/skills/global_legacy/prompt-engineering-patterns/references/few-shot-learning.md +369 -0
  581. package/skills/global_legacy/prompt-engineering-patterns/references/prompt-optimization.md +414 -0
  582. package/skills/global_legacy/prompt-engineering-patterns/references/prompt-templates.md +470 -0
  583. package/skills/global_legacy/prompt-engineering-patterns/references/system-prompts.md +189 -0
  584. package/skills/global_legacy/prompt-engineering-patterns/scripts/optimize-prompt.py +279 -0
  585. package/skills/global_legacy/python-patterns/SKILL.md +451 -0
  586. package/skills/global_legacy/python-performance-optimization/SKILL.md +44 -0
  587. package/skills/global_legacy/python-performance-optimization/resources/implementation-playbook.md +868 -0
  588. package/skills/global_legacy/python-pro/SKILL.md +161 -0
  589. package/skills/global_legacy/rag-engineer/SKILL.md +341 -0
  590. package/skills/global_legacy/rag-implementation/SKILL.md +201 -0
  591. package/skills/global_legacy/react-best-practices/AGENTS.md +2249 -0
  592. package/skills/global_legacy/react-best-practices/README.md +123 -0
  593. package/skills/global_legacy/react-best-practices/SKILL.md +131 -0
  594. package/skills/global_legacy/react-best-practices/metadata.json +15 -0
  595. package/skills/global_legacy/react-best-practices/rules/_sections.md +46 -0
  596. package/skills/global_legacy/react-best-practices/rules/_template.md +28 -0
  597. package/skills/global_legacy/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  598. package/skills/global_legacy/react-best-practices/rules/advanced-use-latest.md +49 -0
  599. package/skills/global_legacy/react-best-practices/rules/async-api-routes.md +38 -0
  600. package/skills/global_legacy/react-best-practices/rules/async-defer-await.md +80 -0
  601. package/skills/global_legacy/react-best-practices/rules/async-dependencies.md +36 -0
  602. package/skills/global_legacy/react-best-practices/rules/async-parallel.md +28 -0
  603. package/skills/global_legacy/react-best-practices/rules/async-suspense-boundaries.md +99 -0
  604. package/skills/global_legacy/react-best-practices/rules/bundle-barrel-imports.md +59 -0
  605. package/skills/global_legacy/react-best-practices/rules/bundle-conditional.md +31 -0
  606. package/skills/global_legacy/react-best-practices/rules/bundle-defer-third-party.md +49 -0
  607. package/skills/global_legacy/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  608. package/skills/global_legacy/react-best-practices/rules/bundle-preload.md +50 -0
  609. package/skills/global_legacy/react-best-practices/rules/client-event-listeners.md +74 -0
  610. package/skills/global_legacy/react-best-practices/rules/client-swr-dedup.md +56 -0
  611. package/skills/global_legacy/react-best-practices/rules/js-batch-dom-css.md +82 -0
  612. package/skills/global_legacy/react-best-practices/rules/js-cache-function-results.md +80 -0
  613. package/skills/global_legacy/react-best-practices/rules/js-cache-property-access.md +28 -0
  614. package/skills/global_legacy/react-best-practices/rules/js-cache-storage.md +70 -0
  615. package/skills/global_legacy/react-best-practices/rules/js-combine-iterations.md +32 -0
  616. package/skills/global_legacy/react-best-practices/rules/js-early-exit.md +50 -0
  617. package/skills/global_legacy/react-best-practices/rules/js-hoist-regexp.md +45 -0
  618. package/skills/global_legacy/react-best-practices/rules/js-index-maps.md +37 -0
  619. package/skills/global_legacy/react-best-practices/rules/js-length-check-first.md +49 -0
  620. package/skills/global_legacy/react-best-practices/rules/js-min-max-loop.md +82 -0
  621. package/skills/global_legacy/react-best-practices/rules/js-set-map-lookups.md +24 -0
  622. package/skills/global_legacy/react-best-practices/rules/js-tosorted-immutable.md +57 -0
  623. package/skills/global_legacy/react-best-practices/rules/rendering-activity.md +26 -0
  624. package/skills/global_legacy/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  625. package/skills/global_legacy/react-best-practices/rules/rendering-conditional-render.md +40 -0
  626. package/skills/global_legacy/react-best-practices/rules/rendering-content-visibility.md +38 -0
  627. package/skills/global_legacy/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  628. package/skills/global_legacy/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  629. package/skills/global_legacy/react-best-practices/rules/rendering-svg-precision.md +28 -0
  630. package/skills/global_legacy/react-best-practices/rules/rerender-defer-reads.md +39 -0
  631. package/skills/global_legacy/react-best-practices/rules/rerender-dependencies.md +45 -0
  632. package/skills/global_legacy/react-best-practices/rules/rerender-derived-state.md +29 -0
  633. package/skills/global_legacy/react-best-practices/rules/rerender-functional-setstate.md +74 -0
  634. package/skills/global_legacy/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  635. package/skills/global_legacy/react-best-practices/rules/rerender-memo.md +44 -0
  636. package/skills/global_legacy/react-best-practices/rules/rerender-transitions.md +40 -0
  637. package/skills/global_legacy/react-best-practices/rules/server-after-nonblocking.md +73 -0
  638. package/skills/global_legacy/react-best-practices/rules/server-cache-lru.md +41 -0
  639. package/skills/global_legacy/react-best-practices/rules/server-cache-react.md +26 -0
  640. package/skills/global_legacy/react-best-practices/rules/server-parallel-fetching.md +79 -0
  641. package/skills/global_legacy/react-best-practices/rules/server-serialization.md +38 -0
  642. package/skills/global_legacy/react-component-performance/SKILL.md +139 -0
  643. package/skills/global_legacy/react-component-performance/agents/openai.yaml +4 -0
  644. package/skills/global_legacy/react-component-performance/references/examples.md +88 -0
  645. package/skills/global_legacy/react-patterns/SKILL.md +216 -0
  646. package/skills/global_legacy/readme/SKILL.md +848 -0
  647. package/skills/global_legacy/remotion/SKILL.md +404 -0
  648. package/skills/global_legacy/schema-markup/SKILL.md +363 -0
  649. package/skills/global_legacy/senior-frontend/SKILL.md +495 -0
  650. package/skills/global_legacy/senior-frontend/references/frontend_best_practices.md +806 -0
  651. package/skills/global_legacy/senior-frontend/references/nextjs_optimization_guide.md +724 -0
  652. package/skills/global_legacy/senior-frontend/references/react_patterns.md +746 -0
  653. package/skills/global_legacy/senior-frontend/scripts/bundle_analyzer.py +407 -0
  654. package/skills/global_legacy/senior-frontend/scripts/component_generator.py +329 -0
  655. package/skills/global_legacy/senior-frontend/scripts/frontend_scaffolder.py +1005 -0
  656. package/skills/global_legacy/senior-fullstack/SKILL.md +220 -0
  657. package/skills/global_legacy/senior-fullstack/references/architecture_patterns.md +103 -0
  658. package/skills/global_legacy/senior-fullstack/references/development_workflows.md +103 -0
  659. package/skills/global_legacy/senior-fullstack/references/tech_stack_guide.md +103 -0
  660. package/skills/global_legacy/senior-fullstack/scripts/code_quality_analyzer.py +114 -0
  661. package/skills/global_legacy/senior-fullstack/scripts/fullstack_scaffolder.py +114 -0
  662. package/skills/global_legacy/senior-fullstack/scripts/project_scaffolder.py +114 -0
  663. package/skills/global_legacy/seo/SKILL.md +143 -0
  664. package/skills/global_legacy/seo/references/cwv-thresholds.md +108 -0
  665. package/skills/global_legacy/seo/references/eeat-framework.md +214 -0
  666. package/skills/global_legacy/seo/references/quality-gates.md +155 -0
  667. package/skills/global_legacy/seo/references/schema-types.md +118 -0
  668. package/skills/global_legacy/seo-audit/SKILL.md +492 -0
  669. package/skills/global_legacy/seo-technical/SKILL.md +179 -0
  670. package/skills/global_legacy/shadcn/SKILL.md +254 -0
  671. package/skills/global_legacy/shadcn/agents/openai.yml +5 -0
  672. package/skills/global_legacy/shadcn/assets/shadcn-small.png +0 -0
  673. package/skills/global_legacy/shadcn/assets/shadcn.png +0 -0
  674. package/skills/global_legacy/shadcn/cli.md +255 -0
  675. package/skills/global_legacy/shadcn/customization.md +202 -0
  676. package/skills/global_legacy/shadcn/evals/evals.json +47 -0
  677. package/skills/global_legacy/shadcn/mcp.md +94 -0
  678. package/skills/global_legacy/shadcn/rules/base-vs-radix.md +306 -0
  679. package/skills/global_legacy/shadcn/rules/composition.md +195 -0
  680. package/skills/global_legacy/shadcn/rules/forms.md +192 -0
  681. package/skills/global_legacy/shadcn/rules/icons.md +101 -0
  682. package/skills/global_legacy/shadcn/rules/styling.md +162 -0
  683. package/skills/global_legacy/simplify-code/SKILL.md +183 -0
  684. package/skills/global_legacy/slack-automation/SKILL.md +197 -0
  685. package/skills/global_legacy/software-architecture/SKILL.md +86 -0
  686. package/skills/global_legacy/spline-3d-integration/SKILL.md +90 -0
  687. package/skills/global_legacy/spline-3d-integration/examples/interactive-scene.tsx +198 -0
  688. package/skills/global_legacy/spline-3d-integration/examples/react-spline-wrapper.tsx +124 -0
  689. package/skills/global_legacy/spline-3d-integration/examples/vanilla-embed.html +146 -0
  690. package/skills/global_legacy/spline-3d-integration/guides/COMMON_PROBLEMS.md +262 -0
  691. package/skills/global_legacy/spline-3d-integration/guides/PERFORMANCE.md +163 -0
  692. package/skills/global_legacy/spline-3d-integration/guides/REACT_INTEGRATION.md +212 -0
  693. package/skills/global_legacy/spline-3d-integration/guides/VANILLA_INTEGRATION.md +203 -0
  694. package/skills/global_legacy/subagent-driven-development/SKILL.md +247 -0
  695. package/skills/global_legacy/subagent-driven-development/code-quality-reviewer-prompt.md +20 -0
  696. package/skills/global_legacy/subagent-driven-development/implementer-prompt.md +78 -0
  697. package/skills/global_legacy/subagent-driven-development/spec-reviewer-prompt.md +61 -0
  698. package/skills/global_legacy/systematic-debugging/CREATION-LOG.md +119 -0
  699. package/skills/global_legacy/systematic-debugging/SKILL.md +303 -0
  700. package/skills/global_legacy/systematic-debugging/condition-based-waiting-example.ts +158 -0
  701. package/skills/global_legacy/systematic-debugging/condition-based-waiting.md +115 -0
  702. package/skills/global_legacy/systematic-debugging/defense-in-depth.md +122 -0
  703. package/skills/global_legacy/systematic-debugging/find-polluter.sh +63 -0
  704. package/skills/global_legacy/systematic-debugging/root-cause-tracing.md +169 -0
  705. package/skills/global_legacy/systematic-debugging/test-academic.md +14 -0
  706. package/skills/global_legacy/systematic-debugging/test-pressure-1.md +58 -0
  707. package/skills/global_legacy/systematic-debugging/test-pressure-2.md +68 -0
  708. package/skills/global_legacy/systematic-debugging/test-pressure-3.md +69 -0
  709. package/skills/global_legacy/tailwind-patterns/SKILL.md +279 -0
  710. package/skills/global_legacy/tanstack-query-expert/SKILL.md +247 -0
  711. package/skills/global_legacy/tdd-workflow/SKILL.md +159 -0
  712. package/skills/global_legacy/test-driven-development/SKILL.md +378 -0
  713. package/skills/global_legacy/test-driven-development/testing-anti-patterns.md +299 -0
  714. package/skills/global_legacy/threejs-skills/SKILL.md +720 -0
  715. package/skills/global_legacy/tmux/SKILL.md +375 -0
  716. package/skills/global_legacy/turborepo-caching/SKILL.md +427 -0
  717. package/skills/global_legacy/typescript-pro/SKILL.md +58 -0
  718. package/skills/global_legacy/ui-component/SKILL.md +104 -0
  719. package/skills/global_legacy/ui-page/SKILL.md +100 -0
  720. package/skills/global_legacy/ui-pattern/SKILL.md +92 -0
  721. package/skills/global_legacy/ui-review/SKILL.md +90 -0
  722. package/skills/global_legacy/ui-tokens/SKILL.md +73 -0
  723. package/skills/global_legacy/ui-ux-pro-max/SKILL.md +361 -0
  724. package/skills/global_legacy/ui-ux-pro-max/data/charts.csv +26 -0
  725. package/skills/global_legacy/ui-ux-pro-max/data/colors.csv +97 -0
  726. package/skills/global_legacy/ui-ux-pro-max/data/icons.csv +101 -0
  727. package/skills/global_legacy/ui-ux-pro-max/data/landing.csv +31 -0
  728. package/skills/global_legacy/ui-ux-pro-max/data/products.csv +97 -0
  729. package/skills/global_legacy/ui-ux-pro-max/data/prompts.csv +24 -0
  730. package/skills/global_legacy/ui-ux-pro-max/data/react-performance.csv +45 -0
  731. package/skills/global_legacy/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
  732. package/skills/global_legacy/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
  733. package/skills/global_legacy/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
  734. package/skills/global_legacy/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
  735. package/skills/global_legacy/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
  736. package/skills/global_legacy/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
  737. package/skills/global_legacy/ui-ux-pro-max/data/stacks/react.csv +54 -0
  738. package/skills/global_legacy/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
  739. package/skills/global_legacy/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
  740. package/skills/global_legacy/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
  741. package/skills/global_legacy/ui-ux-pro-max/data/stacks/vue.csv +50 -0
  742. package/skills/global_legacy/ui-ux-pro-max/data/styles.csv +59 -0
  743. package/skills/global_legacy/ui-ux-pro-max/data/typography.csv +58 -0
  744. package/skills/global_legacy/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
  745. package/skills/global_legacy/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
  746. package/skills/global_legacy/ui-ux-pro-max/data/web-interface.csv +31 -0
  747. package/skills/global_legacy/ui-ux-pro-max/scripts/core.py +257 -0
  748. package/skills/global_legacy/ui-ux-pro-max/scripts/design_system.py +487 -0
  749. package/skills/global_legacy/ui-ux-pro-max/scripts/search.py +76 -0
  750. package/skills/global_legacy/using-neon/SKILL.md +90 -0
  751. package/skills/global_legacy/ux-audit/SKILL.md +66 -0
  752. package/skills/global_legacy/ux-feedback/SKILL.md +68 -0
  753. package/skills/global_legacy/ux-flow/SKILL.md +72 -0
  754. package/skills/global_legacy/ux-persuasion-engineer/SKILL.md +119 -0
  755. package/skills/global_legacy/vector-database-engineer/SKILL.md +68 -0
  756. package/skills/global_legacy/vercel-ai-sdk-expert/SKILL.md +227 -0
  757. package/skills/global_legacy/vercel-deployment/SKILL.md +682 -0
  758. package/skills/global_legacy/wcag-audit-patterns/SKILL.md +49 -0
  759. package/skills/global_legacy/wcag-audit-patterns/resources/implementation-playbook.md +541 -0
  760. package/skills/global_legacy/web-artifacts-builder/LICENSE.txt +202 -0
  761. package/skills/global_legacy/web-artifacts-builder/SKILL.md +84 -0
  762. package/skills/global_legacy/web-artifacts-builder/scripts/bundle-artifact.sh +54 -0
  763. package/skills/global_legacy/web-artifacts-builder/scripts/init-artifact.sh +322 -0
  764. package/skills/global_legacy/web-artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  765. package/skills/global_legacy/web-performance-optimization/SKILL.md +654 -0
  766. package/skills/global_legacy/web-scraper/SKILL.md +757 -0
  767. package/skills/global_legacy/web-scraper/references/data-transforms.md +397 -0
  768. package/skills/global_legacy/web-scraper/references/extraction-patterns.md +475 -0
  769. package/skills/global_legacy/web-scraper/references/output-templates.md +481 -0
  770. package/skills/global_legacy/webapp-testing/LICENSE.txt +202 -0
  771. package/skills/global_legacy/webapp-testing/SKILL.md +106 -0
  772. package/skills/global_legacy/webapp-testing/scripts/with_server.py +106 -0
  773. package/skills/global_legacy/writing-plans/SKILL.md +127 -0
  774. package/skills/global_legacy/zustand-store-ts/SKILL.md +79 -0
  775. package/skills/workspace_agents/firecrawl/SKILL.md +148 -0
  776. package/skills/workspace_agents/firecrawl/rules/install.md +82 -0
  777. package/skills/workspace_agents/firecrawl/rules/security.md +26 -0
  778. package/skills/workspace_agents/firecrawl-agent/SKILL.md +57 -0
  779. package/skills/workspace_agents/firecrawl-build/SKILL.md +38 -0
  780. package/skills/workspace_agents/firecrawl-build-interact/SKILL.md +67 -0
  781. package/skills/workspace_agents/firecrawl-build-onboarding/SKILL.md +102 -0
  782. package/skills/workspace_agents/firecrawl-build-onboarding/references/auth-flow.md +39 -0
  783. package/skills/workspace_agents/firecrawl-build-onboarding/references/project-setup.md +20 -0
  784. package/skills/workspace_agents/firecrawl-build-onboarding/references/sdk-installation.md +17 -0
  785. package/skills/workspace_agents/firecrawl-build-scrape/SKILL.md +68 -0
  786. package/skills/workspace_agents/firecrawl-build-search/SKILL.md +68 -0
  787. package/skills/workspace_agents/firecrawl-crawl/SKILL.md +58 -0
  788. package/skills/workspace_agents/firecrawl-download/SKILL.md +69 -0
  789. package/skills/workspace_agents/firecrawl-interact/SKILL.md +83 -0
  790. package/skills/workspace_agents/firecrawl-map/SKILL.md +50 -0
  791. package/skills/workspace_agents/firecrawl-scrape/SKILL.md +68 -0
  792. package/skills/workspace_agents/firecrawl-search/SKILL.md +59 -0
@@ -0,0 +1,1005 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Frontend Project Scaffolder
4
+
5
+ Generates a complete Next.js/React project structure with TypeScript,
6
+ Tailwind CSS, and best practice configurations.
7
+
8
+ Usage:
9
+ python frontend_scaffolder.py my-app --template nextjs
10
+ python frontend_scaffolder.py dashboard --template react --features auth,api
11
+ python frontend_scaffolder.py landing --template nextjs --dry-run
12
+ """
13
+
14
+ import argparse
15
+ import json
16
+ import os
17
+ import sys
18
+ from pathlib import Path
19
+ from typing import Dict, List, Optional
20
+
21
+
22
+ # Project templates
23
+ TEMPLATES = {
24
+ "nextjs": {
25
+ "name": "Next.js 14+ App Router",
26
+ "description": "Modern Next.js with App Router, Server Components, and TypeScript",
27
+ "structure": {
28
+ "app": {
29
+ "layout.tsx": "ROOT_LAYOUT",
30
+ "page.tsx": "HOME_PAGE",
31
+ "globals.css": "GLOBALS_CSS",
32
+ "(auth)": {
33
+ "login": {"page.tsx": "AUTH_PAGE"},
34
+ "register": {"page.tsx": "AUTH_PAGE"},
35
+ },
36
+ "api": {
37
+ "health": {"route.ts": "HEALTH_ROUTE"},
38
+ },
39
+ },
40
+ "components": {
41
+ "ui": {
42
+ "button.tsx": "UI_BUTTON",
43
+ "input.tsx": "UI_INPUT",
44
+ "card.tsx": "UI_CARD",
45
+ "index.ts": "UI_INDEX",
46
+ },
47
+ "layout": {
48
+ "header.tsx": "LAYOUT_HEADER",
49
+ "footer.tsx": "LAYOUT_FOOTER",
50
+ "sidebar.tsx": "LAYOUT_SIDEBAR",
51
+ },
52
+ },
53
+ "lib": {
54
+ "utils.ts": "UTILS",
55
+ "constants.ts": "CONSTANTS",
56
+ },
57
+ "hooks": {
58
+ "use-debounce.ts": "HOOK_DEBOUNCE",
59
+ "use-local-storage.ts": "HOOK_LOCAL_STORAGE",
60
+ },
61
+ "types": {
62
+ "index.ts": "TYPES_INDEX",
63
+ },
64
+ "public": {
65
+ ".gitkeep": "EMPTY",
66
+ },
67
+ },
68
+ "config_files": [
69
+ "next.config.js",
70
+ "tailwind.config.ts",
71
+ "tsconfig.json",
72
+ "postcss.config.js",
73
+ ".eslintrc.json",
74
+ ".prettierrc",
75
+ ".gitignore",
76
+ "package.json",
77
+ ],
78
+ },
79
+ "react": {
80
+ "name": "React + Vite",
81
+ "description": "Modern React with Vite, TypeScript, and Tailwind CSS",
82
+ "structure": {
83
+ "src": {
84
+ "App.tsx": "REACT_APP",
85
+ "main.tsx": "REACT_MAIN",
86
+ "index.css": "GLOBALS_CSS",
87
+ "components": {
88
+ "ui": {
89
+ "button.tsx": "UI_BUTTON",
90
+ "input.tsx": "UI_INPUT",
91
+ "card.tsx": "UI_CARD",
92
+ "index.ts": "UI_INDEX",
93
+ },
94
+ },
95
+ "hooks": {
96
+ "use-debounce.ts": "HOOK_DEBOUNCE",
97
+ "use-local-storage.ts": "HOOK_LOCAL_STORAGE",
98
+ },
99
+ "lib": {
100
+ "utils.ts": "UTILS",
101
+ },
102
+ "types": {
103
+ "index.ts": "TYPES_INDEX",
104
+ },
105
+ },
106
+ "public": {
107
+ ".gitkeep": "EMPTY",
108
+ },
109
+ },
110
+ "config_files": [
111
+ "vite.config.ts",
112
+ "tailwind.config.ts",
113
+ "tsconfig.json",
114
+ "postcss.config.js",
115
+ ".eslintrc.json",
116
+ ".prettierrc",
117
+ ".gitignore",
118
+ "package.json",
119
+ "index.html",
120
+ ],
121
+ },
122
+ }
123
+
124
+ # Feature modules that can be added
125
+ FEATURES = {
126
+ "auth": {
127
+ "description": "Authentication with session management",
128
+ "files": {
129
+ "lib/auth.ts": "AUTH_LIB",
130
+ "middleware.ts": "AUTH_MIDDLEWARE",
131
+ "components/auth/login-form.tsx": "LOGIN_FORM",
132
+ "components/auth/register-form.tsx": "REGISTER_FORM",
133
+ },
134
+ "dependencies": ["next-auth", "@auth/core"],
135
+ },
136
+ "api": {
137
+ "description": "API client with React Query",
138
+ "files": {
139
+ "lib/api-client.ts": "API_CLIENT",
140
+ "lib/query-client.ts": "QUERY_CLIENT",
141
+ "providers/query-provider.tsx": "QUERY_PROVIDER",
142
+ },
143
+ "dependencies": ["@tanstack/react-query", "axios"],
144
+ },
145
+ "forms": {
146
+ "description": "Form handling with React Hook Form + Zod",
147
+ "files": {
148
+ "lib/form-utils.ts": "FORM_UTILS",
149
+ "components/forms/form-field.tsx": "FORM_FIELD",
150
+ },
151
+ "dependencies": ["react-hook-form", "@hookform/resolvers", "zod"],
152
+ },
153
+ "testing": {
154
+ "description": "Testing setup with Vitest and Testing Library",
155
+ "files": {
156
+ "vitest.config.ts": "VITEST_CONFIG",
157
+ "src/test/setup.ts": "TEST_SETUP",
158
+ "src/test/utils.tsx": "TEST_UTILS",
159
+ },
160
+ "dependencies": ["vitest", "@testing-library/react", "@testing-library/jest-dom"],
161
+ },
162
+ "storybook": {
163
+ "description": "Component documentation with Storybook",
164
+ "files": {
165
+ ".storybook/main.ts": "STORYBOOK_MAIN",
166
+ ".storybook/preview.ts": "STORYBOOK_PREVIEW",
167
+ },
168
+ "dependencies": ["@storybook/react-vite", "@storybook/addon-essentials"],
169
+ },
170
+ }
171
+
172
+ # File content templates
173
+ FILE_CONTENTS = {
174
+ "ROOT_LAYOUT": '''import type { Metadata } from 'next';
175
+ import { Inter } from 'next/font/google';
176
+ import './globals.css';
177
+
178
+ const inter = Inter({ subsets: ['latin'], variable: '--font-inter' });
179
+
180
+ export const metadata: Metadata = {
181
+ title: 'My App',
182
+ description: 'Built with Next.js',
183
+ };
184
+
185
+ export default function RootLayout({
186
+ children,
187
+ }: {
188
+ children: React.ReactNode;
189
+ }) {
190
+ return (
191
+ <html lang="en">
192
+ <body className={`${inter.variable} font-sans antialiased`}>
193
+ {children}
194
+ </body>
195
+ </html>
196
+ );
197
+ }
198
+ ''',
199
+ "HOME_PAGE": '''export default function Home() {
200
+ return (
201
+ <main className="flex min-h-screen flex-col items-center justify-center p-24">
202
+ <h1 className="text-4xl font-bold">Welcome</h1>
203
+ <p className="mt-4 text-lg text-gray-600">
204
+ Get started by editing app/page.tsx
205
+ </p>
206
+ </main>
207
+ );
208
+ }
209
+ ''',
210
+ "GLOBALS_CSS": '''@tailwind base;
211
+ @tailwind components;
212
+ @tailwind utilities;
213
+
214
+ @layer base {
215
+ :root {
216
+ --background: 0 0% 100%;
217
+ --foreground: 222.2 84% 4.9%;
218
+ --primary: 222.2 47.4% 11.2%;
219
+ --primary-foreground: 210 40% 98%;
220
+ --secondary: 210 40% 96.1%;
221
+ --secondary-foreground: 222.2 47.4% 11.2%;
222
+ --muted: 210 40% 96.1%;
223
+ --muted-foreground: 215.4 16.3% 46.9%;
224
+ --accent: 210 40% 96.1%;
225
+ --accent-foreground: 222.2 47.4% 11.2%;
226
+ --destructive: 0 84.2% 60.2%;
227
+ --destructive-foreground: 210 40% 98%;
228
+ --border: 214.3 31.8% 91.4%;
229
+ --ring: 222.2 84% 4.9%;
230
+ --radius: 0.5rem;
231
+ }
232
+
233
+ .dark {
234
+ --background: 222.2 84% 4.9%;
235
+ --foreground: 210 40% 98%;
236
+ }
237
+ }
238
+
239
+ @layer base {
240
+ * {
241
+ @apply border-border;
242
+ }
243
+ body {
244
+ @apply bg-background text-foreground;
245
+ }
246
+ }
247
+ ''',
248
+ "UI_BUTTON": '''import { forwardRef } from 'react';
249
+ import { cn } from '@/lib/utils';
250
+
251
+ interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
252
+ variant?: 'default' | 'destructive' | 'outline' | 'ghost';
253
+ size?: 'default' | 'sm' | 'lg';
254
+ }
255
+
256
+ const Button = forwardRef<HTMLButtonElement, ButtonProps>(
257
+ ({ className, variant = 'default', size = 'default', ...props }, ref) => {
258
+ return (
259
+ <button
260
+ className={cn(
261
+ 'inline-flex items-center justify-center rounded-md font-medium transition-colors',
262
+ 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',
263
+ 'disabled:pointer-events-none disabled:opacity-50',
264
+ {
265
+ 'bg-primary text-primary-foreground hover:bg-primary/90': variant === 'default',
266
+ 'bg-destructive text-destructive-foreground hover:bg-destructive/90': variant === 'destructive',
267
+ 'border border-input bg-background hover:bg-accent': variant === 'outline',
268
+ 'hover:bg-accent hover:text-accent-foreground': variant === 'ghost',
269
+ },
270
+ {
271
+ 'h-10 px-4 py-2': size === 'default',
272
+ 'h-9 px-3': size === 'sm',
273
+ 'h-11 px-8': size === 'lg',
274
+ },
275
+ className
276
+ )}
277
+ ref={ref}
278
+ {...props}
279
+ />
280
+ );
281
+ }
282
+ );
283
+
284
+ Button.displayName = 'Button';
285
+
286
+ export { Button, type ButtonProps };
287
+ ''',
288
+ "UI_INPUT": '''import { forwardRef } from 'react';
289
+ import { cn } from '@/lib/utils';
290
+
291
+ interface InputProps extends React.InputHTMLAttributes<HTMLInputElement> {
292
+ error?: string;
293
+ }
294
+
295
+ const Input = forwardRef<HTMLInputElement, InputProps>(
296
+ ({ className, error, ...props }, ref) => {
297
+ return (
298
+ <div className="w-full">
299
+ <input
300
+ className={cn(
301
+ 'flex h-10 w-full rounded-md border border-input bg-background px-3 py-2',
302
+ 'text-sm ring-offset-background file:border-0 file:bg-transparent',
303
+ 'file:text-sm file:font-medium placeholder:text-muted-foreground',
304
+ 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',
305
+ 'disabled:cursor-not-allowed disabled:opacity-50',
306
+ error && 'border-destructive focus-visible:ring-destructive',
307
+ className
308
+ )}
309
+ ref={ref}
310
+ {...props}
311
+ />
312
+ {error && <p className="mt-1 text-sm text-destructive">{error}</p>}
313
+ </div>
314
+ );
315
+ }
316
+ );
317
+
318
+ Input.displayName = 'Input';
319
+
320
+ export { Input, type InputProps };
321
+ ''',
322
+ "UI_CARD": '''import { cn } from '@/lib/utils';
323
+
324
+ interface CardProps extends React.HTMLAttributes<HTMLDivElement> {}
325
+
326
+ function Card({ className, ...props }: CardProps) {
327
+ return (
328
+ <div
329
+ className={cn(
330
+ 'rounded-lg border bg-card text-card-foreground shadow-sm',
331
+ className
332
+ )}
333
+ {...props}
334
+ />
335
+ );
336
+ }
337
+
338
+ function CardHeader({ className, ...props }: CardProps) {
339
+ return <div className={cn('flex flex-col space-y-1.5 p-6', className)} {...props} />;
340
+ }
341
+
342
+ function CardTitle({ className, ...props }: React.HTMLAttributes<HTMLHeadingElement>) {
343
+ return <h3 className={cn('text-2xl font-semibold leading-none', className)} {...props} />;
344
+ }
345
+
346
+ function CardContent({ className, ...props }: CardProps) {
347
+ return <div className={cn('p-6 pt-0', className)} {...props} />;
348
+ }
349
+
350
+ function CardFooter({ className, ...props }: CardProps) {
351
+ return <div className={cn('flex items-center p-6 pt-0', className)} {...props} />;
352
+ }
353
+
354
+ export { Card, CardHeader, CardTitle, CardContent, CardFooter };
355
+ ''',
356
+ "UI_INDEX": '''export { Button } from './button';
357
+ export { Input } from './input';
358
+ export { Card, CardHeader, CardTitle, CardContent, CardFooter } from './card';
359
+ ''',
360
+ "UTILS": '''import { type ClassValue, clsx } from 'clsx';
361
+ import { twMerge } from 'tailwind-merge';
362
+
363
+ export function cn(...inputs: ClassValue[]) {
364
+ return twMerge(clsx(inputs));
365
+ }
366
+
367
+ export function formatDate(date: Date | string): string {
368
+ return new Intl.DateTimeFormat('en-US', {
369
+ month: 'short',
370
+ day: 'numeric',
371
+ year: 'numeric',
372
+ }).format(new Date(date));
373
+ }
374
+
375
+ export function sleep(ms: number): Promise<void> {
376
+ return new Promise((resolve) => setTimeout(resolve, ms));
377
+ }
378
+ ''',
379
+ "CONSTANTS": '''export const APP_NAME = 'My App';
380
+ export const API_URL = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:3000/api';
381
+
382
+ export const ROUTES = {
383
+ home: '/',
384
+ login: '/login',
385
+ register: '/register',
386
+ dashboard: '/dashboard',
387
+ } as const;
388
+
389
+ export const QUERY_KEYS = {
390
+ user: ['user'],
391
+ products: ['products'],
392
+ } as const;
393
+ ''',
394
+ "HOOK_DEBOUNCE": '''import { useState, useEffect } from 'react';
395
+
396
+ export function useDebounce<T>(value: T, delay: number = 500): T {
397
+ const [debouncedValue, setDebouncedValue] = useState<T>(value);
398
+
399
+ useEffect(() => {
400
+ const timer = setTimeout(() => setDebouncedValue(value), delay);
401
+ return () => clearTimeout(timer);
402
+ }, [value, delay]);
403
+
404
+ return debouncedValue;
405
+ }
406
+ ''',
407
+ "HOOK_LOCAL_STORAGE": '''import { useState, useEffect } from 'react';
408
+
409
+ export function useLocalStorage<T>(
410
+ key: string,
411
+ initialValue: T
412
+ ): [T, (value: T | ((prev: T) => T)) => void] {
413
+ const [storedValue, setStoredValue] = useState<T>(() => {
414
+ if (typeof window === 'undefined') return initialValue;
415
+
416
+ try {
417
+ const item = window.localStorage.getItem(key);
418
+ return item ? JSON.parse(item) : initialValue;
419
+ } catch {
420
+ return initialValue;
421
+ }
422
+ });
423
+
424
+ useEffect(() => {
425
+ if (typeof window !== 'undefined') {
426
+ window.localStorage.setItem(key, JSON.stringify(storedValue));
427
+ }
428
+ }, [key, storedValue]);
429
+
430
+ return [storedValue, setStoredValue];
431
+ }
432
+ ''',
433
+ "TYPES_INDEX": '''export interface User {
434
+ id: string;
435
+ email: string;
436
+ name: string;
437
+ createdAt: Date;
438
+ }
439
+
440
+ export interface ApiResponse<T> {
441
+ data: T;
442
+ message?: string;
443
+ error?: string;
444
+ }
445
+
446
+ export interface PaginatedResponse<T> {
447
+ data: T[];
448
+ total: number;
449
+ page: number;
450
+ pageSize: number;
451
+ totalPages: number;
452
+ }
453
+ ''',
454
+ "HEALTH_ROUTE": '''import { NextResponse } from 'next/server';
455
+
456
+ export async function GET() {
457
+ return NextResponse.json({
458
+ status: 'ok',
459
+ timestamp: new Date().toISOString(),
460
+ });
461
+ }
462
+ ''',
463
+ "AUTH_PAGE": ''''use client';
464
+
465
+ export default function AuthPage() {
466
+ return (
467
+ <div className="flex min-h-screen items-center justify-center">
468
+ <div className="w-full max-w-md p-8">
469
+ <h1 className="text-2xl font-bold text-center">Authentication</h1>
470
+ </div>
471
+ </div>
472
+ );
473
+ }
474
+ ''',
475
+ "LAYOUT_HEADER": '''import Link from 'next/link';
476
+
477
+ export function Header() {
478
+ return (
479
+ <header className="sticky top-0 z-50 w-full border-b bg-background/95 backdrop-blur">
480
+ <div className="container flex h-14 items-center">
481
+ <Link href="/" className="font-bold">
482
+ Logo
483
+ </Link>
484
+ <nav className="ml-auto flex gap-4">
485
+ <Link href="/about" className="text-sm text-muted-foreground hover:text-foreground">
486
+ About
487
+ </Link>
488
+ </nav>
489
+ </div>
490
+ </header>
491
+ );
492
+ }
493
+ ''',
494
+ "LAYOUT_FOOTER": '''export function Footer() {
495
+ return (
496
+ <footer className="border-t py-6">
497
+ <div className="container text-center text-sm text-muted-foreground">
498
+ <p>&copy; {new Date().getFullYear()} My App. All rights reserved.</p>
499
+ </div>
500
+ </footer>
501
+ );
502
+ }
503
+ ''',
504
+ "LAYOUT_SIDEBAR": '''interface SidebarProps {
505
+ children?: React.ReactNode;
506
+ }
507
+
508
+ export function Sidebar({ children }: SidebarProps) {
509
+ return (
510
+ <aside className="fixed left-0 top-14 z-30 h-[calc(100vh-3.5rem)] w-64 border-r bg-background">
511
+ <div className="p-4">{children}</div>
512
+ </aside>
513
+ );
514
+ }
515
+ ''',
516
+ "REACT_APP": '''import { Button } from './components/ui';
517
+
518
+ function App() {
519
+ return (
520
+ <main className="flex min-h-screen flex-col items-center justify-center p-24">
521
+ <h1 className="text-4xl font-bold">Welcome</h1>
522
+ <p className="mt-4 text-lg text-gray-600">
523
+ Get started by editing src/App.tsx
524
+ </p>
525
+ <Button className="mt-6">Get Started</Button>
526
+ </main>
527
+ );
528
+ }
529
+
530
+ export default App;
531
+ ''',
532
+ "REACT_MAIN": '''import React from 'react';
533
+ import ReactDOM from 'react-dom/client';
534
+ import App from './App';
535
+ import './index.css';
536
+
537
+ ReactDOM.createRoot(document.getElementById('root')!).render(
538
+ <React.StrictMode>
539
+ <App />
540
+ </React.StrictMode>
541
+ );
542
+ ''',
543
+ "EMPTY": "",
544
+ }
545
+
546
+
547
+ def generate_structure(
548
+ base_path: Path,
549
+ structure: Dict,
550
+ dry_run: bool = False
551
+ ) -> List[str]:
552
+ """Generate directory structure recursively."""
553
+ created_files = []
554
+
555
+ for name, content in structure.items():
556
+ current_path = base_path / name
557
+
558
+ if isinstance(content, dict):
559
+ # It's a directory
560
+ if not dry_run:
561
+ current_path.mkdir(parents=True, exist_ok=True)
562
+ created_files.extend(generate_structure(current_path, content, dry_run))
563
+ else:
564
+ # It's a file
565
+ if not dry_run:
566
+ current_path.parent.mkdir(parents=True, exist_ok=True)
567
+ file_content = FILE_CONTENTS.get(content, "")
568
+ current_path.write_text(file_content)
569
+ created_files.append(str(current_path))
570
+
571
+ return created_files
572
+
573
+
574
+ def generate_config_files(
575
+ project_path: Path,
576
+ template: str,
577
+ project_name: str,
578
+ features: List[str],
579
+ dry_run: bool = False
580
+ ) -> List[str]:
581
+ """Generate configuration files."""
582
+ created_files = []
583
+ config_templates = get_config_templates(project_name, template, features)
584
+
585
+ template_config = TEMPLATES[template]
586
+ for config_file in template_config["config_files"]:
587
+ file_path = project_path / config_file
588
+ if config_file in config_templates:
589
+ if not dry_run:
590
+ file_path.write_text(config_templates[config_file])
591
+ created_files.append(str(file_path))
592
+
593
+ return created_files
594
+
595
+
596
+ def get_config_templates(name: str, template: str, features: List[str]) -> Dict[str, str]:
597
+ """Get configuration file contents."""
598
+ deps = {
599
+ "nextjs": {
600
+ "dependencies": {
601
+ "next": "^14.0.0",
602
+ "react": "^18.2.0",
603
+ "react-dom": "^18.2.0",
604
+ "clsx": "^2.0.0",
605
+ "tailwind-merge": "^2.0.0",
606
+ },
607
+ "devDependencies": {
608
+ "@types/node": "^20.0.0",
609
+ "@types/react": "^18.2.0",
610
+ "@types/react-dom": "^18.2.0",
611
+ "autoprefixer": "^10.0.0",
612
+ "eslint": "^8.0.0",
613
+ "eslint-config-next": "^14.0.0",
614
+ "postcss": "^8.0.0",
615
+ "prettier": "^3.0.0",
616
+ "tailwindcss": "^3.4.0",
617
+ "typescript": "^5.0.0",
618
+ },
619
+ },
620
+ "react": {
621
+ "dependencies": {
622
+ "react": "^18.2.0",
623
+ "react-dom": "^18.2.0",
624
+ "clsx": "^2.0.0",
625
+ "tailwind-merge": "^2.0.0",
626
+ },
627
+ "devDependencies": {
628
+ "@types/react": "^18.2.0",
629
+ "@types/react-dom": "^18.2.0",
630
+ "@vitejs/plugin-react": "^4.0.0",
631
+ "autoprefixer": "^10.0.0",
632
+ "eslint": "^8.0.0",
633
+ "postcss": "^8.0.0",
634
+ "prettier": "^3.0.0",
635
+ "tailwindcss": "^3.4.0",
636
+ "typescript": "^5.0.0",
637
+ "vite": "^5.0.0",
638
+ },
639
+ },
640
+ }
641
+
642
+ # Add feature dependencies
643
+ for feature in features:
644
+ if feature in FEATURES:
645
+ for dep in FEATURES[feature].get("dependencies", []):
646
+ deps[template]["dependencies"][dep] = "latest"
647
+
648
+ package_json = {
649
+ "name": name,
650
+ "version": "0.1.0",
651
+ "private": True,
652
+ "scripts": {
653
+ "dev": "next dev" if template == "nextjs" else "vite",
654
+ "build": "next build" if template == "nextjs" else "vite build",
655
+ "start": "next start" if template == "nextjs" else "vite preview",
656
+ "lint": "eslint . --ext .ts,.tsx",
657
+ "format": "prettier --write .",
658
+ },
659
+ "dependencies": deps[template]["dependencies"],
660
+ "devDependencies": deps[template]["devDependencies"],
661
+ }
662
+
663
+ return {
664
+ "package.json": json.dumps(package_json, indent=2),
665
+ "tsconfig.json": '''{
666
+ "compilerOptions": {
667
+ "target": "ES2020",
668
+ "lib": ["dom", "dom.iterable", "esnext"],
669
+ "allowJs": true,
670
+ "skipLibCheck": true,
671
+ "strict": true,
672
+ "noEmit": true,
673
+ "esModuleInterop": true,
674
+ "module": "esnext",
675
+ "moduleResolution": "bundler",
676
+ "resolveJsonModule": true,
677
+ "isolatedModules": true,
678
+ "jsx": "preserve",
679
+ "incremental": true,
680
+ "plugins": [{ "name": "next" }],
681
+ "paths": {
682
+ "@/*": ["./*"]
683
+ }
684
+ },
685
+ "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
686
+ "exclude": ["node_modules"]
687
+ }
688
+ ''',
689
+ "tailwind.config.ts": '''import type { Config } from 'tailwindcss';
690
+
691
+ const config: Config = {
692
+ content: [
693
+ './pages/**/*.{js,ts,jsx,tsx,mdx}',
694
+ './components/**/*.{js,ts,jsx,tsx,mdx}',
695
+ './app/**/*.{js,ts,jsx,tsx,mdx}',
696
+ './src/**/*.{js,ts,jsx,tsx,mdx}',
697
+ ],
698
+ theme: {
699
+ extend: {
700
+ colors: {
701
+ background: 'hsl(var(--background))',
702
+ foreground: 'hsl(var(--foreground))',
703
+ primary: {
704
+ DEFAULT: 'hsl(var(--primary))',
705
+ foreground: 'hsl(var(--primary-foreground))',
706
+ },
707
+ secondary: {
708
+ DEFAULT: 'hsl(var(--secondary))',
709
+ foreground: 'hsl(var(--secondary-foreground))',
710
+ },
711
+ destructive: {
712
+ DEFAULT: 'hsl(var(--destructive))',
713
+ foreground: 'hsl(var(--destructive-foreground))',
714
+ },
715
+ muted: {
716
+ DEFAULT: 'hsl(var(--muted))',
717
+ foreground: 'hsl(var(--muted-foreground))',
718
+ },
719
+ accent: {
720
+ DEFAULT: 'hsl(var(--accent))',
721
+ foreground: 'hsl(var(--accent-foreground))',
722
+ },
723
+ border: 'hsl(var(--border))',
724
+ ring: 'hsl(var(--ring))',
725
+ },
726
+ borderRadius: {
727
+ lg: 'var(--radius)',
728
+ md: 'calc(var(--radius) - 2px)',
729
+ sm: 'calc(var(--radius) - 4px)',
730
+ },
731
+ },
732
+ },
733
+ plugins: [],
734
+ };
735
+
736
+ export default config;
737
+ ''',
738
+ "postcss.config.js": '''module.exports = {
739
+ plugins: {
740
+ tailwindcss: {},
741
+ autoprefixer: {},
742
+ },
743
+ };
744
+ ''',
745
+ "next.config.js": '''/** @type {import('next').NextConfig} */
746
+ const nextConfig = {
747
+ images: {
748
+ remotePatterns: [],
749
+ formats: ['image/avif', 'image/webp'],
750
+ },
751
+ experimental: {
752
+ optimizePackageImports: ['lucide-react'],
753
+ },
754
+ };
755
+
756
+ module.exports = nextConfig;
757
+ ''',
758
+ "vite.config.ts": '''import { defineConfig } from 'vite';
759
+ import react from '@vitejs/plugin-react';
760
+ import path from 'path';
761
+
762
+ export default defineConfig({
763
+ plugins: [react()],
764
+ resolve: {
765
+ alias: {
766
+ '@': path.resolve(__dirname, './src'),
767
+ },
768
+ },
769
+ });
770
+ ''',
771
+ ".eslintrc.json": '''{
772
+ "extends": ["next/core-web-vitals", "prettier"],
773
+ "rules": {
774
+ "react/no-unescaped-entities": "off"
775
+ }
776
+ }
777
+ ''',
778
+ ".prettierrc": '''{
779
+ "semi": true,
780
+ "singleQuote": true,
781
+ "tabWidth": 2,
782
+ "trailingComma": "es5",
783
+ "printWidth": 100
784
+ }
785
+ ''',
786
+ ".gitignore": '''# Dependencies
787
+ node_modules/
788
+ .pnp
789
+ .pnp.js
790
+
791
+ # Build
792
+ .next/
793
+ out/
794
+ dist/
795
+ build/
796
+
797
+ # Environment
798
+ .env
799
+ .env.local
800
+ .env.*.local
801
+
802
+ # IDE
803
+ .vscode/
804
+ .idea/
805
+
806
+ # Debug
807
+ npm-debug.log*
808
+ yarn-debug.log*
809
+ yarn-error.log*
810
+
811
+ # OS
812
+ .DS_Store
813
+ Thumbs.db
814
+
815
+ # Testing
816
+ coverage/
817
+ ''',
818
+ "index.html": '''<!DOCTYPE html>
819
+ <html lang="en">
820
+ <head>
821
+ <meta charset="UTF-8" />
822
+ <link rel="icon" type="image/svg+xml" href="/vite.svg" />
823
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
824
+ <title>''' + name + '''</title>
825
+ </head>
826
+ <body>
827
+ <div id="root"></div>
828
+ <script type="module" src="/src/main.tsx"></script>
829
+ </body>
830
+ </html>
831
+ ''',
832
+ }
833
+
834
+
835
+ def scaffold_project(
836
+ name: str,
837
+ output_dir: Path,
838
+ template: str = "nextjs",
839
+ features: Optional[List[str]] = None,
840
+ dry_run: bool = False,
841
+ ) -> Dict:
842
+ """Scaffold a complete frontend project."""
843
+ features = features or []
844
+ project_path = output_dir / name
845
+
846
+ if project_path.exists() and not dry_run:
847
+ return {"error": f"Directory already exists: {project_path}"}
848
+
849
+ template_config = TEMPLATES.get(template)
850
+ if not template_config:
851
+ return {"error": f"Unknown template: {template}"}
852
+
853
+ created_files = []
854
+
855
+ # Create project directory
856
+ if not dry_run:
857
+ project_path.mkdir(parents=True, exist_ok=True)
858
+
859
+ # Generate base structure
860
+ created_files.extend(
861
+ generate_structure(project_path, template_config["structure"], dry_run)
862
+ )
863
+
864
+ # Generate config files
865
+ created_files.extend(
866
+ generate_config_files(project_path, template, name, features, dry_run)
867
+ )
868
+
869
+ # Add feature files
870
+ for feature in features:
871
+ if feature in FEATURES:
872
+ for file_path, content_key in FEATURES[feature]["files"].items():
873
+ full_path = project_path / file_path
874
+ if not dry_run:
875
+ full_path.parent.mkdir(parents=True, exist_ok=True)
876
+ content = FILE_CONTENTS.get(content_key, f"// TODO: Implement {content_key}")
877
+ full_path.write_text(content)
878
+ created_files.append(str(full_path))
879
+
880
+ return {
881
+ "name": name,
882
+ "template": template,
883
+ "template_name": template_config["name"],
884
+ "features": features,
885
+ "path": str(project_path),
886
+ "files_created": len(created_files),
887
+ "files": created_files,
888
+ "next_steps": [
889
+ f"cd {name}",
890
+ "npm install",
891
+ "npm run dev",
892
+ ],
893
+ }
894
+
895
+
896
+ def print_result(result: Dict) -> None:
897
+ """Print scaffolding result."""
898
+ if "error" in result:
899
+ print(f"Error: {result['error']}", file=sys.stderr)
900
+ return
901
+
902
+ print(f"\n{'='*60}")
903
+ print(f"Project Scaffolded: {result['name']}")
904
+ print(f"{'='*60}")
905
+ print(f"Template: {result['template_name']}")
906
+ print(f"Location: {result['path']}")
907
+ print(f"Files Created: {result['files_created']}")
908
+
909
+ if result["features"]:
910
+ print(f"Features: {', '.join(result['features'])}")
911
+
912
+ print(f"\nNext Steps:")
913
+ for step in result["next_steps"]:
914
+ print(f" $ {step}")
915
+
916
+ print(f"{'='*60}\n")
917
+
918
+
919
+ def main():
920
+ parser = argparse.ArgumentParser(
921
+ description="Scaffold a frontend project with best practices"
922
+ )
923
+ parser.add_argument(
924
+ "name",
925
+ help="Project name (kebab-case recommended)"
926
+ )
927
+ parser.add_argument(
928
+ "--dir", "-d",
929
+ default=".",
930
+ help="Output directory (default: current directory)"
931
+ )
932
+ parser.add_argument(
933
+ "--template", "-t",
934
+ choices=list(TEMPLATES.keys()),
935
+ default="nextjs",
936
+ help="Project template (default: nextjs)"
937
+ )
938
+ parser.add_argument(
939
+ "--features", "-f",
940
+ help="Comma-separated features to add (auth,api,forms,testing,storybook)"
941
+ )
942
+ parser.add_argument(
943
+ "--list-templates",
944
+ action="store_true",
945
+ help="List available templates"
946
+ )
947
+ parser.add_argument(
948
+ "--list-features",
949
+ action="store_true",
950
+ help="List available features"
951
+ )
952
+ parser.add_argument(
953
+ "--dry-run",
954
+ action="store_true",
955
+ help="Show what would be created without creating files"
956
+ )
957
+ parser.add_argument(
958
+ "--json",
959
+ action="store_true",
960
+ help="Output in JSON format"
961
+ )
962
+
963
+ args = parser.parse_args()
964
+
965
+ if args.list_templates:
966
+ print("\nAvailable Templates:")
967
+ for key, template in TEMPLATES.items():
968
+ print(f" {key}: {template['name']}")
969
+ print(f" {template['description']}")
970
+ return
971
+
972
+ if args.list_features:
973
+ print("\nAvailable Features:")
974
+ for key, feature in FEATURES.items():
975
+ print(f" {key}: {feature['description']}")
976
+ deps = ", ".join(feature.get("dependencies", []))
977
+ if deps:
978
+ print(f" Adds: {deps}")
979
+ return
980
+
981
+ features = []
982
+ if args.features:
983
+ features = [f.strip() for f in args.features.split(",")]
984
+ invalid = [f for f in features if f not in FEATURES]
985
+ if invalid:
986
+ print(f"Unknown features: {', '.join(invalid)}", file=sys.stderr)
987
+ print(f"Valid features: {', '.join(FEATURES.keys())}")
988
+ sys.exit(1)
989
+
990
+ result = scaffold_project(
991
+ name=args.name,
992
+ output_dir=Path(args.dir),
993
+ template=args.template,
994
+ features=features,
995
+ dry_run=args.dry_run,
996
+ )
997
+
998
+ if args.json:
999
+ print(json.dumps(result, indent=2))
1000
+ else:
1001
+ print_result(result)
1002
+
1003
+
1004
+ if __name__ == "__main__":
1005
+ main()