@ruaruababa/vibe-kit 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 (462) hide show
  1. package/CATALOG.md +317 -0
  2. package/README.md +121 -0
  3. package/aliases.json +65 -0
  4. package/bin/vibe.js +2 -0
  5. package/bundles.json +265 -0
  6. package/catalog.json +1560 -0
  7. package/dist/antigravity-skills/bin/cli.js +438 -0
  8. package/dist/antigravity-skills/lib/skill-utils.js +158 -0
  9. package/dist/antigravity-skills/scripts/build-catalog.js +305 -0
  10. package/dist/antigravity-skills/scripts/normalize-frontmatter.js +144 -0
  11. package/dist/antigravity-skills/scripts/validate-skills.js +230 -0
  12. package/dist/bin/vibe.js +2 -0
  13. package/dist/dist/src/cli/index.js +26 -0
  14. package/dist/lib/skill-utils.js +158 -0
  15. package/dist/scripts/build-catalog.js +50 -0
  16. package/dist/scripts/normalize-frontmatter.js +144 -0
  17. package/dist/scripts/validate-skills.js +56 -0
  18. package/dist/src/cli/index.js +146 -0
  19. package/dist/src/types/index.js +13 -0
  20. package/dist/src/utils/fs.js +1 -0
  21. package/package.json +43 -0
  22. package/skills/accessibility-compliance-accessibility-audit/SKILL.md +42 -0
  23. package/skills/accessibility-compliance-accessibility-audit/resources/implementation-playbook.md +502 -0
  24. package/skills/agent-orchestration-improve-agent/SKILL.md +349 -0
  25. package/skills/agent-orchestration-multi-agent-optimize/SKILL.md +239 -0
  26. package/skills/agent-orchestrator/SKILL.md +24 -0
  27. package/skills/ai-engineer/SKILL.md +171 -0
  28. package/skills/airflow-dag-patterns/SKILL.md +41 -0
  29. package/skills/airflow-dag-patterns/resources/implementation-playbook.md +509 -0
  30. package/skills/angular-migration/SKILL.md +428 -0
  31. package/skills/anti-reversing-techniques/SKILL.md +42 -0
  32. package/skills/anti-reversing-techniques/resources/implementation-playbook.md +539 -0
  33. package/skills/api-design-principles/SKILL.md +37 -0
  34. package/skills/api-design-principles/assets/api-design-checklist.md +155 -0
  35. package/skills/api-design-principles/assets/rest-api-template.py +182 -0
  36. package/skills/api-design-principles/references/graphql-schema-design.md +583 -0
  37. package/skills/api-design-principles/references/rest-best-practices.md +408 -0
  38. package/skills/api-design-principles/resources/implementation-playbook.md +513 -0
  39. package/skills/api-documenter/SKILL.md +184 -0
  40. package/skills/api-testing-observability-api-mock/SKILL.md +46 -0
  41. package/skills/api-testing-observability-api-mock/resources/implementation-playbook.md +1327 -0
  42. package/skills/application-performance-performance-optimization/SKILL.md +154 -0
  43. package/skills/architect-review/SKILL.md +174 -0
  44. package/skills/architecture-decision-records/SKILL.md +441 -0
  45. package/skills/architecture-patterns/SKILL.md +37 -0
  46. package/skills/architecture-patterns/resources/implementation-playbook.md +479 -0
  47. package/skills/arm-cortex-expert/SKILL.md +306 -0
  48. package/skills/async-python-patterns/SKILL.md +39 -0
  49. package/skills/async-python-patterns/resources/implementation-playbook.md +678 -0
  50. package/skills/attack-tree-construction/SKILL.md +38 -0
  51. package/skills/attack-tree-construction/resources/implementation-playbook.md +671 -0
  52. package/skills/auth-implementation-patterns/SKILL.md +39 -0
  53. package/skills/auth-implementation-patterns/resources/implementation-playbook.md +618 -0
  54. package/skills/backend-architect/SKILL.md +333 -0
  55. package/skills/backend-development-feature-development/SKILL.md +180 -0
  56. package/skills/backend-security-coder/SKILL.md +156 -0
  57. package/skills/backtesting-frameworks/SKILL.md +39 -0
  58. package/skills/backtesting-frameworks/resources/implementation-playbook.md +647 -0
  59. package/skills/bash-defensive-patterns/SKILL.md +43 -0
  60. package/skills/bash-defensive-patterns/resources/implementation-playbook.md +517 -0
  61. package/skills/bash-pro/SKILL.md +310 -0
  62. package/skills/bats-testing-patterns/SKILL.md +34 -0
  63. package/skills/bats-testing-patterns/resources/implementation-playbook.md +614 -0
  64. package/skills/bazel-build-optimization/SKILL.md +397 -0
  65. package/skills/billing-automation/SKILL.md +42 -0
  66. package/skills/billing-automation/resources/implementation-playbook.md +544 -0
  67. package/skills/binary-analysis-patterns/SKILL.md +450 -0
  68. package/skills/blockchain-developer/SKILL.md +208 -0
  69. package/skills/business-analyst/SKILL.md +182 -0
  70. package/skills/c-pro/SKILL.md +56 -0
  71. package/skills/c4-architecture-c4-architecture/SKILL.md +389 -0
  72. package/skills/c4-code/SKILL.md +244 -0
  73. package/skills/c4-component/SKILL.md +153 -0
  74. package/skills/c4-container/SKILL.md +171 -0
  75. package/skills/c4-context/SKILL.md +150 -0
  76. package/skills/changelog-automation/SKILL.md +38 -0
  77. package/skills/changelog-automation/resources/implementation-playbook.md +538 -0
  78. package/skills/cicd-automation-workflow-automate/SKILL.md +51 -0
  79. package/skills/cicd-automation-workflow-automate/resources/implementation-playbook.md +1333 -0
  80. package/skills/clean-markdown/SKILL.md +23 -0
  81. package/skills/cloud-architect/SKILL.md +135 -0
  82. package/skills/code-documentation-code-explain/SKILL.md +46 -0
  83. package/skills/code-documentation-code-explain/resources/implementation-playbook.md +802 -0
  84. package/skills/code-documentation-doc-generate/SKILL.md +48 -0
  85. package/skills/code-documentation-doc-generate/resources/implementation-playbook.md +640 -0
  86. package/skills/code-refactoring-context-restore/SKILL.md +179 -0
  87. package/skills/code-refactoring-refactor-clean/SKILL.md +51 -0
  88. package/skills/code-refactoring-refactor-clean/resources/implementation-playbook.md +879 -0
  89. package/skills/code-refactoring-tech-debt/SKILL.md +386 -0
  90. package/skills/code-review-ai-ai-review/SKILL.md +450 -0
  91. package/skills/code-review-excellence/SKILL.md +40 -0
  92. package/skills/code-review-excellence/resources/implementation-playbook.md +515 -0
  93. package/skills/code-reviewer/SKILL.md +178 -0
  94. package/skills/codebase-cleanup-deps-audit/SKILL.md +51 -0
  95. package/skills/codebase-cleanup-deps-audit/resources/implementation-playbook.md +766 -0
  96. package/skills/codebase-cleanup-refactor-clean/SKILL.md +51 -0
  97. package/skills/codebase-cleanup-refactor-clean/resources/implementation-playbook.md +879 -0
  98. package/skills/codebase-cleanup-tech-debt/SKILL.md +386 -0
  99. package/skills/competitive-landscape/SKILL.md +34 -0
  100. package/skills/competitive-landscape/resources/implementation-playbook.md +494 -0
  101. package/skills/comprehensive-review-full-review/SKILL.md +146 -0
  102. package/skills/comprehensive-review-pr-enhance/SKILL.md +46 -0
  103. package/skills/comprehensive-review-pr-enhance/resources/implementation-playbook.md +691 -0
  104. package/skills/conductor-implement/SKILL.md +388 -0
  105. package/skills/conductor-manage/SKILL.md +39 -0
  106. package/skills/conductor-manage/resources/implementation-playbook.md +1120 -0
  107. package/skills/conductor-new-track/SKILL.md +433 -0
  108. package/skills/conductor-revert/SKILL.md +372 -0
  109. package/skills/conductor-setup/SKILL.md +426 -0
  110. package/skills/conductor-status/SKILL.md +338 -0
  111. package/skills/conductor-validator/SKILL.md +62 -0
  112. package/skills/content-marketer/SKILL.md +170 -0
  113. package/skills/context-driven-development/SKILL.md +400 -0
  114. package/skills/context-management-context-restore/SKILL.md +179 -0
  115. package/skills/context-management-context-save/SKILL.md +177 -0
  116. package/skills/context-manager/SKILL.md +185 -0
  117. package/skills/cost-optimization/SKILL.md +286 -0
  118. package/skills/cpp-pro/SKILL.md +59 -0
  119. package/skills/cqrs-implementation/SKILL.md +35 -0
  120. package/skills/cqrs-implementation/resources/implementation-playbook.md +540 -0
  121. package/skills/csharp-pro/SKILL.md +59 -0
  122. package/skills/customer-support/SKILL.md +170 -0
  123. package/skills/data-engineer/SKILL.md +224 -0
  124. package/skills/data-engineering-data-driven-feature/SKILL.md +182 -0
  125. package/skills/data-engineering-data-pipeline/SKILL.md +201 -0
  126. package/skills/data-quality-frameworks/SKILL.md +40 -0
  127. package/skills/data-quality-frameworks/resources/implementation-playbook.md +573 -0
  128. package/skills/data-scientist/SKILL.md +199 -0
  129. package/skills/data-storytelling/SKILL.md +465 -0
  130. package/skills/database-admin/SKILL.md +165 -0
  131. package/skills/database-architect/SKILL.md +268 -0
  132. package/skills/database-cloud-optimization-cost-optimize/SKILL.md +44 -0
  133. package/skills/database-cloud-optimization-cost-optimize/resources/implementation-playbook.md +1441 -0
  134. package/skills/database-migration/SKILL.md +436 -0
  135. package/skills/database-migrations-migration-observability/SKILL.md +420 -0
  136. package/skills/database-migrations-sql-migrations/SKILL.md +53 -0
  137. package/skills/database-migrations-sql-migrations/resources/implementation-playbook.md +499 -0
  138. package/skills/database-optimizer/SKILL.md +167 -0
  139. package/skills/dbt-transformation-patterns/SKILL.md +34 -0
  140. package/skills/dbt-transformation-patterns/resources/implementation-playbook.md +547 -0
  141. package/skills/debugger/SKILL.md +49 -0
  142. package/skills/debugging-strategies/SKILL.md +34 -0
  143. package/skills/debugging-strategies/resources/implementation-playbook.md +511 -0
  144. package/skills/debugging-toolkit-smart-debug/SKILL.md +197 -0
  145. package/skills/defi-protocol-templates/SKILL.md +466 -0
  146. package/skills/dependency-management-deps-audit/SKILL.md +44 -0
  147. package/skills/dependency-management-deps-audit/resources/implementation-playbook.md +766 -0
  148. package/skills/dependency-upgrade/SKILL.md +421 -0
  149. package/skills/deployment-engineer/SKILL.md +170 -0
  150. package/skills/deployment-pipeline-design/SKILL.md +371 -0
  151. package/skills/deployment-validation-config-validate/SKILL.md +496 -0
  152. package/skills/devops-troubleshooter/SKILL.md +161 -0
  153. package/skills/distributed-debugging-debug-trace/SKILL.md +44 -0
  154. package/skills/distributed-debugging-debug-trace/resources/implementation-playbook.md +1307 -0
  155. package/skills/distributed-tracing/SKILL.md +450 -0
  156. package/skills/django-pro/SKILL.md +180 -0
  157. package/skills/docs-architect/SKILL.md +98 -0
  158. package/skills/documentation-generation-doc-generate/SKILL.md +48 -0
  159. package/skills/documentation-generation-doc-generate/resources/implementation-playbook.md +640 -0
  160. package/skills/dotnet-architect/SKILL.md +197 -0
  161. package/skills/dotnet-backend-patterns/SKILL.md +37 -0
  162. package/skills/dotnet-backend-patterns/assets/repository-template.cs +523 -0
  163. package/skills/dotnet-backend-patterns/assets/service-template.cs +336 -0
  164. package/skills/dotnet-backend-patterns/references/dapper-patterns.md +544 -0
  165. package/skills/dotnet-backend-patterns/references/ef-core-best-practices.md +355 -0
  166. package/skills/dotnet-backend-patterns/resources/implementation-playbook.md +799 -0
  167. package/skills/dummy-skill/SKILL.md +5 -0
  168. package/skills/dx-optimizer/SKILL.md +83 -0
  169. package/skills/e2e-testing-patterns/SKILL.md +41 -0
  170. package/skills/e2e-testing-patterns/resources/implementation-playbook.md +531 -0
  171. package/skills/elixir-pro/SKILL.md +59 -0
  172. package/skills/embedding-strategies/SKILL.md +491 -0
  173. package/skills/employment-contract-templates/SKILL.md +39 -0
  174. package/skills/employment-contract-templates/resources/implementation-playbook.md +493 -0
  175. package/skills/error-debugging-error-analysis/SKILL.md +47 -0
  176. package/skills/error-debugging-error-analysis/resources/implementation-playbook.md +1143 -0
  177. package/skills/error-debugging-error-trace/SKILL.md +43 -0
  178. package/skills/error-debugging-error-trace/resources/implementation-playbook.md +1361 -0
  179. package/skills/error-debugging-multi-agent-review/SKILL.md +216 -0
  180. package/skills/error-detective/SKILL.md +53 -0
  181. package/skills/error-diagnostics-error-analysis/SKILL.md +47 -0
  182. package/skills/error-diagnostics-error-analysis/resources/implementation-playbook.md +1143 -0
  183. package/skills/error-diagnostics-error-trace/SKILL.md +48 -0
  184. package/skills/error-diagnostics-error-trace/resources/implementation-playbook.md +1371 -0
  185. package/skills/error-diagnostics-smart-debug/SKILL.md +197 -0
  186. package/skills/error-handling-patterns/SKILL.md +35 -0
  187. package/skills/error-handling-patterns/resources/implementation-playbook.md +635 -0
  188. package/skills/event-sourcing-architect/SKILL.md +58 -0
  189. package/skills/event-store-design/SKILL.md +449 -0
  190. package/skills/fastapi-pro/SKILL.md +192 -0
  191. package/skills/fastapi-templates/SKILL.md +32 -0
  192. package/skills/fastapi-templates/resources/implementation-playbook.md +566 -0
  193. package/skills/final-test/SKILL.md +5 -0
  194. package/skills/firmware-analyst/SKILL.md +320 -0
  195. package/skills/flutter-expert/SKILL.md +200 -0
  196. package/skills/framework-migration-code-migrate/SKILL.md +48 -0
  197. package/skills/framework-migration-code-migrate/resources/implementation-playbook.md +1052 -0
  198. package/skills/framework-migration-deps-upgrade/SKILL.md +48 -0
  199. package/skills/framework-migration-deps-upgrade/resources/implementation-playbook.md +755 -0
  200. package/skills/framework-migration-legacy-modernize/SKILL.md +132 -0
  201. package/skills/frontend-developer/SKILL.md +171 -0
  202. package/skills/frontend-mobile-development-component-scaffold/SKILL.md +403 -0
  203. package/skills/frontend-mobile-security-xss-scan/SKILL.md +322 -0
  204. package/skills/frontend-security-coder/SKILL.md +170 -0
  205. package/skills/full-stack-orchestration-full-stack-feature/SKILL.md +135 -0
  206. package/skills/gdpr-data-handling/SKILL.md +33 -0
  207. package/skills/gdpr-data-handling/resources/implementation-playbook.md +615 -0
  208. package/skills/git-advanced-workflows/SKILL.md +412 -0
  209. package/skills/git-pr-workflows-git-workflow/SKILL.md +140 -0
  210. package/skills/git-pr-workflows-onboard/SKILL.md +416 -0
  211. package/skills/git-pr-workflows-pr-enhance/SKILL.md +48 -0
  212. package/skills/git-pr-workflows-pr-enhance/resources/implementation-playbook.md +701 -0
  213. package/skills/github-actions-templates/SKILL.md +345 -0
  214. package/skills/gitlab-ci-patterns/SKILL.md +283 -0
  215. package/skills/gitops-workflow/SKILL.md +303 -0
  216. package/skills/gitops-workflow/references/argocd-setup.md +134 -0
  217. package/skills/gitops-workflow/references/sync-policies.md +131 -0
  218. package/skills/go-concurrency-patterns/SKILL.md +33 -0
  219. package/skills/go-concurrency-patterns/resources/implementation-playbook.md +654 -0
  220. package/skills/godot-gdscript-patterns/SKILL.md +33 -0
  221. package/skills/godot-gdscript-patterns/resources/implementation-playbook.md +804 -0
  222. package/skills/golang-pro/SKILL.md +179 -0
  223. package/skills/grafana-dashboards/SKILL.md +381 -0
  224. package/skills/graphql-architect/SKILL.md +182 -0
  225. package/skills/haskell-pro/SKILL.md +56 -0
  226. package/skills/helm-chart-scaffolding/SKILL.md +34 -0
  227. package/skills/helm-chart-scaffolding/assets/Chart.yaml.template +42 -0
  228. package/skills/helm-chart-scaffolding/assets/values.yaml.template +185 -0
  229. package/skills/helm-chart-scaffolding/references/chart-structure.md +500 -0
  230. package/skills/helm-chart-scaffolding/resources/implementation-playbook.md +543 -0
  231. package/skills/helm-chart-scaffolding/scripts/validate-chart.sh +244 -0
  232. package/skills/hr-pro/SKILL.md +126 -0
  233. package/skills/hybrid-cloud-architect/SKILL.md +168 -0
  234. package/skills/hybrid-cloud-networking/SKILL.md +238 -0
  235. package/skills/hybrid-search-implementation/SKILL.md +32 -0
  236. package/skills/hybrid-search-implementation/resources/implementation-playbook.md +567 -0
  237. package/skills/incident-responder/SKILL.md +213 -0
  238. package/skills/incident-response-incident-response/SKILL.md +168 -0
  239. package/skills/incident-response-smart-fix/SKILL.md +29 -0
  240. package/skills/incident-response-smart-fix/resources/implementation-playbook.md +838 -0
  241. package/skills/incident-runbook-templates/SKILL.md +395 -0
  242. package/skills/ios-developer/SKILL.md +219 -0
  243. package/skills/istio-traffic-management/SKILL.md +337 -0
  244. package/skills/java-pro/SKILL.md +177 -0
  245. package/skills/javascript-pro/SKILL.md +57 -0
  246. package/skills/javascript-testing-patterns/SKILL.md +35 -0
  247. package/skills/javascript-testing-patterns/resources/implementation-playbook.md +1024 -0
  248. package/skills/javascript-typescript-typescript-scaffold/SKILL.md +361 -0
  249. package/skills/julia-pro/SKILL.md +209 -0
  250. package/skills/k8s-manifest-generator/SKILL.md +35 -0
  251. package/skills/k8s-manifest-generator/assets/configmap-template.yaml +296 -0
  252. package/skills/k8s-manifest-generator/assets/deployment-template.yaml +203 -0
  253. package/skills/k8s-manifest-generator/assets/service-template.yaml +171 -0
  254. package/skills/k8s-manifest-generator/references/deployment-spec.md +753 -0
  255. package/skills/k8s-manifest-generator/references/service-spec.md +724 -0
  256. package/skills/k8s-manifest-generator/resources/implementation-playbook.md +510 -0
  257. package/skills/k8s-security-policies/SKILL.md +346 -0
  258. package/skills/k8s-security-policies/assets/network-policy-template.yaml +177 -0
  259. package/skills/k8s-security-policies/references/rbac-patterns.md +187 -0
  260. package/skills/kpi-dashboard-design/SKILL.md +440 -0
  261. package/skills/kubernetes-architect/SKILL.md +170 -0
  262. package/skills/langchain-architecture/SKILL.md +350 -0
  263. package/skills/legacy-modernizer/SKILL.md +53 -0
  264. package/skills/legal-advisor/SKILL.md +70 -0
  265. package/skills/linkerd-patterns/SKILL.md +321 -0
  266. package/skills/llm-application-dev-ai-assistant/SKILL.md +35 -0
  267. package/skills/llm-application-dev-ai-assistant/resources/implementation-playbook.md +1236 -0
  268. package/skills/llm-application-dev-langchain-agent/SKILL.md +246 -0
  269. package/skills/llm-application-dev-prompt-optimize/SKILL.md +37 -0
  270. package/skills/llm-application-dev-prompt-optimize/resources/implementation-playbook.md +591 -0
  271. package/skills/llm-evaluation/SKILL.md +483 -0
  272. package/skills/machine-learning-ops-ml-pipeline/SKILL.md +314 -0
  273. package/skills/malware-analyst/SKILL.md +247 -0
  274. package/skills/market-sizing-analysis/SKILL.md +425 -0
  275. package/skills/market-sizing-analysis/examples/saas-market-sizing.md +349 -0
  276. package/skills/market-sizing-analysis/references/data-sources.md +360 -0
  277. package/skills/memory-forensics/SKILL.md +491 -0
  278. package/skills/memory-safety-patterns/SKILL.md +33 -0
  279. package/skills/memory-safety-patterns/resources/implementation-playbook.md +603 -0
  280. package/skills/mermaid-expert/SKILL.md +59 -0
  281. package/skills/microservices-patterns/SKILL.md +35 -0
  282. package/skills/microservices-patterns/resources/implementation-playbook.md +607 -0
  283. package/skills/minecraft-bukkit-pro/SKILL.md +126 -0
  284. package/skills/ml-engineer/SKILL.md +168 -0
  285. package/skills/ml-pipeline-workflow/SKILL.md +257 -0
  286. package/skills/mlops-engineer/SKILL.md +219 -0
  287. package/skills/mobile-developer/SKILL.md +205 -0
  288. package/skills/mobile-security-coder/SKILL.md +184 -0
  289. package/skills/modern-javascript-patterns/SKILL.md +35 -0
  290. package/skills/modern-javascript-patterns/resources/implementation-playbook.md +910 -0
  291. package/skills/monorepo-architect/SKILL.md +61 -0
  292. package/skills/monorepo-management/SKILL.md +35 -0
  293. package/skills/monorepo-management/resources/implementation-playbook.md +621 -0
  294. package/skills/mtls-configuration/SKILL.md +359 -0
  295. package/skills/multi-cloud-architecture/SKILL.md +189 -0
  296. package/skills/multi-platform-apps-multi-platform/SKILL.md +203 -0
  297. package/skills/network-engineer/SKILL.md +169 -0
  298. package/skills/nextjs-app-router-patterns/SKILL.md +33 -0
  299. package/skills/nextjs-app-router-patterns/resources/implementation-playbook.md +543 -0
  300. package/skills/nft-standards/SKILL.md +395 -0
  301. package/skills/node-expert/SKILL.md +23 -0
  302. package/skills/nodejs-backend-patterns/SKILL.md +35 -0
  303. package/skills/nodejs-backend-patterns/resources/implementation-playbook.md +1019 -0
  304. package/skills/nx-workspace-patterns/SKILL.md +464 -0
  305. package/skills/observability-engineer/SKILL.md +237 -0
  306. package/skills/observability-monitoring-monitor-setup/SKILL.md +48 -0
  307. package/skills/observability-monitoring-monitor-setup/resources/implementation-playbook.md +505 -0
  308. package/skills/observability-monitoring-slo-implement/SKILL.md +43 -0
  309. package/skills/observability-monitoring-slo-implement/resources/implementation-playbook.md +1077 -0
  310. package/skills/on-call-handoff-patterns/SKILL.md +453 -0
  311. package/skills/openapi-spec-generation/SKILL.md +33 -0
  312. package/skills/openapi-spec-generation/resources/implementation-playbook.md +1027 -0
  313. package/skills/payment-integration/SKILL.md +77 -0
  314. package/skills/paypal-integration/SKILL.md +479 -0
  315. package/skills/pci-compliance/SKILL.md +478 -0
  316. package/skills/performance-engineer/SKILL.md +180 -0
  317. package/skills/performance-testing-review-ai-review/SKILL.md +450 -0
  318. package/skills/performance-testing-review-multi-agent-review/SKILL.md +216 -0
  319. package/skills/php-pro/SKILL.md +63 -0
  320. package/skills/posix-shell-pro/SKILL.md +304 -0
  321. package/skills/postgresql/SKILL.md +230 -0
  322. package/skills/postmortem-writing/SKILL.md +386 -0
  323. package/skills/projection-patterns/SKILL.md +33 -0
  324. package/skills/projection-patterns/resources/implementation-playbook.md +501 -0
  325. package/skills/prometheus-configuration/SKILL.md +404 -0
  326. package/skills/prompt-engineer/SKILL.md +272 -0
  327. package/skills/prompt-engineering-patterns/SKILL.md +213 -0
  328. package/skills/prompt-engineering-patterns/assets/few-shot-examples.json +106 -0
  329. package/skills/prompt-engineering-patterns/assets/prompt-template-library.md +246 -0
  330. package/skills/prompt-engineering-patterns/references/chain-of-thought.md +399 -0
  331. package/skills/prompt-engineering-patterns/references/few-shot-learning.md +369 -0
  332. package/skills/prompt-engineering-patterns/references/prompt-optimization.md +414 -0
  333. package/skills/prompt-engineering-patterns/references/prompt-templates.md +470 -0
  334. package/skills/prompt-engineering-patterns/references/system-prompts.md +189 -0
  335. package/skills/prompt-engineering-patterns/scripts/optimize-prompt.py +279 -0
  336. package/skills/protocol-reverse-engineering/SKILL.md +29 -0
  337. package/skills/protocol-reverse-engineering/resources/implementation-playbook.md +509 -0
  338. package/skills/python-development-python-scaffold/SKILL.md +331 -0
  339. package/skills/python-packaging/SKILL.md +36 -0
  340. package/skills/python-packaging/resources/implementation-playbook.md +869 -0
  341. package/skills/python-performance-optimization/SKILL.md +36 -0
  342. package/skills/python-performance-optimization/resources/implementation-playbook.md +868 -0
  343. package/skills/python-pro/SKILL.md +158 -0
  344. package/skills/python-testing-patterns/SKILL.md +37 -0
  345. package/skills/python-testing-patterns/resources/implementation-playbook.md +906 -0
  346. package/skills/quant-analyst/SKILL.md +53 -0
  347. package/skills/rag-implementation/SKILL.md +421 -0
  348. package/skills/react-modernization/SKILL.md +34 -0
  349. package/skills/react-modernization/resources/implementation-playbook.md +512 -0
  350. package/skills/react-native-architecture/SKILL.md +33 -0
  351. package/skills/react-native-architecture/resources/implementation-playbook.md +670 -0
  352. package/skills/react-state-management/SKILL.md +441 -0
  353. package/skills/reference-builder/SKILL.md +188 -0
  354. package/skills/reverse-engineer/SKILL.md +173 -0
  355. package/skills/risk-manager/SKILL.md +61 -0
  356. package/skills/risk-metrics-calculation/SKILL.md +33 -0
  357. package/skills/risk-metrics-calculation/resources/implementation-playbook.md +554 -0
  358. package/skills/ruby-pro/SKILL.md +56 -0
  359. package/skills/rust-async-patterns/SKILL.md +33 -0
  360. package/skills/rust-async-patterns/resources/implementation-playbook.md +516 -0
  361. package/skills/rust-pro/SKILL.md +178 -0
  362. package/skills/saga-orchestration/SKILL.md +496 -0
  363. package/skills/sales-automator/SKILL.md +55 -0
  364. package/skills/sast-configuration/SKILL.md +212 -0
  365. package/skills/scala-pro/SKILL.md +82 -0
  366. package/skills/screen-reader-testing/SKILL.md +33 -0
  367. package/skills/screen-reader-testing/resources/implementation-playbook.md +544 -0
  368. package/skills/search-specialist/SKILL.md +80 -0
  369. package/skills/secrets-management/SKILL.md +364 -0
  370. package/skills/security-auditor/SKILL.md +169 -0
  371. package/skills/security-compliance-compliance-check/SKILL.md +55 -0
  372. package/skills/security-compliance-compliance-check/resources/implementation-playbook.md +963 -0
  373. package/skills/security-requirement-extraction/SKILL.md +33 -0
  374. package/skills/security-requirement-extraction/resources/implementation-playbook.md +676 -0
  375. package/skills/security-scanning-security-dependencies/SKILL.md +43 -0
  376. package/skills/security-scanning-security-dependencies/resources/implementation-playbook.md +544 -0
  377. package/skills/security-scanning-security-hardening/SKILL.md +147 -0
  378. package/skills/security-scanning-security-sast/SKILL.md +495 -0
  379. package/skills/seo-authority-builder/SKILL.md +136 -0
  380. package/skills/seo-cannibalization-detector/SKILL.md +123 -0
  381. package/skills/seo-content-auditor/SKILL.md +83 -0
  382. package/skills/seo-content-planner/SKILL.md +108 -0
  383. package/skills/seo-content-refresher/SKILL.md +118 -0
  384. package/skills/seo-content-writer/SKILL.md +96 -0
  385. package/skills/seo-keyword-strategist/SKILL.md +95 -0
  386. package/skills/seo-meta-optimizer/SKILL.md +92 -0
  387. package/skills/seo-snippet-hunter/SKILL.md +114 -0
  388. package/skills/seo-structure-architect/SKILL.md +108 -0
  389. package/skills/service-mesh-expert/SKILL.md +58 -0
  390. package/skills/service-mesh-observability/SKILL.md +395 -0
  391. package/skills/shellcheck-configuration/SKILL.md +466 -0
  392. package/skills/similarity-search-patterns/SKILL.md +33 -0
  393. package/skills/similarity-search-patterns/resources/implementation-playbook.md +557 -0
  394. package/skills/slo-implementation/SKILL.md +341 -0
  395. package/skills/solidity-security/SKILL.md +34 -0
  396. package/skills/solidity-security/resources/implementation-playbook.md +524 -0
  397. package/skills/spark-optimization/SKILL.md +427 -0
  398. package/skills/sql-optimization-patterns/SKILL.md +35 -0
  399. package/skills/sql-optimization-patterns/resources/implementation-playbook.md +504 -0
  400. package/skills/sql-pro/SKILL.md +173 -0
  401. package/skills/startup-analyst/SKILL.md +328 -0
  402. package/skills/startup-business-analyst-business-case/SKILL.md +487 -0
  403. package/skills/startup-business-analyst-financial-projections/SKILL.md +353 -0
  404. package/skills/startup-business-analyst-market-opportunity/SKILL.md +240 -0
  405. package/skills/startup-financial-modeling/SKILL.md +467 -0
  406. package/skills/startup-metrics-framework/SKILL.md +34 -0
  407. package/skills/startup-metrics-framework/resources/implementation-playbook.md +500 -0
  408. package/skills/stride-analysis-patterns/SKILL.md +33 -0
  409. package/skills/stride-analysis-patterns/resources/implementation-playbook.md +655 -0
  410. package/skills/stripe-integration/SKILL.md +454 -0
  411. package/skills/systems-programming-rust-project/SKILL.md +440 -0
  412. package/skills/tailwind-design-system/SKILL.md +33 -0
  413. package/skills/tailwind-design-system/resources/implementation-playbook.md +665 -0
  414. package/skills/tdd-orchestrator/SKILL.md +205 -0
  415. package/skills/tdd-workflows-tdd-cycle/SKILL.md +221 -0
  416. package/skills/tdd-workflows-tdd-green/SKILL.md +73 -0
  417. package/skills/tdd-workflows-tdd-green/resources/implementation-playbook.md +870 -0
  418. package/skills/tdd-workflows-tdd-red/SKILL.md +164 -0
  419. package/skills/tdd-workflows-tdd-refactor/SKILL.md +187 -0
  420. package/skills/team-collaboration-issue/SKILL.md +37 -0
  421. package/skills/team-collaboration-issue/resources/implementation-playbook.md +640 -0
  422. package/skills/team-collaboration-standup-notes/SKILL.md +44 -0
  423. package/skills/team-collaboration-standup-notes/resources/implementation-playbook.md +768 -0
  424. package/skills/team-composition-analysis/SKILL.md +413 -0
  425. package/skills/temporal-python-pro/SKILL.md +370 -0
  426. package/skills/temporal-python-testing/SKILL.md +170 -0
  427. package/skills/temporal-python-testing/resources/integration-testing.md +455 -0
  428. package/skills/temporal-python-testing/resources/local-setup.md +553 -0
  429. package/skills/temporal-python-testing/resources/replay-testing.md +462 -0
  430. package/skills/temporal-python-testing/resources/unit-testing.md +328 -0
  431. package/skills/terraform-module-library/SKILL.md +261 -0
  432. package/skills/terraform-module-library/references/aws-modules.md +63 -0
  433. package/skills/terraform-specialist/SKILL.md +166 -0
  434. package/skills/test-automator/SKILL.md +224 -0
  435. package/skills/threat-mitigation-mapping/SKILL.md +33 -0
  436. package/skills/threat-mitigation-mapping/resources/implementation-playbook.md +744 -0
  437. package/skills/threat-modeling-expert/SKILL.md +60 -0
  438. package/skills/track-management/SKILL.md +38 -0
  439. package/skills/track-management/resources/implementation-playbook.md +591 -0
  440. package/skills/turborepo-caching/SKILL.md +419 -0
  441. package/skills/tutorial-engineer/SKILL.md +139 -0
  442. package/skills/typescript-advanced-types/SKILL.md +35 -0
  443. package/skills/typescript-advanced-types/resources/implementation-playbook.md +716 -0
  444. package/skills/typescript-pro/SKILL.md +55 -0
  445. package/skills/ui-minimal/SKILL.md +23 -0
  446. package/skills/ui-ux-designer/SKILL.md +209 -0
  447. package/skills/ui-visual-validator/SKILL.md +214 -0
  448. package/skills/unit-testing-test-generate/SKILL.md +319 -0
  449. package/skills/unity-developer/SKILL.md +230 -0
  450. package/skills/unity-ecs-patterns/SKILL.md +33 -0
  451. package/skills/unity-ecs-patterns/resources/implementation-playbook.md +625 -0
  452. package/skills/uv-package-manager/SKILL.md +37 -0
  453. package/skills/uv-package-manager/resources/implementation-playbook.md +830 -0
  454. package/skills/vector-database-engineer/SKILL.md +60 -0
  455. package/skills/vector-index-tuning/SKILL.md +42 -0
  456. package/skills/vector-index-tuning/resources/implementation-playbook.md +507 -0
  457. package/skills/wcag-audit-patterns/SKILL.md +41 -0
  458. package/skills/wcag-audit-patterns/resources/implementation-playbook.md +541 -0
  459. package/skills/web3-testing/SKILL.md +427 -0
  460. package/skills/workflow-orchestration-patterns/SKILL.md +333 -0
  461. package/skills/workflow-patterns/SKILL.md +38 -0
  462. package/skills/workflow-patterns/resources/implementation-playbook.md +621 -0
