@thierrynakoa/fire-flow 12.2.1 → 13.0.1

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 (500) hide show
  1. package/CREDITS.md +25 -0
  2. package/DOMINION-FLOW-OVERVIEW.md +182 -38
  3. package/README.md +399 -455
  4. package/TROUBLESHOOTING.md +264 -264
  5. package/agents/fire-debugger.md +54 -0
  6. package/agents/fire-executor.md +1610 -1033
  7. package/agents/fire-fact-checker.md +1 -1
  8. package/agents/fire-planner.md +85 -17
  9. package/agents/fire-project-researcher.md +1 -1
  10. package/agents/fire-researcher.md +4 -22
  11. package/agents/{fire-phoenix-analyst.md → fire-resurrection-analyst.md} +394 -394
  12. package/agents/fire-reviewer.md +552 -499
  13. package/agents/fire-verifier.md +114 -19
  14. package/bin/cli.js +18 -101
  15. package/commands/fire-0-orient.md +2 -2
  16. package/commands/fire-1a-new.md +50 -15
  17. package/commands/fire-1c-setup.md +33 -5
  18. package/commands/fire-1d-discuss.md +87 -1
  19. package/commands/fire-2-plan.md +556 -527
  20. package/commands/fire-3-execute.md +2046 -1356
  21. package/commands/fire-4-verify.md +975 -906
  22. package/commands/fire-5-handoff.md +46 -5
  23. package/commands/fire-6-resume.md +2 -31
  24. package/commands/fire-add-new-skill.md +138 -19
  25. package/commands/fire-autonomous.md +14 -2
  26. package/commands/fire-complete-milestone.md +1 -1
  27. package/commands/fire-cost.md +179 -183
  28. package/commands/fire-debug.md +1 -6
  29. package/commands/fire-loop-resume.md +2 -2
  30. package/commands/fire-loop-stop.md +1 -1
  31. package/commands/fire-loop.md +2 -15
  32. package/commands/fire-map-codebase.md +1 -1
  33. package/commands/fire-migrate-database.md +548 -0
  34. package/commands/fire-new-milestone.md +1 -1
  35. package/commands/fire-reflect.md +1 -2
  36. package/commands/fire-research.md +142 -21
  37. package/commands/{fire-phoenix.md → fire-resurrect.md} +859 -603
  38. package/commands/fire-scaffold.md +297 -0
  39. package/commands/fire-search.md +1 -2
  40. package/commands/fire-security-scan.md +483 -484
  41. package/commands/fire-setup.md +359 -0
  42. package/commands/fire-skill.md +770 -0
  43. package/commands/fire-skills-diff.md +506 -506
  44. package/commands/fire-skills-history.md +388 -388
  45. package/commands/fire-skills-rollback.md +7 -7
  46. package/commands/fire-skills-sync.md +470 -470
  47. package/commands/fire-test.md +5 -5
  48. package/commands/fire-todos.md +1 -1
  49. package/commands/fire-update.md +5 -5
  50. package/commands/fire-validate-skills.md +282 -0
  51. package/commands/fire-vuln-scan.md +492 -493
  52. package/hooks/run-hook.sh +8 -8
  53. package/hooks/run-session-end.sh +7 -7
  54. package/hooks/session-end.sh +90 -90
  55. package/hooks/session-start.sh +1 -1
  56. package/package.json +4 -24
  57. package/plugin.json +7 -7
  58. package/references/autonomy-levels.md +235 -0
  59. package/references/behavioral-directives.md +95 -3
  60. package/references/blocker-tracking.md +1 -1
  61. package/references/circuit-breaker.md +93 -2
  62. package/references/context-engineering.md +227 -9
  63. package/references/honesty-protocols.md +70 -1
  64. package/references/issue-to-pr-pipeline.md +149 -150
  65. package/references/metrics-and-trends.md +1 -2
  66. package/references/research-improvements.md +4 -108
  67. package/references/sdlc-mapping.md +73 -0
  68. package/references/state-machine.md +151 -0
  69. package/skills-library/AVAILABLE_TOOLS_REFERENCE.md +333 -0
  70. package/skills-library/SKILLS-INDEX.md +57 -558
  71. package/skills-library/SKILLS_LIBRARY_INDEX.md +532 -0
  72. package/skills-library/_general/api-patterns/api-field-name-mismatch.md +107 -0
  73. package/skills-library/_general/api-patterns/streaming-command-timeout.md +122 -0
  74. package/skills-library/_general/api-patterns/streaming-proxy-cors-bypass.md +102 -0
  75. package/skills-library/_general/automation/settings-gui-generator.md +172 -0
  76. package/skills-library/_general/database-solutions/data-type-mapping-reference.md +181 -0
  77. package/skills-library/_general/database-solutions/mysql-limit-offset-string-coercion.md +102 -0
  78. package/skills-library/_general/database-solutions/mysql-to-pg-migration.md +195 -0
  79. package/skills-library/_general/database-solutions/orm-schema-portability.md +193 -0
  80. package/skills-library/_general/database-solutions/persistent-analysis-storage.md +207 -0
  81. package/skills-library/_general/database-solutions/pg-to-mysql-schema-migration-methodology.md +190 -0
  82. package/skills-library/_general/database-solutions/sql-dialect-compatibility-matrix.md +306 -0
  83. package/skills-library/_general/database-solutions/sqlite-to-pg-migration.md +219 -0
  84. package/skills-library/_general/frontend/canvas-bubble-animation-grouping.md +270 -0
  85. package/skills-library/_general/frontend/color-token-migration.md +112 -0
  86. package/skills-library/_general/frontend/framer-motion-layoutid-grouping.md +150 -0
  87. package/skills-library/_general/frontend/pyqt6-settings-dialog.md +191 -0
  88. package/skills-library/_general/frontend/react-flow-animated-layout-switching.md +101 -0
  89. package/skills-library/_general/frontend/react-hooks-order-debugging.md +141 -0
  90. package/skills-library/_general/frontend/redux-localstorage-auth-desync.md +126 -0
  91. package/skills-library/_general/frontend/safari-csp-theme-color-debugging.md +124 -0
  92. package/skills-library/_general/frontend/safari-sw-cache-poisoning.md +138 -0
  93. package/skills-library/_general/frontend/svg-sparkline-no-charting-library.md +131 -0
  94. package/skills-library/_general/growth-marketing/oss-daily-growth-intelligence.md +224 -0
  95. package/skills-library/_general/integrations/claude-code-local-mcp-integration.md +250 -0
  96. package/skills-library/_general/integrations/mcp-composite-tool-orchestration.md +200 -0
  97. package/skills-library/_general/methodology/AGENT_SDK_STANDALONE_TOOLING.md +181 -0
  98. package/skills-library/_general/methodology/AGENT_TEAMS_GUIDE.md +169 -0
  99. package/skills-library/_general/methodology/ALAS_STATEFUL_EXECUTION.md +207 -0
  100. package/skills-library/_general/methodology/AUTO_REVIEWER_SUBAGENT.md +211 -0
  101. package/skills-library/_general/methodology/CONSISTENCY_CHECK_AMBIGUITY_GATE.md +96 -0
  102. package/skills-library/_general/methodology/DEAD_ENDS_SHELF.md +4 -4
  103. package/skills-library/_general/methodology/DISTILL_NOT_DUMP.md +108 -0
  104. package/skills-library/_general/methodology/EXECUTION_PROGRESS_MONITOR.md +157 -0
  105. package/skills-library/_general/methodology/HIERARCHICAL_REVIEW_MARS.md +122 -0
  106. package/skills-library/_general/methodology/MCP_INTER_AGENT_BRIDGE.md +207 -0
  107. package/skills-library/_general/methodology/MERMAID_WIZARD_DIAGRAMS.md +77 -0
  108. package/skills-library/_general/methodology/MISSING_DIMENSION_DETECTOR.md +89 -0
  109. package/skills-library/_general/methodology/MULTI_AGENT_COORDINATION.md +397 -0
  110. package/skills-library/_general/methodology/OBSERVATION_MASKING.md +100 -0
  111. package/skills-library/_general/methodology/PHOENIX_REBUILD_METHODOLOGY.md +82 -11
  112. package/skills-library/_general/methodology/REVIEW_BACKTRACK_PANEL.md +140 -0
  113. package/skills-library/_general/methodology/REVIEW_FIX_LOOP.md +117 -0
  114. package/skills-library/_general/methodology/VOTING_VERDICT_ARBITRATION.md +155 -0
  115. package/skills-library/_general/methodology/ZERO_FRICTION_CLI_SETUP.md +2 -2
  116. package/skills-library/_general/methodology/dead-code-activation.md +123 -0
  117. package/skills-library/_general/methodology/debug-swarm-researcher-escape-hatch.md +240 -240
  118. package/skills-library/_general/methodology/shell-autonomous-loop-fixplan.md +1 -1
  119. package/skills-library/_general/patterns-standards/GOF_DESIGN_PATTERNS_FOR_AI_AGENTS.md +5 -5
  120. package/skills-library/_general/patterns-standards/cascading-failure-diagnosis.md +119 -0
  121. package/skills-library/_general/patterns-standards/domain-specific-layout-algorithms.md +209 -0
  122. package/skills-library/_general/patterns-standards/python-desktop-app-architecture.md +399 -0
  123. package/skills-library/_general/patterns-standards/realtime-monitoring-dashboard.md +457 -0
  124. package/skills-library/_general/patterns-standards/togglable-processing-pipeline.md +169 -0
  125. package/skills-library/_general/performance/liveclock-extraction.md +112 -0
  126. package/skills-library/_general/performance/ref-based-canvas-animation.md +117 -0
  127. package/skills-library/_general/performance/use-visible-interval.md +131 -0
  128. package/skills-library/_general/testing/playwright-firefox-withcredentials-auth-issue.md +104 -0
  129. package/skills-library/_quarantine/README.md +30 -0
  130. package/skills-library/api-patterns/BROADCAST_SCHEDULER_SHARED_EXECUTE_FUNCTION.md +150 -0
  131. package/skills-library/api-patterns/ERROR_RESPONSE_STANDARDS.md +145 -0
  132. package/skills-library/api-patterns/EXPRESS_ROUTE_ORDERING_MIDDLEWARE_INTERCEPTION.md +326 -0
  133. package/skills-library/api-patterns/PAGINATION_PATTERNS.md +137 -0
  134. package/skills-library/api-patterns/PODCAST_PROGRESS_TRACKING_THREE_ROOT_CAUSES.md +277 -0
  135. package/skills-library/api-patterns/RATE_LIMITING_TOGGLE.md +155 -0
  136. package/skills-library/api-patterns/graphql-content-queries.md +708 -0
  137. package/skills-library/appointment-scheduler-design.md +423 -0
  138. package/skills-library/automation/AUTO_POPULATE_COMPLETE_GUIDE.md +631 -0
  139. package/skills-library/automation/CC_WORKFLOW_STUDIO.md +83 -0
  140. package/skills-library/automation/CLAUDE_CODE_SWARM_MODE.md +95 -0
  141. package/skills-library/automation/DAEMON_TRIGGER_FILE_IPC.md +195 -0
  142. package/skills-library/automation/scheduled-content-publishing.md +608 -0
  143. package/skills-library/awesome-workflows/Blogging-Platform-Instructions/view_commands.md +25 -0
  144. package/skills-library/awesome-workflows/CREDENTIAL-SECURITY-WORKFLOW.md +109 -0
  145. package/skills-library/awesome-workflows/DEBUGGING-WORKFLOW.md +124 -0
  146. package/skills-library/awesome-workflows/Design-Review-Workflow/README.md +31 -0
  147. package/skills-library/awesome-workflows/Design-Review-Workflow/design-principles-example.md +129 -0
  148. package/skills-library/awesome-workflows/Design-Review-Workflow/design-review-agent.md +107 -0
  149. package/skills-library/awesome-workflows/Design-Review-Workflow/design-review-claude-md-snippet.md +24 -0
  150. package/skills-library/awesome-workflows/Design-Review-Workflow/design-review-slash-command.md +38 -0
  151. package/skills-library/awesome-workflows/PARALLEL-RESEARCH-WORKFLOW.md +89 -0
  152. package/skills-library/awesome-workflows/PHASE-EXECUTION-WORKFLOW.md +97 -0
  153. package/skills-library/awesome-workflows/SESSION-HANDOFF-WORKFLOW.md +116 -0
  154. package/skills-library/cms-patterns/content-branch-preview.md +515 -0
  155. package/skills-library/cms-patterns/inline-visual-editing.md +666 -0
  156. package/skills-library/cms-patterns/mdx-component-content.md +649 -0
  157. package/skills-library/cms-patterns/media-manager-abstraction.md +827 -0
  158. package/skills-library/cms-patterns/schema-driven-form-generator.md +838 -0
  159. package/skills-library/complexity-metrics/complexity-divider.md +707 -0
  160. package/skills-library/complexity-metrics/work-with-complexity.md +193 -0
  161. package/skills-library/creative-multimedia/animation-stack-guide.md +577 -0
  162. package/skills-library/creative-multimedia/audio-enhancement-pipeline.md +625 -0
  163. package/skills-library/creative-multimedia/content-repurposing-pipeline.md +1146 -0
  164. package/skills-library/creative-multimedia/data-visualization-generator.md +862 -0
  165. package/skills-library/creative-multimedia/doc-to-podcast-pipeline.md +2184 -0
  166. package/skills-library/creative-multimedia/ffmpeg-command-generator.md +405 -0
  167. package/skills-library/creative-multimedia/image-optimization-pipeline.md +605 -0
  168. package/skills-library/creative-multimedia/multi-format-content-generator.md +1759 -0
  169. package/skills-library/creative-multimedia/og-image-generator.md +635 -0
  170. package/skills-library/creative-multimedia/podcast-audio-composition.md +1355 -0
  171. package/skills-library/creative-multimedia/podcast-quality-evaluation.md +1452 -0
  172. package/skills-library/creative-multimedia/podcast-script-generation.md +1841 -0
  173. package/skills-library/creative-multimedia/svg-generation.md +750 -0
  174. package/skills-library/creative-multimedia/text-to-speech-provider-selector.md +1414 -0
  175. package/skills-library/creative-multimedia/transcription-pipeline-selector.md +677 -0
  176. package/skills-library/creative-multimedia/video-streaming-setup.md +559 -0
  177. package/skills-library/database-solutions/AI_RESPONSE_DATABASE_CACHING.md +520 -0
  178. package/skills-library/database-solutions/CONDITIONAL_SQL_MIGRATION_PATTERN.md +119 -0
  179. package/skills-library/database-solutions/DATABASE_COLUMN_NAME_MISMATCH.md +393 -0
  180. package/skills-library/database-solutions/DATABASE_SCHEMA.md +394 -0
  181. package/skills-library/database-solutions/DATABASE_SCHEMA_VERIFICATION_GUIDE.md +348 -0
  182. package/skills-library/database-solutions/DATABASE_STRATEGY.md +71 -0
  183. package/skills-library/database-solutions/ES_MODULE_SEED_SCRIPT_PATTERN.md +52 -0
  184. package/skills-library/database-solutions/MIGRATION_GUIDE.md +3 -0
  185. package/skills-library/database-solutions/PLPGSQL_VARIABLE_CONFLICT_FIX.md +208 -0
  186. package/skills-library/database-solutions/POSTGRESQL_JSONB_DOUBLE_STRINGIFY_FIX.md +245 -0
  187. package/skills-library/database-solutions/POSTGRESQL_LICENSE_TABLE_DESIGN.md +393 -0
  188. package/skills-library/database-solutions/POSTGRESQL_UUID_DOCUMENT_RAG_DUAL_SCOPE.md +732 -0
  189. package/skills-library/database-solutions/POSTGRES_SQL_TEMPLATE_BINDING_ERROR.md +240 -0
  190. package/skills-library/database-solutions/PRISMA_DB_PUSH_DATA_LOSS_PREVENTION.md +141 -0
  191. package/skills-library/database-solutions/PRODUCTION_QUERY_OPTIMIZATION_RESTART_FIX.md +389 -0
  192. package/skills-library/database-solutions/RLS_SECURITY_GUIDE.md +107 -0
  193. package/skills-library/database-solutions/SCHEMA_ENHANCEMENTS_GUIDE.md +373 -0
  194. package/skills-library/database-solutions/SCHEMA_MIGRATION_GUIDE.md +368 -0
  195. package/skills-library/database-solutions/SCHEMA_VERIFICATION_QUICK_REFERENCE.md +104 -0
  196. package/skills-library/database-solutions/ai-erd-generator.md +1213 -0
  197. package/skills-library/database-solutions/content-publishing-states.md +631 -0
  198. package/skills-library/database-solutions/database-schema-designer.md +522 -0
  199. package/skills-library/database-solutions/er-diagram-components.md +569 -0
  200. package/skills-library/database-solutions/er-to-ddl-mapping.md +1405 -0
  201. package/skills-library/database-solutions/erd-creator-textbook-research.md +433 -0
  202. package/skills-library/database-solutions/erd-react-flow-architecture.md +1965 -0
  203. package/skills-library/database-solutions/mariadb-aggregate-function-replacement.md +145 -0
  204. package/skills-library/database-solutions/normalization-validator.md +778 -0
  205. package/skills-library/database-solutions/postgres-full-text-search-content.md +494 -0
  206. package/skills-library/database-solutions/postgresql-to-mysql-runtime-translation.md +286 -0
  207. package/skills-library/database-solutions/regex-alternation-ordering-sql-types.md +92 -0
  208. package/skills-library/database-solutions/reserved-word-context-aware-quoting.md +142 -0
  209. package/skills-library/database-solutions/sql-ddl-generator.md +756 -0
  210. package/skills-library/database-solutions/supabase-connection-pooler-fix.md +102 -0
  211. package/skills-library/deployment-security/CPANEL_NODE_DEPLOYMENT.md +166 -0
  212. package/skills-library/deployment-security/DEPLOYMENT.md +275 -0
  213. package/skills-library/deployment-security/DEPLOYMENT_CHECKLIST.md +363 -0
  214. package/skills-library/deployment-security/DEPLOYMENT_PLAN.md +669 -0
  215. package/skills-library/deployment-security/KNEX_DATABASE_ABSTRACTION.md +444 -0
  216. package/skills-library/deployment-security/LICENSE_KEY_SYSTEM.md +206 -0
  217. package/skills-library/deployment-security/NODE18_DEPENDENCY_COMPATIBILITY.md +284 -0
  218. package/skills-library/deployment-security/PHP_INSTALLER_WIZARD_GUIDE.md +315 -0
  219. package/skills-library/deployment-security/PM2_ENVIRONMENT_VARIABLE_CACHING.md +256 -0
  220. package/skills-library/deployment-security/PM2_MEMORY_EXHAUSTION_FIX.md +370 -0
  221. package/skills-library/deployment-security/PRODUCTION_DEPLOYMENT_GUIDE.md +592 -0
  222. package/skills-library/deployment-security/PRODUCTION_HARDENING_DOCUMENTATION.md +307 -0
  223. package/skills-library/deployment-security/PRODUCTION_RECOVERY_CHERRY_PICK_PATTERN.md +202 -0
  224. package/skills-library/deployment-security/PYINSTALLER_CUDA_WHISPER_BUNDLING.md +236 -0
  225. package/skills-library/deployment-security/SECURITY.md +41 -0
  226. package/skills-library/deployment-security/SMTP_SSL_HOSTNAME_MISMATCH_SHARED_HOSTING.md +220 -0
  227. package/skills-library/deployment-security/SPA_SEO_OPTIMIZATION_CPANEL.md +200 -0
  228. package/skills-library/deployment-security/SUPABASE_EDGE_FUNCTIONS.md +338 -0
  229. package/skills-library/deployment-security/VERCEL_GITHUB_DEPLOYMENT_GUIDE.md +858 -0
  230. package/skills-library/deployment-security/VPS_DEPLOYMENT_READINESS.md +356 -0
  231. package/skills-library/deployment-security/deployment-changes-not-applying.md +241 -0
  232. package/skills-library/deployment-security/env-file-management-production-local.md +203 -0
  233. package/skills-library/deployment-security/express-secure-file-downloads.md +413 -0
  234. package/skills-library/deployment-security/react-production-deployment-desktop-guide.md +2011 -0
  235. package/skills-library/deployment-security/self-hosted-supabase-coolify-guide.md +1684 -0
  236. package/skills-library/deployment-security/unique-features-ai-strategy-plaid-security.md +1613 -0
  237. package/skills-library/deployment-security/vps-deployment.md +135 -0
  238. package/skills-library/document-processing/WORD_EXPORT_MARKDOWN_FORMATTING.md +482 -0
  239. package/skills-library/document-processing/document-ai-landingai-integration.md +677 -0
  240. package/skills-library/document-processing/express-secure-file-downloads-mern.md +413 -0
  241. package/skills-library/document-processing/express-secure-file-downloads.md +413 -0
  242. package/skills-library/document-processing/md-to-word-converter.md +318 -0
  243. package/skills-library/document-processing/pdf-forms-integration/README.md +101 -0
  244. package/skills-library/document-processing/pdf-forms-integration/SKILL.md +662 -0
  245. package/skills-library/ecommerce/ADMIN_PRODUCTS_GUIDE.md +428 -0
  246. package/skills-library/ecommerce/ECOMMERCE_API_REFERENCE.md +776 -0
  247. package/skills-library/ecommerce/ECOMMERCE_COMPLETION_SUMMARY.md +673 -0
  248. package/skills-library/ecommerce/ECOMMERCE_IMPLEMENTATION_GUIDE.md +729 -0
  249. package/skills-library/ecommerce/ECOMMERCE_QUICK_REFERENCE.md +521 -0
  250. package/skills-library/ecommerce/ECOMMERCE_TESTING_CHECKLIST.md +565 -0
  251. package/skills-library/ecommerce/ECOMMERCE_WORKFLOW_GUIDE.md +1059 -0
  252. package/skills-library/ecommerce/PRODUCT_CREATION_EXPANDED.md +522 -0
  253. package/skills-library/ecommerce/agentic-commerce-protocol.md +203 -0
  254. package/skills-library/ecommerce/cart-abandonment-recovery.md +236 -0
  255. package/skills-library/ecommerce/cart-architecture-patterns.md +300 -0
  256. package/skills-library/ecommerce/cart-item-count-indicator.md +264 -0
  257. package/skills-library/ecommerce/checkout-ux-conversion.md +227 -0
  258. package/skills-library/ecommerce/composable-commerce-selection.md +166 -0
  259. package/skills-library/ecommerce/ecommerce-analytics-patterns.md +167 -0
  260. package/skills-library/ecommerce/fraud-detection-patterns.md +179 -0
  261. package/skills-library/ecommerce/inventory-stock-management.md +270 -0
  262. package/skills-library/ecommerce/order-saga-state-machine.md +336 -0
  263. package/skills-library/ecommerce/payment-provider-abstraction.md +245 -0
  264. package/skills-library/ecommerce/pci-compliance-checklist.md +192 -0
  265. package/skills-library/ecommerce/refund-chargeback-handling.md +177 -0
  266. package/skills-library/ecommerce/shipping-carrier-integration.md +218 -0
  267. package/skills-library/ecommerce/webhook-idempotency-patterns.md +253 -0
  268. package/skills-library/excalidraw-diagrams/.github/workflows/ci.yml +558 -0
  269. package/skills-library/excalidraw-diagrams/.github/workflows/prompt-gallery.yml +448 -0
  270. package/skills-library/excalidraw-diagrams/.github/workflows/release.yml +42 -0
  271. package/skills-library/excalidraw-diagrams/.github/workflows/test-reusable-ci.yml +25 -0
  272. package/skills-library/excalidraw-diagrams/CLAUDE.md +57 -0
  273. package/skills-library/excalidraw-diagrams/LICENSE +21 -0
  274. package/skills-library/excalidraw-diagrams/README.md +178 -0
  275. package/skills-library/excalidraw-diagrams/SKILL.md +715 -0
  276. package/skills-library/form-solutions/BUTTON_TYPE_FORM_SUBMISSION.md +336 -0
  277. package/skills-library/form-solutions/FILLABLE_PDF_IMPLEMENTATION.md +226 -0
  278. package/skills-library/form-solutions/SURVEYJS_QUESTIONNAIRE_SYSTEM.md +367 -0
  279. package/skills-library/form-solutions/tiptap-minimal-setup.md +690 -0
  280. package/skills-library/frontend/scholarly-classification-bubble-map.md +149 -0
  281. package/skills-library/infrastructure/ci-cd-pipeline-builder.md +517 -0
  282. package/skills-library/infrastructure/observability-designer.md +264 -0
  283. package/skills-library/infrastructure/performance-profiler.md +621 -0
  284. package/skills-library/installer-wizard-patterns.md +249 -0
  285. package/skills-library/integrations/CLAUDE_CODE_TOKEN_ANALYTICS.md +160 -0
  286. package/skills-library/integrations/CONFIGURABLE_AI_PROVIDER_SELECTION.md +728 -0
  287. package/skills-library/integrations/SOCKET_IO_BROADCAST_ALL_VS_ROOM.md +141 -0
  288. package/skills-library/integrations/VIRTUAL_MEETINGS_IMPLEMENTATION.md +374 -0
  289. package/skills-library/integrations/WORDPRESS_LEARNDASH_DATA_RECOVERY.md +53 -0
  290. package/skills-library/integrations/YOUTUBE_API_SETUP.md +141 -0
  291. package/skills-library/integrations/YOUTUBE_BOOKMARKING_EXPLANATION.md +252 -0
  292. package/skills-library/integrations/YOUTUBE_BOOKMARKING_SOLUTION.md +268 -0
  293. package/skills-library/integrations/YOUTUBE_OAUTH_SETUP_GUIDE.md +200 -0
  294. package/skills-library/integrations/YOUTUBE_VIDEO_FIX_COMPLETE.md +192 -0
  295. package/skills-library/integrations/ai-ml/GEMINI_AI_RAG_PIPELINE_COMPLETE_GUIDE.md +195 -0
  296. package/skills-library/integrations/ai-ml/GEMINI_IMAGE_GENERATION_SETUP.md +64 -0
  297. package/skills-library/integrations/cloudflare/cloudflare-turnstile-debugging.md +202 -0
  298. package/skills-library/integrations/cloudflare/cloudflare-turnstile-implementation.md +476 -0
  299. package/skills-library/integrations/cloudflare-turnstile-debugging.md +202 -0
  300. package/skills-library/integrations/cloudflare-turnstile-implementation.md +476 -0
  301. package/skills-library/integrations/ghost-creator-monetization-pattern.md +454 -0
  302. package/skills-library/integrations/headless-cms-architecture.md +484 -0
  303. package/skills-library/integrations/headless-cms-stack-selection.md +183 -0
  304. package/skills-library/integrations/payload-cms-patterns.md +674 -0
  305. package/skills-library/integrations/realtimestt-openwakeword-cuda-windows.md +229 -0
  306. package/skills-library/integrations/rss-podcast-integration.md +300 -0
  307. package/skills-library/integrations/wordpress/WORDPRESS_LEARNDASH_DATA_RECOVERY.md +53 -0
  308. package/skills-library/integrations/youtube/YOUTUBE_API_SETUP.md +141 -0
  309. package/skills-library/integrations/youtube/YOUTUBE_BOOKMARKING_EXPLANATION.md +252 -0
  310. package/skills-library/integrations/youtube/YOUTUBE_BOOKMARKING_SOLUTION.md +268 -0
  311. package/skills-library/integrations/youtube/YOUTUBE_OAUTH_SETUP_GUIDE.md +200 -0
  312. package/skills-library/integrations/youtube/YOUTUBE_VIDEO_FIX_COMPLETE.md +192 -0
  313. package/skills-library/marketing/campaign-analytics.md +97 -0
  314. package/skills-library/marketing/content-creator.md +105 -0
  315. package/skills-library/marketing/marketing-strategy-pmm.md +94 -0
  316. package/skills-library/marketing/social-media-analyzer.md +81 -0
  317. package/skills-library/methodology/ADVANCED_ORCHESTRATION_PATTERNS.md +401 -0
  318. package/skills-library/methodology/AGENT_SELF_IMPROVEMENT_LOOP.md +179 -0
  319. package/skills-library/methodology/BREATH_BASED_PARALLEL_EXECUTION.md +1 -1
  320. package/skills-library/methodology/CLEANSING_CYCLE.md +358 -0
  321. package/skills-library/methodology/CONFIDENCE_ANNOTATION_PATTERN.md +143 -0
  322. package/skills-library/methodology/CRITICAL_PATTERNS_DOCUMENTATION_COMPLETE.md +204 -0
  323. package/skills-library/methodology/DELIVERABLES_SUMMARY.md +341 -0
  324. package/skills-library/methodology/DIFFICULTY_AWARE_AGENT_ROUTING.md +252 -0
  325. package/skills-library/methodology/EVOLUTIONARY_SKILL_SYNTHESIS.md +219 -0
  326. package/skills-library/methodology/GLOMERULUS_DECISION_GATE.md +223 -0
  327. package/skills-library/methodology/HIBERNATION_SYSTEM.md +231 -0
  328. package/skills-library/methodology/INSTRUMENTATION_OVER_RESTRICTION.md +192 -0
  329. package/skills-library/methodology/MASTER_COMPLETION_SUMMARY.md +444 -0
  330. package/skills-library/methodology/MASTER_SESSION_COMPLETION.md +743 -0
  331. package/skills-library/methodology/MERN_QUICK_REFERENCE.md +358 -0
  332. package/skills-library/methodology/ORGAN_AGENT_MAPPING.md +177 -0
  333. package/skills-library/methodology/PARALLEL_WAVE_BASED_REFACTORING.md +440 -0
  334. package/skills-library/methodology/QUICK_REFERENCE.md +358 -0
  335. package/skills-library/methodology/SDFT_ONPOLICY_SELF_DISTILLATION.md +186 -0
  336. package/skills-library/methodology/SELF_QUESTIONING_TASK_GENERATION.md +270 -0
  337. package/skills-library/methodology/SESSION_COMPLETION_SUMMARY.md +304 -0
  338. package/skills-library/methodology/SESSION_SUMMARY.md +432 -0
  339. package/skills-library/methodology/WARRIOR_WORKFLOW_DEBUGGING_PROTOCOL.md +252 -0
  340. package/skills-library/methodology/tech-debt-tracker.md +570 -0
  341. package/skills-library/parallel-debug/SKILL.md +60 -0
  342. package/skills-library/patterns-standards/API_PATTERN_FIX_SUMMARY.md +236 -0
  343. package/skills-library/patterns-standards/BATCH_OPERATIONS_WITH_PROGRESS_MODAL.md +362 -0
  344. package/skills-library/patterns-standards/CRITICAL_CODING_PATTERNS.md +639 -0
  345. package/skills-library/patterns-standards/DARK_MODE_MODAL_VISIBILITY.md +258 -0
  346. package/skills-library/patterns-standards/ERROR_RESILIENCE_IMPLEMENTATION.md +375 -0
  347. package/skills-library/patterns-standards/ES_MODULE_IMPORT_HOISTING_DOTENV.md +298 -0
  348. package/skills-library/patterns-standards/NESTED_BACKDROP_FILTER_CSS_ARTIFACT_FIX.md +76 -0
  349. package/skills-library/patterns-standards/ORDERED_DETECTOR_PIPELINE_GRACEFUL_FALLBACK.md +333 -0
  350. package/skills-library/patterns-standards/PHASE_IMPORT_ERROR_DEBUGGING.md +271 -0
  351. package/skills-library/patterns-standards/PYNPUT_GLOBAL_HOTKEY_VK_MATCHING.md +252 -0
  352. package/skills-library/patterns-standards/REACT_USEEFFECT_CASCADE_RESET_FIX.md +132 -0
  353. package/skills-library/patterns-standards/SUBMENU_HOVER_DROPDOWN_PATTERN.md +225 -0
  354. package/skills-library/patterns-standards/TAILWIND_TEXT_VISIBILITY_OVERRIDE.md +322 -0
  355. package/skills-library/patterns-standards/THEME_AWARE_CSS_VARIABLES_PATTERN.md +209 -0
  356. package/skills-library/patterns-standards/THEME_USER_OBJECT_PROPERTY_NAMING.md +194 -0
  357. package/skills-library/patterns-standards/TOOLTIP_BLOCKING_CLICKS_FIX.md +267 -0
  358. package/skills-library/patterns-standards/claude-code-plugin-structure.md +235 -0
  359. package/skills-library/patterns-standards/react-i18next-setup.md +429 -0
  360. package/skills-library/patterns-standards/thesys-c1-generative-ui-integration.md +967 -0
  361. package/skills-library/plugin-development/CLAUDE_CODE_COMMAND_REGISTRATION_SILENT_FAILURE.md +315 -0
  362. package/skills-library/plugin-development/plugin-command-namespace-vs-global.md +390 -0
  363. package/skills-library/plugin-development/plugin-doc-auto-generation.md +172 -0
  364. package/skills-library/security/GITHUB_REPO_SECURITY_AUDIT.md +115 -0
  365. package/skills-library/security/admin-deletion-safety.md +396 -0
  366. package/skills-library/security/application-vuln-patterns.md +477 -0
  367. package/skills-library/security/env-secrets-manager.md +686 -0
  368. package/skills-library/security/secure-ai-application-templates.md +347 -0
  369. package/skills-library/security/sql-injection-prevention-postgresjs.md +151 -0
  370. package/skills-library/supabase-connection-pooler-fix.md +102 -0
  371. package/skills-library/system-context/POWERSHELL_BASH_INTEROP.md +82 -0
  372. package/skills-library/system-context/SERVICE_LIFECYCLE_MANAGEMENT.md +119 -0
  373. package/skills-library/system-context/SKILL.md +40 -0
  374. package/skills-library/system-context/WINDOWS_DEV_ENVIRONMENT.md +73 -0
  375. package/skills-library/testing/E2E_PLAYWRIGHT_PATTERNS.md +99 -0
  376. package/skills-library/testing/INTEGRATION_TEST_STRATEGY.md +82 -0
  377. package/skills-library/testing/RED_GREEN_BUGFIX_GATE.md +203 -0
  378. package/skills-library/testing/TEST_DATA_MANAGEMENT.md +69 -0
  379. package/skills-library/testing/VITEST_UNIT_TEST_PATTERNS.md +75 -0
  380. package/skills-library/testing/playwright-api-security-tests.md +202 -0
  381. package/skills-library/toolbox/SKILL.md +84 -0
  382. package/skills-library/toolbox/code-graph-and-web-scraping-mcps.md +237 -0
  383. package/skills-library/ui-ux-pro-max/ACCESSIBILITY_ESSENTIALS.md +115 -0
  384. package/skills-library/ui-ux-pro-max/DESIGN_SYSTEM_SCAFFOLDING.md +133 -0
  385. package/skills-library/ui-ux-pro-max/RESPONSIVE_LAYOUT_PATTERNS.md +119 -0
  386. package/skills-library/ui-ux-pro-max/SKILL.md +386 -0
  387. package/skills-library/ui-ux-pro-max/data/charts.csv +26 -0
  388. package/skills-library/ui-ux-pro-max/data/colors.csv +97 -0
  389. package/skills-library/ui-ux-pro-max/data/icons.csv +101 -0
  390. package/skills-library/ui-ux-pro-max/data/landing.csv +31 -0
  391. package/skills-library/ui-ux-pro-max/data/products.csv +97 -0
  392. package/skills-library/ui-ux-pro-max/data/react-performance.csv +45 -0
  393. package/skills-library/ui-ux-pro-max/data/stacks/astro.csv +54 -0
  394. package/skills-library/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
  395. package/skills-library/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
  396. package/skills-library/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
  397. package/skills-library/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
  398. package/skills-library/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
  399. package/skills-library/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
  400. package/skills-library/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
  401. package/skills-library/ui-ux-pro-max/data/stacks/react.csv +54 -0
  402. package/skills-library/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
  403. package/skills-library/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
  404. package/skills-library/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
  405. package/skills-library/ui-ux-pro-max/data/stacks/vue.csv +50 -0
  406. package/skills-library/ui-ux-pro-max/data/styles.csv +68 -0
  407. package/skills-library/ui-ux-pro-max/data/typography.csv +58 -0
  408. package/skills-library/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
  409. package/skills-library/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
  410. package/skills-library/ui-ux-pro-max/data/web-interface.csv +31 -0
  411. package/skills-library/wordpress-style-theme-components.md +1526 -0
  412. package/templates/ASSUMPTIONS.md +1 -1
  413. package/templates/DECISION_LOG.md +0 -1
  414. package/templates/phase-prompt.md +1 -1
  415. package/templates/phoenix-comparison.md +6 -6
  416. package/templates/skill-api-integration.md +106 -0
  417. package/templates/skill-architecture-pattern.md +92 -0
  418. package/templates/skill-debug-pattern.md +98 -0
  419. package/templates/skill-devops-recipe.md +107 -0
  420. package/templates/skill-general.md +65 -0
  421. package/templates/skill-ui-component.md +113 -0
  422. package/tools/uat-runner.py +179 -0
  423. package/version.json +7 -3
  424. package/workflows/handoff-session.md +2 -2
  425. package/workflows/new-project.md +2 -2
  426. package/workflows/plan-phase.md +1 -1
  427. package/.claude-plugin/plugin.json +0 -64
  428. package/skills-library/_general/methodology/LIVE_BREADCRUMB_PROTOCOL.md +0 -242
  429. package/skills-library/_general/methodology/llm-judge-memory-crud.md +0 -241
  430. package/skills-library/methodology/REFLEXION_MEMORY_PATTERN.md +0 -183
  431. package/skills-library/methodology/RESEARCH_BACKED_WORKFLOW_UPGRADE.md +0 -263
  432. package/skills-library/methodology/SABBATH_REST_PATTERN.md +0 -267
  433. package/skills-library/methodology/STONE_AND_SCAFFOLD.md +0 -220
  434. package/skills-library/specialists/api-architecture/api-designer.md +0 -49
  435. package/skills-library/specialists/api-architecture/graphql-architect.md +0 -49
  436. package/skills-library/specialists/api-architecture/mcp-developer.md +0 -51
  437. package/skills-library/specialists/api-architecture/microservices-architect.md +0 -50
  438. package/skills-library/specialists/api-architecture/websocket-engineer.md +0 -48
  439. package/skills-library/specialists/backend/django-expert.md +0 -52
  440. package/skills-library/specialists/backend/fastapi-expert.md +0 -52
  441. package/skills-library/specialists/backend/laravel-specialist.md +0 -52
  442. package/skills-library/specialists/backend/nestjs-expert.md +0 -51
  443. package/skills-library/specialists/backend/rails-expert.md +0 -53
  444. package/skills-library/specialists/backend/spring-boot-engineer.md +0 -56
  445. package/skills-library/specialists/data-ml/fine-tuning-expert.md +0 -48
  446. package/skills-library/specialists/data-ml/ml-pipeline.md +0 -47
  447. package/skills-library/specialists/data-ml/pandas-pro.md +0 -47
  448. package/skills-library/specialists/data-ml/rag-architect.md +0 -51
  449. package/skills-library/specialists/data-ml/spark-engineer.md +0 -47
  450. package/skills-library/specialists/frontend/angular-architect.md +0 -52
  451. package/skills-library/specialists/frontend/flutter-expert.md +0 -51
  452. package/skills-library/specialists/frontend/nextjs-developer.md +0 -54
  453. package/skills-library/specialists/frontend/react-native-expert.md +0 -50
  454. package/skills-library/specialists/frontend/vue-expert.md +0 -51
  455. package/skills-library/specialists/infrastructure/chaos-engineer.md +0 -74
  456. package/skills-library/specialists/infrastructure/cloud-architect.md +0 -70
  457. package/skills-library/specialists/infrastructure/database-optimizer.md +0 -64
  458. package/skills-library/specialists/infrastructure/devops-engineer.md +0 -70
  459. package/skills-library/specialists/infrastructure/kubernetes-specialist.md +0 -52
  460. package/skills-library/specialists/infrastructure/monitoring-expert.md +0 -70
  461. package/skills-library/specialists/infrastructure/sre-engineer.md +0 -70
  462. package/skills-library/specialists/infrastructure/terraform-engineer.md +0 -51
  463. package/skills-library/specialists/languages/cpp-pro.md +0 -74
  464. package/skills-library/specialists/languages/csharp-developer.md +0 -69
  465. package/skills-library/specialists/languages/dotnet-core-expert.md +0 -54
  466. package/skills-library/specialists/languages/golang-pro.md +0 -51
  467. package/skills-library/specialists/languages/java-architect.md +0 -49
  468. package/skills-library/specialists/languages/javascript-pro.md +0 -68
  469. package/skills-library/specialists/languages/kotlin-specialist.md +0 -68
  470. package/skills-library/specialists/languages/php-pro.md +0 -49
  471. package/skills-library/specialists/languages/python-pro.md +0 -52
  472. package/skills-library/specialists/languages/react-expert.md +0 -51
  473. package/skills-library/specialists/languages/rust-engineer.md +0 -50
  474. package/skills-library/specialists/languages/sql-pro.md +0 -56
  475. package/skills-library/specialists/languages/swift-expert.md +0 -69
  476. package/skills-library/specialists/languages/typescript-pro.md +0 -51
  477. package/skills-library/specialists/platform/atlassian-mcp.md +0 -52
  478. package/skills-library/specialists/platform/embedded-systems.md +0 -53
  479. package/skills-library/specialists/platform/game-developer.md +0 -53
  480. package/skills-library/specialists/platform/salesforce-developer.md +0 -53
  481. package/skills-library/specialists/platform/shopify-expert.md +0 -49
  482. package/skills-library/specialists/platform/wordpress-pro.md +0 -49
  483. package/skills-library/specialists/quality/code-documenter.md +0 -51
  484. package/skills-library/specialists/quality/code-reviewer.md +0 -67
  485. package/skills-library/specialists/quality/debugging-wizard.md +0 -51
  486. package/skills-library/specialists/quality/fullstack-guardian.md +0 -51
  487. package/skills-library/specialists/quality/legacy-modernizer.md +0 -50
  488. package/skills-library/specialists/quality/playwright-expert.md +0 -65
  489. package/skills-library/specialists/quality/spec-miner.md +0 -56
  490. package/skills-library/specialists/quality/test-master.md +0 -65
  491. package/skills-library/specialists/security/secure-code-guardian.md +0 -55
  492. package/skills-library/specialists/security/security-reviewer.md +0 -53
  493. package/skills-library/specialists/workflow/architecture-designer.md +0 -53
  494. package/skills-library/specialists/workflow/cli-developer.md +0 -70
  495. package/skills-library/specialists/workflow/feature-forge.md +0 -65
  496. package/skills-library/specialists/workflow/prompt-engineer.md +0 -54
  497. package/skills-library/specialists/workflow/the-fool.md +0 -62
  498. /package/skills-library/{performance → _general/performance}/cache-augmented-generation.md +0 -0
  499. /package/skills-library/{debugging → parallel-debug}/FAILURE_TAXONOMY_CLASSIFICATION.md +0 -0
  500. /package/skills-library/{debugging → parallel-debug}/THREE_AGENT_HYPOTHESIS_DEBUGGING.md +0 -0
