@ngxtm/devkit 3.7.0 → 3.8.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 (769) hide show
  1. package/merged-commands/3d-web-experience.md +254 -0
  2. package/merged-commands/ab-test-setup.md +232 -0
  3. package/merged-commands/accessibility-compliance-accessibility-audit.md +42 -0
  4. package/merged-commands/active-directory-attacks.md +383 -0
  5. package/merged-commands/address-github-comments.md +55 -0
  6. package/merged-commands/aesthetic.md +134 -0
  7. package/merged-commands/agent-evaluation.md +64 -0
  8. package/merged-commands/agent-framework-azure-hosted-agents.md +332 -0
  9. package/merged-commands/agent-manager-skill.md +40 -0
  10. package/merged-commands/agent-memory-mcp.md +82 -0
  11. package/merged-commands/agent-memory-systems.md +67 -0
  12. package/merged-commands/agent-orchestration-improve-agent.md +349 -0
  13. package/merged-commands/agent-orchestration-multi-agent-optimize.md +239 -0
  14. package/merged-commands/agent-tool-builder.md +53 -0
  15. package/merged-commands/agile-product-owner.md +31 -0
  16. package/merged-commands/ai-agents-architect.md +90 -0
  17. package/merged-commands/ai-artist.md +75 -0
  18. package/merged-commands/ai-engineer.md +171 -0
  19. package/merged-commands/ai-multimodal.md +109 -0
  20. package/merged-commands/ai-product.md +54 -0
  21. package/merged-commands/ai-wrapper-product.md +273 -0
  22. package/merged-commands/airflow-dag-patterns.md +41 -0
  23. package/merged-commands/algolia-search.md +66 -0
  24. package/merged-commands/algorithmic-art.md +405 -0
  25. package/merged-commands/analytics-tracking.md +404 -0
  26. package/merged-commands/angular-architect.md +97 -0
  27. package/merged-commands/angular-migration.md +428 -0
  28. package/merged-commands/anti-reversing-techniques.md +42 -0
  29. package/merged-commands/api-design-principles.md +37 -0
  30. package/merged-commands/api-designer.md +101 -0
  31. package/merged-commands/api-documentation-generator.md +484 -0
  32. package/merged-commands/api-documenter.md +184 -0
  33. package/merged-commands/api-fuzzing-bug-bounty.md +433 -0
  34. package/merged-commands/api-patterns.md +81 -0
  35. package/merged-commands/api-security-best-practices.md +907 -0
  36. package/merged-commands/api-testing-observability-api-mock.md +46 -0
  37. package/merged-commands/app-builder.md +75 -0
  38. package/merged-commands/app-store-optimization.md +403 -0
  39. package/merged-commands/application-performance-performance-optimization.md +154 -0
  40. package/merged-commands/architect-review.md +174 -0
  41. package/merged-commands/architecture-decision-records.md +441 -0
  42. package/merged-commands/architecture-designer.md +89 -0
  43. package/merged-commands/architecture-patterns.md +37 -0
  44. package/merged-commands/architecture.md +55 -0
  45. package/merged-commands/arm-cortex-expert.md +306 -0
  46. package/merged-commands/artifacts-builder.md +74 -0
  47. package/merged-commands/ask-questions-if-underspecified.md +81 -0
  48. package/merged-commands/async-python-patterns.md +39 -0
  49. package/merged-commands/atlassian-mcp.md +100 -0
  50. package/merged-commands/attack-tree-construction.md +38 -0
  51. package/merged-commands/auth-implementation-patterns.md +39 -0
  52. package/merged-commands/automate-whatsapp.md +257 -0
  53. package/merged-commands/autonomous-agent-patterns.md +761 -0
  54. package/merged-commands/autonomous-agents.md +68 -0
  55. package/merged-commands/avalonia-layout-zafiro.md +59 -0
  56. package/merged-commands/avalonia-viewmodels-zafiro.md +29 -0
  57. package/merged-commands/avalonia-zafiro-development.md +29 -0
  58. package/merged-commands/aws-agentic-ai.md +117 -0
  59. package/merged-commands/aws-cdk-development.md +278 -0
  60. package/merged-commands/aws-cost-operations.md +317 -0
  61. package/merged-commands/aws-penetration-testing.md +405 -0
  62. package/merged-commands/aws-serverless-eda.md +757 -0
  63. package/merged-commands/aws-serverless.md +323 -0
  64. package/merged-commands/aws-skills.md +22 -0
  65. package/merged-commands/azd-deployment.md +296 -0
  66. package/merged-commands/azure-ai-agents-python.md +277 -0
  67. package/merged-commands/azure-ai-search-python.md +198 -0
  68. package/merged-commands/azure-ai-voicelive-skill.md +294 -0
  69. package/merged-commands/azure-functions.md +42 -0
  70. package/merged-commands/backend-architect.md +333 -0
  71. package/merged-commands/backend-dev-guidelines.md +342 -0
  72. package/merged-commands/backend-development-feature-development.md +180 -0
  73. package/merged-commands/backend-development.md +155 -0
  74. package/merged-commands/backend-security-coder.md +156 -0
  75. package/merged-commands/backtesting-frameworks.md +39 -0
  76. package/merged-commands/bash-defensive-patterns.md +43 -0
  77. package/merged-commands/bash-linux.md +199 -0
  78. package/merged-commands/bash-pro.md +310 -0
  79. package/merged-commands/bats-testing-patterns.md +34 -0
  80. package/merged-commands/bazel-build-optimization.md +397 -0
  81. package/merged-commands/beautiful-prose.md +22 -0
  82. package/merged-commands/behavioral-modes.md +242 -0
  83. package/merged-commands/best-practices.md +500 -0
  84. package/merged-commands/better-auth.md +204 -0
  85. package/merged-commands/billing-automation.md +42 -0
  86. package/merged-commands/binary-analysis-patterns.md +450 -0
  87. package/merged-commands/blockchain-developer.md +208 -0
  88. package/merged-commands/blockrun.md +292 -0
  89. package/merged-commands/brainstorming.md +230 -0
  90. package/merged-commands/brand-guidelines-anthropic.md +73 -0
  91. package/merged-commands/brand-guidelines-community.md +73 -0
  92. package/merged-commands/brand-guidelines.md +73 -0
  93. package/merged-commands/broken-authentication.md +476 -0
  94. package/merged-commands/browser-automation.md +70 -0
  95. package/merged-commands/browser-extension-builder.md +261 -0
  96. package/merged-commands/building-ai-agent-on-cloudflare.md +391 -0
  97. package/merged-commands/building-mcp-server-on-cloudflare.md +265 -0
  98. package/merged-commands/bullmq-specialist.md +57 -0
  99. package/merged-commands/bun-development.md +691 -0
  100. package/merged-commands/burp-suite-testing.md +380 -0
  101. package/merged-commands/business-analyst.md +182 -0
  102. package/merged-commands/busybox-on-windows.md +30 -0
  103. package/merged-commands/c-pro.md +56 -0
  104. package/merged-commands/c4-architecture-c4-architecture.md +389 -0
  105. package/merged-commands/c4-code.md +244 -0
  106. package/merged-commands/c4-component.md +153 -0
  107. package/merged-commands/c4-container.md +171 -0
  108. package/merged-commands/c4-context.md +150 -0
  109. package/merged-commands/canvas-design.md +130 -0
  110. package/merged-commands/cc-skill-backend-patterns.md +584 -0
  111. package/merged-commands/cc-skill-clickhouse-io.md +431 -0
  112. package/merged-commands/cc-skill-coding-standards.md +522 -0
  113. package/merged-commands/cc-skill-continuous-learning.md +10 -0
  114. package/merged-commands/cc-skill-frontend-patterns.md +633 -0
  115. package/merged-commands/cc-skill-project-guidelines-example.md +352 -0
  116. package/merged-commands/cc-skill-security-review.md +496 -0
  117. package/merged-commands/cc-skill-strategic-compact.md +10 -0
  118. package/merged-commands/changelog-automation.md +38 -0
  119. package/merged-commands/changelog-generator.md +104 -0
  120. package/merged-commands/chaos-engineer.md +98 -0
  121. package/merged-commands/chrome-devtools.md +407 -0
  122. package/merged-commands/cicd-automation-workflow-automate.md +51 -0
  123. package/merged-commands/clarity-gate.md +22 -0
  124. package/merged-commands/claude-ally-health.md +22 -0
  125. package/merged-commands/claude-code-guide.md +68 -0
  126. package/merged-commands/claude-d3js-skill.md +820 -0
  127. package/merged-commands/claude-scientific-skills.md +22 -0
  128. package/merged-commands/claude-speed-reader.md +22 -0
  129. package/merged-commands/claude-win11-speckit-update-skill.md +22 -0
  130. package/merged-commands/clean-code.md +201 -0
  131. package/merged-commands/clerk-auth.md +56 -0
  132. package/merged-commands/cli-developer.md +97 -0
  133. package/merged-commands/cloud-architect.md +135 -0
  134. package/merged-commands/cloud-penetration-testing.md +501 -0
  135. package/merged-commands/cloudflare-expert.md +227 -0
  136. package/merged-commands/code-documentation-code-explain.md +46 -0
  137. package/merged-commands/code-documentation-doc-generate.md +48 -0
  138. package/merged-commands/code-documentation.md +263 -0
  139. package/merged-commands/code-documenter.md +95 -0
  140. package/merged-commands/code-refactoring-context-restore.md +179 -0
  141. package/merged-commands/code-refactoring-refactor-clean.md +51 -0
  142. package/merged-commands/code-refactoring-tech-debt.md +386 -0
  143. package/merged-commands/code-refactoring.md +209 -0
  144. package/merged-commands/code-review-ai-ai-review.md +450 -0
  145. package/merged-commands/code-review-checklist.md +444 -0
  146. package/merged-commands/code-review-excellence.md +40 -0
  147. package/merged-commands/code-review.md +121 -0
  148. package/merged-commands/code-reviewer.md +178 -0
  149. package/merged-commands/codebase-cleanup-deps-audit.md +51 -0
  150. package/merged-commands/codebase-cleanup-refactor-clean.md +51 -0
  151. package/merged-commands/codebase-cleanup-tech-debt.md +386 -0
  152. package/merged-commands/codex-review.md +37 -0
  153. package/merged-commands/commit.md +171 -0
  154. package/merged-commands/competitive-ads-extractor.md +293 -0
  155. package/merged-commands/competitive-landscape.md +34 -0
  156. package/merged-commands/competitor-alternatives.md +750 -0
  157. package/merged-commands/comprehensive-review-full-review.md +146 -0
  158. package/merged-commands/comprehensive-review-pr-enhance.md +46 -0
  159. package/merged-commands/computer-use-agents.md +315 -0
  160. package/merged-commands/concise-planning.md +62 -0
  161. package/merged-commands/conductor-implement.md +388 -0
  162. package/merged-commands/conductor-manage.md +39 -0
  163. package/merged-commands/conductor-new-track.md +433 -0
  164. package/merged-commands/conductor-revert.md +372 -0
  165. package/merged-commands/conductor-setup.md +426 -0
  166. package/merged-commands/conductor-status.md +338 -0
  167. package/merged-commands/conductor-validator.md +62 -0
  168. package/merged-commands/content-creator.md +248 -0
  169. package/merged-commands/content-marketer.md +170 -0
  170. package/merged-commands/content-research-writer.md +538 -0
  171. package/merged-commands/context-compression.md +266 -0
  172. package/merged-commands/context-degradation.md +238 -0
  173. package/merged-commands/context-driven-development.md +400 -0
  174. package/merged-commands/context-engineering.md +107 -0
  175. package/merged-commands/context-fundamentals.md +192 -0
  176. package/merged-commands/context-management-context-restore.md +179 -0
  177. package/merged-commands/context-management-context-save.md +177 -0
  178. package/merged-commands/context-manager.md +185 -0
  179. package/merged-commands/context-optimization.md +186 -0
  180. package/merged-commands/context-window-management.md +53 -0
  181. package/merged-commands/context7-auto-research.md +36 -0
  182. package/merged-commands/conversation-memory.md +61 -0
  183. package/merged-commands/copy-editing.md +439 -0
  184. package/merged-commands/copywriting.md +225 -0
  185. package/merged-commands/core-components.md +264 -0
  186. package/merged-commands/cosmos-db-python-skill.md +198 -0
  187. package/merged-commands/cost-optimization.md +286 -0
  188. package/merged-commands/cpp-pro.md +59 -0
  189. package/merged-commands/cqrs-implementation.md +35 -0
  190. package/merged-commands/create-pr.md +192 -0
  191. package/merged-commands/crewai.md +243 -0
  192. package/merged-commands/csharp-developer.md +94 -0
  193. package/merged-commands/csharp-pro.md +59 -0
  194. package/merged-commands/culture-index.md +43 -0
  195. package/merged-commands/customer-support.md +170 -0
  196. package/merged-commands/daily-news-report.md +356 -0
  197. package/merged-commands/data-engineer.md +224 -0
  198. package/merged-commands/data-engineering-data-driven-feature.md +182 -0
  199. package/merged-commands/data-engineering-data-pipeline.md +201 -0
  200. package/merged-commands/data-quality-frameworks.md +40 -0
  201. package/merged-commands/data-scientist.md +199 -0
  202. package/merged-commands/data-storytelling.md +465 -0
  203. package/merged-commands/database-admin.md +165 -0
  204. package/merged-commands/database-architect.md +268 -0
  205. package/merged-commands/database-cloud-optimization-cost-optimize.md +44 -0
  206. package/merged-commands/database-design.md +52 -0
  207. package/merged-commands/database-migration.md +436 -0
  208. package/merged-commands/database-migrations-migration-observability.md +420 -0
  209. package/merged-commands/database-migrations-sql-migrations.md +53 -0
  210. package/merged-commands/database-optimizer.md +167 -0
  211. package/merged-commands/databases.md +232 -0
  212. package/merged-commands/dbt-transformation-patterns.md +34 -0
  213. package/merged-commands/debugger.md +49 -0
  214. package/merged-commands/debugging-strategies.md +34 -0
  215. package/merged-commands/debugging-toolkit-smart-debug.md +197 -0
  216. package/merged-commands/debugging-wizard.md +93 -0
  217. package/merged-commands/debugging.md +84 -0
  218. package/merged-commands/deep-research.md +114 -0
  219. package/merged-commands/defi-protocol-templates.md +466 -0
  220. package/merged-commands/dependency-management-deps-audit.md +44 -0
  221. package/merged-commands/dependency-upgrade.md +421 -0
  222. package/merged-commands/deployment-engineer.md +170 -0
  223. package/merged-commands/deployment-pipeline-design.md +371 -0
  224. package/merged-commands/deployment-procedures.md +241 -0
  225. package/merged-commands/deployment-validation-config-validate.md +496 -0
  226. package/merged-commands/design-md.md +178 -0
  227. package/merged-commands/design-orchestration.md +167 -0
  228. package/merged-commands/developer-growth-analysis.md +322 -0
  229. package/merged-commands/devops-engineer.md +92 -0
  230. package/merged-commands/devops-troubleshooter.md +161 -0
  231. package/merged-commands/devops.md +285 -0
  232. package/merged-commands/discord-bot-architect.md +277 -0
  233. package/merged-commands/dispatching-parallel-agents.md +180 -0
  234. package/merged-commands/distributed-debugging-debug-trace.md +44 -0
  235. package/merged-commands/distributed-tracing.md +450 -0
  236. package/merged-commands/django-expert.md +89 -0
  237. package/merged-commands/django-pro.md +180 -0
  238. package/merged-commands/doc-coauthoring.md +375 -0
  239. package/merged-commands/docker-expert.md +409 -0
  240. package/merged-commands/docs-architect.md +98 -0
  241. package/merged-commands/docs-seeker.md +102 -0
  242. package/merged-commands/documentation-generation-doc-generate.md +48 -0
  243. package/merged-commands/documentation-templates.md +194 -0
  244. package/merged-commands/docx-official.md +197 -0
  245. package/merged-commands/docx.md +197 -0
  246. package/merged-commands/domain-name-brainstormer.md +212 -0
  247. package/merged-commands/dotnet-architect.md +197 -0
  248. package/merged-commands/dotnet-backend-patterns.md +37 -0
  249. package/merged-commands/dotnet-core-expert.md +96 -0
  250. package/merged-commands/dx-optimizer.md +83 -0
  251. package/merged-commands/e2e-testing-patterns.md +41 -0
  252. package/merged-commands/elixir-pro.md +59 -0
  253. package/merged-commands/email-sequence.md +925 -0
  254. package/merged-commands/email-systems.md +54 -0
  255. package/merged-commands/embedded-systems.md +98 -0
  256. package/merged-commands/embedding-strategies.md +491 -0
  257. package/merged-commands/employment-contract-templates.md +39 -0
  258. package/merged-commands/environment-setup-guide.md +479 -0
  259. package/merged-commands/error-debugging-error-analysis.md +47 -0
  260. package/merged-commands/error-debugging-error-trace.md +43 -0
  261. package/merged-commands/error-debugging-multi-agent-review.md +216 -0
  262. package/merged-commands/error-detective.md +53 -0
  263. package/merged-commands/error-diagnostics-error-analysis.md +47 -0
  264. package/merged-commands/error-diagnostics-error-trace.md +48 -0
  265. package/merged-commands/error-diagnostics-smart-debug.md +197 -0
  266. package/merged-commands/error-handling-patterns.md +35 -0
  267. package/merged-commands/ethical-hacking-methodology.md +466 -0
  268. package/merged-commands/evaluation.md +238 -0
  269. package/merged-commands/event-sourcing-architect.md +58 -0
  270. package/merged-commands/event-store-design.md +449 -0
  271. package/merged-commands/exa-search.md +36 -0
  272. package/merged-commands/executing-plans.md +76 -0
  273. package/merged-commands/expo-app-design.md +22 -0
  274. package/merged-commands/expo-deployment.md +72 -0
  275. package/merged-commands/fal-audio.md +22 -0
  276. package/merged-commands/fal-generate.md +22 -0
  277. package/merged-commands/fal-image-edit.md +22 -0
  278. package/merged-commands/fal-platform.md +22 -0
  279. package/merged-commands/fal-upscale.md +22 -0
  280. package/merged-commands/fal-workflow.md +22 -0
  281. package/merged-commands/fastapi-expert.md +93 -0
  282. package/merged-commands/fastapi-pro.md +192 -0
  283. package/merged-commands/fastapi-router.md +52 -0
  284. package/merged-commands/fastapi-templates.md +32 -0
  285. package/merged-commands/feature-forge.md +90 -0
  286. package/merged-commands/ffuf-claude-skill.md +22 -0
  287. package/merged-commands/file-organizer.md +250 -0
  288. package/merged-commands/file-path-traversal.md +486 -0
  289. package/merged-commands/file-uploads.md +22 -0
  290. package/merged-commands/find-bugs.md +86 -0
  291. package/merged-commands/fine-tuning-expert.md +98 -0
  292. package/merged-commands/finishing-a-development-branch.md +200 -0
  293. package/merged-commands/firebase.md +56 -0
  294. package/merged-commands/firecrawl-scraper.md +37 -0
  295. package/merged-commands/firmware-analyst.md +320 -0
  296. package/merged-commands/fix-review.md +53 -0
  297. package/merged-commands/fixing.md +72 -0
  298. package/merged-commands/flutter-expert.md +200 -0
  299. package/merged-commands/form-cro.md +441 -0
  300. package/merged-commands/foundry-iq-agent.md +15 -0
  301. package/merged-commands/foundry-iq-python.md +275 -0
  302. package/merged-commands/foundry-nextgen-frontend.md +555 -0
  303. package/merged-commands/foundry-sdk-python.md +290 -0
  304. package/merged-commands/fp-ts-errors.md +856 -0
  305. package/merged-commands/fp-ts-pragmatic.md +598 -0
  306. package/merged-commands/fp-ts-react.md +796 -0
  307. package/merged-commands/framework-migration-code-migrate.md +48 -0
  308. package/merged-commands/framework-migration-deps-upgrade.md +48 -0
  309. package/merged-commands/framework-migration-legacy-modernize.md +132 -0
  310. package/merged-commands/free-tool-strategy.md +576 -0
  311. package/merged-commands/frontend-design.md +272 -0
  312. package/merged-commands/frontend-dev-guidelines.md +359 -0
  313. package/merged-commands/frontend-developer.md +171 -0
  314. package/merged-commands/frontend-development.md +399 -0
  315. package/merged-commands/frontend-mobile-development-component-scaffold.md +403 -0
  316. package/merged-commands/frontend-mobile-security-xss-scan.md +322 -0
  317. package/merged-commands/frontend-security-coder.md +170 -0
  318. package/merged-commands/frontend-slides.md +770 -0
  319. package/merged-commands/full-stack-orchestration-full-stack-feature.md +135 -0
  320. package/merged-commands/fullstack-guardian.md +99 -0
  321. package/merged-commands/game-developer.md +94 -0
  322. package/merged-commands/game-development.md +167 -0
  323. package/merged-commands/gcp-cloud-run.md +288 -0
  324. package/merged-commands/gdpr-data-handling.md +33 -0
  325. package/merged-commands/geo-fundamentals.md +156 -0
  326. package/merged-commands/git-advanced-workflows.md +412 -0
  327. package/merged-commands/git-pr-workflows-git-workflow.md +140 -0
  328. package/merged-commands/git-pr-workflows-onboard.md +416 -0
  329. package/merged-commands/git-pr-workflows-pr-enhance.md +48 -0
  330. package/merged-commands/git-pushing.md +33 -0
  331. package/merged-commands/github-actions-templates.md +345 -0
  332. package/merged-commands/github-workflow-automation.md +846 -0
  333. package/merged-commands/gitlab-ci-patterns.md +283 -0
  334. package/merged-commands/gitops-workflow.md +303 -0
  335. package/merged-commands/go-concurrency-patterns.md +33 -0
  336. package/merged-commands/godot-gdscript-patterns.md +33 -0
  337. package/merged-commands/golang-pro.md +179 -0
  338. package/merged-commands/google-adk-python.md +243 -0
  339. package/merged-commands/grafana-dashboards.md +381 -0
  340. package/merged-commands/graphql-architect.md +182 -0
  341. package/merged-commands/graphql.md +68 -0
  342. package/merged-commands/haskell-pro.md +56 -0
  343. package/merged-commands/helm-chart-scaffolding.md +34 -0
  344. package/merged-commands/hr-pro.md +126 -0
  345. package/merged-commands/html-injection-testing.md +498 -0
  346. package/merged-commands/hubspot-integration.md +42 -0
  347. package/merged-commands/hugging-face-cli.md +198 -0
  348. package/merged-commands/hugging-face-jobs.md +1038 -0
  349. package/merged-commands/hybrid-cloud-architect.md +168 -0
  350. package/merged-commands/hybrid-cloud-networking.md +238 -0
  351. package/merged-commands/hybrid-search-implementation.md +32 -0
  352. package/merged-commands/i18n-localization.md +154 -0
  353. package/merged-commands/idor-testing.md +442 -0
  354. package/merged-commands/image-enhancer.md +99 -0
  355. package/merged-commands/imagen.md +77 -0
  356. package/merged-commands/incident-responder.md +213 -0
  357. package/merged-commands/incident-response-incident-response.md +168 -0
  358. package/merged-commands/incident-response-smart-fix.md +29 -0
  359. package/merged-commands/incident-runbook-templates.md +395 -0
  360. package/merged-commands/infinite-gratitude.md +26 -0
  361. package/merged-commands/inngest.md +55 -0
  362. package/merged-commands/interactive-portfolio.md +223 -0
  363. package/merged-commands/internal-comms-anthropic.md +32 -0
  364. package/merged-commands/internal-comms-community.md +32 -0
  365. package/merged-commands/internal-comms.md +32 -0
  366. package/merged-commands/invoice-organizer.md +446 -0
  367. package/merged-commands/ios-developer.md +219 -0
  368. package/merged-commands/issue-creator.md +137 -0
  369. package/merged-commands/istio-traffic-management.md +337 -0
  370. package/merged-commands/iterate-pr.md +150 -0
  371. package/merged-commands/java-architect.md +95 -0
  372. package/merged-commands/java-pro.md +177 -0
  373. package/merged-commands/javascript-mastery.md +645 -0
  374. package/merged-commands/javascript-pro.md +57 -0
  375. package/merged-commands/javascript-testing-patterns.md +35 -0
  376. package/merged-commands/javascript-typescript-typescript-scaffold.md +361 -0
  377. package/merged-commands/javascript-typescript.md +142 -0
  378. package/merged-commands/jira-issues.md +181 -0
  379. package/merged-commands/job-application.md +90 -0
  380. package/merged-commands/julia-pro.md +209 -0
  381. package/merged-commands/k8s-manifest-generator.md +35 -0
  382. package/merged-commands/k8s-security-policies.md +346 -0
  383. package/merged-commands/kaizen.md +730 -0
  384. package/merged-commands/kotlin-specialist.md +94 -0
  385. package/merged-commands/kpi-dashboard-design.md +440 -0
  386. package/merged-commands/kubernetes-architect.md +170 -0
  387. package/merged-commands/kubernetes-specialist.md +117 -0
  388. package/merged-commands/langchain-architecture.md +350 -0
  389. package/merged-commands/langfuse.md +238 -0
  390. package/merged-commands/langgraph.md +287 -0
  391. package/merged-commands/laravel-specialist.md +101 -0
  392. package/merged-commands/last30days.md +421 -0
  393. package/merged-commands/launch-strategy.md +344 -0
  394. package/merged-commands/lead-research-assistant.md +199 -0
  395. package/merged-commands/learn.md +476 -0
  396. package/merged-commands/legacy-modernizer.md +53 -0
  397. package/merged-commands/legal-advisor.md +70 -0
  398. package/merged-commands/linear-claude-skill.md +543 -0
  399. package/merged-commands/linkerd-patterns.md +321 -0
  400. package/merged-commands/lint-and-validate.md +45 -0
  401. package/merged-commands/linux-privilege-escalation.md +504 -0
  402. package/merged-commands/linux-shell-scripting.md +504 -0
  403. package/merged-commands/llm-app-patterns.md +760 -0
  404. package/merged-commands/llm-application-dev-ai-assistant.md +35 -0
  405. package/merged-commands/llm-application-dev-langchain-agent.md +246 -0
  406. package/merged-commands/llm-application-dev-prompt-optimize.md +37 -0
  407. package/merged-commands/llm-application-dev.md +216 -0
  408. package/merged-commands/llm-evaluation.md +483 -0
  409. package/merged-commands/loki-mode.md +721 -0
  410. package/merged-commands/machine-learning-ops-ml-pipeline.md +314 -0
  411. package/merged-commands/makepad-skills.md +22 -0
  412. package/merged-commands/malware-analyst.md +247 -0
  413. package/merged-commands/markdown-novel-viewer.md +281 -0
  414. package/merged-commands/market-sizing-analysis.md +425 -0
  415. package/merged-commands/marketing-ideas.md +221 -0
  416. package/merged-commands/marketing-psychology.md +255 -0
  417. package/merged-commands/mcp-builder.md +236 -0
  418. package/merged-commands/mcp-developer.md +94 -0
  419. package/merged-commands/mcp-management.md +209 -0
  420. package/merged-commands/media-processing.md +358 -0
  421. package/merged-commands/meeting-insights-analyzer.md +327 -0
  422. package/merged-commands/memory-forensics.md +491 -0
  423. package/merged-commands/memory-safety-patterns.md +33 -0
  424. package/merged-commands/memory-systems.md +228 -0
  425. package/merged-commands/mermaid-expert.md +59 -0
  426. package/merged-commands/mermaidjs-v11.md +115 -0
  427. package/merged-commands/metasploit-framework.md +478 -0
  428. package/merged-commands/micro-saas-launcher.md +212 -0
  429. package/merged-commands/microservices-architect.md +102 -0
  430. package/merged-commands/microservices-patterns.md +35 -0
  431. package/merged-commands/minecraft-bukkit-pro.md +126 -0
  432. package/merged-commands/ml-engineer.md +168 -0
  433. package/merged-commands/ml-pipeline-workflow.md +257 -0
  434. package/merged-commands/ml-pipeline.md +111 -0
  435. package/merged-commands/mlops-engineer.md +219 -0
  436. package/merged-commands/mobile-design.md +284 -0
  437. package/merged-commands/mobile-developer.md +205 -0
  438. package/merged-commands/mobile-development.md +212 -0
  439. package/merged-commands/mobile-security-coder.md +184 -0
  440. package/merged-commands/modern-javascript-patterns.md +35 -0
  441. package/merged-commands/monitoring-expert.md +92 -0
  442. package/merged-commands/monorepo-architect.md +61 -0
  443. package/merged-commands/monorepo-management.md +35 -0
  444. package/merged-commands/moodle-external-api-development.md +597 -0
  445. package/merged-commands/mtls-configuration.md +359 -0
  446. package/merged-commands/multi-agent-brainstorming.md +256 -0
  447. package/merged-commands/multi-agent-patterns.md +262 -0
  448. package/merged-commands/multi-cloud-architecture.md +189 -0
  449. package/merged-commands/multi-platform-apps-multi-platform.md +203 -0
  450. package/merged-commands/n8n-code-python.md +750 -0
  451. package/merged-commands/n8n-mcp-tools-expert.md +654 -0
  452. package/merged-commands/n8n-node-configuration.md +796 -0
  453. package/merged-commands/nanobanana-ppt-skills.md +22 -0
  454. package/merged-commands/neon-postgres.md +56 -0
  455. package/merged-commands/nestjs-expert.md +552 -0
  456. package/merged-commands/network-101.md +342 -0
  457. package/merged-commands/network-engineer.md +169 -0
  458. package/merged-commands/nextjs-app-router-patterns.md +33 -0
  459. package/merged-commands/nextjs-best-practices.md +203 -0
  460. package/merged-commands/nextjs-developer.md +97 -0
  461. package/merged-commands/nextjs-supabase-auth.md +56 -0
  462. package/merged-commands/nft-standards.md +395 -0
  463. package/merged-commands/nodejs-backend-patterns.md +35 -0
  464. package/merged-commands/nodejs-best-practices.md +333 -0
  465. package/merged-commands/nosql-expert.md +111 -0
  466. package/merged-commands/notebooklm-skill.md +269 -0
  467. package/merged-commands/notebooklm.md +269 -0
  468. package/merged-commands/notion-template-business.md +216 -0
  469. package/merged-commands/nx-workspace-patterns.md +464 -0
  470. package/merged-commands/observability-engineer.md +237 -0
  471. package/merged-commands/observability-monitoring-monitor-setup.md +48 -0
  472. package/merged-commands/observability-monitoring-slo-implement.md +43 -0
  473. package/merged-commands/observe-whatsapp.md +109 -0
  474. package/merged-commands/obsidian-clipper-template-creator.md +64 -0
  475. package/merged-commands/on-call-handoff-patterns.md +453 -0
  476. package/merged-commands/onboarding-cro.md +433 -0
  477. package/merged-commands/openapi-spec-generation.md +33 -0
  478. package/merged-commands/page-cro.md +343 -0
  479. package/merged-commands/paid-ads.md +551 -0
  480. package/merged-commands/pandas-pro.md +96 -0
  481. package/merged-commands/parallel-agents.md +175 -0
  482. package/merged-commands/payment-integration.md +77 -0
  483. package/merged-commands/paypal-integration.md +479 -0
  484. package/merged-commands/paywall-upgrade-cro.md +570 -0
  485. package/merged-commands/pci-compliance.md +478 -0
  486. package/merged-commands/pdf-official.md +294 -0
  487. package/merged-commands/pdf.md +294 -0
  488. package/merged-commands/pentest-checklist.md +334 -0
  489. package/merged-commands/pentest-commands.md +438 -0
  490. package/merged-commands/performance-engineer.md +180 -0
  491. package/merged-commands/performance-profiling.md +143 -0
  492. package/merged-commands/performance-testing-review-ai-review.md +450 -0
  493. package/merged-commands/performance-testing-review-multi-agent-review.md +216 -0
  494. package/merged-commands/personal-tool-builder.md +289 -0
  495. package/merged-commands/php-pro.md +63 -0
  496. package/merged-commands/plaid-fintech.md +50 -0
  497. package/merged-commands/plan-writing.md +152 -0
  498. package/merged-commands/planning-with-files.md +211 -0
  499. package/merged-commands/planning.md +95 -0
  500. package/merged-commands/plans-kanban.md +166 -0
  501. package/merged-commands/playwright-expert.md +87 -0
  502. package/merged-commands/playwright-skill.md +453 -0
  503. package/merged-commands/podcast-generation.md +121 -0
  504. package/merged-commands/popup-cro.md +346 -0
  505. package/merged-commands/posix-shell-pro.md +304 -0
  506. package/merged-commands/postgres-best-practices.md +57 -0
  507. package/merged-commands/postgres-pro.md +98 -0
  508. package/merged-commands/postgresql.md +230 -0
  509. package/merged-commands/postmortem-writing.md +386 -0
  510. package/merged-commands/powershell-windows.md +167 -0
  511. package/merged-commands/pptx-official.md +484 -0
  512. package/merged-commands/pptx.md +484 -0
  513. package/merged-commands/pricing-strategy.md +356 -0
  514. package/merged-commands/prisma-expert.md +355 -0
  515. package/merged-commands/privilege-escalation-methods.md +333 -0
  516. package/merged-commands/problem-solving.md +96 -0
  517. package/merged-commands/product-manager-toolkit.md +351 -0
  518. package/merged-commands/product-strategist.md +26 -0
  519. package/merged-commands/production-code-audit.md +540 -0
  520. package/merged-commands/programmatic-seo.md +351 -0
  521. package/merged-commands/projection-patterns.md +33 -0
  522. package/merged-commands/prometheus-configuration.md +404 -0
  523. package/merged-commands/prompt-caching.md +61 -0
  524. package/merged-commands/prompt-engineer.md +272 -0
  525. package/merged-commands/prompt-engineering-patterns.md +213 -0
  526. package/merged-commands/prompt-engineering.md +171 -0
  527. package/merged-commands/prompt-library.md +322 -0
  528. package/merged-commands/protocol-reverse-engineering.md +29 -0
  529. package/merged-commands/pydantic-models.md +58 -0
  530. package/merged-commands/pypict-skill.md +22 -0
  531. package/merged-commands/python-development-python-scaffold.md +331 -0
  532. package/merged-commands/python-development.md +139 -0
  533. package/merged-commands/python-packaging.md +36 -0
  534. package/merged-commands/python-patterns.md +441 -0
  535. package/merged-commands/python-performance-optimization.md +36 -0
  536. package/merged-commands/python-pro.md +158 -0
  537. package/merged-commands/python-testing-patterns.md +37 -0
  538. package/merged-commands/qa-regression.md +337 -0
  539. package/merged-commands/quant-analyst.md +53 -0
  540. package/merged-commands/radix-ui-design-system.md +847 -0
  541. package/merged-commands/raffle-winner-picker.md +159 -0
  542. package/merged-commands/rag-architect.md +100 -0
  543. package/merged-commands/rag-engineer.md +90 -0
  544. package/merged-commands/rag-implementation.md +421 -0
  545. package/merged-commands/rails-expert.md +97 -0
  546. package/merged-commands/react-best-practices.md +121 -0
  547. package/merged-commands/react-expert.md +98 -0
  548. package/merged-commands/react-flow-node.md +66 -0
  549. package/merged-commands/react-modernization.md +34 -0
  550. package/merged-commands/react-native-architecture.md +33 -0
  551. package/merged-commands/react-native-expert.md +88 -0
  552. package/merged-commands/react-patterns.md +198 -0
  553. package/merged-commands/react-state-management.md +441 -0
  554. package/merged-commands/react-ui-patterns.md +289 -0
  555. package/merged-commands/readme.md +775 -0
  556. package/merged-commands/receiving-code-review.md +213 -0
  557. package/merged-commands/red-team-tactics.md +199 -0
  558. package/merged-commands/red-team-tools.md +310 -0
  559. package/merged-commands/reference-builder.md +188 -0
  560. package/merged-commands/referral-program.md +602 -0
  561. package/merged-commands/remotion-best-practices.md +45 -0
  562. package/merged-commands/repomix.md +275 -0
  563. package/merged-commands/requesting-code-review.md +105 -0
  564. package/merged-commands/research-engineer.md +135 -0
  565. package/merged-commands/research.md +191 -0
  566. package/merged-commands/reverse-engineer.md +173 -0
  567. package/merged-commands/risk-manager.md +61 -0
  568. package/merged-commands/risk-metrics-calculation.md +33 -0
  569. package/merged-commands/ruby-pro.md +56 -0
  570. package/merged-commands/rust-async-patterns.md +33 -0
  571. package/merged-commands/rust-engineer.md +96 -0
  572. package/merged-commands/rust-pro.md +178 -0
  573. package/merged-commands/saga-orchestration.md +496 -0
  574. package/merged-commands/sales-automator.md +55 -0
  575. package/merged-commands/salesforce-developer.md +105 -0
  576. package/merged-commands/salesforce-development.md +51 -0
  577. package/merged-commands/sast-configuration.md +212 -0
  578. package/merged-commands/scala-pro.md +82 -0
  579. package/merged-commands/scanning-tools.md +589 -0
  580. package/merged-commands/schema-markup.md +360 -0
  581. package/merged-commands/screen-reader-testing.md +33 -0
  582. package/merged-commands/screenshots.md +401 -0
  583. package/merged-commands/scroll-experience.md +263 -0
  584. package/merged-commands/search-specialist.md +80 -0
  585. package/merged-commands/secrets-management.md +364 -0
  586. package/merged-commands/secure-code-guardian.md +93 -0
  587. package/merged-commands/security-auditor.md +169 -0
  588. package/merged-commands/security-bluebook-builder.md +22 -0
  589. package/merged-commands/security-compliance-compliance-check.md +55 -0
  590. package/merged-commands/security-requirement-extraction.md +33 -0
  591. package/merged-commands/security-reviewer.md +94 -0
  592. package/merged-commands/security-scanning-security-dependencies.md +43 -0
  593. package/merged-commands/security-scanning-security-hardening.md +147 -0
  594. package/merged-commands/security-scanning-security-sast.md +495 -0
  595. package/merged-commands/segment-cdp.md +50 -0
  596. package/merged-commands/senior-architect.md +209 -0
  597. package/merged-commands/senior-backend.md +209 -0
  598. package/merged-commands/senior-computer-vision.md +226 -0
  599. package/merged-commands/senior-data-engineer.md +226 -0
  600. package/merged-commands/senior-data-scientist.md +226 -0
  601. package/merged-commands/senior-devops.md +209 -0
  602. package/merged-commands/senior-frontend.md +209 -0
  603. package/merged-commands/senior-fullstack.md +209 -0
  604. package/merged-commands/senior-ml-engineer.md +226 -0
  605. package/merged-commands/senior-prompt-engineer.md +226 -0
  606. package/merged-commands/senior-qa.md +209 -0
  607. package/merged-commands/senior-secops.md +209 -0
  608. package/merged-commands/senior-security.md +209 -0
  609. package/merged-commands/seo-audit.md +487 -0
  610. package/merged-commands/seo-authority-builder.md +136 -0
  611. package/merged-commands/seo-cannibalization-detector.md +123 -0
  612. package/merged-commands/seo-content-auditor.md +83 -0
  613. package/merged-commands/seo-content-planner.md +108 -0
  614. package/merged-commands/seo-content-refresher.md +118 -0
  615. package/merged-commands/seo-content-writer.md +96 -0
  616. package/merged-commands/seo-fundamentals.md +173 -0
  617. package/merged-commands/seo-keyword-strategist.md +95 -0
  618. package/merged-commands/seo-meta-optimizer.md +92 -0
  619. package/merged-commands/seo-snippet-hunter.md +114 -0
  620. package/merged-commands/seo-structure-architect.md +108 -0
  621. package/merged-commands/sequential-thinking.md +94 -0
  622. package/merged-commands/server-management.md +161 -0
  623. package/merged-commands/service-mesh-expert.md +58 -0
  624. package/merged-commands/service-mesh-observability.md +395 -0
  625. package/merged-commands/sharp-edges.md +70 -0
  626. package/merged-commands/shellcheck-configuration.md +466 -0
  627. package/merged-commands/shodan-reconnaissance.md +503 -0
  628. package/merged-commands/shopify-apps.md +42 -0
  629. package/merged-commands/shopify-development.md +366 -0
  630. package/merged-commands/shopify-expert.md +102 -0
  631. package/merged-commands/signup-flow-cro.md +355 -0
  632. package/merged-commands/similarity-search-patterns.md +33 -0
  633. package/merged-commands/skill-creator.md +356 -0
  634. package/merged-commands/skill-developer.md +426 -0
  635. package/merged-commands/skill-rails-upgrade.md +408 -0
  636. package/merged-commands/skill-seekers.md +22 -0
  637. package/merged-commands/skill-share.md +80 -0
  638. package/merged-commands/slack-bot-builder.md +264 -0
  639. package/merged-commands/slack-gif-creator.md +254 -0
  640. package/merged-commands/slo-implementation.md +341 -0
  641. package/merged-commands/smtp-penetration-testing.md +500 -0
  642. package/merged-commands/social-content.md +807 -0
  643. package/merged-commands/software-architecture.md +75 -0
  644. package/merged-commands/solidity-security.md +34 -0
  645. package/merged-commands/spark-engineer.md +100 -0
  646. package/merged-commands/spark-optimization.md +427 -0
  647. package/merged-commands/spec-miner.md +88 -0
  648. package/merged-commands/spring-boot-engineer.md +104 -0
  649. package/merged-commands/sql-injection-testing.md +448 -0
  650. package/merged-commands/sql-optimization-patterns.md +35 -0
  651. package/merged-commands/sql-pro.md +173 -0
  652. package/merged-commands/sqlmap-database-pentesting.md +400 -0
  653. package/merged-commands/sre-engineer.md +98 -0
  654. package/merged-commands/ssh-penetration-testing.md +488 -0
  655. package/merged-commands/startup-analyst.md +328 -0
  656. package/merged-commands/startup-business-analyst-business-case.md +487 -0
  657. package/merged-commands/startup-business-analyst-financial-projections.md +353 -0
  658. package/merged-commands/startup-business-analyst-market-opportunity.md +240 -0
  659. package/merged-commands/startup-financial-modeling.md +467 -0
  660. package/merged-commands/startup-metrics-framework.md +34 -0
  661. package/merged-commands/stitch-ui-design.md +378 -0
  662. package/merged-commands/stride-analysis-patterns.md +33 -0
  663. package/merged-commands/stripe-integration.md +454 -0
  664. package/merged-commands/subagent-driven-development.md +240 -0
  665. package/merged-commands/superpowers-lab.md +22 -0
  666. package/merged-commands/swift-expert.md +94 -0
  667. package/merged-commands/swiftui-expert-skill.md +275 -0
  668. package/merged-commands/systematic-debugging.md +296 -0
  669. package/merged-commands/systems-programming-rust-project.md +440 -0
  670. package/merged-commands/tailwind-design-system.md +33 -0
  671. package/merged-commands/tailwind-patterns.md +269 -0
  672. package/merged-commands/tavily-web.md +36 -0
  673. package/merged-commands/tdd-orchestrator.md +205 -0
  674. package/merged-commands/tdd-workflow.md +149 -0
  675. package/merged-commands/tdd-workflows-tdd-cycle.md +221 -0
  676. package/merged-commands/tdd-workflows-tdd-green.md +73 -0
  677. package/merged-commands/tdd-workflows-tdd-red.md +164 -0
  678. package/merged-commands/tdd-workflows-tdd-refactor.md +187 -0
  679. package/merged-commands/team-collaboration-issue.md +37 -0
  680. package/merged-commands/team-collaboration-standup-notes.md +44 -0
  681. package/merged-commands/team-composition-analysis.md +413 -0
  682. package/merged-commands/telegram-bot-builder.md +254 -0
  683. package/merged-commands/telegram-mini-app.md +279 -0
  684. package/merged-commands/template-skill.md +6 -0
  685. package/merged-commands/temporal-python-pro.md +370 -0
  686. package/merged-commands/temporal-python-testing.md +170 -0
  687. package/merged-commands/terraform-engineer.md +97 -0
  688. package/merged-commands/terraform-module-library.md +261 -0
  689. package/merged-commands/terraform-skill.md +517 -0
  690. package/merged-commands/terraform-specialist.md +166 -0
  691. package/merged-commands/test-automator.md +224 -0
  692. package/merged-commands/test-driven-development.md +371 -0
  693. package/merged-commands/test-fixing.md +119 -0
  694. package/merged-commands/test-master.md +104 -0
  695. package/merged-commands/testing-patterns.md +259 -0
  696. package/merged-commands/theme-factory.md +59 -0
  697. package/merged-commands/threat-mitigation-mapping.md +33 -0
  698. package/merged-commands/threat-modeling-expert.md +60 -0
  699. package/merged-commands/threejs-skills.md +22 -0
  700. package/merged-commands/threejs.md +89 -0
  701. package/merged-commands/tool-design.md +318 -0
  702. package/merged-commands/top-web-vulnerabilities.md +543 -0
  703. package/merged-commands/track-management.md +38 -0
  704. package/merged-commands/trigger-dev.md +67 -0
  705. package/merged-commands/turborepo-caching.md +419 -0
  706. package/merged-commands/tutorial-engineer.md +139 -0
  707. package/merged-commands/twilio-communications.md +295 -0
  708. package/merged-commands/typescript-advanced-types.md +35 -0
  709. package/merged-commands/typescript-expert.md +429 -0
  710. package/merged-commands/typescript-pro.md +55 -0
  711. package/merged-commands/ui-design-system.md +32 -0
  712. package/merged-commands/ui-skills.md +22 -0
  713. package/merged-commands/ui-styling.md +321 -0
  714. package/merged-commands/ui-ux-designer.md +209 -0
  715. package/merged-commands/ui-ux-pro-max.md +351 -0
  716. package/merged-commands/ui-visual-validator.md +214 -0
  717. package/merged-commands/unit-testing-test-generate.md +319 -0
  718. package/merged-commands/unity-developer.md +230 -0
  719. package/merged-commands/unity-ecs-patterns.md +33 -0
  720. package/merged-commands/unreal-engine-cpp-pro.md +114 -0
  721. package/merged-commands/upgrading-expo.md +118 -0
  722. package/merged-commands/upstash-qstash.md +68 -0
  723. package/merged-commands/using-git-worktrees.md +217 -0
  724. package/merged-commands/using-neon.md +84 -0
  725. package/merged-commands/using-superpowers.md +87 -0
  726. package/merged-commands/uv-package-manager.md +37 -0
  727. package/merged-commands/ux-researcher-designer.md +30 -0
  728. package/merged-commands/varlock-claude-skill.md +22 -0
  729. package/merged-commands/vector-database-engineer.md +60 -0
  730. package/merged-commands/vector-index-tuning.md +42 -0
  731. package/merged-commands/vercel-deploy-claimable.md +120 -0
  732. package/merged-commands/vercel-deploy.md +22 -0
  733. package/merged-commands/vercel-deployment.md +79 -0
  734. package/merged-commands/verification-before-completion.md +139 -0
  735. package/merged-commands/vexor.md +22 -0
  736. package/merged-commands/video-downloader.md +106 -0
  737. package/merged-commands/viral-generator-builder.md +199 -0
  738. package/merged-commands/voice-agents.md +68 -0
  739. package/merged-commands/voice-ai-development.md +302 -0
  740. package/merged-commands/voice-ai-engine-development.md +721 -0
  741. package/merged-commands/vue-expert-js.md +91 -0
  742. package/merged-commands/vue-expert.md +374 -0
  743. package/merged-commands/vulnerability-scanner.md +276 -0
  744. package/merged-commands/wcag-audit-patterns.md +41 -0
  745. package/merged-commands/web-artifacts-builder.md +74 -0
  746. package/merged-commands/web-design-guidelines.md +36 -0
  747. package/merged-commands/web-frameworks.md +324 -0
  748. package/merged-commands/web-performance-optimization.md +646 -0
  749. package/merged-commands/web3-testing.md +427 -0
  750. package/merged-commands/webapp-testing.md +96 -0
  751. package/merged-commands/websocket-engineer.md +96 -0
  752. package/merged-commands/windows-privilege-escalation.md +496 -0
  753. package/merged-commands/wireshark-analysis.md +497 -0
  754. package/merged-commands/wordpress-penetration-testing.md +485 -0
  755. package/merged-commands/wordpress-pro.md +105 -0
  756. package/merged-commands/workflow-automation.md +68 -0
  757. package/merged-commands/workflow-orchestration-patterns.md +333 -0
  758. package/merged-commands/workflow-patterns.md +38 -0
  759. package/merged-commands/writing-plans.md +116 -0
  760. package/merged-commands/writing-skills.md +125 -0
  761. package/merged-commands/x-article-publisher-skill.md +22 -0
  762. package/merged-commands/xlsx-official.md +289 -0
  763. package/merged-commands/xlsx.md +289 -0
  764. package/merged-commands/xss-html-injection.md +499 -0
  765. package/merged-commands/youtube-transcript.md +415 -0
  766. package/merged-commands/zapier-make-patterns.md +67 -0
  767. package/merged-commands/zustand-store.md +68 -0
  768. package/package.json +1 -1
  769. package/scripts/merge-commands.js +21 -0
