opencode-knowledge-work 0.0.0-stage → 0.1.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 (472) hide show
  1. package/LICENSE +212 -0
  2. package/README.md +124 -2
  3. package/content/bio-research/.mcp.json +48 -0
  4. package/content/bio-research/CONNECTORS.md +23 -0
  5. package/content/bio-research/LICENSE +202 -0
  6. package/content/bio-research/README.md +83 -0
  7. package/content/bio-research/skills/bio-research-instrument-data-to-allotrope/LICENSE.txt +201 -0
  8. package/content/bio-research/skills/bio-research-instrument-data-to-allotrope/SKILL.md +280 -0
  9. package/content/bio-research/skills/bio-research-instrument-data-to-allotrope/references/asm_schema_overview.md +226 -0
  10. package/content/bio-research/skills/bio-research-instrument-data-to-allotrope/references/field_classification_guide.md +503 -0
  11. package/content/bio-research/skills/bio-research-instrument-data-to-allotrope/references/flattening_guide.md +254 -0
  12. package/content/bio-research/skills/bio-research-instrument-data-to-allotrope/references/supported_instruments.md +151 -0
  13. package/content/bio-research/skills/bio-research-instrument-data-to-allotrope/requirements.txt +26 -0
  14. package/content/bio-research/skills/bio-research-instrument-data-to-allotrope/scripts/convert_to_asm.py +543 -0
  15. package/content/bio-research/skills/bio-research-instrument-data-to-allotrope/scripts/export_parser.py +481 -0
  16. package/content/bio-research/skills/bio-research-instrument-data-to-allotrope/scripts/flatten_asm.py +254 -0
  17. package/content/bio-research/skills/bio-research-instrument-data-to-allotrope/scripts/validate_asm.py +1102 -0
  18. package/content/bio-research/skills/bio-research-nextflow-development/LICENSE.txt +201 -0
  19. package/content/bio-research/skills/bio-research-nextflow-development/SKILL.md +290 -0
  20. package/content/bio-research/skills/bio-research-nextflow-development/references/geo-sra-acquisition.md +416 -0
  21. package/content/bio-research/skills/bio-research-nextflow-development/references/installation.md +96 -0
  22. package/content/bio-research/skills/bio-research-nextflow-development/references/pipelines/atacseq.md +138 -0
  23. package/content/bio-research/skills/bio-research-nextflow-development/references/pipelines/rnaseq.md +118 -0
  24. package/content/bio-research/skills/bio-research-nextflow-development/references/pipelines/sarek.md +145 -0
  25. package/content/bio-research/skills/bio-research-nextflow-development/references/troubleshooting.md +137 -0
  26. package/content/bio-research/skills/bio-research-nextflow-development/scripts/check_environment.py +452 -0
  27. package/content/bio-research/skills/bio-research-nextflow-development/scripts/config/genomes.yaml +148 -0
  28. package/content/bio-research/skills/bio-research-nextflow-development/scripts/config/pipelines/atacseq.yaml +187 -0
  29. package/content/bio-research/skills/bio-research-nextflow-development/scripts/config/pipelines/rnaseq.yaml +147 -0
  30. package/content/bio-research/skills/bio-research-nextflow-development/scripts/config/pipelines/sarek.yaml +233 -0
  31. package/content/bio-research/skills/bio-research-nextflow-development/scripts/detect_data_type.py +300 -0
  32. package/content/bio-research/skills/bio-research-nextflow-development/scripts/generate_samplesheet.py +455 -0
  33. package/content/bio-research/skills/bio-research-nextflow-development/scripts/manage_genomes.py +521 -0
  34. package/content/bio-research/skills/bio-research-nextflow-development/scripts/sra_geo_fetch.py +732 -0
  35. package/content/bio-research/skills/bio-research-nextflow-development/scripts/utils/__init__.py +69 -0
  36. package/content/bio-research/skills/bio-research-nextflow-development/scripts/utils/file_discovery.py +189 -0
  37. package/content/bio-research/skills/bio-research-nextflow-development/scripts/utils/ncbi_utils.py +808 -0
  38. package/content/bio-research/skills/bio-research-nextflow-development/scripts/utils/sample_inference.py +290 -0
  39. package/content/bio-research/skills/bio-research-nextflow-development/scripts/utils/validators.py +256 -0
  40. package/content/bio-research/skills/bio-research-scientific-problem-selection/LICENSE.txt +201 -0
  41. package/content/bio-research/skills/bio-research-scientific-problem-selection/SKILL.md +269 -0
  42. package/content/bio-research/skills/bio-research-scientific-problem-selection/references/01-intuition-pumps.md +264 -0
  43. package/content/bio-research/skills/bio-research-scientific-problem-selection/references/02-risk-assessment.md +323 -0
  44. package/content/bio-research/skills/bio-research-scientific-problem-selection/references/03-optimization-function.md +481 -0
  45. package/content/bio-research/skills/bio-research-scientific-problem-selection/references/04-parameter-strategy.md +396 -0
  46. package/content/bio-research/skills/bio-research-scientific-problem-selection/references/05-decision-tree.md +85 -0
  47. package/content/bio-research/skills/bio-research-scientific-problem-selection/references/06-adversity-planning.md +123 -0
  48. package/content/bio-research/skills/bio-research-scientific-problem-selection/references/07-problem-inversion.md +152 -0
  49. package/content/bio-research/skills/bio-research-scientific-problem-selection/references/08-integration-synthesis.md +173 -0
  50. package/content/bio-research/skills/bio-research-scientific-problem-selection/references/09-meta-framework.md +504 -0
  51. package/content/bio-research/skills/bio-research-scvi-tools/LICENSE.txt +201 -0
  52. package/content/bio-research/skills/bio-research-scvi-tools/SKILL.md +155 -0
  53. package/content/bio-research/skills/bio-research-scvi-tools/references/atac_peakvi.md +398 -0
  54. package/content/bio-research/skills/bio-research-scvi-tools/references/batch_correction_sysvi.md +417 -0
  55. package/content/bio-research/skills/bio-research-scvi-tools/references/citeseq_totalvi.md +420 -0
  56. package/content/bio-research/skills/bio-research-scvi-tools/references/data_preparation.md +286 -0
  57. package/content/bio-research/skills/bio-research-scvi-tools/references/environment_setup.md +254 -0
  58. package/content/bio-research/skills/bio-research-scvi-tools/references/label_transfer.md +373 -0
  59. package/content/bio-research/skills/bio-research-scvi-tools/references/multiome_multivi.md +384 -0
  60. package/content/bio-research/skills/bio-research-scvi-tools/references/rna_velocity_velovi.md +410 -0
  61. package/content/bio-research/skills/bio-research-scvi-tools/references/scarches_mapping.md +401 -0
  62. package/content/bio-research/skills/bio-research-scvi-tools/references/scrna_integration.md +429 -0
  63. package/content/bio-research/skills/bio-research-scvi-tools/references/spatial_deconvolution.md +438 -0
  64. package/content/bio-research/skills/bio-research-scvi-tools/references/troubleshooting.md +420 -0
  65. package/content/bio-research/skills/bio-research-scvi-tools/scripts/cluster_embed.py +212 -0
  66. package/content/bio-research/skills/bio-research-scvi-tools/scripts/differential_expression.py +220 -0
  67. package/content/bio-research/skills/bio-research-scvi-tools/scripts/integrate_datasets.py +237 -0
  68. package/content/bio-research/skills/bio-research-scvi-tools/scripts/model_utils.py +634 -0
  69. package/content/bio-research/skills/bio-research-scvi-tools/scripts/prepare_data.py +169 -0
  70. package/content/bio-research/skills/bio-research-scvi-tools/scripts/train_model.py +370 -0
  71. package/content/bio-research/skills/bio-research-scvi-tools/scripts/transfer_labels.py +224 -0
  72. package/content/bio-research/skills/bio-research-scvi-tools/scripts/validate_adata.py +397 -0
  73. package/content/bio-research/skills/bio-research-single-cell-rna-qc/LICENSE.txt +201 -0
  74. package/content/bio-research/skills/bio-research-single-cell-rna-qc/SKILL.md +175 -0
  75. package/content/bio-research/skills/bio-research-single-cell-rna-qc/references/scverse_qc_guidelines.md +186 -0
  76. package/content/bio-research/skills/bio-research-single-cell-rna-qc/scripts/qc_analysis.py +232 -0
  77. package/content/bio-research/skills/bio-research-single-cell-rna-qc/scripts/qc_core.py +233 -0
  78. package/content/bio-research/skills/bio-research-single-cell-rna-qc/scripts/qc_plotting.py +235 -0
  79. package/content/bio-research/skills/bio-research-start/SKILL.md +79 -0
  80. package/content/customer-support/.mcp.json +40 -0
  81. package/content/customer-support/CONNECTORS.md +19 -0
  82. package/content/customer-support/LICENSE +202 -0
  83. package/content/customer-support/README.md +140 -0
  84. package/content/customer-support/skills/customer-support-customer-escalation/SKILL.md +248 -0
  85. package/content/customer-support/skills/customer-support-customer-research/SKILL.md +252 -0
  86. package/content/customer-support/skills/customer-support-draft-response/SKILL.md +418 -0
  87. package/content/customer-support/skills/customer-support-kb-article/SKILL.md +351 -0
  88. package/content/customer-support/skills/customer-support-ticket-triage/SKILL.md +275 -0
  89. package/content/data/.mcp.json +36 -0
  90. package/content/data/CONNECTORS.md +18 -0
  91. package/content/data/LICENSE +202 -0
  92. package/content/data/README.md +121 -0
  93. package/content/data/skills/data-analyze/SKILL.md +119 -0
  94. package/content/data/skills/data-build-dashboard/SKILL.md +924 -0
  95. package/content/data/skills/data-create-viz/SKILL.md +154 -0
  96. package/content/data/skills/data-data-context-extractor/SKILL.md +227 -0
  97. package/content/data/skills/data-data-context-extractor/references/domain-template.md +147 -0
  98. package/content/data/skills/data-data-context-extractor/references/example-output.md +198 -0
  99. package/content/data/skills/data-data-context-extractor/references/skill-template.md +148 -0
  100. package/content/data/skills/data-data-context-extractor/references/sql-dialects.md +121 -0
  101. package/content/data/skills/data-data-context-extractor/scripts/package_data_skill.py +126 -0
  102. package/content/data/skills/data-data-visualization/SKILL.md +305 -0
  103. package/content/data/skills/data-explore-data/SKILL.md +325 -0
  104. package/content/data/skills/data-sql-queries/SKILL.md +428 -0
  105. package/content/data/skills/data-statistical-analysis/SKILL.md +245 -0
  106. package/content/data/skills/data-validate-data/SKILL.md +383 -0
  107. package/content/data/skills/data-write-query/SKILL.md +122 -0
  108. package/content/design/.mcp.json +44 -0
  109. package/content/design/CONNECTORS.md +18 -0
  110. package/content/design/README.md +117 -0
  111. package/content/design/skills/design-accessibility-review/SKILL.md +128 -0
  112. package/content/design/skills/design-design-critique/SKILL.md +118 -0
  113. package/content/design/skills/design-design-handoff/SKILL.md +131 -0
  114. package/content/design/skills/design-design-system/SKILL.md +190 -0
  115. package/content/design/skills/design-research-synthesis/SKILL.md +92 -0
  116. package/content/design/skills/design-user-research/SKILL.md +41 -0
  117. package/content/design/skills/design-ux-copy/SKILL.md +107 -0
  118. package/content/engineering/.mcp.json +48 -0
  119. package/content/engineering/CONNECTORS.md +19 -0
  120. package/content/engineering/README.md +136 -0
  121. package/content/engineering/skills/engineering-architecture/SKILL.md +85 -0
  122. package/content/engineering/skills/engineering-code-review/SKILL.md +118 -0
  123. package/content/engineering/skills/engineering-debug/SKILL.md +95 -0
  124. package/content/engineering/skills/engineering-deploy-checklist/SKILL.md +78 -0
  125. package/content/engineering/skills/engineering-documentation/SKILL.md +49 -0
  126. package/content/engineering/skills/engineering-incident-response/SKILL.md +158 -0
  127. package/content/engineering/skills/engineering-standup/SKILL.md +75 -0
  128. package/content/engineering/skills/engineering-system-design/SKILL.md +42 -0
  129. package/content/engineering/skills/engineering-tech-debt/SKILL.md +32 -0
  130. package/content/engineering/skills/engineering-testing-strategy/SKILL.md +33 -0
  131. package/content/enterprise-search/.mcp.json +36 -0
  132. package/content/enterprise-search/CONNECTORS.md +21 -0
  133. package/content/enterprise-search/LICENSE +202 -0
  134. package/content/enterprise-search/README.md +157 -0
  135. package/content/enterprise-search/skills/enterprise-search-digest/SKILL.md +173 -0
  136. package/content/enterprise-search/skills/enterprise-search-knowledge-synthesis/SKILL.md +258 -0
  137. package/content/enterprise-search/skills/enterprise-search-search/SKILL.md +178 -0
  138. package/content/enterprise-search/skills/enterprise-search-search-strategy/SKILL.md +222 -0
  139. package/content/enterprise-search/skills/enterprise-search-source-management/SKILL.md +173 -0
  140. package/content/finance/.mcp.json +32 -0
  141. package/content/finance/CONNECTORS.md +20 -0
  142. package/content/finance/LICENSE +202 -0
  143. package/content/finance/README.md +92 -0
  144. package/content/finance/skills/finance-audit-support/SKILL.md +374 -0
  145. package/content/finance/skills/finance-close-management/SKILL.md +221 -0
  146. package/content/finance/skills/finance-financial-statements/SKILL.md +335 -0
  147. package/content/finance/skills/finance-journal-entry/SKILL.md +131 -0
  148. package/content/finance/skills/finance-journal-entry-prep/SKILL.md +186 -0
  149. package/content/finance/skills/finance-reconciliation/SKILL.md +175 -0
  150. package/content/finance/skills/finance-sox-testing/SKILL.md +218 -0
  151. package/content/finance/skills/finance-variance-analysis/SKILL.md +266 -0
  152. package/content/human-resources/.mcp.json +28 -0
  153. package/content/human-resources/CONNECTORS.md +19 -0
  154. package/content/human-resources/README.md +138 -0
  155. package/content/human-resources/skills/human-resources-comp-analysis/SKILL.md +92 -0
  156. package/content/human-resources/skills/human-resources-draft-offer/SKILL.md +82 -0
  157. package/content/human-resources/skills/human-resources-interview-prep/SKILL.md +37 -0
  158. package/content/human-resources/skills/human-resources-onboarding/SKILL.md +104 -0
  159. package/content/human-resources/skills/human-resources-org-planning/SKILL.md +28 -0
  160. package/content/human-resources/skills/human-resources-people-report/SKILL.md +99 -0
  161. package/content/human-resources/skills/human-resources-performance-review/SKILL.md +149 -0
  162. package/content/human-resources/skills/human-resources-policy-lookup/SKILL.md +94 -0
  163. package/content/human-resources/skills/human-resources-recruiting-pipeline/SKILL.md +31 -0
  164. package/content/legal/.mcp.json +36 -0
  165. package/content/legal/CONNECTORS.md +21 -0
  166. package/content/legal/LICENSE +202 -0
  167. package/content/legal/README.md +234 -0
  168. package/content/legal/skills/legal-brief/SKILL.md +208 -0
  169. package/content/legal/skills/legal-compliance-check/SKILL.md +274 -0
  170. package/content/legal/skills/legal-legal-response/SKILL.md +457 -0
  171. package/content/legal/skills/legal-legal-risk-assessment/SKILL.md +265 -0
  172. package/content/legal/skills/legal-meeting-briefing/SKILL.md +220 -0
  173. package/content/legal/skills/legal-review-contract/SKILL.md +358 -0
  174. package/content/legal/skills/legal-signature-request/SKILL.md +104 -0
  175. package/content/legal/skills/legal-triage-nda/SKILL.md +262 -0
  176. package/content/legal/skills/legal-vendor-check/SKILL.md +159 -0
  177. package/content/manifest.json +86 -0
  178. package/content/marketing/.mcp.json +60 -0
  179. package/content/marketing/CONNECTORS.md +20 -0
  180. package/content/marketing/LICENSE +202 -0
  181. package/content/marketing/README.md +90 -0
  182. package/content/marketing/skills/marketing-brand-review/SKILL.md +276 -0
  183. package/content/marketing/skills/marketing-campaign-plan/SKILL.md +308 -0
  184. package/content/marketing/skills/marketing-competitive-brief/SKILL.md +331 -0
  185. package/content/marketing/skills/marketing-content-creation/SKILL.md +157 -0
  186. package/content/marketing/skills/marketing-draft-content/SKILL.md +117 -0
  187. package/content/marketing/skills/marketing-email-sequence/SKILL.md +220 -0
  188. package/content/marketing/skills/marketing-performance-report/SKILL.md +392 -0
  189. package/content/marketing/skills/marketing-seo-audit/SKILL.md +190 -0
  190. package/content/operations/.mcp.json +32 -0
  191. package/content/operations/CONNECTORS.md +20 -0
  192. package/content/operations/README.md +135 -0
  193. package/content/operations/skills/operations-capacity-plan/SKILL.md +113 -0
  194. package/content/operations/skills/operations-change-request/SKILL.md +121 -0
  195. package/content/operations/skills/operations-compliance-tracking/SKILL.md +44 -0
  196. package/content/operations/skills/operations-process-doc/SKILL.md +82 -0
  197. package/content/operations/skills/operations-process-optimization/SKILL.md +39 -0
  198. package/content/operations/skills/operations-risk-assessment/SKILL.md +40 -0
  199. package/content/operations/skills/operations-runbook/SKILL.md +87 -0
  200. package/content/operations/skills/operations-status-report/SKILL.md +77 -0
  201. package/content/operations/skills/operations-vendor-review/SKILL.md +104 -0
  202. package/content/pdf-viewer/.mcp.json +8 -0
  203. package/content/pdf-viewer/CONNECTORS.md +15 -0
  204. package/content/pdf-viewer/LICENSE +202 -0
  205. package/content/pdf-viewer/README.md +57 -0
  206. package/content/pdf-viewer/commands/annotate.md +51 -0
  207. package/content/pdf-viewer/commands/fill-form.md +73 -0
  208. package/content/pdf-viewer/commands/open.md +34 -0
  209. package/content/pdf-viewer/commands/sign.md +54 -0
  210. package/content/pdf-viewer/skills/pdf-viewer-view-pdf/SKILL.md +147 -0
  211. package/content/product-management/.mcp.json +72 -0
  212. package/content/product-management/CONNECTORS.md +22 -0
  213. package/content/product-management/LICENSE +202 -0
  214. package/content/product-management/README.md +118 -0
  215. package/content/product-management/commands/brainstorm.md +120 -0
  216. package/content/product-management/skills/product-management-competitive-brief/SKILL.md +302 -0
  217. package/content/product-management/skills/product-management-metrics-review/SKILL.md +388 -0
  218. package/content/product-management/skills/product-management-product-brainstorming/SKILL.md +273 -0
  219. package/content/product-management/skills/product-management-roadmap-update/SKILL.md +266 -0
  220. package/content/product-management/skills/product-management-sprint-planning/SKILL.md +94 -0
  221. package/content/product-management/skills/product-management-stakeholder-update/SKILL.md +352 -0
  222. package/content/product-management/skills/product-management-synthesize-research/SKILL.md +312 -0
  223. package/content/product-management/skills/product-management-write-spec/SKILL.md +250 -0
  224. package/content/productivity/.mcp.json +44 -0
  225. package/content/productivity/CONNECTORS.md +18 -0
  226. package/content/productivity/LICENSE +202 -0
  227. package/content/productivity/README.md +97 -0
  228. package/content/productivity/skills/dashboard.html +3111 -0
  229. package/content/productivity/skills/productivity-memory-management/SKILL.md +323 -0
  230. package/content/productivity/skills/productivity-start/SKILL.md +158 -0
  231. package/content/productivity/skills/productivity-task-management/SKILL.md +91 -0
  232. package/content/productivity/skills/productivity-update/SKILL.md +168 -0
  233. package/content/sales/.mcp.json +100 -0
  234. package/content/sales/CONNECTORS.md +36 -0
  235. package/content/sales/LICENSE +202 -0
  236. package/content/sales/README.md +148 -0
  237. package/content/sales/skills/sales-account-context/SKILL.md +94 -0
  238. package/content/sales/skills/sales-account-plan/SKILL.md +95 -0
  239. package/content/sales/skills/sales-account-research/SKILL.md +99 -0
  240. package/content/sales/skills/sales-account-tiering/SKILL.md +101 -0
  241. package/content/sales/skills/sales-call-prep/SKILL.md +111 -0
  242. package/content/sales/skills/sales-call-summary/SKILL.md +111 -0
  243. package/content/sales/skills/sales-close-plan/SKILL.md +106 -0
  244. package/content/sales/skills/sales-competitive-intelligence/SKILL.md +102 -0
  245. package/content/sales/skills/sales-create-an-asset/SKILL.md +105 -0
  246. package/content/sales/skills/sales-crm-hygiene-check/SKILL.md +103 -0
  247. package/content/sales/skills/sales-customer-health/SKILL.md +108 -0
  248. package/content/sales/skills/sales-customer-voice/SKILL.md +94 -0
  249. package/content/sales/skills/sales-daily-briefing/SKILL.md +61 -0
  250. package/content/sales/skills/sales-deal-advance-gap/SKILL.md +102 -0
  251. package/content/sales/skills/sales-deal-review/SKILL.md +105 -0
  252. package/content/sales/skills/sales-deal-signals/SKILL.md +96 -0
  253. package/content/sales/skills/sales-deal-slip-scenario/SKILL.md +101 -0
  254. package/content/sales/skills/sales-draft-outreach/SKILL.md +116 -0
  255. package/content/sales/skills/sales-end-of-day/SKILL.md +114 -0
  256. package/content/sales/skills/sales-expansion-whitespace/SKILL.md +97 -0
  257. package/content/sales/skills/sales-forecast/SKILL.md +100 -0
  258. package/content/sales/skills/sales-handle-objection/SKILL.md +93 -0
  259. package/content/sales/skills/sales-inbox-sweep/SKILL.md +114 -0
  260. package/content/sales/skills/sales-lead-triage/SKILL.md +105 -0
  261. package/content/sales/skills/sales-log-activity/SKILL.md +111 -0
  262. package/content/sales/skills/sales-pipeline-review/SKILL.md +97 -0
  263. package/content/sales/skills/sales-renewal-radar/SKILL.md +95 -0
  264. package/content/sales/skills/sales-rep-context/SKILL.md +90 -0
  265. package/content/sales/skills/sales-route-lead/SKILL.md +111 -0
  266. package/content/sales/skills/sales-schedule-meeting/SKILL.md +99 -0
  267. package/content/sales/skills/sales-setup/SKILL.md +195 -0
  268. package/content/sales/skills/sales-stakeholder-map/SKILL.md +107 -0
  269. package/content/sales/skills/sales-team-pipeline/SKILL.md +105 -0
  270. package/content/sales/skills/sales-update-opportunity/SKILL.md +111 -0
  271. package/content/sales/skills/sales-weekly-wrap/SKILL.md +90 -0
  272. package/content/sales/skills/sales-win-loss-review/SKILL.md +88 -0
  273. package/content/small-business/.mcp.json +148 -0
  274. package/content/small-business/README.md +117 -0
  275. package/content/small-business/skills/small-business-ad-manager/SKILL.md +128 -0
  276. package/content/small-business/skills/small-business-ad-manager/reference/ad_copy.md +112 -0
  277. package/content/small-business/skills/small-business-ad-manager/reference/change_playbook.md +127 -0
  278. package/content/small-business/skills/small-business-ad-manager/reference/data_sources.md +100 -0
  279. package/content/small-business/skills/small-business-ad-manager/reference/diagnostics.md +89 -0
  280. package/content/small-business/skills/small-business-ad-manager/reference/gotchas.md +181 -0
  281. package/content/small-business/skills/small-business-ap-processor/SKILL.md +158 -0
  282. package/content/small-business/skills/small-business-ap-processor/reference/coding_rules.md +70 -0
  283. package/content/small-business/skills/small-business-ap-processor/reference/gotchas.md +131 -0
  284. package/content/small-business/skills/small-business-ap-processor/reference/intake_and_extraction.md +82 -0
  285. package/content/small-business/skills/small-business-ap-processor/reference/matching_and_exceptions.md +80 -0
  286. package/content/small-business/skills/small-business-ap-processor/reference/payment_run.md +77 -0
  287. package/content/small-business/skills/small-business-brand-style/SKILL.md +106 -0
  288. package/content/small-business/skills/small-business-build-agent/SKILL.md +105 -0
  289. package/content/small-business/skills/small-business-build-agent/reference/capture.md +133 -0
  290. package/content/small-business/skills/small-business-build-agent/reference/gotchas.md +204 -0
  291. package/content/small-business/skills/small-business-build-agent/reference/skill_authoring.md +165 -0
  292. package/content/small-business/skills/small-business-build-connector/SKILL.md +102 -0
  293. package/content/small-business/skills/small-business-build-connector/reference/discovery.md +120 -0
  294. package/content/small-business/skills/small-business-build-connector/reference/gotchas.md +237 -0
  295. package/content/small-business/skills/small-business-build-connector/reference/paths.md +106 -0
  296. package/content/small-business/skills/small-business-build-connector/reference/use-zapier.md +128 -0
  297. package/content/small-business/skills/small-business-business-pulse/SKILL.md +181 -0
  298. package/content/small-business/skills/small-business-business-pulse/reference/data_sources.md +173 -0
  299. package/content/small-business/skills/small-business-business-pulse/reference/gotchas.md +103 -0
  300. package/content/small-business/skills/small-business-business-pulse/reference/output_template.md +109 -0
  301. package/content/small-business/skills/small-business-business-pulse/reference/thresholds.md +71 -0
  302. package/content/small-business/skills/small-business-business-pulse/reference/v2_sources.md +63 -0
  303. package/content/small-business/skills/small-business-call-list/SKILL.md +82 -0
  304. package/content/small-business/skills/small-business-canva-creator/SKILL.md +448 -0
  305. package/content/small-business/skills/small-business-canva-creator/reference/canva-api.md +208 -0
  306. package/content/small-business/skills/small-business-canva-creator/reference/examples/boutique-brief-campaign.md +181 -0
  307. package/content/small-business/skills/small-business-canva-creator/reference/gotchas.md +380 -0
  308. package/content/small-business/skills/small-business-canva-creator/reference/hubspot-staging.md +137 -0
  309. package/content/small-business/skills/small-business-cash-flow-snapshot/SKILL.md +251 -0
  310. package/content/small-business/skills/small-business-cash-flow-snapshot/reference/examples/worked-example.md +92 -0
  311. package/content/small-business/skills/small-business-cash-flow-snapshot/reference/gotchas.md +62 -0
  312. package/content/small-business/skills/small-business-cash-flow-snapshot/reference/v2_sources.md +84 -0
  313. package/content/small-business/skills/small-business-close-month/SKILL.md +86 -0
  314. package/content/small-business/skills/small-business-content-strategy/SKILL.md +152 -0
  315. package/content/small-business/skills/small-business-content-strategy/reference/examples/retail-boutique-example.md +71 -0
  316. package/content/small-business/skills/small-business-content-strategy/reference/gotchas.md +104 -0
  317. package/content/small-business/skills/small-business-content-strategy/reference/v2_sources.md +40 -0
  318. package/content/small-business/skills/small-business-contract-review/SKILL.md +158 -0
  319. package/content/small-business/skills/small-business-contract-review/reference/docusign-fetch.md +32 -0
  320. package/content/small-business/skills/small-business-contract-review/reference/examples/flagged-summary-saas.md +97 -0
  321. package/content/small-business/skills/small-business-contract-review/reference/gmail-fetch.md +30 -0
  322. package/content/small-business/skills/small-business-contract-review/reference/gotchas.md +105 -0
  323. package/content/small-business/skills/small-business-contract-review/reference/m365-fetch.md +60 -0
  324. package/content/small-business/skills/small-business-crm-autopilot/SKILL.md +162 -0
  325. package/content/small-business/skills/small-business-crm-autopilot/reference/cleanup-checklist.md +82 -0
  326. package/content/small-business/skills/small-business-crm-autopilot/reference/examples/cleanup-deal.md +83 -0
  327. package/content/small-business/skills/small-business-crm-autopilot/reference/examples/log-call-happy-path.md +68 -0
  328. package/content/small-business/skills/small-business-crm-autopilot/reference/examples/log-email-happy-path.md +50 -0
  329. package/content/small-business/skills/small-business-crm-autopilot/reference/gotchas.md +110 -0
  330. package/content/small-business/skills/small-business-crm-autopilot/reference/hubspot-fields.md +62 -0
  331. package/content/small-business/skills/small-business-crm-autopilot/reference/lightweight_crm.md +125 -0
  332. package/content/small-business/skills/small-business-crm-autopilot/reference/salesforce-fields.md +122 -0
  333. package/content/small-business/skills/small-business-crm-autopilot/reference/standing_mode.md +144 -0
  334. package/content/small-business/skills/small-business-grant-rfp-writer/SKILL.md +162 -0
  335. package/content/small-business/skills/small-business-grant-rfp-writer/reference/drafting.md +129 -0
  336. package/content/small-business/skills/small-business-grant-rfp-writer/reference/go_no_go.md +125 -0
  337. package/content/small-business/skills/small-business-grant-rfp-writer/reference/gotchas.md +180 -0
  338. package/content/small-business/skills/small-business-grant-rfp-writer/reference/opportunity_sources.md +90 -0
  339. package/content/small-business/skills/small-business-grant-rfp-writer/reference/org_profile.md +81 -0
  340. package/content/small-business/skills/small-business-grow-pipeline/SKILL.md +92 -0
  341. package/content/small-business/skills/small-business-growth-pulse/SKILL.md +143 -0
  342. package/content/small-business/skills/small-business-growth-pulse/reference/data_sources.md +113 -0
  343. package/content/small-business/skills/small-business-growth-pulse/reference/gotchas.md +175 -0
  344. package/content/small-business/skills/small-business-growth-pulse/reference/output_template.md +122 -0
  345. package/content/small-business/skills/small-business-growth-pulse/reference/thresholds.md +110 -0
  346. package/content/small-business/skills/small-business-hiring-screener/SKILL.md +137 -0
  347. package/content/small-business/skills/small-business-hiring-screener/reference/candidate_comms.md +132 -0
  348. package/content/small-business/skills/small-business-hiring-screener/reference/fair_screening.md +103 -0
  349. package/content/small-business/skills/small-business-hiring-screener/reference/gotchas.md +183 -0
  350. package/content/small-business/skills/small-business-hiring-screener/reference/onboarding.md +82 -0
  351. package/content/small-business/skills/small-business-hiring-screener/reference/rubric.md +122 -0
  352. package/content/small-business/skills/small-business-inbox-manager/SKILL.md +130 -0
  353. package/content/small-business/skills/small-business-inbox-manager/reference/digest_format.md +110 -0
  354. package/content/small-business/skills/small-business-inbox-manager/reference/gotchas.md +220 -0
  355. package/content/small-business/skills/small-business-inbox-manager/reference/handoffs.md +77 -0
  356. package/content/small-business/skills/small-business-inbox-manager/reference/reply_drafting.md +116 -0
  357. package/content/small-business/skills/small-business-inbox-manager/reference/triage_rules.md +72 -0
  358. package/content/small-business/skills/small-business-inventory-planner/SKILL.md +126 -0
  359. package/content/small-business/skills/small-business-inventory-planner/reference/data_sources.md +94 -0
  360. package/content/small-business/skills/small-business-inventory-planner/reference/gotchas.md +153 -0
  361. package/content/small-business/skills/small-business-inventory-planner/reference/po_drafting.md +92 -0
  362. package/content/small-business/skills/small-business-inventory-planner/reference/seasonality.md +112 -0
  363. package/content/small-business/skills/small-business-inventory-planner/reference/velocity_and_reorder.md +154 -0
  364. package/content/small-business/skills/small-business-invoice-chase/SKILL.md +131 -0
  365. package/content/small-business/skills/small-business-invoice-chase/reference/examples/firm-reminder.md +28 -0
  366. package/content/small-business/skills/small-business-invoice-chase/reference/examples/gentle-reminder.md +27 -0
  367. package/content/small-business/skills/small-business-invoice-chase/reference/gotchas.md +75 -0
  368. package/content/small-business/skills/small-business-invoice-chase/reference/tone-matching.md +44 -0
  369. package/content/small-business/skills/small-business-invoice-chase/reference/v2_sources.md +78 -0
  370. package/content/small-business/skills/small-business-job-post-builder/SKILL.md +204 -0
  371. package/content/small-business/skills/small-business-job-post-builder/reference/docusign-routing.md +63 -0
  372. package/content/small-business/skills/small-business-job-post-builder/reference/examples/worked-example.md +110 -0
  373. package/content/small-business/skills/small-business-job-post-builder/reference/existing-document-merge.md +58 -0
  374. package/content/small-business/skills/small-business-job-post-builder/reference/gotchas.md +68 -0
  375. package/content/small-business/skills/small-business-job-post-builder/reference/interview-guide-structure.md +93 -0
  376. package/content/small-business/skills/small-business-job-post-builder/reference/job-post-structure.md +62 -0
  377. package/content/small-business/skills/small-business-job-post-builder/reference/offer-letter-template.md +145 -0
  378. package/content/small-business/skills/small-business-job-post-builder/reference/role-intake.md +73 -0
  379. package/content/small-business/skills/small-business-lead-finder/SKILL.md +119 -0
  380. package/content/small-business/skills/small-business-lead-finder/reference/gotchas.md +152 -0
  381. package/content/small-business/skills/small-business-lead-finder/reference/icp_method.md +97 -0
  382. package/content/small-business/skills/small-business-lead-finder/reference/output_template.md +124 -0
  383. package/content/small-business/skills/small-business-lead-finder/reference/scoring.md +92 -0
  384. package/content/small-business/skills/small-business-lead-finder/reference/sourcing.md +78 -0
  385. package/content/small-business/skills/small-business-lead-triage/SKILL.md +81 -0
  386. package/content/small-business/skills/small-business-lead-triage/reference/examples/happy-path-triage.md +68 -0
  387. package/content/small-business/skills/small-business-lead-triage/reference/gotchas.md +76 -0
  388. package/content/small-business/skills/small-business-lead-triage/reference/hubspot-scoring.md +169 -0
  389. package/content/small-business/skills/small-business-marketing-monday/SKILL.md +108 -0
  390. package/content/small-business/skills/small-business-monday-brief/SKILL.md +97 -0
  391. package/content/small-business/skills/small-business-month-end-prep/SKILL.md +331 -0
  392. package/content/small-business/skills/small-business-month-end-prep/reference/close-packet-format.md +127 -0
  393. package/content/small-business/skills/small-business-month-end-prep/reference/examples/pl-narrative.md +52 -0
  394. package/content/small-business/skills/small-business-month-end-prep/reference/gotchas.md +113 -0
  395. package/content/small-business/skills/small-business-month-end-prep/reference/paypal-settlements.md +110 -0
  396. package/content/small-business/skills/small-business-month-end-prep/reference/quickbooks-reconcile.md +71 -0
  397. package/content/small-business/skills/small-business-month-end-prep/reference/v2_sources.md +125 -0
  398. package/content/small-business/skills/small-business-month-end-prep/reference/xero-reconcile.md +175 -0
  399. package/content/small-business/skills/small-business-month-end-prep/reference/zoho-books-reconcile.md +168 -0
  400. package/content/small-business/skills/small-business-outreach-composer/SKILL.md +144 -0
  401. package/content/small-business/skills/small-business-outreach-composer/reference/gotchas.md +213 -0
  402. package/content/small-business/skills/small-business-outreach-composer/reference/output_template.md +147 -0
  403. package/content/small-business/skills/small-business-outreach-composer/reference/sequence_patterns.md +99 -0
  404. package/content/small-business/skills/small-business-outreach-composer/reference/slop_test.md +164 -0
  405. package/content/small-business/skills/small-business-pay-the-bills/SKILL.md +101 -0
  406. package/content/small-business/skills/small-business-payroll-prep/SKILL.md +139 -0
  407. package/content/small-business/skills/small-business-payroll-prep/reference/anomaly_rules.md +99 -0
  408. package/content/small-business/skills/small-business-payroll-prep/reference/books_sync.md +72 -0
  409. package/content/small-business/skills/small-business-payroll-prep/reference/gotchas.md +153 -0
  410. package/content/small-business/skills/small-business-payroll-prep/reference/run_sheet_format.md +90 -0
  411. package/content/small-business/skills/small-business-payroll-prep/reference/timesheet_intake.md +118 -0
  412. package/content/small-business/skills/small-business-plan-payroll/SKILL.md +88 -0
  413. package/content/small-business/skills/small-business-proposal-builder/SKILL.md +168 -0
  414. package/content/small-business/skills/small-business-proposal-builder/reference/discovery_extraction.md +138 -0
  415. package/content/small-business/skills/small-business-proposal-builder/reference/gotchas.md +184 -0
  416. package/content/small-business/skills/small-business-proposal-builder/reference/output_template.md +128 -0
  417. package/content/small-business/skills/small-business-proposal-builder/reference/pricing_method.md +125 -0
  418. package/content/small-business/skills/small-business-proposal-builder/reference/proposal_structure.md +120 -0
  419. package/content/small-business/skills/small-business-reactivate/SKILL.md +109 -0
  420. package/content/small-business/skills/small-business-report-builder/SKILL.md +142 -0
  421. package/content/small-business/skills/small-business-report-builder/reference/data_sources.md +168 -0
  422. package/content/small-business/skills/small-business-report-builder/reference/gotchas.md +155 -0
  423. package/content/small-business/skills/small-business-report-builder/reference/output_template.md +109 -0
  424. package/content/small-business/skills/small-business-report-builder/reference/report_spec.md +109 -0
  425. package/content/small-business/skills/small-business-report-builder/reference/saved_reports.md +50 -0
  426. package/content/small-business/skills/small-business-report-pack/SKILL.md +83 -0
  427. package/content/small-business/skills/small-business-restock/SKILL.md +88 -0
  428. package/content/small-business/skills/small-business-review-reputation/SKILL.md +130 -0
  429. package/content/small-business/skills/small-business-review-reputation/reference/churn-signals.md +110 -0
  430. package/content/small-business/skills/small-business-review-reputation/reference/examples/example-report.md +150 -0
  431. package/content/small-business/skills/small-business-review-reputation/reference/gotchas.md +164 -0
  432. package/content/small-business/skills/small-business-review-reputation/reference/response-patterns.md +123 -0
  433. package/content/small-business/skills/small-business-review-reputation/reference/sources.md +116 -0
  434. package/content/small-business/skills/small-business-seo-ai-visibility/SKILL.md +143 -0
  435. package/content/small-business/skills/small-business-seo-ai-visibility/reference/ai_visibility.md +173 -0
  436. package/content/small-business/skills/small-business-seo-ai-visibility/reference/audit_checklist.md +134 -0
  437. package/content/small-business/skills/small-business-seo-ai-visibility/reference/catalog_refresh.md +126 -0
  438. package/content/small-business/skills/small-business-seo-ai-visibility/reference/content_rewrite.md +113 -0
  439. package/content/small-business/skills/small-business-seo-ai-visibility/reference/gotchas.md +211 -0
  440. package/content/small-business/skills/small-business-smb-onboard/SKILL.md +82 -0
  441. package/content/small-business/skills/small-business-smb-onboard/reference/examples/happy-path.md +190 -0
  442. package/content/small-business/skills/small-business-smb-onboard/reference/gotchas.md +111 -0
  443. package/content/small-business/skills/small-business-smb-onboard/reference/onboard-checklist.md +99 -0
  444. package/content/small-business/skills/small-business-smb-onboard/reference/website-research.md +82 -0
  445. package/content/small-business/skills/small-business-smb-router/SKILL.md +216 -0
  446. package/content/small-business/skills/small-business-smb-router/reference/connector-map.md +96 -0
  447. package/content/small-business/skills/small-business-social-content-engine/SKILL.md +162 -0
  448. package/content/small-business/skills/small-business-social-content-engine/reference/calendar.md +116 -0
  449. package/content/small-business/skills/small-business-social-content-engine/reference/canva-api.md +208 -0
  450. package/content/small-business/skills/small-business-social-content-engine/reference/examples/okonkwo-campaign.md +190 -0
  451. package/content/small-business/skills/small-business-social-content-engine/reference/gotchas.md +447 -0
  452. package/content/small-business/skills/small-business-social-content-engine/reference/publishing.md +166 -0
  453. package/content/small-business/skills/small-business-social-content-engine/reference/shopify-assets.md +77 -0
  454. package/content/small-business/skills/small-business-speed-to-lead/SKILL.md +172 -0
  455. package/content/small-business/skills/small-business-speed-to-lead/reference/approval.md +61 -0
  456. package/content/small-business/skills/small-business-speed-to-lead/reference/gotchas.md +167 -0
  457. package/content/small-business/skills/small-business-speed-to-lead/reference/qualification.md +153 -0
  458. package/content/small-business/skills/small-business-speed-to-lead/reference/response_patterns.md +184 -0
  459. package/content/small-business/skills/small-business-tax-prep/SKILL.md +85 -0
  460. package/content/small-business/skills/small-business-tax-season-organizer/SKILL.md +210 -0
  461. package/content/small-business/skills/small-business-tax-season-organizer/reference/calculation-assumptions.md +177 -0
  462. package/content/small-business/skills/small-business-tax-season-organizer/reference/connector-queries.md +267 -0
  463. package/content/small-business/skills/small-business-tax-season-organizer/reference/examples/quarterly-estimate.md +92 -0
  464. package/content/small-business/skills/small-business-tax-season-organizer/reference/examples/year-end-1099.md +102 -0
  465. package/content/small-business/skills/small-business-tax-season-organizer/reference/gotchas.md +104 -0
  466. package/content/small-business/skills/small-business-tax-season-organizer/reference/output-formats.md +68 -0
  467. package/content/small-business/skills/small-business-ticket-deflector/SKILL.md +164 -0
  468. package/content/small-business/skills/small-business-ticket-deflector/reference/examples/deny-refund-request.md +98 -0
  469. package/content/small-business/skills/small-business-ticket-deflector/reference/examples/respond-refund-request.md +77 -0
  470. package/content/small-business/skills/small-business-ticket-deflector/reference/gotchas.md +57 -0
  471. package/index.ts +84 -0
  472. package/package.json +30 -3