@@ -0,0 +1,1019 @@
1
+ # Node.js Backend Patterns Implementation Playbook
2
+
3
+ This file contains detailed patterns, checklists, and code samples referenced by the skill.
4
+
5
+ # Node.js Backend Patterns
6
+
7
+ Comprehensive guidance for building scalable, maintainable, and production-ready Node.js backend applications with modern frameworks, architectural patterns, and best practices.
8
+
9
+ ## When to Use This Skill
10
+
11
+ - Building REST APIs or GraphQL servers
12
+ - Creating microservices with Node.js
13
+ - Implementing authentication and authorization
14
+ - Designing scalable backend architectures
15
+ - Setting up middleware and error handling
16
+ - Integrating databases (SQL and NoSQL)
17
+ - Building real-time applications with WebSockets
18
+ - Implementing background job processing
19
+
20
+ ## Core Frameworks
21
+
22
+ ### Express.js - Minimalist Framework
23
+
24
+ **Basic Setup:**
25
+ ```typescript
26
+ import express, { Request, Response, NextFunction } from 'express';
27
+ import helmet from 'helmet';
28
+ import cors from 'cors';
29
+ import compression from 'compression';
30
+
31
+ const app = express();
32
+
33
+ // Security middleware
34
+ app.use(helmet());
35
+ app.use(cors({ origin: process.env.ALLOWED_ORIGINS?.split(',') }));
36
+ app.use(compression());
37
+
38
+ // Body parsing
39
+ app.use(express.json({ limit: '10mb' }));
40
+ app.use(express.urlencoded({ extended: true, limit: '10mb' }));
41
+
42
+ // Request logging
43
+ app.use((req: Request, res: Response, next: NextFunction) => {
44
+ console.log(`${req.method} ${req.path}`);
45
+ next();
46
+ });
47
+
48
+ const PORT = process.env.PORT || 3000;
49
+ app.listen(PORT, () => {
50
+ console.log(`Server running on port ${PORT}`);
51
+ });
52
+ ```
53
+
54
+ ### Fastify - High Performance Framework
55
+
56
+ **Basic Setup:**
57
+ ```typescript
58
+ import Fastify from 'fastify';
59
+ import helmet from '@fastify/helmet';
60
+ import cors from '@fastify/cors';
61
+ import compress from '@fastify/compress';
62
+
63
+ const fastify = Fastify({
64
+ logger: {
65
+ level: process.env.LOG_LEVEL || 'info',
66
+ transport: {
67
+ target: 'pino-pretty',
68
+ options: { colorize: true }
69
+ }
70
+ }
71
+ });
72
+
73
+ // Plugins
74
+ await fastify.register(helmet);
75
+ await fastify.register(cors, { origin: true });
76
+ await fastify.register(compress);
77
+
78
+ // Type-safe routes with schema validation
79
+ fastify.post<{
80
+ Body: { name: string; email: string };
81
+ Reply: { id: string; name: string };
82
+ }>('/users', {
83
+ schema: {
84
+ body: {
85
+ type: 'object',
86
+ required: ['name', 'email'],
87
+ properties: {
88
+ name: { type: 'string', minLength: 1 },
89
+ email: { type: 'string', format: 'email' }
90
+ }
91
+ }
92
+ }
93
+ }, async (request, reply) => {
94
+ const { name, email } = request.body;
95
+ return { id: '123', name };
96
+ });
97
+
98
+ await fastify.listen({ port: 3000, host: '0.0.0.0' });
99
+ ```
100
+
101
+ ## Architectural Patterns
102
+
103
+ ### Pattern 1: Layered Architecture
104
+
105
+ **Structure:**
106
+ ```
107
+ src/
108
+ ├── controllers/ # Handle HTTP requests/responses
109
+ ├── services/ # Business logic
110
+ ├── repositories/ # Data access layer
111
+ ├── models/ # Data models
112
+ ├── middleware/ # Express/Fastify middleware
113
+ ├── routes/ # Route definitions
114
+ ├── utils/ # Helper functions
115
+ ├── config/ # Configuration
116
+ └── types/ # TypeScript types
117
+ ```
118
+
119
+ **Controller Layer:**
120
+ ```typescript
121
+ // controllers/user.controller.ts
122
+ import { Request, Response, NextFunction } from 'express';
123
+ import { UserService } from '../services/user.service';
124
+ import { CreateUserDTO, UpdateUserDTO } from '../types/user.types';
125
+
126
+ export class UserController {
127
+ constructor(private userService: UserService) {}
128
+
129
+ async createUser(req: Request, res: Response, next: NextFunction) {
130
+ try {
131
+ const userData: CreateUserDTO = req.body;
132
+ const user = await this.userService.createUser(userData);
133
+ res.status(201).json(user);
134
+ } catch (error) {
135
+ next(error);
136
+ }
137
+ }
138
+
139
+ async getUser(req: Request, res: Response, next: NextFunction) {
140
+ try {
141
+ const { id } = req.params;
142
+ const user = await this.userService.getUserById(id);
143
+ res.json(user);
144
+ } catch (error) {
145
+ next(error);
146
+ }
147
+ }
148
+
149
+ async updateUser(req: Request, res: Response, next: NextFunction) {
150
+ try {
151
+ const { id } = req.params;
152
+ const updates: UpdateUserDTO = req.body;
153
+ const user = await this.userService.updateUser(id, updates);
154
+ res.json(user);
155
+ } catch (error) {
156
+ next(error);
157
+ }
158
+ }
159
+
160
+ async deleteUser(req: Request, res: Response, next: NextFunction) {
161
+ try {
162
+ const { id } = req.params;
163
+ await this.userService.deleteUser(id);
164
+ res.status(204).send();
165
+ } catch (error) {
166
+ next(error);
167
+ }
168
+ }
169
+ }
170
+ ```
171
+
172
+ **Service Layer:**
173
+ ```typescript
174
+ // services/user.service.ts
175
+ import { UserRepository } from '../repositories/user.repository';
176
+ import { CreateUserDTO, UpdateUserDTO, User } from '../types/user.types';
177
+ import { NotFoundError, ValidationError } from '../utils/errors';
178
+ import bcrypt from 'bcrypt';
179
+
180
+ export class UserService {
181
+ constructor(private userRepository: UserRepository) {}
182
+
183
+ async createUser(userData: CreateUserDTO): Promise<User> {
184
+ // Validation
185
+ const existingUser = await this.userRepository.findByEmail(userData.email);
186
+ if (existingUser) {
187
+ throw new ValidationError('Email already exists');
188
+ }
189
+
190
+ // Hash password
191
+ const hashedPassword = await bcrypt.hash(userData.password, 10);
192
+
193
+ // Create user
194
+ const user = await this.userRepository.create({
195
+ ...userData,
196
+ password: hashedPassword
197
+ });
198
+
199
+ // Remove password from response
200
+ const { password, ...userWithoutPassword } = user;
201
+ return userWithoutPassword as User;
202
+ }
203
+
204
+ async getUserById(id: string): Promise<User> {
205
+ const user = await this.userRepository.findById(id);
206
+ if (!user) {
207
+ throw new NotFoundError('User not found');
208
+ }
209
+ const { password, ...userWithoutPassword } = user;
210
+ return userWithoutPassword as User;
211
+ }
212
+
213
+ async updateUser(id: string, updates: UpdateUserDTO): Promise<User> {
214
+ const user = await this.userRepository.update(id, updates);
215
+ if (!user) {
216
+ throw new NotFoundError('User not found');
217
+ }
218
+ const { password, ...userWithoutPassword } = user;
219
+ return userWithoutPassword as User;
220
+ }
221
+
222
+ async deleteUser(id: string): Promise<void> {
223
+ const deleted = await this.userRepository.delete(id);
224
+ if (!deleted) {
225
+ throw new NotFoundError('User not found');
226
+ }
227
+ }
228
+ }
229
+ ```
230
+
231
+ **Repository Layer:**
232
+ ```typescript
233
+ // repositories/user.repository.ts
234
+ import { Pool } from 'pg';
235
+ import { CreateUserDTO, UpdateUserDTO, UserEntity } from '../types/user.types';
236
+
237
+ export class UserRepository {
238
+ constructor(private db: Pool) {}
239
+
240
+ async create(userData: CreateUserDTO & { password: string }): Promise<UserEntity> {
241
+ const query = `
242
+ INSERT INTO users (name, email, password)
243
+ VALUES ($1, $2, $3)
244
+ RETURNING id, name, email, password, created_at, updated_at
245
+ `;
246
+ const { rows } = await this.db.query(query, [
247
+ userData.name,
248
+ userData.email,
249
+ userData.password
250
+ ]);
251
+ return rows[0];
252
+ }
253
+
254
+ async findById(id: string): Promise<UserEntity | null> {
255
+ const query = 'SELECT * FROM users WHERE id = $1';
256
+ const { rows } = await this.db.query(query, [id]);
257
+ return rows[0] || null;
258
+ }
259
+
260
+ async findByEmail(email: string): Promise<UserEntity | null> {
261
+ const query = 'SELECT * FROM users WHERE email = $1';
262
+ const { rows } = await this.db.query(query, [email]);
263
+ return rows[0] || null;
264
+ }
265
+
266
+ async update(id: string, updates: UpdateUserDTO): Promise<UserEntity | null> {
267
+ const fields = Object.keys(updates);
268
+ const values = Object.values(updates);
269
+
270
+ const setClause = fields
271
+ .map((field, idx) => `${field} = $${idx + 2}`)
272
+ .join(', ');
273
+
274
+ const query = `
275
+ UPDATE users
276
+ SET ${setClause}, updated_at = CURRENT_TIMESTAMP
277
+ WHERE id = $1
278
+ RETURNING *
279
+ `;
280
+
281
+ const { rows } = await this.db.query(query, [id, ...values]);
282
+ return rows[0] || null;
283
+ }
284
+
285
+ async delete(id: string): Promise<boolean> {
286
+ const query = 'DELETE FROM users WHERE id = $1';
287
+ const { rowCount } = await this.db.query(query, [id]);
288
+ return rowCount > 0;
289
+ }
290
+ }
291
+ ```
292
+
293
+ ### Pattern 2: Dependency Injection
294
+
295
+ **DI Container:**
296
+ ```typescript
297
+ // di-container.ts
298
+ import { Pool } from 'pg';
299
+ import { UserRepository } from './repositories/user.repository';
300
+ import { UserService } from './services/user.service';
301
+ import { UserController } from './controllers/user.controller';
302
+ import { AuthService } from './services/auth.service';
303
+
304
+ class Container {
305
+ private instances = new Map<string, any>();
306
+
307
+ register<T>(key: string, factory: () => T): void {
308
+ this.instances.set(key, factory);
309
+ }
310
+
311
+ resolve<T>(key: string): T {
312
+ const factory = this.instances.get(key);
313
+ if (!factory) {
314
+ throw new Error(`No factory registered for ${key}`);
315
+ }
316
+ return factory();
317
+ }
318
+
319
+ singleton<T>(key: string, factory: () => T): void {
320
+ let instance: T;
321
+ this.instances.set(key, () => {
322
+ if (!instance) {
323
+ instance = factory();
324
+ }
325
+ return instance;
326
+ });
327
+ }
328
+ }
329
+
330
+ export const container = new Container();
331
+
332
+ // Register dependencies
333
+ container.singleton('db', () => new Pool({
334
+ host: process.env.DB_HOST,
335
+ port: parseInt(process.env.DB_PORT || '5432'),
336
+ database: process.env.DB_NAME,
337
+ user: process.env.DB_USER,
338
+ password: process.env.DB_PASSWORD,
339
+ max: 20,
340
+ idleTimeoutMillis: 30000,
341
+ connectionTimeoutMillis: 2000,
342
+ }));
343
+
344
+ container.singleton('userRepository', () =>
345
+ new UserRepository(container.resolve('db'))
346
+ );
347
+
348
+ container.singleton('userService', () =>
349
+ new UserService(container.resolve('userRepository'))
350
+ );
351
+
352
+ container.register('userController', () =>
353
+ new UserController(container.resolve('userService'))
354
+ );
355
+
356
+ container.singleton('authService', () =>
357
+ new AuthService(container.resolve('userRepository'))
358
+ );
359
+ ```
360
+
361
+ ## Middleware Patterns
362
+
363
+ ### Authentication Middleware
364
+
365
+ ```typescript
366
+ // middleware/auth.middleware.ts
367
+ import { Request, Response, NextFunction } from 'express';
368
+ import jwt from 'jsonwebtoken';
369
+ import { UnauthorizedError } from '../utils/errors';
370
+
371
+ interface JWTPayload {
372
+ userId: string;
373
+ email: string;
374
+ }
375
+
376
+ declare global {
377
+ namespace Express {
378
+ interface Request {
379
+ user?: JWTPayload;
380
+ }
381
+ }
382
+ }
383
+
384
+ export const authenticate = async (
385
+ req: Request,
386
+ res: Response,
387
+ next: NextFunction
388
+ ) => {
389
+ try {
390
+ const token = req.headers.authorization?.replace('Bearer ', '');
391
+
392
+ if (!token) {
393
+ throw new UnauthorizedError('No token provided');
394
+ }
395
+
396
+ const payload = jwt.verify(
397
+ token,
398
+ process.env.JWT_SECRET!
399
+ ) as JWTPayload;
400
+
401
+ req.user = payload;
402
+ next();
403
+ } catch (error) {
404
+ next(new UnauthorizedError('Invalid token'));
405
+ }
406
+ };
407
+
408
+ export const authorize = (...roles: string[]) => {
409
+ return async (req: Request, res: Response, next: NextFunction) => {
410
+ if (!req.user) {
411
+ return next(new UnauthorizedError('Not authenticated'));
412
+ }
413
+
414
+ // Check if user has required role
415
+ const hasRole = roles.some(role =>
416
+ req.user?.roles?.includes(role)
417
+ );
418
+
419
+ if (!hasRole) {
420
+ return next(new UnauthorizedError('Insufficient permissions'));
421
+ }
422
+
423
+ next();
424
+ };
425
+ };
426
+ ```
427
+
428
+ ### Validation Middleware
429
+
430
+ ```typescript
431
+ // middleware/validation.middleware.ts
432
+ import { Request, Response, NextFunction } from 'express';
433
+ import { AnyZodObject, ZodError } from 'zod';
434
+ import { ValidationError } from '../utils/errors';
435
+
436
+ export const validate = (schema: AnyZodObject) => {
437
+ return async (req: Request, res: Response, next: NextFunction) => {
438
+ try {
439
+ await schema.parseAsync({
440
+ body: req.body,
441
+ query: req.query,
442
+ params: req.params
443
+ });
444
+ next();
445
+ } catch (error) {
446
+ if (error instanceof ZodError) {
447
+ const errors = error.errors.map(err => ({
448
+ field: err.path.join('.'),
449
+ message: err.message
450
+ }));
451
+ next(new ValidationError('Validation failed', errors));
452
+ } else {
453
+ next(error);
454
+ }
455
+ }
456
+ };
457
+ };
458
+
459
+ // Usage with Zod
460
+ import { z } from 'zod';
461
+
462
+ const createUserSchema = z.object({
463
+ body: z.object({
464
+ name: z.string().min(1),
465
+ email: z.string().email(),
466
+ password: z.string().min(8)
467
+ })
468
+ });
469
+
470
+ router.post('/users', validate(createUserSchema), userController.createUser);
471
+ ```
472
+
473
+ ### Rate Limiting Middleware
474
+
475
+ ```typescript
476
+ // middleware/rate-limit.middleware.ts
477
+ import rateLimit from 'express-rate-limit';
478
+ import RedisStore from 'rate-limit-redis';
479
+ import Redis from 'ioredis';
480
+
481
+ const redis = new Redis({
482
+ host: process.env.REDIS_HOST,
483
+ port: parseInt(process.env.REDIS_PORT || '6379')
484
+ });
485
+
486
+ export const apiLimiter = rateLimit({
487
+ store: new RedisStore({
488
+ client: redis,
489
+ prefix: 'rl:',
490
+ }),
491
+ windowMs: 15 * 60 * 1000, // 15 minutes
492
+ max: 100, // Limit each IP to 100 requests per windowMs
493
+ message: 'Too many requests from this IP, please try again later',
494
+ standardHeaders: true,
495
+ legacyHeaders: false,
496
+ });
497
+
498
+ export const authLimiter = rateLimit({
499
+ store: new RedisStore({
500
+ client: redis,
501
+ prefix: 'rl:auth:',
502
+ }),
503
+ windowMs: 15 * 60 * 1000,
504
+ max: 5, // Stricter limit for auth endpoints
505
+ skipSuccessfulRequests: true,
506
+ });
507
+ ```
508
+
509
+ ### Request Logging Middleware
510
+
511
+ ```typescript
512
+ // middleware/logger.middleware.ts
513
+ import { Request, Response, NextFunction } from 'express';
514
+ import pino from 'pino';
515
+
516
+ const logger = pino({
517
+ level: process.env.LOG_LEVEL || 'info',
518
+ transport: {
519
+ target: 'pino-pretty',
520
+ options: { colorize: true }
521
+ }
522
+ });
523
+
524
+ export const requestLogger = (
525
+ req: Request,
526
+ res: Response,
527
+ next: NextFunction
528
+ ) => {
529
+ const start = Date.now();
530
+
531
+ // Log response when finished
532
+ res.on('finish', () => {
533
+ const duration = Date.now() - start;
534
+ logger.info({
535
+ method: req.method,
536
+ url: req.url,
537
+ status: res.statusCode,
538
+ duration: `${duration}ms`,
539
+ userAgent: req.headers['user-agent'],
540
+ ip: req.ip
541
+ });
542
+ });
543
+
544
+ next();
545
+ };
546
+
547
+ export { logger };
548
+ ```
549
+
550
+ ## Error Handling
551
+
552
+ ### Custom Error Classes
553
+
554
+ ```typescript
555
+ // utils/errors.ts
556
+ export class AppError extends Error {
557
+ constructor(
558
+ public message: string,
559
+ public statusCode: number = 500,
560
+ public isOperational: boolean = true
561
+ ) {
562
+ super(message);
563
+ Object.setPrototypeOf(this, AppError.prototype);
564
+ Error.captureStackTrace(this, this.constructor);
565
+ }
566
+ }
567
+
568
+ export class ValidationError extends AppError {
569
+ constructor(message: string, public errors?: any[]) {
570
+ super(message, 400);
571
+ }
572
+ }
573
+
574
+ export class NotFoundError extends AppError {
575
+ constructor(message: string = 'Resource not found') {
576
+ super(message, 404);
577
+ }
578
+ }
579
+
580
+ export class UnauthorizedError extends AppError {
581
+ constructor(message: string = 'Unauthorized') {
582
+ super(message, 401);
583
+ }
584
+ }
585
+
586
+ export class ForbiddenError extends AppError {
587
+ constructor(message: string = 'Forbidden') {
588
+ super(message, 403);
589
+ }
590
+ }
591
+
592
+ export class ConflictError extends AppError {
593
+ constructor(message: string) {
594
+ super(message, 409);
595
+ }
596
+ }
597
+ ```
598
+
599
+ ### Global Error Handler
600
+
601
+ ```typescript
602
+ // middleware/error-handler.ts
603
+ import { Request, Response, NextFunction } from 'express';
604
+ import { AppError } from '../utils/errors';
605
+ import { logger } from './logger.middleware';
606
+
607
+ export const errorHandler = (
608
+ err: Error,
609
+ req: Request,
610
+ res: Response,
611
+ next: NextFunction
612
+ ) => {
613
+ if (err instanceof AppError) {
614
+ return res.status(err.statusCode).json({
615
+ status: 'error',
616
+ message: err.message,
617
+ ...(err instanceof ValidationError && { errors: err.errors })
618
+ });
619
+ }
620
+
621
+ // Log unexpected errors
622
+ logger.error({
623
+ error: err.message,
624
+ stack: err.stack,
625
+ url: req.url,
626
+ method: req.method
627
+ });
628
+
629
+ // Don't leak error details in production
630
+ const message = process.env.NODE_ENV === 'production'
631
+ ? 'Internal server error'
632
+ : err.message;
633
+
634
+ res.status(500).json({
635
+ status: 'error',
636
+ message
637
+ });
638
+ };
639
+
640
+ // Async error wrapper
641
+ export const asyncHandler = (
642
+ fn: (req: Request, res: Response, next: NextFunction) => Promise<any>
643
+ ) => {
644
+ return (req: Request, res: Response, next: NextFunction) => {
645
+ Promise.resolve(fn(req, res, next)).catch(next);
646
+ };
647
+ };
648
+ ```
649
+
650
+ ## Database Patterns
651
+
652
+ ### PostgreSQL with Connection Pool
653
+
654
+ ```typescript
655
+ // config/database.ts
656
+ import { Pool, PoolConfig } from 'pg';
657
+
658
+ const poolConfig: PoolConfig = {
659
+ host: process.env.DB_HOST,
660
+ port: parseInt(process.env.DB_PORT || '5432'),
661
+ database: process.env.DB_NAME,
662
+ user: process.env.DB_USER,
663
+ password: process.env.DB_PASSWORD,
664
+ max: 20,
665
+ idleTimeoutMillis: 30000,
666
+ connectionTimeoutMillis: 2000,
667
+ };
668
+
669
+ export const pool = new Pool(poolConfig);
670
+
671
+ // Test connection
672
+ pool.on('connect', () => {
673
+ console.log('Database connected');
674
+ });
675
+
676
+ pool.on('error', (err) => {
677
+ console.error('Unexpected database error', err);
678
+ process.exit(-1);
679
+ });
680
+
681
+ // Graceful shutdown
682
+ export const closeDatabase = async () => {
683
+ await pool.end();
684
+ console.log('Database connection closed');
685
+ };
686
+ ```
687
+
688
+ ### MongoDB with Mongoose
689
+
690
+ ```typescript
691
+ // config/mongoose.ts
692
+ import mongoose from 'mongoose';
693
+
694
+ const connectDB = async () => {
695
+ try {
696
+ await mongoose.connect(process.env.MONGODB_URI!, {
697
+ maxPoolSize: 10,
698
+ serverSelectionTimeoutMS: 5000,
699
+ socketTimeoutMS: 45000,
700
+ });
701
+
702
+ console.log('MongoDB connected');
703
+ } catch (error) {
704
+ console.error('MongoDB connection error:', error);
705
+ process.exit(1);
706
+ }
707
+ };
708
+
709
+ mongoose.connection.on('disconnected', () => {
710
+ console.log('MongoDB disconnected');
711
+ });
712
+
713
+ mongoose.connection.on('error', (err) => {
714
+ console.error('MongoDB error:', err);
715
+ });
716
+
717
+ export { connectDB };
718
+
719
+ // Model example
720
+ import { Schema, model, Document } from 'mongoose';
721
+
722
+ interface IUser extends Document {
723
+ name: string;
724
+ email: string;
725
+ password: string;
726
+ createdAt: Date;
727
+ updatedAt: Date;
728
+ }
729
+
730
+ const userSchema = new Schema<IUser>({
731
+ name: { type: String, required: true },
732
+ email: { type: String, required: true, unique: true },
733
+ password: { type: String, required: true },
734
+ }, {
735
+ timestamps: true
736
+ });
737
+
738
+ // Indexes
739
+ userSchema.index({ email: 1 });
740
+
741
+ export const User = model<IUser>('User', userSchema);
742
+ ```
743
+
744
+ ### Transaction Pattern
745
+
746
+ ```typescript
747
+ // services/order.service.ts
748
+ import { Pool } from 'pg';
749
+
750
+ export class OrderService {
751
+ constructor(private db: Pool) {}
752
+
753
+ async createOrder(userId: string, items: any[]) {
754
+ const client = await this.db.connect();
755
+
756
+ try {
757
+ await client.query('BEGIN');
758
+
759
+ // Create order
760
+ const orderResult = await client.query(
761
+ 'INSERT INTO orders (user_id, total) VALUES ($1, $2) RETURNING id',
762
+ [userId, calculateTotal(items)]
763
+ );
764
+ const orderId = orderResult.rows[0].id;
765
+
766
+ // Create order items
767
+ for (const item of items) {
768
+ await client.query(
769
+ 'INSERT INTO order_items (order_id, product_id, quantity, price) VALUES ($1, $2, $3, $4)',
770
+ [orderId, item.productId, item.quantity, item.price]
771
+ );
772
+
773
+ // Update inventory
774
+ await client.query(
775
+ 'UPDATE products SET stock = stock - $1 WHERE id = $2',
776
+ [item.quantity, item.productId]
777
+ );
778
+ }
779
+
780
+ await client.query('COMMIT');
781
+ return orderId;
782
+ } catch (error) {
783
+ await client.query('ROLLBACK');
784
+ throw error;
785
+ } finally {
786
+ client.release();
787
+ }
788
+ }
789
+ }
790
+ ```
791
+
792
+ ## Authentication & Authorization
793
+
794
+ ### JWT Authentication
795
+
796
+ ```typescript
797
+ // services/auth.service.ts
798
+ import jwt from 'jsonwebtoken';
799
+ import bcrypt from 'bcrypt';
800
+ import { UserRepository } from '../repositories/user.repository';
801
+ import { UnauthorizedError } from '../utils/errors';
802
+
803
+ export class AuthService {
804
+ constructor(private userRepository: UserRepository) {}
805
+
806
+ async login(email: string, password: string) {
807
+ const user = await this.userRepository.findByEmail(email);
808
+
809
+ if (!user) {
810
+ throw new UnauthorizedError('Invalid credentials');
811
+ }
812
+
813
+ const isValid = await bcrypt.compare(password, user.password);
814
+
815
+ if (!isValid) {
816
+ throw new UnauthorizedError('Invalid credentials');
817
+ }
818
+
819
+ const token = this.generateToken({
820
+ userId: user.id,
821
+ email: user.email
822
+ });
823
+
824
+ const refreshToken = this.generateRefreshToken({
825
+ userId: user.id
826
+ });
827
+
828
+ return {
829
+ token,
830
+ refreshToken,
831
+ user: {
832
+ id: user.id,
833
+ name: user.name,
834
+ email: user.email
835
+ }
836
+ };
837
+ }
838
+
839
+ async refreshToken(refreshToken: string) {
840
+ try {
841
+ const payload = jwt.verify(
842
+ refreshToken,
843
+ process.env.REFRESH_TOKEN_SECRET!
844
+ ) as { userId: string };
845
+
846
+ const user = await this.userRepository.findById(payload.userId);
847
+
848
+ if (!user) {
849
+ throw new UnauthorizedError('User not found');
850
+ }
851
+
852
+ const token = this.generateToken({
853
+ userId: user.id,
854
+ email: user.email
855
+ });
856
+
857
+ return { token };
858
+ } catch (error) {
859
+ throw new UnauthorizedError('Invalid refresh token');
860
+ }
861
+ }
862
+
863
+ private generateToken(payload: any): string {
864
+ return jwt.sign(payload, process.env.JWT_SECRET!, {
865
+ expiresIn: '15m'
866
+ });
867
+ }
868
+
869
+ private generateRefreshToken(payload: any): string {
870
+ return jwt.sign(payload, process.env.REFRESH_TOKEN_SECRET!, {
871
+ expiresIn: '7d'
872
+ });
873
+ }
874
+ }
875
+ ```
876
+
877
+ ## Caching Strategies
878
+
879
+ ```typescript
880
+ // utils/cache.ts
881
+ import Redis from 'ioredis';
882
+
883
+ const redis = new Redis({
884
+ host: process.env.REDIS_HOST,
885
+ port: parseInt(process.env.REDIS_PORT || '6379'),
886
+ retryStrategy: (times) => {
887
+ const delay = Math.min(times * 50, 2000);
888
+ return delay;
889
+ }
890
+ });
891
+
892
+ export class CacheService {
893
+ async get<T>(key: string): Promise<T | null> {
894
+ const data = await redis.get(key);
895
+ return data ? JSON.parse(data) : null;
896
+ }
897
+
898
+ async set(key: string, value: any, ttl?: number): Promise<void> {
899
+ const serialized = JSON.stringify(value);
900
+ if (ttl) {
901
+ await redis.setex(key, ttl, serialized);
902
+ } else {
903
+ await redis.set(key, serialized);
904
+ }
905
+ }
906
+
907
+ async delete(key: string): Promise<void> {
908
+ await redis.del(key);
909
+ }
910
+
911
+ async invalidatePattern(pattern: string): Promise<void> {
912
+ const keys = await redis.keys(pattern);
913
+ if (keys.length > 0) {
914
+ await redis.del(...keys);
915
+ }
916
+ }
917
+ }
918
+
919
+ // Cache decorator
920
+ export function Cacheable(ttl: number = 300) {
921
+ return function (
922
+ target: any,
923
+ propertyKey: string,
924
+ descriptor: PropertyDescriptor
925
+ ) {
926
+ const originalMethod = descriptor.value;
927
+
928
+ descriptor.value = async function (...args: any[]) {
929
+ const cache = new CacheService();
930
+ const cacheKey = `${propertyKey}:${JSON.stringify(args)}`;
931
+
932
+ const cached = await cache.get(cacheKey);
933
+ if (cached) {
934
+ return cached;
935
+ }
936
+
937
+ const result = await originalMethod.apply(this, args);
938
+ await cache.set(cacheKey, result, ttl);
939
+
940
+ return result;
941
+ };
942
+
943
+ return descriptor;
944
+ };
945
+ }
946
+ ```
947
+
948
+ ## API Response Format
949
+
950
+ ```typescript
951
+ // utils/response.ts
952
+ import { Response } from 'express';
953
+
954
+ export class ApiResponse {
955
+ static success<T>(res: Response, data: T, message?: string, statusCode = 200) {
956
+ return res.status(statusCode).json({
957
+ status: 'success',
958
+ message,
959
+ data
960
+ });
961
+ }
962
+
963
+ static error(res: Response, message: string, statusCode = 500, errors?: any) {
964
+ return res.status(statusCode).json({
965
+ status: 'error',
966
+ message,
967
+ ...(errors && { errors })
968
+ });
969
+ }
970
+
971
+ static paginated<T>(
972
+ res: Response,
973
+ data: T[],
974
+ page: number,
975
+ limit: number,
976
+ total: number
977
+ ) {
978
+ return res.json({
979
+ status: 'success',
980
+ data,
981
+ pagination: {
982
+ page,
983
+ limit,
984
+ total,
985
+ pages: Math.ceil(total / limit)
986
+ }
987
+ });
988
+ }
989
+ }
990
+ ```
991
+
992
+ ## Best Practices
993
+
994
+ 1. **Use TypeScript**: Type safety prevents runtime errors
995
+ 2. **Implement proper error handling**: Use custom error classes
996
+ 3. **Validate input**: Use libraries like Zod or Joi
997
+ 4. **Use environment variables**: Never hardcode secrets
998
+ 5. **Implement logging**: Use structured logging (Pino, Winston)
999
+ 6. **Add rate limiting**: Prevent abuse
1000
+ 7. **Use HTTPS**: Always in production
1001
+ 8. **Implement CORS properly**: Don't use `*` in production
1002
+ 9. **Use dependency injection**: Easier testing and maintenance
1003
+ 10. **Write tests**: Unit, integration, and E2E tests
1004
+ 11. **Handle graceful shutdown**: Clean up resources
1005
+ 12. **Use connection pooling**: For databases
1006
+ 13. **Implement health checks**: For monitoring
1007
+ 14. **Use compression**: Reduce response size
1008
+ 15. **Monitor performance**: Use APM tools
1009
+
1010
+ ## Testing Patterns
1011
+
1012
+ See `javascript-testing-patterns` skill for comprehensive testing guidance.
1013
+
1014
+ ## Resources
1015
+
1016
+ - **Node.js Best Practices**: https://github.com/goldbergyoni/nodebestpractices
1017
+ - **Express.js Guide**: https://expressjs.com/en/guide/
1018
+ - **Fastify Documentation**: https://www.fastify.io/docs/
1019
+ - **TypeScript Node Starter**: https://github.com/microsoft/TypeScript-Node-Starter