@@ -0,0 +1,820 @@
1
+ ---
2
+ name: d3-viz
3
+ description: Creating interactive data visualisations using d3.js. This skill should be used when creating custom charts, graphs, network diagrams, geographic visualisations, or any complex SVG-based data visualisation that requires fine-grained control over visual elements, transitions, or interactions. Use this for bespoke visualisations beyond standard charting libraries, whether in React, Vue, Svelte, vanilla JavaScript, or any other environment.
4
+ ---
5
+
6
+ # D3.js Visualisation
7
+
8
+ ## Overview
9
+
10
+ This skill provides guidance for creating sophisticated, interactive data visualisations using d3.js. D3.js (Data-Driven Documents) excels at binding data to DOM elements and applying data-driven transformations to create custom, publication-quality visualisations with precise control over every visual element. The techniques work across any JavaScript environment, including vanilla JavaScript, React, Vue, Svelte, and other frameworks.
11
+
12
+ ## When to use d3.js
13
+
14
+ **Use d3.js for:**
15
+ - Custom visualisations requiring unique visual encodings or layouts
16
+ - Interactive explorations with complex pan, zoom, or brush behaviours
17
+ - Network/graph visualisations (force-directed layouts, tree diagrams, hierarchies, chord diagrams)
18
+ - Geographic visualisations with custom projections
19
+ - Visualisations requiring smooth, choreographed transitions
20
+ - Publication-quality graphics with fine-grained styling control
21
+ - Novel chart types not available in standard libraries
22
+
23
+ **Consider alternatives for:**
24
+ - 3D visualisations - use Three.js instead
25
+
26
+ ## Core workflow
27
+
28
+ ### 1. Set up d3.js
29
+
30
+ Import d3 at the top of your script:
31
+
32
+ ```javascript
33
+ import * as d3 from 'd3';
34
+ ```
35
+
36
+ Or use the CDN version (7.x):
37
+
38
+ ```html
39
+ <script src="https://d3js.org/d3.v7.min.js"></script>
40
+ ```
41
+
42
+ All modules (scales, axes, shapes, transitions, etc.) are accessible through the `d3` namespace.
43
+
44
+ ### 2. Choose the integration pattern
45
+
46
+ **Pattern A: Direct DOM manipulation (recommended for most cases)**
47
+ Use d3 to select DOM elements and manipulate them imperatively. This works in any JavaScript environment:
48
+
49
+ ```javascript
50
+ function drawChart(data) {
51
+ if (!data || data.length === 0) return;
52
+
53
+ const svg = d3.select('#chart'); // Select by ID, class, or DOM element
54
+
55
+ // Clear previous content
56
+ svg.selectAll("*").remove();
57
+
58
+ // Set up dimensions
59
+ const width = 800;
60
+ const height = 400;
61
+ const margin = { top: 20, right: 30, bottom: 40, left: 50 };
62
+
63
+ // Create scales, axes, and draw visualisation
64
+ // ... d3 code here ...
65
+ }
66
+
67
+ // Call when data changes
68
+ drawChart(myData);
69
+ ```
70
+
71
+ **Pattern B: Declarative rendering (for frameworks with templating)**
72
+ Use d3 for data calculations (scales, layouts) but render elements via your framework:
73
+
74
+ ```javascript
75
+ function getChartElements(data) {
76
+ const xScale = d3.scaleLinear()
77
+ .domain([0, d3.max(data, d => d.value)])
78
+ .range([0, 400]);
79
+
80
+ return data.map((d, i) => ({
81
+ x: 50,
82
+ y: i * 30,
83
+ width: xScale(d.value),
84
+ height: 25
85
+ }));
86
+ }
87
+
88
+ // In React: {getChartElements(data).map((d, i) => <rect key={i} {...d} fill="steelblue" />)}
89
+ // In Vue: v-for directive over the returned array
90
+ // In vanilla JS: Create elements manually from the returned data
91
+ ```
92
+
93
+ Use Pattern A for complex visualisations with transitions, interactions, or when leveraging d3's full capabilities. Use Pattern B for simpler visualisations or when your framework prefers declarative rendering.
94
+
95
+ ### 3. Structure the visualisation code
96
+
97
+ Follow this standard structure in your drawing function:
98
+
99
+ ```javascript
100
+ function drawVisualization(data) {
101
+ if (!data || data.length === 0) return;
102
+
103
+ const svg = d3.select('#chart'); // Or pass a selector/element
104
+ svg.selectAll("*").remove(); // Clear previous render
105
+
106
+ // 1. Define dimensions
107
+ const width = 800;
108
+ const height = 400;
109
+ const margin = { top: 20, right: 30, bottom: 40, left: 50 };
110
+ const innerWidth = width - margin.left - margin.right;
111
+ const innerHeight = height - margin.top - margin.bottom;
112
+
113
+ // 2. Create main group with margins
114
+ const g = svg.append("g")
115
+ .attr("transform", `translate(${margin.left},${margin.top})`);
116
+
117
+ // 3. Create scales
118
+ const xScale = d3.scaleLinear()
119
+ .domain([0, d3.max(data, d => d.x)])
120
+ .range([0, innerWidth]);
121
+
122
+ const yScale = d3.scaleLinear()
123
+ .domain([0, d3.max(data, d => d.y)])
124
+ .range([innerHeight, 0]); // Note: inverted for SVG coordinates
125
+
126
+ // 4. Create and append axes
127
+ const xAxis = d3.axisBottom(xScale);
128
+ const yAxis = d3.axisLeft(yScale);
129
+
130
+ g.append("g")
131
+ .attr("transform", `translate(0,${innerHeight})`)
132
+ .call(xAxis);
133
+
134
+ g.append("g")
135
+ .call(yAxis);
136
+
137
+ // 5. Bind data and create visual elements
138
+ g.selectAll("circle")
139
+ .data(data)
140
+ .join("circle")
141
+ .attr("cx", d => xScale(d.x))
142
+ .attr("cy", d => yScale(d.y))
143
+ .attr("r", 5)
144
+ .attr("fill", "steelblue");
145
+ }
146
+
147
+ // Call when data changes
148
+ drawVisualization(myData);
149
+ ```
150
+
151
+ ### 4. Implement responsive sizing
152
+
153
+ Make visualisations responsive to container size:
154
+
155
+ ```javascript
156
+ function setupResponsiveChart(containerId, data) {
157
+ const container = document.getElementById(containerId);
158
+ const svg = d3.select(`#${containerId}`).append('svg');
159
+
160
+ function updateChart() {
161
+ const { width, height } = container.getBoundingClientRect();
162
+ svg.attr('width', width).attr('height', height);
163
+
164
+ // Redraw visualisation with new dimensions
165
+ drawChart(data, svg, width, height);
166
+ }
167
+
168
+ // Update on initial load
169
+ updateChart();
170
+
171
+ // Update on window resize
172
+ window.addEventListener('resize', updateChart);
173
+
174
+ // Return cleanup function
175
+ return () => window.removeEventListener('resize', updateChart);
176
+ }
177
+
178
+ // Usage:
179
+ // const cleanup = setupResponsiveChart('chart-container', myData);
180
+ // cleanup(); // Call when component unmounts or element removed
181
+ ```
182
+
183
+ Or use ResizeObserver for more direct container monitoring:
184
+
185
+ ```javascript
186
+ function setupResponsiveChartWithObserver(svgElement, data) {
187
+ const observer = new ResizeObserver(() => {
188
+ const { width, height } = svgElement.getBoundingClientRect();
189
+ d3.select(svgElement)
190
+ .attr('width', width)
191
+ .attr('height', height);
192
+
193
+ // Redraw visualisation
194
+ drawChart(data, d3.select(svgElement), width, height);
195
+ });
196
+
197
+ observer.observe(svgElement.parentElement);
198
+ return () => observer.disconnect();
199
+ }
200
+ ```
201
+
202
+ ## Common visualisation patterns
203
+
204
+ ### Bar chart
205
+
206
+ ```javascript
207
+ function drawBarChart(data, svgElement) {
208
+ if (!data || data.length === 0) return;
209
+
210
+ const svg = d3.select(svgElement);
211
+ svg.selectAll("*").remove();
212
+
213
+ const width = 800;
214
+ const height = 400;
215
+ const margin = { top: 20, right: 30, bottom: 40, left: 50 };
216
+ const innerWidth = width - margin.left - margin.right;
217
+ const innerHeight = height - margin.top - margin.bottom;
218
+
219
+ const g = svg.append("g")
220
+ .attr("transform", `translate(${margin.left},${margin.top})`);
221
+
222
+ const xScale = d3.scaleBand()
223
+ .domain(data.map(d => d.category))
224
+ .range([0, innerWidth])
225
+ .padding(0.1);
226
+
227
+ const yScale = d3.scaleLinear()
228
+ .domain([0, d3.max(data, d => d.value)])
229
+ .range([innerHeight, 0]);
230
+
231
+ g.append("g")
232
+ .attr("transform", `translate(0,${innerHeight})`)
233
+ .call(d3.axisBottom(xScale));
234
+
235
+ g.append("g")
236
+ .call(d3.axisLeft(yScale));
237
+
238
+ g.selectAll("rect")
239
+ .data(data)
240
+ .join("rect")
241
+ .attr("x", d => xScale(d.category))
242
+ .attr("y", d => yScale(d.value))
243
+ .attr("width", xScale.bandwidth())
244
+ .attr("height", d => innerHeight - yScale(d.value))
245
+ .attr("fill", "steelblue");
246
+ }
247
+
248
+ // Usage:
249
+ // drawBarChart(myData, document.getElementById('chart'));
250
+ ```
251
+
252
+ ### Line chart
253
+
254
+ ```javascript
255
+ const line = d3.line()
256
+ .x(d => xScale(d.date))
257
+ .y(d => yScale(d.value))
258
+ .curve(d3.curveMonotoneX); // Smooth curve
259
+
260
+ g.append("path")
261
+ .datum(data)
262
+ .attr("fill", "none")
263
+ .attr("stroke", "steelblue")
264
+ .attr("stroke-width", 2)
265
+ .attr("d", line);
266
+ ```
267
+
268
+ ### Scatter plot
269
+
270
+ ```javascript
271
+ g.selectAll("circle")
272
+ .data(data)
273
+ .join("circle")
274
+ .attr("cx", d => xScale(d.x))
275
+ .attr("cy", d => yScale(d.y))
276
+ .attr("r", d => sizeScale(d.size)) // Optional: size encoding
277
+ .attr("fill", d => colourScale(d.category)) // Optional: colour encoding
278
+ .attr("opacity", 0.7);
279
+ ```
280
+
281
+ ### Chord diagram
282
+
283
+ A chord diagram shows relationships between entities in a circular layout, with ribbons representing flows between them:
284
+
285
+ ```javascript
286
+ function drawChordDiagram(data) {
287
+ // data format: array of objects with source, target, and value
288
+ // Example: [{ source: 'A', target: 'B', value: 10 }, ...]
289
+
290
+ if (!data || data.length === 0) return;
291
+
292
+ const svg = d3.select('#chart');
293
+ svg.selectAll("*").remove();
294
+
295
+ const width = 600;
296
+ const height = 600;
297
+ const innerRadius = Math.min(width, height) * 0.3;
298
+ const outerRadius = innerRadius + 30;
299
+
300
+ // Create matrix from data
301
+ const nodes = Array.from(new Set(data.flatMap(d => [d.source, d.target])));
302
+ const matrix = Array.from({ length: nodes.length }, () => Array(nodes.length).fill(0));
303
+
304
+ data.forEach(d => {
305
+ const i = nodes.indexOf(d.source);
306
+ const j = nodes.indexOf(d.target);
307
+ matrix[i][j] += d.value;
308
+ matrix[j][i] += d.value;
309
+ });
310
+
311
+ // Create chord layout
312
+ const chord = d3.chord()
313
+ .padAngle(0.05)
314
+ .sortSubgroups(d3.descending);
315
+
316
+ const arc = d3.arc()
317
+ .innerRadius(innerRadius)
318
+ .outerRadius(outerRadius);
319
+
320
+ const ribbon = d3.ribbon()
321
+ .source(d => d.source)
322
+ .target(d => d.target);
323
+
324
+ const colourScale = d3.scaleOrdinal(d3.schemeCategory10)
325
+ .domain(nodes);
326
+
327
+ const g = svg.append("g")
328
+ .attr("transform", `translate(${width / 2},${height / 2})`);
329
+
330
+ const chords = chord(matrix);
331
+
332
+ // Draw ribbons
333
+ g.append("g")
334
+ .attr("fill-opacity", 0.67)
335
+ .selectAll("path")
336
+ .data(chords)
337
+ .join("path")
338
+ .attr("d", ribbon)
339
+ .attr("fill", d => colourScale(nodes[d.source.index]))
340
+ .attr("stroke", d => d3.rgb(colourScale(nodes[d.source.index])).darker());
341
+
342
+ // Draw groups (arcs)
343
+ const group = g.append("g")
344
+ .selectAll("g")
345
+ .data(chords.groups)
346
+ .join("g");
347
+
348
+ group.append("path")
349
+ .attr("d", arc)
350
+ .attr("fill", d => colourScale(nodes[d.index]))
351
+ .attr("stroke", d => d3.rgb(colourScale(nodes[d.index])).darker());
352
+
353
+ // Add labels
354
+ group.append("text")
355
+ .each(d => { d.angle = (d.startAngle + d.endAngle) / 2; })
356
+ .attr("dy", "0.31em")
357
+ .attr("transform", d => `rotate(${(d.angle * 180 / Math.PI) - 90})translate(${outerRadius + 30})${d.angle > Math.PI ? "rotate(180)" : ""}`)
358
+ .attr("text-anchor", d => d.angle > Math.PI ? "end" : null)
359
+ .text((d, i) => nodes[i])
360
+ .style("font-size", "12px");
361
+ }
362
+ ```
363
+
364
+ ### Heatmap
365
+
366
+ A heatmap uses colour to encode values in a two-dimensional grid, useful for showing patterns across categories:
367
+
368
+ ```javascript
369
+ function drawHeatmap(data) {
370
+ // data format: array of objects with row, column, and value
371
+ // Example: [{ row: 'A', column: 'X', value: 10 }, ...]
372
+
373
+ if (!data || data.length === 0) return;
374
+
375
+ const svg = d3.select('#chart');
376
+ svg.selectAll("*").remove();
377
+
378
+ const width = 800;
379
+ const height = 600;
380
+ const margin = { top: 100, right: 30, bottom: 30, left: 100 };
381
+ const innerWidth = width - margin.left - margin.right;
382
+ const innerHeight = height - margin.top - margin.bottom;
383
+
384
+ // Get unique rows and columns
385
+ const rows = Array.from(new Set(data.map(d => d.row)));
386
+ const columns = Array.from(new Set(data.map(d => d.column)));
387
+
388
+ const g = svg.append("g")
389
+ .attr("transform", `translate(${margin.left},${margin.top})`);
390
+
391
+ // Create scales
392
+ const xScale = d3.scaleBand()
393
+ .domain(columns)
394
+ .range([0, innerWidth])
395
+ .padding(0.01);
396
+
397
+ const yScale = d3.scaleBand()
398
+ .domain(rows)
399
+ .range([0, innerHeight])
400
+ .padding(0.01);
401
+
402
+ // Colour scale for values
403
+ const colourScale = d3.scaleSequential(d3.interpolateYlOrRd)
404
+ .domain([0, d3.max(data, d => d.value)]);
405
+
406
+ // Draw rectangles
407
+ g.selectAll("rect")
408
+ .data(data)
409
+ .join("rect")
410
+ .attr("x", d => xScale(d.column))
411
+ .attr("y", d => yScale(d.row))
412
+ .attr("width", xScale.bandwidth())
413
+ .attr("height", yScale.bandwidth())
414
+ .attr("fill", d => colourScale(d.value));
415
+
416
+ // Add x-axis labels
417
+ svg.append("g")
418
+ .attr("transform", `translate(${margin.left},${margin.top})`)
419
+ .selectAll("text")
420
+ .data(columns)
421
+ .join("text")
422
+ .attr("x", d => xScale(d) + xScale.bandwidth() / 2)
423
+ .attr("y", -10)
424
+ .attr("text-anchor", "middle")
425
+ .text(d => d)
426
+ .style("font-size", "12px");
427
+
428
+ // Add y-axis labels
429
+ svg.append("g")
430
+ .attr("transform", `translate(${margin.left},${margin.top})`)
431
+ .selectAll("text")
432
+ .data(rows)
433
+ .join("text")
434
+ .attr("x", -10)
435
+ .attr("y", d => yScale(d) + yScale.bandwidth() / 2)
436
+ .attr("dy", "0.35em")
437
+ .attr("text-anchor", "end")
438
+ .text(d => d)
439
+ .style("font-size", "12px");
440
+
441
+ // Add colour legend
442
+ const legendWidth = 20;
443
+ const legendHeight = 200;
444
+ const legend = svg.append("g")
445
+ .attr("transform", `translate(${width - 60},${margin.top})`);
446
+
447
+ const legendScale = d3.scaleLinear()
448
+ .domain(colourScale.domain())
449
+ .range([legendHeight, 0]);
450
+
451
+ const legendAxis = d3.axisRight(legendScale)
452
+ .ticks(5);
453
+
454
+ // Draw colour gradient in legend
455
+ for (let i = 0; i < legendHeight; i++) {
456
+ legend.append("rect")
457
+ .attr("y", i)
458
+ .attr("width", legendWidth)
459
+ .attr("height", 1)
460
+ .attr("fill", colourScale(legendScale.invert(i)));
461
+ }
462
+
463
+ legend.append("g")
464
+ .attr("transform", `translate(${legendWidth},0)`)
465
+ .call(legendAxis);
466
+ }
467
+ ```
468
+
469
+ ### Pie chart
470
+
471
+ ```javascript
472
+ const pie = d3.pie()
473
+ .value(d => d.value)
474
+ .sort(null);
475
+
476
+ const arc = d3.arc()
477
+ .innerRadius(0)
478
+ .outerRadius(Math.min(width, height) / 2 - 20);
479
+
480
+ const colourScale = d3.scaleOrdinal(d3.schemeCategory10);
481
+
482
+ const g = svg.append("g")
483
+ .attr("transform", `translate(${width / 2},${height / 2})`);
484
+
485
+ g.selectAll("path")
486
+ .data(pie(data))
487
+ .join("path")
488
+ .attr("d", arc)
489
+ .attr("fill", (d, i) => colourScale(i))
490
+ .attr("stroke", "white")
491
+ .attr("stroke-width", 2);
492
+ ```
493
+
494
+ ### Force-directed network
495
+
496
+ ```javascript
497
+ const simulation = d3.forceSimulation(nodes)
498
+ .force("link", d3.forceLink(links).id(d => d.id).distance(100))
499
+ .force("charge", d3.forceManyBody().strength(-300))
500
+ .force("center", d3.forceCenter(width / 2, height / 2));
501
+
502
+ const link = g.selectAll("line")
503
+ .data(links)
504
+ .join("line")
505
+ .attr("stroke", "#999")
506
+ .attr("stroke-width", 1);
507
+
508
+ const node = g.selectAll("circle")
509
+ .data(nodes)
510
+ .join("circle")
511
+ .attr("r", 8)
512
+ .attr("fill", "steelblue")
513
+ .call(d3.drag()
514
+ .on("start", dragstarted)
515
+ .on("drag", dragged)
516
+ .on("end", dragended));
517
+
518
+ simulation.on("tick", () => {
519
+ link
520
+ .attr("x1", d => d.source.x)
521
+ .attr("y1", d => d.source.y)
522
+ .attr("x2", d => d.target.x)
523
+ .attr("y2", d => d.target.y);
524
+
525
+ node
526
+ .attr("cx", d => d.x)
527
+ .attr("cy", d => d.y);
528
+ });
529
+
530
+ function dragstarted(event) {
531
+ if (!event.active) simulation.alphaTarget(0.3).restart();
532
+ event.subject.fx = event.subject.x;
533
+ event.subject.fy = event.subject.y;
534
+ }
535
+
536
+ function dragged(event) {
537
+ event.subject.fx = event.x;
538
+ event.subject.fy = event.y;
539
+ }
540
+
541
+ function dragended(event) {
542
+ if (!event.active) simulation.alphaTarget(0);
543
+ event.subject.fx = null;
544
+ event.subject.fy = null;
545
+ }
546
+ ```
547
+
548
+ ## Adding interactivity
549
+
550
+ ### Tooltips
551
+
552
+ ```javascript
553
+ // Create tooltip div (outside SVG)
554
+ const tooltip = d3.select("body").append("div")
555
+ .attr("class", "tooltip")
556
+ .style("position", "absolute")
557
+ .style("visibility", "hidden")
558
+ .style("background-color", "white")
559
+ .style("border", "1px solid #ddd")
560
+ .style("padding", "10px")
561
+ .style("border-radius", "4px")
562
+ .style("pointer-events", "none");
563
+
564
+ // Add to elements
565
+ circles
566
+ .on("mouseover", function(event, d) {
567
+ d3.select(this).attr("opacity", 1);
568
+ tooltip
569
+ .style("visibility", "visible")
570
+ .html(`<strong>${d.label}</strong><br/>Value: ${d.value}`);
571
+ })
572
+ .on("mousemove", function(event) {
573
+ tooltip
574
+ .style("top", (event.pageY - 10) + "px")
575
+ .style("left", (event.pageX + 10) + "px");
576
+ })
577
+ .on("mouseout", function() {
578
+ d3.select(this).attr("opacity", 0.7);
579
+ tooltip.style("visibility", "hidden");
580
+ });
581
+ ```
582
+
583
+ ### Zoom and pan
584
+
585
+ ```javascript
586
+ const zoom = d3.zoom()
587
+ .scaleExtent([0.5, 10])
588
+ .on("zoom", (event) => {
589
+ g.attr("transform", event.transform);
590
+ });
591
+
592
+ svg.call(zoom);
593
+ ```
594
+
595
+ ### Click interactions
596
+
597
+ ```javascript
598
+ circles
599
+ .on("click", function(event, d) {
600
+ // Handle click (dispatch event, update app state, etc.)
601
+ console.log("Clicked:", d);
602
+
603
+ // Visual feedback
604
+ d3.selectAll("circle").attr("fill", "steelblue");
605
+ d3.select(this).attr("fill", "orange");
606
+
607
+ // Optional: dispatch custom event for your framework/app to listen to
608
+ // window.dispatchEvent(new CustomEvent('chartClick', { detail: d }));
609
+ });
610
+ ```
611
+
612
+ ## Transitions and animations
613
+
614
+ Add smooth transitions to visual changes:
615
+
616
+ ```javascript
617
+ // Basic transition
618
+ circles
619
+ .transition()
620
+ .duration(750)
621
+ .attr("r", 10);
622
+
623
+ // Chained transitions
624
+ circles
625
+ .transition()
626
+ .duration(500)
627
+ .attr("fill", "orange")
628
+ .transition()
629
+ .duration(500)
630
+ .attr("r", 15);
631
+
632
+ // Staggered transitions
633
+ circles
634
+ .transition()
635
+ .delay((d, i) => i * 50)
636
+ .duration(500)
637
+ .attr("cy", d => yScale(d.value));
638
+
639
+ // Custom easing
640
+ circles
641
+ .transition()
642
+ .duration(1000)
643
+ .ease(d3.easeBounceOut)
644
+ .attr("r", 10);
645
+ ```
646
+
647
+ ## Scales reference
648
+
649
+ ### Quantitative scales
650
+
651
+ ```javascript
652
+ // Linear scale
653
+ const xScale = d3.scaleLinear()
654
+ .domain([0, 100])
655
+ .range([0, 500]);
656
+
657
+ // Log scale (for exponential data)
658
+ const logScale = d3.scaleLog()
659
+ .domain([1, 1000])
660
+ .range([0, 500]);
661
+
662
+ // Power scale
663
+ const powScale = d3.scalePow()
664
+ .exponent(2)
665
+ .domain([0, 100])
666
+ .range([0, 500]);
667
+
668
+ // Time scale
669
+ const timeScale = d3.scaleTime()
670
+ .domain([new Date(2020, 0, 1), new Date(2024, 0, 1)])
671
+ .range([0, 500]);
672
+ ```
673
+
674
+ ### Ordinal scales
675
+
676
+ ```javascript
677
+ // Band scale (for bar charts)
678
+ const bandScale = d3.scaleBand()
679
+ .domain(['A', 'B', 'C', 'D'])
680
+ .range([0, 400])
681
+ .padding(0.1);
682
+
683
+ // Point scale (for line/scatter categories)
684
+ const pointScale = d3.scalePoint()
685
+ .domain(['A', 'B', 'C', 'D'])
686
+ .range([0, 400]);
687
+
688
+ // Ordinal scale (for colours)
689
+ const colourScale = d3.scaleOrdinal(d3.schemeCategory10);
690
+ ```
691
+
692
+ ### Sequential scales
693
+
694
+ ```javascript
695
+ // Sequential colour scale
696
+ const colourScale = d3.scaleSequential(d3.interpolateBlues)
697
+ .domain([0, 100]);
698
+
699
+ // Diverging colour scale
700
+ const divScale = d3.scaleDiverging(d3.interpolateRdBu)
701
+ .domain([-10, 0, 10]);
702
+ ```
703
+
704
+ ## Best practices
705
+
706
+ ### Data preparation
707
+
708
+ Always validate and prepare data before visualisation:
709
+
710
+ ```javascript
711
+ // Filter invalid values
712
+ const cleanData = data.filter(d => d.value != null && !isNaN(d.value));
713
+
714
+ // Sort data if order matters
715
+ const sortedData = [...data].sort((a, b) => b.value - a.value);
716
+
717
+ // Parse dates
718
+ const parsedData = data.map(d => ({
719
+ ...d,
720
+ date: d3.timeParse("%Y-%m-%d")(d.date)
721
+ }));
722
+ ```
723
+
724
+ ### Performance optimisation
725
+
726
+ For large datasets (>1000 elements):
727
+
728
+ ```javascript
729
+ // Use canvas instead of SVG for many elements
730
+ // Use quadtree for collision detection
731
+ // Simplify paths with d3.line().curve(d3.curveStep)
732
+ // Implement virtual scrolling for large lists
733
+ // Use requestAnimationFrame for custom animations
734
+ ```
735
+
736
+ ### Accessibility
737
+
738
+ Make visualisations accessible:
739
+
740
+ ```javascript
741
+ // Add ARIA labels
742
+ svg.attr("role", "img")
743
+ .attr("aria-label", "Bar chart showing quarterly revenue");
744
+
745
+ // Add title and description
746
+ svg.append("title").text("Quarterly Revenue 2024");
747
+ svg.append("desc").text("Bar chart showing revenue growth across four quarters");
748
+
749
+ // Ensure sufficient colour contrast
750
+ // Provide keyboard navigation for interactive elements
751
+ // Include data table alternative
752
+ ```
753
+
754
+ ### Styling
755
+
756
+ Use consistent, professional styling:
757
+
758
+ ```javascript
759
+ // Define colour palettes upfront
760
+ const colours = {
761
+ primary: '#4A90E2',
762
+ secondary: '#7B68EE',
763
+ background: '#F5F7FA',
764
+ text: '#333333',
765
+ gridLines: '#E0E0E0'
766
+ };
767
+
768
+ // Apply consistent typography
769
+ svg.selectAll("text")
770
+ .style("font-family", "Inter, sans-serif")
771
+ .style("font-size", "12px");
772
+
773
+ // Use subtle grid lines
774
+ g.selectAll(".tick line")
775
+ .attr("stroke", colours.gridLines)
776
+ .attr("stroke-dasharray", "2,2");
777
+ ```
778
+
779
+ ## Common issues and solutions
780
+
781
+ **Issue**: Axes not appearing
782
+ - Ensure scales have valid domains (check for NaN values)
783
+ - Verify axis is appended to correct group
784
+ - Check transform translations are correct
785
+
786
+ **Issue**: Transitions not working
787
+ - Call `.transition()` before attribute changes
788
+ - Ensure elements have unique keys for proper data binding
789
+ - Check that useEffect dependencies include all changing data
790
+
791
+ **Issue**: Responsive sizing not working
792
+ - Use ResizeObserver or window resize listener
793
+ - Update dimensions in state to trigger re-render
794
+ - Ensure SVG has width/height attributes or viewBox
795
+
796
+ **Issue**: Performance problems
797
+ - Limit number of DOM elements (consider canvas for >1000 items)
798
+ - Debounce resize handlers
799
+ - Use `.join()` instead of separate enter/update/exit selections
800
+ - Avoid unnecessary re-renders by checking dependencies
801
+
802
+ ## Resources
803
+
804
+ ### references/
805
+ Contains detailed reference materials:
806
+ - `d3-patterns.md` - Comprehensive collection of visualisation patterns and code examples
807
+ - `scale-reference.md` - Complete guide to d3 scales with examples
808
+ - `colour-schemes.md` - D3 colour schemes and palette recommendations
809
+
810
+ ### assets/
811
+
812
+ Contains boilerplate templates:
813
+
814
+ - `chart-template.js` - Starter template for basic chart
815
+ - `interactive-template.js` - Template with tooltips, zoom, and interactions
816
+ - `sample-data.json` - Example datasets for testing
817
+
818
+ These templates work with vanilla JavaScript, React, Vue, Svelte, or any other JavaScript environment. Adapt them as needed for your specific framework.
819
+
820
+ To use these resources, read the relevant files when detailed guidance is needed for specific visualisation types or patterns.