@@ -0,0 +1,924 @@
1
+ ---
2
+ name: build-dashboard
3
+ description: Build an interactive HTML dashboard with charts, filters, and tables. Use when creating an executive overview with KPI cards, turning query results into a shareable self-contained report, building a team monitoring snapshot, or needing multiple charts with filters in one browser-openable file.
4
+ argument-hint: "<description> [data source]"
5
+ ---
6
+
7
+ # /build-dashboard - Build Interactive Dashboards
8
+
9
+ > If you see unfamiliar placeholders or need to check which tools are connected, see [CONNECTORS.md](../../CONNECTORS.md).
10
+
11
+ Build a self-contained interactive HTML dashboard with charts, filters, tables, and professional styling. Opens directly in a browser -- no server or dependencies required.
12
+
13
+ ## Usage
14
+
15
+ ```
16
+ /build-dashboard <description of dashboard> [data source]
17
+ ```
18
+
19
+ ## Workflow
20
+
21
+ ### 1. Understand the Dashboard Requirements
22
+
23
+ Determine:
24
+
25
+ - **Purpose**: Executive overview, operational monitoring, deep-dive analysis, team reporting
26
+ - **Audience**: Who will use this dashboard?
27
+ - **Key metrics**: What numbers matter most?
28
+ - **Dimensions**: What should users be able to filter or slice by?
29
+ - **Data source**: Live query, pasted data, CSV file, or sample data
30
+
31
+ ### 2. Gather the Data
32
+
33
+ **If data warehouse is connected:**
34
+ 1. Query the necessary data
35
+ 2. Embed the results as JSON within the HTML file
36
+
37
+ **If data is pasted or uploaded:**
38
+ 1. Parse and clean the data
39
+ 2. Embed as JSON in the dashboard
40
+
41
+ **If working from a description without data:**
42
+ 1. Create a realistic sample dataset matching the described schema
43
+ 2. Note in the dashboard that it uses sample data
44
+ 3. Provide instructions for swapping in real data
45
+
46
+ ### 3. Design the Dashboard Layout
47
+
48
+ Follow a standard dashboard layout pattern:
49
+
50
+ ```
51
+ ┌──────────────────────────────────────────────────┐
52
+ │ Dashboard Title [Filters ▼] │
53
+ ├────────────┬────────────┬────────────┬───────────┤
54
+ │ KPI Card │ KPI Card │ KPI Card │ KPI Card │
55
+ ├────────────┴────────────┼────────────┴───────────┤
56
+ │ │ │
57
+ │ Primary Chart │ Secondary Chart │
58
+ │ (largest area) │ │
59
+ │ │ │
60
+ ├─────────────────────────┴────────────────────────┤
61
+ │ │
62
+ │ Detail Table (sortable, scrollable) │
63
+ │ │
64
+ └──────────────────────────────────────────────────┘
65
+ ```
66
+
67
+ **Adapt the layout to the content:**
68
+ - 2-4 KPI cards at the top for headline numbers
69
+ - 1-3 charts in the middle section for trends and breakdowns
70
+ - Optional detail table at the bottom for drill-down data
71
+ - Filters in the header or sidebar depending on complexity
72
+
73
+ ### 4. Build the HTML Dashboard
74
+
75
+ Generate a single self-contained HTML file using the base template below. The file includes:
76
+
77
+ **Structure (HTML):**
78
+ - Semantic HTML5 layout
79
+ - Responsive grid using CSS Grid or Flexbox
80
+ - Filter controls (dropdowns, date pickers, toggles)
81
+ - KPI cards with values and labels
82
+ - Chart containers
83
+ - Data table with sortable headers
84
+
85
+ **Styling (CSS):**
86
+ - Professional color scheme (clean whites, grays, with accent colors for data)
87
+ - Card-based layout with subtle shadows
88
+ - Consistent typography (system fonts for fast loading)
89
+ - Responsive design that works on different screen sizes
90
+ - Print-friendly styles
91
+
92
+ **Interactivity (JavaScript):**
93
+ - Chart.js for interactive charts (included via CDN)
94
+ - Filter dropdowns that update all charts and tables simultaneously
95
+ - Sortable table columns
96
+ - Hover tooltips on charts
97
+ - Number formatting (commas, currency, percentages)
98
+
99
+ **Data (embedded JSON):**
100
+ - All data embedded directly in the HTML as JavaScript variables
101
+ - No external data fetches required
102
+ - Dashboard works completely offline
103
+
104
+ ### 5. Implement Chart Types
105
+
106
+ Use Chart.js for all charts. Common dashboard chart patterns:
107
+
108
+ - **Line chart**: Time series trends
109
+ - **Bar chart**: Category comparisons
110
+ - **Doughnut chart**: Composition (when <6 categories)
111
+ - **Stacked bar**: Composition over time
112
+ - **Mixed (bar + line)**: Volume with rate overlay
113
+
114
+ Use the Chart.js integration patterns below for each chart type.
115
+
116
+ ### 6. Add Interactivity
117
+
118
+ Use the filter and interactivity implementation patterns below for dropdown filters, date range filters, combined filter logic, sortable tables, and chart updates.
119
+
120
+ ### 7. Save and Open
121
+
122
+ 1. Save the dashboard as an HTML file with a descriptive name (e.g., `sales_dashboard.html`)
123
+ 2. Open it in the user's default browser
124
+ 3. Confirm it renders correctly
125
+ 4. Provide instructions for updating data or customizing
126
+
127
+ ---
128
+
129
+ ## Base Template
130
+
131
+ Every dashboard follows this structure:
132
+
133
+ ```html
134
+ <!DOCTYPE html>
135
+ <html lang="en">
136
+ <head>
137
+ <meta charset="UTF-8">
138
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
139
+ <title>Dashboard Title</title>
140
+ <script src="https://cdn.jsdelivr.net/npm/chart.js@4.5.1" integrity="sha384-jb8JQMbMoBUzgWatfe6COACi2ljcDdZQ2OxczGA3bGNeWe+6DChMTBJemed7ZnvJ" crossorigin="anonymous"></script>
141
+ <script src="https://cdn.jsdelivr.net/npm/chartjs-adapter-date-fns@3.0.0" integrity="sha384-cVMg8E3QFwTvGCDuK+ET4PD341jF3W8nO1auiXfuZNQkzbUUiBGLsIQUE+b1mxws" crossorigin="anonymous"></script>
142
+ <style>
143
+ /* Dashboard styles go here */
144
+ </style>
145
+ </head>
146
+ <body>
147
+ <div class="dashboard-container">
148
+ <header class="dashboard-header">
149
+ <h1>Dashboard Title</h1>
150
+ <div class="filters">
151
+ <!-- Filter controls -->
152
+ </div>
153
+ </header>
154
+
155
+ <section class="kpi-row">
156
+ <!-- KPI cards -->
157
+ </section>
158
+
159
+ <section class="chart-row">
160
+ <!-- Chart containers -->
161
+ </section>
162
+
163
+ <section class="table-section">
164
+ <!-- Data table -->
165
+ </section>
166
+
167
+ <footer class="dashboard-footer">
168
+ <span>Data as of: <span id="data-date"></span></span>
169
+ </footer>
170
+ </div>
171
+
172
+ <script>
173
+ // Embedded data
174
+ const DATA = [];
175
+
176
+ // Dashboard logic
177
+ class Dashboard {
178
+ constructor(data) {
179
+ this.rawData = data;
180
+ this.filteredData = data;
181
+ this.charts = {};
182
+ this.init();
183
+ }
184
+
185
+ init() {
186
+ this.setupFilters();
187
+ this.renderKPIs();
188
+ this.renderCharts();
189
+ this.renderTable();
190
+ }
191
+
192
+ applyFilters() {
193
+ // Filter logic
194
+ this.filteredData = this.rawData.filter(row => {
195
+ // Apply each active filter
196
+ return true; // placeholder
197
+ });
198
+ this.renderKPIs();
199
+ this.updateCharts();
200
+ this.renderTable();
201
+ }
202
+
203
+ // ... methods for each section
204
+ }
205
+
206
+ const dashboard = new Dashboard(DATA);
207
+ </script>
208
+ </body>
209
+ </html>
210
+ ```
211
+
212
+ ## KPI Card Pattern
213
+
214
+ ```html
215
+ <div class="kpi-card">
216
+ <div class="kpi-label">Total Revenue</div>
217
+ <div class="kpi-value" id="kpi-revenue">$0</div>
218
+ <div class="kpi-change positive" id="kpi-revenue-change">+0%</div>
219
+ </div>
220
+ ```
221
+
222
+ ```javascript
223
+ function renderKPI(elementId, value, previousValue, format = 'number') {
224
+ const el = document.getElementById(elementId);
225
+ const changeEl = document.getElementById(elementId + '-change');
226
+
227
+ // Format the value
228
+ el.textContent = formatValue(value, format);
229
+
230
+ // Calculate and display change
231
+ if (previousValue && previousValue !== 0) {
232
+ const pctChange = ((value - previousValue) / previousValue) * 100;
233
+ const sign = pctChange >= 0 ? '+' : '';
234
+ changeEl.textContent = `${sign}${pctChange.toFixed(1)}% vs prior period`;
235
+ changeEl.className = `kpi-change ${pctChange >= 0 ? 'positive' : 'negative'}`;
236
+ }
237
+ }
238
+
239
+ function formatValue(value, format) {
240
+ switch (format) {
241
+ case 'currency':
242
+ if (value >= 1e6) return `$${(value / 1e6).toFixed(1)}M`;
243
+ if (value >= 1e3) return `$${(value / 1e3).toFixed(1)}K`;
244
+ return `$${value.toFixed(0)}`;
245
+ case 'percent':
246
+ return `${value.toFixed(1)}%`;
247
+ case 'number':
248
+ if (value >= 1e6) return `${(value / 1e6).toFixed(1)}M`;
249
+ if (value >= 1e3) return `${(value / 1e3).toFixed(1)}K`;
250
+ return value.toLocaleString();
251
+ default:
252
+ return value.toString();
253
+ }
254
+ }
255
+ ```
256
+
257
+ ## Chart.js Integration
258
+
259
+ ### Chart Container Pattern
260
+
261
+ ```html
262
+ <div class="chart-container">
263
+ <h3 class="chart-title">Monthly Revenue Trend</h3>
264
+ <canvas id="revenue-chart"></canvas>
265
+ </div>
266
+ ```
267
+
268
+ ### Line Chart
269
+
270
+ ```javascript
271
+ function createLineChart(canvasId, labels, datasets) {
272
+ const ctx = document.getElementById(canvasId).getContext('2d');
273
+ return new Chart(ctx, {
274
+ type: 'line',
275
+ data: {
276
+ labels: labels,
277
+ datasets: datasets.map((ds, i) => ({
278
+ label: ds.label,
279
+ data: ds.data,
280
+ borderColor: COLORS[i % COLORS.length],
281
+ backgroundColor: COLORS[i % COLORS.length] + '20',
282
+ borderWidth: 2,
283
+ fill: ds.fill || false,
284
+ tension: 0.3,
285
+ pointRadius: 3,
286
+ pointHoverRadius: 6,
287
+ }))
288
+ },
289
+ options: {
290
+ responsive: true,
291
+ maintainAspectRatio: false,
292
+ interaction: {
293
+ mode: 'index',
294
+ intersect: false,
295
+ },
296
+ plugins: {
297
+ legend: {
298
+ position: 'top',
299
+ labels: { usePointStyle: true, padding: 20 }
300
+ },
301
+ tooltip: {
302
+ callbacks: {
303
+ label: function(context) {
304
+ return `${context.dataset.label}: ${formatValue(context.parsed.y, 'currency')}`;
305
+ }
306
+ }
307
+ }
308
+ },
309
+ scales: {
310
+ x: {
311
+ grid: { display: false }
312
+ },
313
+ y: {
314
+ beginAtZero: true,
315
+ ticks: {
316
+ callback: function(value) {
317
+ return formatValue(value, 'currency');
318
+ }
319
+ }
320
+ }
321
+ }
322
+ }
323
+ });
324
+ }
325
+ ```
326
+
327
+ ### Bar Chart
328
+
329
+ ```javascript
330
+ function createBarChart(canvasId, labels, data, options = {}) {
331
+ const ctx = document.getElementById(canvasId).getContext('2d');
332
+ const isHorizontal = options.horizontal || labels.length > 8;
333
+
334
+ return new Chart(ctx, {
335
+ type: 'bar',
336
+ data: {
337
+ labels: labels,
338
+ datasets: [{
339
+ label: options.label || 'Value',
340
+ data: data,
341
+ backgroundColor: options.colors || COLORS.map(c => c + 'CC'),
342
+ borderColor: options.colors || COLORS,
343
+ borderWidth: 1,
344
+ borderRadius: 4,
345
+ }]
346
+ },
347
+ options: {
348
+ responsive: true,
349
+ maintainAspectRatio: false,
350
+ indexAxis: isHorizontal ? 'y' : 'x',
351
+ plugins: {
352
+ legend: { display: false },
353
+ tooltip: {
354
+ callbacks: {
355
+ label: function(context) {
356
+ return formatValue(context.parsed[isHorizontal ? 'x' : 'y'], options.format || 'number');
357
+ }
358
+ }
359
+ }
360
+ },
361
+ scales: {
362
+ x: {
363
+ beginAtZero: true,
364
+ grid: { display: isHorizontal },
365
+ ticks: isHorizontal ? {
366
+ callback: function(value) {
367
+ return formatValue(value, options.format || 'number');
368
+ }
369
+ } : {}
370
+ },
371
+ y: {
372
+ beginAtZero: !isHorizontal,
373
+ grid: { display: !isHorizontal },
374
+ ticks: !isHorizontal ? {
375
+ callback: function(value) {
376
+ return formatValue(value, options.format || 'number');
377
+ }
378
+ } : {}
379
+ }
380
+ }
381
+ }
382
+ });
383
+ }
384
+ ```
385
+
386
+ ### Doughnut Chart
387
+
388
+ ```javascript
389
+ function createDoughnutChart(canvasId, labels, data) {
390
+ const ctx = document.getElementById(canvasId).getContext('2d');
391
+ return new Chart(ctx, {
392
+ type: 'doughnut',
393
+ data: {
394
+ labels: labels,
395
+ datasets: [{
396
+ data: data,
397
+ backgroundColor: COLORS.map(c => c + 'CC'),
398
+ borderColor: '#ffffff',
399
+ borderWidth: 2,
400
+ }]
401
+ },
402
+ options: {
403
+ responsive: true,
404
+ maintainAspectRatio: false,
405
+ cutout: '60%',
406
+ plugins: {
407
+ legend: {
408
+ position: 'right',
409
+ labels: { usePointStyle: true, padding: 15 }
410
+ },
411
+ tooltip: {
412
+ callbacks: {
413
+ label: function(context) {
414
+ const total = context.dataset.data.reduce((a, b) => a + b, 0);
415
+ const pct = ((context.parsed / total) * 100).toFixed(1);
416
+ return `${context.label}: ${formatValue(context.parsed, 'number')} (${pct}%)`;
417
+ }
418
+ }
419
+ }
420
+ }
421
+ }
422
+ });
423
+ }
424
+ ```
425
+
426
+ ### Updating Charts on Filter Change
427
+
428
+ ```javascript
429
+ function updateChart(chart, newLabels, newData) {
430
+ chart.data.labels = newLabels;
431
+
432
+ if (Array.isArray(newData[0])) {
433
+ // Multiple datasets
434
+ newData.forEach((data, i) => {
435
+ chart.data.datasets[i].data = data;
436
+ });
437
+ } else {
438
+ chart.data.datasets[0].data = newData;
439
+ }
440
+
441
+ chart.update('none'); // 'none' disables animation for instant update
442
+ }
443
+ ```
444
+
445
+ ## Filter and Interactivity Implementation
446
+
447
+ ### Dropdown Filter
448
+
449
+ ```html
450
+ <div class="filter-group">
451
+ <label for="filter-region">Region</label>
452
+ <select id="filter-region" onchange="dashboard.applyFilters()">
453
+ <option value="all">All Regions</option>
454
+ </select>
455
+ </div>
456
+ ```
457
+
458
+ ```javascript
459
+ function populateFilter(selectId, data, field) {
460
+ const select = document.getElementById(selectId);
461
+ const values = [...new Set(data.map(d => d[field]))].sort();
462
+
463
+ // Keep the "All" option, add unique values
464
+ values.forEach(val => {
465
+ const option = document.createElement('option');
466
+ option.value = val;
467
+ option.textContent = val;
468
+ select.appendChild(option);
469
+ });
470
+ }
471
+
472
+ function getFilterValue(selectId) {
473
+ const val = document.getElementById(selectId).value;
474
+ return val === 'all' ? null : val;
475
+ }
476
+ ```
477
+
478
+ ### Date Range Filter
479
+
480
+ ```html
481
+ <div class="filter-group">
482
+ <label>Date Range</label>
483
+ <input type="date" id="filter-date-start" onchange="dashboard.applyFilters()">
484
+ <span>to</span>
485
+ <input type="date" id="filter-date-end" onchange="dashboard.applyFilters()">
486
+ </div>
487
+ ```
488
+
489
+ ```javascript
490
+ function filterByDateRange(data, dateField, startDate, endDate) {
491
+ return data.filter(row => {
492
+ const rowDate = new Date(row[dateField]);
493
+ if (startDate && rowDate < new Date(startDate)) return false;
494
+ if (endDate && rowDate > new Date(endDate)) return false;
495
+ return true;
496
+ });
497
+ }
498
+ ```
499
+
500
+ ### Combined Filter Logic
501
+
502
+ ```javascript
503
+ applyFilters() {
504
+ const region = getFilterValue('filter-region');
505
+ const category = getFilterValue('filter-category');
506
+ const startDate = document.getElementById('filter-date-start').value;
507
+ const endDate = document.getElementById('filter-date-end').value;
508
+
509
+ this.filteredData = this.rawData.filter(row => {
510
+ if (region && row.region !== region) return false;
511
+ if (category && row.category !== category) return false;
512
+ if (startDate && row.date < startDate) return false;
513
+ if (endDate && row.date > endDate) return false;
514
+ return true;
515
+ });
516
+
517
+ this.renderKPIs();
518
+ this.updateCharts();
519
+ this.renderTable();
520
+ }
521
+ ```
522
+
523
+ ### Sortable Table
524
+
525
+ ```javascript
526
+ function renderTable(containerId, data, columns) {
527
+ const container = document.getElementById(containerId);
528
+ let sortCol = null;
529
+ let sortDir = 'desc';
530
+
531
+ function render(sortedData) {
532
+ let html = '<table class="data-table">';
533
+
534
+ // Header
535
+ html += '<thead><tr>';
536
+ columns.forEach(col => {
537
+ const arrow = sortCol === col.field
538
+ ? (sortDir === 'asc' ? ' ▲' : ' ▼')
539
+ : '';
540
+ html += `<th onclick="sortTable('${col.field}')" style="cursor:pointer">${col.label}${arrow}</th>`;
541
+ });
542
+ html += '</tr></thead>';
543
+
544
+ // Body
545
+ html += '<tbody>';
546
+ sortedData.forEach(row => {
547
+ html += '<tr>';
548
+ columns.forEach(col => {
549
+ const value = col.format ? formatValue(row[col.field], col.format) : row[col.field];
550
+ html += `<td>${value}</td>`;
551
+ });
552
+ html += '</tr>';
553
+ });
554
+ html += '</tbody></table>';
555
+
556
+ container.innerHTML = html;
557
+ }
558
+
559
+ window.sortTable = function(field) {
560
+ if (sortCol === field) {
561
+ sortDir = sortDir === 'asc' ? 'desc' : 'asc';
562
+ } else {
563
+ sortCol = field;
564
+ sortDir = 'desc';
565
+ }
566
+ const sorted = [...data].sort((a, b) => {
567
+ const aVal = a[field], bVal = b[field];
568
+ const cmp = aVal < bVal ? -1 : aVal > bVal ? 1 : 0;
569
+ return sortDir === 'asc' ? cmp : -cmp;
570
+ });
571
+ render(sorted);
572
+ };
573
+
574
+ render(data);
575
+ }
576
+ ```
577
+
578
+ ## CSS Styling for Dashboards
579
+
580
+ ### Color System
581
+
582
+ ```css
583
+ :root {
584
+ /* Background layers */
585
+ --bg-primary: #f8f9fa;
586
+ --bg-card: #ffffff;
587
+ --bg-header: #1a1a2e;
588
+
589
+ /* Text */
590
+ --text-primary: #212529;
591
+ --text-secondary: #6c757d;
592
+ --text-on-dark: #ffffff;
593
+
594
+ /* Accent colors for data */
595
+ --color-1: #4C72B0;
596
+ --color-2: #DD8452;
597
+ --color-3: #55A868;
598
+ --color-4: #C44E52;
599
+ --color-5: #8172B3;
600
+ --color-6: #937860;
601
+
602
+ /* Status colors */
603
+ --positive: #28a745;
604
+ --negative: #dc3545;
605
+ --neutral: #6c757d;
606
+
607
+ /* Spacing */
608
+ --gap: 16px;
609
+ --radius: 8px;
610
+ }
611
+ ```
612
+
613
+ ### Layout
614
+
615
+ ```css
616
+ * {
617
+ margin: 0;
618
+ padding: 0;
619
+ box-sizing: border-box;
620
+ }
621
+
622
+ body {
623
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
624
+ background: var(--bg-primary);
625
+ color: var(--text-primary);
626
+ line-height: 1.5;
627
+ }
628
+
629
+ .dashboard-container {
630
+ max-width: 1400px;
631
+ margin: 0 auto;
632
+ padding: var(--gap);
633
+ }
634
+
635
+ .dashboard-header {
636
+ background: var(--bg-header);
637
+ color: var(--text-on-dark);
638
+ padding: 20px 24px;
639
+ border-radius: var(--radius);
640
+ margin-bottom: var(--gap);
641
+ display: flex;
642
+ justify-content: space-between;
643
+ align-items: center;
644
+ flex-wrap: wrap;
645
+ gap: 12px;
646
+ }
647
+
648
+ .dashboard-header h1 {
649
+ font-size: 20px;
650
+ font-weight: 600;
651
+ }
652
+ ```
653
+
654
+ ### KPI Cards
655
+
656
+ ```css
657
+ .kpi-row {
658
+ display: grid;
659
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
660
+ gap: var(--gap);
661
+ margin-bottom: var(--gap);
662
+ }
663
+
664
+ .kpi-card {
665
+ background: var(--bg-card);
666
+ border-radius: var(--radius);
667
+ padding: 20px 24px;
668
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);
669
+ }
670
+
671
+ .kpi-label {
672
+ font-size: 13px;
673
+ color: var(--text-secondary);
674
+ text-transform: uppercase;
675
+ letter-spacing: 0.5px;
676
+ margin-bottom: 4px;
677
+ }
678
+
679
+ .kpi-value {
680
+ font-size: 28px;
681
+ font-weight: 700;
682
+ color: var(--text-primary);
683
+ margin-bottom: 4px;
684
+ }
685
+
686
+ .kpi-change {
687
+ font-size: 13px;
688
+ font-weight: 500;
689
+ }
690
+
691
+ .kpi-change.positive { color: var(--positive); }
692
+ .kpi-change.negative { color: var(--negative); }
693
+ ```
694
+
695
+ ### Chart Containers
696
+
697
+ ```css
698
+ .chart-row {
699
+ display: grid;
700
+ grid-template-columns: repeat(auto-fit, minmax(400px, 1fr));
701
+ gap: var(--gap);
702
+ margin-bottom: var(--gap);
703
+ }
704
+
705
+ .chart-container {
706
+ background: var(--bg-card);
707
+ border-radius: var(--radius);
708
+ padding: 20px 24px;
709
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);
710
+ }
711
+
712
+ .chart-container h3 {
713
+ font-size: 14px;
714
+ font-weight: 600;
715
+ color: var(--text-primary);
716
+ margin-bottom: 16px;
717
+ }
718
+
719
+ .chart-container canvas {
720
+ max-height: 300px;
721
+ }
722
+ ```
723
+
724
+ ### Filters
725
+
726
+ ```css
727
+ .filters {
728
+ display: flex;
729
+ gap: 12px;
730
+ align-items: center;
731
+ flex-wrap: wrap;
732
+ }
733
+
734
+ .filter-group {
735
+ display: flex;
736
+ align-items: center;
737
+ gap: 6px;
738
+ }
739
+
740
+ .filter-group label {
741
+ font-size: 12px;
742
+ color: rgba(255, 255, 255, 0.7);
743
+ }
744
+
745
+ .filter-group select,
746
+ .filter-group input[type="date"] {
747
+ padding: 6px 10px;
748
+ border: 1px solid rgba(255, 255, 255, 0.2);
749
+ border-radius: 4px;
750
+ background: rgba(255, 255, 255, 0.1);
751
+ color: var(--text-on-dark);
752
+ font-size: 13px;
753
+ }
754
+
755
+ .filter-group select option {
756
+ background: var(--bg-header);
757
+ color: var(--text-on-dark);
758
+ }
759
+ ```
760
+
761
+ ### Data Table
762
+
763
+ ```css
764
+ .table-section {
765
+ background: var(--bg-card);
766
+ border-radius: var(--radius);
767
+ padding: 20px 24px;
768
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);
769
+ overflow-x: auto;
770
+ }
771
+
772
+ .data-table {
773
+ width: 100%;
774
+ border-collapse: collapse;
775
+ font-size: 13px;
776
+ }
777
+
778
+ .data-table thead th {
779
+ text-align: left;
780
+ padding: 10px 12px;
781
+ border-bottom: 2px solid #dee2e6;
782
+ color: var(--text-secondary);
783
+ font-weight: 600;
784
+ font-size: 12px;
785
+ text-transform: uppercase;
786
+ letter-spacing: 0.5px;
787
+ white-space: nowrap;
788
+ user-select: none;
789
+ }
790
+
791
+ .data-table thead th:hover {
792
+ color: var(--text-primary);
793
+ background: #f8f9fa;
794
+ }
795
+
796
+ .data-table tbody td {
797
+ padding: 10px 12px;
798
+ border-bottom: 1px solid #f0f0f0;
799
+ }
800
+
801
+ .data-table tbody tr:hover {
802
+ background: #f8f9fa;
803
+ }
804
+
805
+ .data-table tbody tr:last-child td {
806
+ border-bottom: none;
807
+ }
808
+ ```
809
+
810
+ ### Responsive Design
811
+
812
+ ```css
813
+ @media (max-width: 768px) {
814
+ .dashboard-header {
815
+ flex-direction: column;
816
+ align-items: flex-start;
817
+ }
818
+
819
+ .kpi-row {
820
+ grid-template-columns: repeat(2, 1fr);
821
+ }
822
+
823
+ .chart-row {
824
+ grid-template-columns: 1fr;
825
+ }
826
+
827
+ .filters {
828
+ flex-direction: column;
829
+ align-items: flex-start;
830
+ }
831
+ }
832
+
833
+ @media print {
834
+ body { background: white; }
835
+ .dashboard-container { max-width: none; }
836
+ .filters { display: none; }
837
+ .chart-container { break-inside: avoid; }
838
+ .kpi-card { border: 1px solid #dee2e6; box-shadow: none; }
839
+ }
840
+ ```
841
+
842
+ ## Performance Considerations for Large Datasets
843
+
844
+ ### Data Size Guidelines
845
+
846
+ | Data Size | Approach |
847
+ |---|---|
848
+ | <1,000 rows | Embed directly in HTML. Full interactivity. |
849
+ | 1,000 - 10,000 rows | Embed in HTML. May need to pre-aggregate for charts. |
850
+ | 10,000 - 100,000 rows | Pre-aggregate server-side. Embed only aggregated data. |
851
+ | >100,000 rows | Not suitable for client-side dashboard. Use a BI tool or paginate. |
852
+
853
+ ### Pre-Aggregation Pattern
854
+
855
+ Instead of embedding raw data and aggregating in the browser:
856
+
857
+ ```javascript
858
+ // DON'T: embed 50,000 raw rows
859
+ const RAW_DATA = [/* 50,000 rows */];
860
+
861
+ // DO: pre-aggregate before embedding
862
+ const CHART_DATA = {
863
+ monthly_revenue: [
864
+ { month: '2024-01', revenue: 150000, orders: 1200 },
865
+ { month: '2024-02', revenue: 165000, orders: 1350 },
866
+ // ... 12 rows instead of 50,000
867
+ ],
868
+ top_products: [
869
+ { product: 'Widget A', revenue: 45000 },
870
+ // ... 10 rows
871
+ ],
872
+ kpis: {
873
+ total_revenue: 1980000,
874
+ total_orders: 15600,
875
+ avg_order_value: 127,
876
+ }
877
+ };
878
+ ```
879
+
880
+ ### Chart Performance
881
+
882
+ - Limit line charts to <500 data points per series (downsample if needed)
883
+ - Limit bar charts to <50 categories
884
+ - For scatter plots, cap at 1,000 points (use sampling for larger datasets)
885
+ - Disable animations for dashboards with many charts: `animation: false` in Chart.js options
886
+ - Use `Chart.update('none')` instead of `Chart.update()` for filter-triggered updates
887
+
888
+ ### DOM Performance
889
+
890
+ - Limit data tables to 100-200 visible rows. Add pagination for more.
891
+ - Use `requestAnimationFrame` for coordinated chart updates
892
+ - Avoid rebuilding the entire DOM on filter change -- update only changed elements
893
+
894
+ ```javascript
895
+ // Efficient table pagination
896
+ function renderTablePage(data, page, pageSize = 50) {
897
+ const start = page * pageSize;
898
+ const end = Math.min(start + pageSize, data.length);
899
+ const pageData = data.slice(start, end);
900
+ // Render only pageData
901
+ // Show pagination controls: "Showing 1-50 of 2,340"
902
+ }
903
+ ```
904
+
905
+ ## Examples
906
+
907
+ ```
908
+ /build-dashboard Monthly sales dashboard with revenue trend, top products, and regional breakdown. Data is in the orders table.
909
+ ```
910
+
911
+ ```
912
+ /build-dashboard Here's our support ticket data [pastes CSV]. Build a dashboard showing volume by priority, response time trends, and resolution rates.
913
+ ```
914
+
915
+ ```
916
+ /build-dashboard Create a template executive dashboard for a SaaS company showing MRR, churn, new customers, and NPS. Use sample data.
917
+ ```
918
+
919
+ ## Tips
920
+
921
+ - Dashboards are fully self-contained HTML files -- share them with anyone by sending the file
922
+ - For real-time dashboards, consider connecting to a BI tool instead. These dashboards are point-in-time snapshots
923
+ - Request "dark mode" or "presentation mode" for different styling
924
+ - You can request a specific color scheme to match your brand