@@ -0,0 +1,862 @@
1
+ # Data Visualization Generator
2
+ ## Description
3
+
4
+ Generate accessible, responsive data visualizations for web applications. Covers chart type selection, React integration patterns for Chart.js / Recharts / D3.js, accessibility compliance, real-time updates, and export capabilities.
5
+
6
+ ## When to Use
7
+
8
+ - Adding dashboards, analytics pages, or reporting features
9
+ - Choosing between Chart.js, Recharts, and D3.js for a project
10
+ - Building accessible charts that meet WCAG 2.1 AA
11
+ - Rendering real-time data streams as live charts
12
+ - Exporting visualizations to PNG/SVG for reports or PDFs
13
+
14
+ ---
15
+
16
+ ## Chart Type Selection Guide
17
+
18
+ | Data Pattern | Chart Type | Library | Complexity |
19
+ |-------------|-----------|---------|------------|
20
+ | Trend over time | Line chart | Chart.js / Recharts | Low |
21
+ | Comparison | Bar chart | Chart.js / Recharts | Low |
22
+ | Proportions | Pie / Donut | Chart.js / Recharts | Low |
23
+ | Distribution | Histogram | D3.js | Medium |
24
+ | Relationship | Scatter plot | Chart.js / D3.js | Low-Medium |
25
+ | Hierarchy | Treemap | D3.js | Medium |
26
+ | Geographic | Choropleth map | D3.js / Mapbox | High |
27
+ | Network | Force-directed graph | D3.js | High |
28
+ | Progress | Gauge / Radial | Chart.js (doughnut) | Low |
29
+ | Multi-dimensional | Radar chart | Chart.js / Recharts | Low |
30
+
31
+ ### Quick Decision Flow
32
+
33
+ ```
34
+ Need it fast with minimal code? --> Chart.js (react-chartjs-2)
35
+ Building a React dashboard with many charts? --> Recharts
36
+ Need full creative control or unusual chart types? --> D3.js
37
+ Need maps? --> D3.js + TopoJSON (static) or Mapbox GL (interactive)
38
+ ```
39
+
40
+ ### Library Comparison
41
+
42
+ | Feature | Chart.js | Recharts | D3.js |
43
+ |---------|----------|----------|-------|
44
+ | Learning curve | Low | Low | High |
45
+ | Bundle size | ~200KB | ~130KB | ~240KB (full) |
46
+ | Animation | Built-in | Built-in | Manual |
47
+ | Responsive | Built-in | Built-in | Manual |
48
+ | Accessibility | Partial | Partial | Manual |
49
+ | Customization | Medium | Medium | Total |
50
+ | React integration | via react-chartjs-2 | Native | useRef + useEffect |
51
+
52
+ ---
53
+
54
+ ## React Component Patterns
55
+
56
+ ### Pattern 1: Chart.js with react-chartjs-2 (Easiest)
57
+
58
+ **Install:**
59
+
60
+ ```bash
61
+ npm install chart.js react-chartjs-2
62
+ ```
63
+
64
+ **Setup — register components once at app entry:**
65
+
66
+ ```typescript
67
+ // src/lib/chartjs-setup.ts
68
+ import {
69
+ Chart as ChartJS,
70
+ CategoryScale,
71
+ LinearScale,
72
+ PointElement,
73
+ LineElement,
74
+ BarElement,
75
+ ArcElement,
76
+ Title,
77
+ Tooltip,
78
+ Legend,
79
+ Filler,
80
+ } from "chart.js";
81
+
82
+ ChartJS.register(
83
+ CategoryScale,
84
+ LinearScale,
85
+ PointElement,
86
+ LineElement,
87
+ BarElement,
88
+ ArcElement,
89
+ Title,
90
+ Tooltip,
91
+ Legend,
92
+ Filler
93
+ );
94
+ ```
95
+
96
+ ### Pattern 2: Recharts (React-Native, Declarative)
97
+
98
+ **Install:**
99
+
100
+ ```bash
101
+ npm install recharts
102
+ ```
103
+
104
+ Recharts uses composable React components — no registration step needed. Each chart is built from primitives like `<XAxis>`, `<YAxis>`, `<Tooltip>`, `<Line>`.
105
+
106
+ ### Pattern 3: D3.js in React (useRef + useEffect)
107
+
108
+ **Install:**
109
+
110
+ ```bash
111
+ npm install d3 @types/d3
112
+ ```
113
+
114
+ **The correct pattern — D3 owns the DOM inside a ref:**
115
+
116
+ ```tsx
117
+ import { useRef, useEffect } from "react";
118
+ import * as d3 from "d3";
119
+
120
+ interface D3ChartProps {
121
+ data: number[];
122
+ width: number;
123
+ height: number;
124
+ }
125
+
126
+ function D3Chart({ data, width, height }: D3ChartProps) {
127
+ const svgRef = useRef<SVGSVGElement>(null);
128
+
129
+ useEffect(() => {
130
+ if (!svgRef.current) return;
131
+
132
+ const svg = d3.select(svgRef.current);
133
+ svg.selectAll("*").remove(); // Clear previous render
134
+
135
+ // D3 drawing code here
136
+ const xScale = d3.scaleBand()
137
+ .domain(data.map((_, i) => String(i)))
138
+ .range([0, width])
139
+ .padding(0.2);
140
+
141
+ const yScale = d3.scaleLinear()
142
+ .domain([0, d3.max(data) || 0])
143
+ .range([height, 0]);
144
+
145
+ svg.selectAll("rect")
146
+ .data(data)
147
+ .join("rect")
148
+ .attr("x", (_, i) => xScale(String(i)) || 0)
149
+ .attr("y", (d) => yScale(d))
150
+ .attr("width", xScale.bandwidth())
151
+ .attr("height", (d) => height - yScale(d))
152
+ .attr("fill", "#6366f1");
153
+ }, [data, width, height]);
154
+
155
+ return <svg ref={svgRef} width={width} height={height} role="img" aria-label="Bar chart" />;
156
+ }
157
+ ```
158
+
159
+ > **Important:** Always call `svg.selectAll("*").remove()` at the start of the effect to prevent duplicate elements on re-render.
160
+
161
+ ---
162
+
163
+ ## Complete Examples
164
+
165
+ ### Example 1: Enrollment Trend Line Chart (React + Chart.js)
166
+
167
+ ```tsx
168
+ import { Line } from "react-chartjs-2";
169
+ import type { ChartOptions } from "chart.js";
170
+
171
+ interface EnrollmentData {
172
+ month: string;
173
+ enrollments: number;
174
+ completions: number;
175
+ }
176
+
177
+ function EnrollmentTrendChart({ data }: { data: EnrollmentData[] }) {
178
+ const chartData = {
179
+ labels: data.map((d) => d.month),
180
+ datasets: [
181
+ {
182
+ label: "Enrollments",
183
+ data: data.map((d) => d.enrollments),
184
+ borderColor: "#6366f1",
185
+ backgroundColor: "rgba(99, 102, 241, 0.1)",
186
+ fill: true,
187
+ tension: 0.3,
188
+ pointRadius: 4,
189
+ pointHoverRadius: 6,
190
+ },
191
+ {
192
+ label: "Completions",
193
+ data: data.map((d) => d.completions),
194
+ borderColor: "#10b981",
195
+ backgroundColor: "rgba(16, 185, 129, 0.1)",
196
+ fill: true,
197
+ tension: 0.3,
198
+ pointRadius: 4,
199
+ pointHoverRadius: 6,
200
+ },
201
+ ],
202
+ };
203
+
204
+ const options: ChartOptions<"line"> = {
205
+ responsive: true,
206
+ maintainAspectRatio: false,
207
+ plugins: {
208
+ legend: { position: "top" },
209
+ title: {
210
+ display: true,
211
+ text: "Monthly Enrollment & Completion Trends",
212
+ font: { size: 16 },
213
+ },
214
+ tooltip: {
215
+ mode: "index",
216
+ intersect: false,
217
+ },
218
+ },
219
+ scales: {
220
+ y: {
221
+ beginAtZero: true,
222
+ title: { display: true, text: "Students" },
223
+ },
224
+ x: {
225
+ title: { display: true, text: "Month" },
226
+ },
227
+ },
228
+ interaction: {
229
+ mode: "nearest",
230
+ axis: "x",
231
+ intersect: false,
232
+ },
233
+ };
234
+
235
+ return (
236
+ <div style={{ position: "relative", height: "400px", width: "100%" }}>
237
+ <Line
238
+ data={chartData}
239
+ options={options}
240
+ aria-label="Line chart showing monthly enrollment and completion trends"
241
+ role="img"
242
+ />
243
+ </div>
244
+ );
245
+ }
246
+ ```
247
+
248
+ ### Example 2: Revenue Bar Chart with Drill-Down (Recharts)
249
+
250
+ ```tsx
251
+ import { useState } from "react";
252
+ import {
253
+ BarChart,
254
+ Bar,
255
+ XAxis,
256
+ YAxis,
257
+ CartesianGrid,
258
+ Tooltip,
259
+ Legend,
260
+ ResponsiveContainer,
261
+ Cell,
262
+ } from "recharts";
263
+
264
+ interface RevenueData {
265
+ category: string;
266
+ revenue: number;
267
+ breakdown?: { name: string; revenue: number }[];
268
+ }
269
+
270
+ function RevenueDrillDownChart({ data }: { data: RevenueData[] }) {
271
+ const [drillDown, setDrillDown] = useState<RevenueData | null>(null);
272
+
273
+ const activeData = drillDown ? drillDown.breakdown || [] : data;
274
+ const title = drillDown
275
+ ? `Revenue Breakdown: ${drillDown.category}`
276
+ : "Revenue by Category";
277
+
278
+ const COLORS = ["#6366f1", "#8b5cf6", "#a78bfa", "#c4b5fd", "#ddd6fe", "#10b981", "#34d399"];
279
+
280
+ const formatCurrency = (value: number) =>
281
+ new Intl.NumberFormat("en-US", { style: "currency", currency: "USD", maximumFractionDigits: 0 }).format(value);
282
+
283
+ return (
284
+ <div>
285
+ <div style={{ display: "flex", alignItems: "center", gap: "1rem", marginBottom: "1rem" }}>
286
+ <h3>{title}</h3>
287
+ {drillDown && (
288
+ <button onClick={() => setDrillDown(null)} aria-label="Go back to category view">
289
+ Back
290
+ </button>
291
+ )}
292
+ </div>
293
+
294
+ <ResponsiveContainer width="100%" height={400}>
295
+ <BarChart
296
+ data={activeData}
297
+ onClick={(e) => {
298
+ if (!drillDown && e?.activePayload) {
299
+ const clicked = data.find((d) => d.category === e.activePayload![0].payload.category);
300
+ if (clicked?.breakdown) setDrillDown(clicked);
301
+ }
302
+ }}
303
+ >
304
+ <CartesianGrid strokeDasharray="3 3" />
305
+ <XAxis
306
+ dataKey={drillDown ? "name" : "category"}
307
+ tick={{ fontSize: 12 }}
308
+ />
309
+ <YAxis tickFormatter={(v) => formatCurrency(v)} />
310
+ <Tooltip formatter={(value: number) => formatCurrency(value)} />
311
+ <Legend />
312
+ <Bar
313
+ dataKey="revenue"
314
+ name="Revenue"
315
+ radius={[4, 4, 0, 0]}
316
+ cursor={drillDown ? "default" : "pointer"}
317
+ >
318
+ {activeData.map((_, index) => (
319
+ <Cell key={index} fill={COLORS[index % COLORS.length]} />
320
+ ))}
321
+ </Bar>
322
+ </BarChart>
323
+ </ResponsiveContainer>
324
+
325
+ {/* Accessible data table */}
326
+ <table className="sr-only" aria-label={title}>
327
+ <thead>
328
+ <tr>
329
+ <th>Category</th>
330
+ <th>Revenue</th>
331
+ </tr>
332
+ </thead>
333
+ <tbody>
334
+ {activeData.map((item: any) => (
335
+ <tr key={item.category || item.name}>
336
+ <td>{item.category || item.name}</td>
337
+ <td>{formatCurrency(item.revenue)}</td>
338
+ </tr>
339
+ ))}
340
+ </tbody>
341
+ </table>
342
+ </div>
343
+ );
344
+ }
345
+ ```
346
+
347
+ ### Example 3: Student Activity Heatmap (D3.js)
348
+
349
+ ```tsx
350
+ import { useRef, useEffect } from "react";
351
+ import * as d3 from "d3";
352
+
353
+ interface ActivityCell {
354
+ day: number; // 0-6 (Sun-Sat)
355
+ hour: number; // 0-23
356
+ count: number;
357
+ }
358
+
359
+ function ActivityHeatmap({ data, width = 800, height = 200 }: {
360
+ data: ActivityCell[];
361
+ width?: number;
362
+ height?: number;
363
+ }) {
364
+ const svgRef = useRef<SVGSVGElement>(null);
365
+ const margin = { top: 30, right: 20, bottom: 40, left: 60 };
366
+
367
+ useEffect(() => {
368
+ if (!svgRef.current) return;
369
+
370
+ const svg = d3.select(svgRef.current);
371
+ svg.selectAll("*").remove();
372
+
373
+ const innerWidth = width - margin.left - margin.right;
374
+ const innerHeight = height - margin.top - margin.bottom;
375
+
376
+ const days = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
377
+ const hours = Array.from({ length: 24 }, (_, i) =>
378
+ i === 0 ? "12a" : i < 12 ? `${i}a` : i === 12 ? "12p" : `${i - 12}p`
379
+ );
380
+
381
+ const g = svg
382
+ .append("g")
383
+ .attr("transform", `translate(${margin.left},${margin.top})`);
384
+
385
+ const xScale = d3.scaleBand().domain(hours).range([0, innerWidth]).padding(0.05);
386
+ const yScale = d3.scaleBand().domain(days).range([0, innerHeight]).padding(0.05);
387
+
388
+ const maxCount = d3.max(data, (d) => d.count) || 1;
389
+ const colorScale = d3.scaleSequential(d3.interpolateYlOrRd).domain([0, maxCount]);
390
+
391
+ // Title
392
+ svg
393
+ .append("text")
394
+ .attr("x", width / 2)
395
+ .attr("y", 16)
396
+ .attr("text-anchor", "middle")
397
+ .attr("font-size", "14px")
398
+ .attr("font-weight", "bold")
399
+ .text("Student Activity by Day and Hour");
400
+
401
+ // Cells
402
+ g.selectAll("rect")
403
+ .data(data)
404
+ .join("rect")
405
+ .attr("x", (d) => xScale(hours[d.hour]) || 0)
406
+ .attr("y", (d) => yScale(days[d.day]) || 0)
407
+ .attr("width", xScale.bandwidth())
408
+ .attr("height", yScale.bandwidth())
409
+ .attr("rx", 2)
410
+ .attr("fill", (d) => (d.count === 0 ? "#f3f4f6" : colorScale(d.count)))
411
+ .attr("role", "img")
412
+ .attr("aria-label", (d) => `${days[d.day]} ${hours[d.hour]}: ${d.count} activities`)
413
+ .append("title")
414
+ .text((d) => `${days[d.day]} ${hours[d.hour]}: ${d.count} activities`);
415
+
416
+ // Axes
417
+ g.append("g")
418
+ .call(d3.axisBottom(xScale).tickSize(0))
419
+ .attr("transform", `translate(0,${innerHeight})`)
420
+ .select(".domain")
421
+ .remove();
422
+
423
+ g.append("g")
424
+ .call(d3.axisLeft(yScale).tickSize(0))
425
+ .select(".domain")
426
+ .remove();
427
+ }, [data, width, height]);
428
+
429
+ return (
430
+ <svg
431
+ ref={svgRef}
432
+ width={width}
433
+ height={height}
434
+ role="img"
435
+ aria-label="Heatmap showing student activity levels by day of week and hour of day"
436
+ />
437
+ );
438
+ }
439
+ ```
440
+
441
+ ---
442
+
443
+ ## Accessibility Requirements
444
+
445
+ ### ARIA Labels on SVG Elements
446
+
447
+ Every chart must have a `role="img"` and descriptive `aria-label`:
448
+
449
+ ```tsx
450
+ <svg role="img" aria-label="Bar chart showing monthly revenue from January to December 2025">
451
+ <title>Monthly Revenue 2025</title>
452
+ <desc>Bar chart with 12 bars. Revenue peaked at $45,000 in March.</desc>
453
+ {/* chart content */}
454
+ </svg>
455
+ ```
456
+
457
+ For Canvas-based charts (Chart.js), add ARIA to the canvas wrapper:
458
+
459
+ ```tsx
460
+ <div role="img" aria-label="Line chart showing enrollment trends increasing 23% over 6 months">
461
+ <canvas id="enrollment-chart" />
462
+ </div>
463
+ ```
464
+
465
+ ### Auto-Generated Alt Text
466
+
467
+ Generate descriptive alt text from the data:
468
+
469
+ ```typescript
470
+ function generateChartAltText(
471
+ chartType: string,
472
+ title: string,
473
+ data: { label: string; value: number }[]
474
+ ): string {
475
+ const sorted = [...data].sort((a, b) => b.value - a.value);
476
+ const max = sorted[0];
477
+ const min = sorted[sorted.length - 1];
478
+ const total = data.reduce((sum, d) => sum + d.value, 0);
479
+ const avg = Math.round(total / data.length);
480
+
481
+ return (
482
+ `${chartType} titled "${title}" with ${data.length} data points. ` +
483
+ `Highest: ${max.label} at ${max.value}. ` +
484
+ `Lowest: ${min.label} at ${min.value}. ` +
485
+ `Average: ${avg}.`
486
+ );
487
+ }
488
+
489
+ // Usage:
490
+ // "Bar chart titled "Revenue by Department" with 5 data points.
491
+ // Highest: Engineering at 120000. Lowest: HR at 35000. Average: 72000."
492
+ ```
493
+
494
+ ### Keyboard Navigation for Interactive Charts
495
+
496
+ ```tsx
497
+ function AccessibleBarChart({ data }: { data: { label: string; value: number }[] }) {
498
+ const [focusedIndex, setFocusedIndex] = useState<number>(-1);
499
+
500
+ const handleKeyDown = (e: React.KeyboardEvent) => {
501
+ switch (e.key) {
502
+ case "ArrowRight":
503
+ e.preventDefault();
504
+ setFocusedIndex((prev) => Math.min(prev + 1, data.length - 1));
505
+ break;
506
+ case "ArrowLeft":
507
+ e.preventDefault();
508
+ setFocusedIndex((prev) => Math.max(prev - 1, 0));
509
+ break;
510
+ case "Home":
511
+ e.preventDefault();
512
+ setFocusedIndex(0);
513
+ break;
514
+ case "End":
515
+ e.preventDefault();
516
+ setFocusedIndex(data.length - 1);
517
+ break;
518
+ }
519
+ };
520
+
521
+ return (
522
+ <div
523
+ role="img"
524
+ aria-label="Interactive bar chart. Use arrow keys to navigate between bars."
525
+ tabIndex={0}
526
+ onKeyDown={handleKeyDown}
527
+ >
528
+ {/* Chart rendering */}
529
+ {focusedIndex >= 0 && (
530
+ <div role="status" aria-live="polite" className="sr-only">
531
+ {data[focusedIndex].label}: {data[focusedIndex].value}
532
+ </div>
533
+ )}
534
+ </div>
535
+ );
536
+ }
537
+ ```
538
+
539
+ ### Color-Blind Safe Palettes
540
+
541
+ **8-color palette (safe for all common types of color blindness):**
542
+
543
+ ```typescript
544
+ const COLOR_BLIND_SAFE = {
545
+ // Paul Tol's qualitative palette
546
+ qualitative: [
547
+ "#332288", // indigo
548
+ "#88CCEE", // cyan
549
+ "#44AA99", // teal
550
+ "#117733", // green
551
+ "#999933", // olive
552
+ "#DDCC77", // sand
553
+ "#CC6677", // rose
554
+ "#AA4499", // purple
555
+ ],
556
+
557
+ // Sequential (single hue, light to dark)
558
+ sequential: ["#f7fbff", "#deebf7", "#c6dbef", "#9ecae1", "#6baed6", "#4292c6", "#2171b5", "#084594"],
559
+
560
+ // Diverging (two hues from a neutral center)
561
+ diverging: ["#d73027", "#f46d43", "#fdae61", "#fee090", "#e0f3f8", "#abd9e9", "#74add1", "#4575b4"],
562
+ };
563
+
564
+ // Usage with Chart.js:
565
+ const chartData = {
566
+ datasets: [{
567
+ backgroundColor: COLOR_BLIND_SAFE.qualitative.slice(0, data.length),
568
+ }],
569
+ };
570
+
571
+ // Usage with Recharts:
572
+ data.map((entry, index) => (
573
+ <Cell key={index} fill={COLOR_BLIND_SAFE.qualitative[index % 8]} />
574
+ ));
575
+ ```
576
+
577
+ > **Rule of thumb:** Never rely solely on color to convey meaning. Use patterns (stripes, dots), labels, or shapes alongside color.
578
+
579
+ ---
580
+
581
+ ## Responsive Patterns
582
+
583
+ ### Container Queries (Modern CSS)
584
+
585
+ ```css
586
+ .chart-wrapper {
587
+ container-type: inline-size;
588
+ container-name: chart;
589
+ }
590
+
591
+ @container chart (max-width: 500px) {
592
+ .chart-legend {
593
+ display: none; /* Hide legend on small containers, show as tooltip instead */
594
+ }
595
+ .chart-title {
596
+ font-size: 0.875rem;
597
+ }
598
+ }
599
+ ```
600
+
601
+ ### Aspect Ratio Preservation
602
+
603
+ ```tsx
604
+ // Chart.js — built-in
605
+ const options = {
606
+ responsive: true,
607
+ maintainAspectRatio: true,
608
+ aspectRatio: 16 / 9, // or 2 for wider, 1 for square
609
+ };
610
+
611
+ // Recharts — use ResponsiveContainer
612
+ <ResponsiveContainer width="100%" aspect={16 / 9}>
613
+ <LineChart data={data}>{/* ... */}</LineChart>
614
+ </ResponsiveContainer>
615
+
616
+ // D3.js — use viewBox for automatic scaling
617
+ <svg
618
+ viewBox={`0 0 ${width} ${height}`}
619
+ preserveAspectRatio="xMidYMid meet"
620
+ style={{ width: "100%", height: "auto" }}
621
+ />
622
+ ```
623
+
624
+ ### Hook for Responsive Dimensions
625
+
626
+ ```typescript
627
+ import { useState, useEffect, useRef } from "react";
628
+
629
+ function useContainerDimensions() {
630
+ const ref = useRef<HTMLDivElement>(null);
631
+ const [dimensions, setDimensions] = useState({ width: 0, height: 0 });
632
+
633
+ useEffect(() => {
634
+ if (!ref.current) return;
635
+
636
+ const observer = new ResizeObserver((entries) => {
637
+ const { width, height } = entries[0].contentRect;
638
+ setDimensions({ width: Math.floor(width), height: Math.floor(height) });
639
+ });
640
+
641
+ observer.observe(ref.current);
642
+ return () => observer.disconnect();
643
+ }, []);
644
+
645
+ return { ref, ...dimensions };
646
+ }
647
+
648
+ // Usage:
649
+ function Chart() {
650
+ const { ref, width, height } = useContainerDimensions();
651
+ return (
652
+ <div ref={ref} style={{ width: "100%", height: "400px" }}>
653
+ {width > 0 && <D3Chart width={width} height={height} data={data} />}
654
+ </div>
655
+ );
656
+ }
657
+ ```
658
+
659
+ ---
660
+
661
+ ## Real-Time Updates
662
+
663
+ ### WebSocket Data to Chart Animation
664
+
665
+ ```tsx
666
+ import { useState, useEffect, useCallback } from "react";
667
+ import { Line } from "react-chartjs-2";
668
+
669
+ const MAX_POINTS = 60; // Keep last 60 data points
670
+
671
+ function RealtimeChart({ wsUrl }: { wsUrl: string }) {
672
+ const [dataPoints, setDataPoints] = useState<{ time: string; value: number }[]>([]);
673
+
674
+ useEffect(() => {
675
+ const ws = new WebSocket(wsUrl);
676
+
677
+ ws.onmessage = (event) => {
678
+ const newPoint = JSON.parse(event.data);
679
+ setDataPoints((prev) => {
680
+ const updated = [...prev, newPoint];
681
+ return updated.length > MAX_POINTS ? updated.slice(-MAX_POINTS) : updated;
682
+ });
683
+ };
684
+
685
+ return () => ws.close();
686
+ }, [wsUrl]);
687
+
688
+ const chartData = {
689
+ labels: dataPoints.map((d) => d.time),
690
+ datasets: [
691
+ {
692
+ label: "Live Data",
693
+ data: dataPoints.map((d) => d.value),
694
+ borderColor: "#6366f1",
695
+ borderWidth: 2,
696
+ pointRadius: 0,
697
+ tension: 0.3,
698
+ fill: false,
699
+ },
700
+ ],
701
+ };
702
+
703
+ const options = {
704
+ responsive: true,
705
+ animation: { duration: 300 },
706
+ scales: {
707
+ x: { display: false }, // Hide x-axis labels for streaming data
708
+ y: { beginAtZero: false },
709
+ },
710
+ plugins: {
711
+ legend: { display: false },
712
+ },
713
+ };
714
+
715
+ return (
716
+ <div style={{ position: "relative", height: "300px" }}>
717
+ <Line data={chartData} options={options} />
718
+ </div>
719
+ );
720
+ }
721
+ ```
722
+
723
+ ### Throttled Updates for High-Frequency Data
724
+
725
+ ```typescript
726
+ import { useRef, useCallback } from "react";
727
+
728
+ function useThrottledUpdate<T>(callback: (data: T) => void, intervalMs: number) {
729
+ const buffer = useRef<T | null>(null);
730
+ const timer = useRef<ReturnType<typeof setInterval> | null>(null);
731
+
732
+ const start = useCallback(() => {
733
+ if (timer.current) return;
734
+ timer.current = setInterval(() => {
735
+ if (buffer.current !== null) {
736
+ callback(buffer.current);
737
+ buffer.current = null;
738
+ }
739
+ }, intervalMs);
740
+ }, [callback, intervalMs]);
741
+
742
+ const push = useCallback((data: T) => {
743
+ buffer.current = data;
744
+ start();
745
+ }, [start]);
746
+
747
+ const stop = useCallback(() => {
748
+ if (timer.current) {
749
+ clearInterval(timer.current);
750
+ timer.current = null;
751
+ }
752
+ }, []);
753
+
754
+ return { push, stop };
755
+ }
756
+ ```
757
+
758
+ ---
759
+
760
+ ## Export Charts
761
+
762
+ ### Chart to PNG (Canvas-based — Chart.js)
763
+
764
+ ```typescript
765
+ function exportChartAsPNG(chartRef: React.RefObject<any>, filename: string = "chart.png") {
766
+ const canvas = chartRef.current?.canvas;
767
+ if (!canvas) return;
768
+
769
+ const link = document.createElement("a");
770
+ link.download = filename;
771
+ link.href = canvas.toDataURL("image/png", 1.0);
772
+ link.click();
773
+ }
774
+
775
+ // Usage:
776
+ const chartRef = useRef(null);
777
+ <Line ref={chartRef} data={data} options={options} />
778
+ <button onClick={() => exportChartAsPNG(chartRef, "enrollment-trends.png")}>
779
+ Export PNG
780
+ </button>
781
+ ```
782
+
783
+ ### Chart to SVG (D3.js / Recharts)
784
+
785
+ ```typescript
786
+ function exportSVG(svgElement: SVGSVGElement, filename: string = "chart.svg") {
787
+ const serializer = new XMLSerializer();
788
+ const svgString = serializer.serializeToString(svgElement);
789
+
790
+ // Add XML declaration and styling
791
+ const fullSvg = `<?xml version="1.0" encoding="UTF-8"?>\n${svgString}`;
792
+
793
+ const blob = new Blob([fullSvg], { type: "image/svg+xml;charset=utf-8" });
794
+ const url = URL.createObjectURL(blob);
795
+
796
+ const link = document.createElement("a");
797
+ link.download = filename;
798
+ link.href = url;
799
+ link.click();
800
+
801
+ URL.revokeObjectURL(url);
802
+ }
803
+
804
+ // Convert SVG to PNG (for when you need raster from SVG charts)
805
+ function svgToPNG(svgElement: SVGSVGElement, scale: number = 2): Promise<Blob> {
806
+ return new Promise((resolve) => {
807
+ const canvas = document.createElement("canvas");
808
+ const ctx = canvas.getContext("2d")!;
809
+ const svgData = new XMLSerializer().serializeToString(svgElement);
810
+ const img = new Image();
811
+
812
+ canvas.width = svgElement.clientWidth * scale;
813
+ canvas.height = svgElement.clientHeight * scale;
814
+ ctx.scale(scale, scale);
815
+
816
+ img.onload = () => {
817
+ ctx.drawImage(img, 0, 0);
818
+ canvas.toBlob((blob) => resolve(blob!), "image/png");
819
+ };
820
+
821
+ img.src = "data:image/svg+xml;base64," + btoa(unescape(encodeURIComponent(svgData)));
822
+ });
823
+ }
824
+ ```
825
+
826
+ ### Server-Side Export (Node.js — for PDF reports)
827
+
828
+ ```typescript
829
+ // Use @napi-rs/canvas for server-side Chart.js rendering
830
+ import { createCanvas } from "@napi-rs/canvas";
831
+ import { Chart } from "chart.js/auto";
832
+
833
+ async function renderChartToBuffer(config: any, width = 800, height = 400): Promise<Buffer> {
834
+ const canvas = createCanvas(width, height);
835
+ const ctx = canvas.getContext("2d");
836
+
837
+ new Chart(ctx as any, config);
838
+
839
+ return canvas.toBuffer("image/png");
840
+ }
841
+
842
+ // Write to file or embed in PDF
843
+ const buffer = await renderChartToBuffer({
844
+ type: "bar",
845
+ data: { labels: ["Q1", "Q2", "Q3", "Q4"], datasets: [{ data: [10, 20, 30, 40] }] },
846
+ });
847
+ fs.writeFileSync("chart.png", buffer);
848
+ ```
849
+
850
+ ---
851
+
852
+ ## Common Pitfalls
853
+
854
+ 1. **Re-registering Chart.js components** — Call `ChartJS.register()` once at app entry, not inside components. Duplicate registration causes memory leaks.
855
+ 2. **D3 + React state conflicts** — D3 manages its own DOM. Never let React and D3 fight over the same elements. Use a `ref` and let D3 own everything inside it.
856
+ 3. **Massive datasets crashing the browser** — For 10,000+ points, downsample before rendering. Chart.js has a `decimation` plugin. D3 can use `d3.bisect` for viewport-based rendering.
857
+ 4. **Missing `<ResponsiveContainer>`** — Recharts charts have zero size without it. Always wrap in `<ResponsiveContainer width="100%" height={400}>`.
858
+ 5. **Canvas resolution on Retina displays** — Chart.js handles `devicePixelRatio` automatically. For D3/Canvas, manually set `canvas.width = displayWidth * dpr`.
859
+ 6. **Forgetting accessible fallbacks** — Always include a hidden `<table>` or `aria-label` with the same data for screen readers.
860
+
861
+ ---
862
+