@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,605 @@
1
+ # Image Optimization Pipeline (Sharp.js)
2
+ ## Description
3
+
4
+ Production-ready Node.js image processing pipeline using Sharp (libvips). Covers resizing, format conversion, responsive image generation, metadata handling, compositing, batch processing, and Express/Multer integration.
5
+
6
+ ## When to Use
7
+
8
+ - Building an upload pipeline that needs thumbnails, responsive sizes, or format conversion
9
+ - Optimizing existing images for web delivery (WebP, AVIF)
10
+ - Generating watermarked or branded image variants
11
+ - Extracting image metadata or dominant colors
12
+ - Any server-side image manipulation in Node.js
13
+
14
+ ---
15
+
16
+ ## Sharp.js Core Operations
17
+
18
+ ### Installation
19
+
20
+ ```bash
21
+ npm install sharp
22
+ # or
23
+ bun add sharp
24
+ ```
25
+
26
+ Sharp ships prebuilt binaries for most platforms. No native compilation needed.
27
+
28
+ ### Resize
29
+
30
+ ```javascript
31
+ import sharp from 'sharp';
32
+
33
+ // Fit modes control how the image fills the target dimensions
34
+ await sharp('input.jpg')
35
+ .resize(800, 600, { fit: 'cover' }) // Crop to fill exactly 800x600 (default)
36
+ .toFile('output-cover.jpg');
37
+
38
+ await sharp('input.jpg')
39
+ .resize(800, 600, { fit: 'contain', background: '#ffffff' }) // Letterbox, no crop
40
+ .toFile('output-contain.jpg');
41
+
42
+ await sharp('input.jpg')
43
+ .resize(800, 600, { fit: 'fill' }) // Stretch/squash to exact dimensions
44
+ .toFile('output-fill.jpg');
45
+
46
+ await sharp('input.jpg')
47
+ .resize(800, 600, { fit: 'inside' }) // Shrink to fit inside 800x600, preserve aspect
48
+ .toFile('output-inside.jpg');
49
+
50
+ await sharp('input.jpg')
51
+ .resize(800, 600, { fit: 'outside' }) // Shrink so smallest side matches, preserve aspect
52
+ .toFile('output-outside.jpg');
53
+
54
+ // Resize by width only (auto-calculate height)
55
+ await sharp('input.jpg')
56
+ .resize({ width: 1200 })
57
+ .toFile('output-width.jpg');
58
+
59
+ // Resize with position control for cover mode
60
+ await sharp('input.jpg')
61
+ .resize(400, 400, { fit: 'cover', position: 'attention' }) // Smart crop using saliency
62
+ .toFile('output-smart.jpg');
63
+ ```
64
+
65
+ ### Format Conversion
66
+
67
+ ```javascript
68
+ // JPEG to WebP
69
+ await sharp('photo.jpg')
70
+ .webp({ quality: 80 })
71
+ .toFile('photo.webp');
72
+
73
+ // PNG to AVIF
74
+ await sharp('image.png')
75
+ .avif({ quality: 65 })
76
+ .toFile('image.avif');
77
+
78
+ // Any format to JPEG with specific settings
79
+ await sharp('input.png')
80
+ .jpeg({
81
+ quality: 85,
82
+ mozjpeg: true, // Use mozjpeg encoder for smaller files
83
+ chromaSubsampling: '4:4:4', // Better color for sharp edges
84
+ })
85
+ .toFile('output.jpg');
86
+
87
+ // Convert to multiple formats from a single read
88
+ const pipeline = sharp('source.jpg');
89
+ await Promise.all([
90
+ pipeline.clone().webp({ quality: 80 }).toFile('output.webp'),
91
+ pipeline.clone().avif({ quality: 65 }).toFile('output.avif'),
92
+ pipeline.clone().jpeg({ quality: 85, mozjpeg: true }).toFile('output.jpg'),
93
+ ]);
94
+ ```
95
+
96
+ ### Responsive Image Generation
97
+
98
+ ```javascript
99
+ const WIDTHS = [320, 640, 1024, 1920];
100
+
101
+ async function generateResponsiveImages(inputPath, outputDir, baseName) {
102
+ const pipeline = sharp(inputPath);
103
+ const metadata = await pipeline.metadata();
104
+
105
+ const results = await Promise.all(
106
+ WIDTHS
107
+ .filter(w => w <= metadata.width) // Don't upscale
108
+ .flatMap(width => [
109
+ pipeline.clone()
110
+ .resize({ width })
111
+ .webp({ quality: 80 })
112
+ .toFile(`${outputDir}/${baseName}-${width}w.webp`),
113
+ pipeline.clone()
114
+ .resize({ width })
115
+ .avif({ quality: 65 })
116
+ .toFile(`${outputDir}/${baseName}-${width}w.avif`),
117
+ ])
118
+ );
119
+
120
+ return results;
121
+ }
122
+
123
+ // Usage
124
+ await generateResponsiveImages('./uploads/hero.jpg', './public/images', 'hero');
125
+ ```
126
+
127
+ ### Metadata Extraction and Stripping
128
+
129
+ ```javascript
130
+ // Extract metadata
131
+ const metadata = await sharp('photo.jpg').metadata();
132
+ console.log({
133
+ width: metadata.width, // 4032
134
+ height: metadata.height, // 3024
135
+ format: metadata.format, // 'jpeg'
136
+ space: metadata.space, // 'srgb'
137
+ channels: metadata.channels, // 3
138
+ hasAlpha: metadata.hasAlpha, // false
139
+ orientation: metadata.orientation, // EXIF orientation (1-8)
140
+ exif: metadata.exif, // Buffer of raw EXIF data
141
+ density: metadata.density, // DPI (72, 300, etc.)
142
+ });
143
+
144
+ // Strip all metadata (EXIF, IPTC, XMP) for privacy
145
+ await sharp('photo-with-gps.jpg')
146
+ .withMetadata(false) // Strips everything
147
+ .toFile('photo-clean.jpg');
148
+
149
+ // Keep metadata but fix orientation
150
+ await sharp('rotated.jpg')
151
+ .rotate() // Auto-rotate based on EXIF orientation
152
+ .withMetadata() // Preserve other metadata
153
+ .toFile('fixed.jpg');
154
+ ```
155
+
156
+ ### Composite / Overlay (Watermarks, Text)
157
+
158
+ ```javascript
159
+ // Watermark overlay
160
+ await sharp('photo.jpg')
161
+ .composite([{
162
+ input: 'watermark.png',
163
+ gravity: 'southeast', // Bottom-right corner
164
+ blend: 'over',
165
+ }])
166
+ .toFile('watermarked.jpg');
167
+
168
+ // Semi-transparent overlay with offset
169
+ await sharp('photo.jpg')
170
+ .composite([{
171
+ input: Buffer.from(
172
+ `<svg width="200" height="50">
173
+ <text x="10" y="35" font-size="28" fill="white" opacity="0.7"
174
+ font-family="sans-serif">My Brand</text>
175
+ </svg>`
176
+ ),
177
+ top: 20,
178
+ left: 20,
179
+ }])
180
+ .toFile('branded.jpg');
181
+
182
+ // Multiple overlays
183
+ await sharp('background.jpg')
184
+ .composite([
185
+ { input: 'logo.png', gravity: 'northwest', blend: 'over' },
186
+ { input: 'badge.png', gravity: 'northeast', blend: 'over' },
187
+ ])
188
+ .toFile('composed.jpg');
189
+ ```
190
+
191
+ ### Blur, Sharpen, Rotate, Flip
192
+
193
+ ```javascript
194
+ // Gaussian blur (sigma 1-1000)
195
+ await sharp('input.jpg').blur(5).toFile('blurred.jpg');
196
+
197
+ // Sharpen
198
+ await sharp('input.jpg')
199
+ .sharpen({
200
+ sigma: 1.5, // Gaussian mask size
201
+ m1: 1.0, // Flat area sharpening
202
+ m2: 2.0, // Edge sharpening
203
+ })
204
+ .toFile('sharpened.jpg');
205
+
206
+ // Rotate by exact degrees (background fills empty space)
207
+ await sharp('input.jpg')
208
+ .rotate(45, { background: '#00000000' }) // Transparent fill
209
+ .toFile('rotated.png');
210
+
211
+ // Flip and flop
212
+ await sharp('input.jpg').flip().toFile('flipped.jpg'); // Vertical flip
213
+ await sharp('input.jpg').flop().toFile('flopped.jpg'); // Horizontal mirror
214
+ ```
215
+
216
+ ### Extract Dominant Color Palette
217
+
218
+ ```javascript
219
+ // Get dominant color via stats
220
+ const { dominant } = await sharp('photo.jpg').stats();
221
+ console.log(`Dominant: rgb(${dominant.r}, ${dominant.g}, ${dominant.b})`);
222
+
223
+ // Extract a palette by downscaling heavily, then reading pixels
224
+ async function extractPalette(inputPath, colorCount = 5) {
225
+ const { data, info } = await sharp(inputPath)
226
+ .resize(colorCount, 1, { fit: 'cover' }) // Crush to N pixels
227
+ .raw()
228
+ .toBuffer({ resolveWithObject: true });
229
+
230
+ const colors = [];
231
+ for (let i = 0; i < info.width; i++) {
232
+ const offset = i * info.channels;
233
+ colors.push({
234
+ r: data[offset],
235
+ g: data[offset + 1],
236
+ b: data[offset + 2],
237
+ hex: `#${data[offset].toString(16).padStart(2, '0')}${data[offset + 1].toString(16).padStart(2, '0')}${data[offset + 2].toString(16).padStart(2, '0')}`,
238
+ });
239
+ }
240
+ return colors;
241
+ }
242
+
243
+ const palette = await extractPalette('sunset.jpg', 5);
244
+ // [{ r: 214, g: 87, b: 42, hex: '#d6572a' }, ...]
245
+ ```
246
+
247
+ ---
248
+
249
+ ## Production Pipeline Pattern
250
+
251
+ Complete Express middleware that handles upload, resizes to multiple sizes, converts to WebP and AVIF, strips metadata, and saves to disk.
252
+
253
+ ```javascript
254
+ import sharp from 'sharp';
255
+ import path from 'path';
256
+ import fs from 'fs/promises';
257
+ import crypto from 'crypto';
258
+
259
+ const SIZES = {
260
+ thumb: { width: 320, quality: { webp: 70, avif: 55 } },
261
+ medium: { width: 640, quality: { webp: 78, avif: 60 } },
262
+ large: { width: 1024, quality: { webp: 80, avif: 65 } },
263
+ full: { width: 1920, quality: { webp: 82, avif: 68 } },
264
+ };
265
+
266
+ const FORMATS = ['webp', 'avif'];
267
+ const OUTPUT_DIR = './public/uploads/processed';
268
+
269
+ async function processImage(inputBuffer, originalName) {
270
+ const id = crypto.randomUUID();
271
+ const baseName = path.parse(originalName).name;
272
+ const imageDir = path.join(OUTPUT_DIR, id);
273
+ await fs.mkdir(imageDir, { recursive: true });
274
+
275
+ const pipeline = sharp(inputBuffer).rotate().withMetadata(false);
276
+ const metadata = await pipeline.metadata();
277
+
278
+ const variants = [];
279
+
280
+ for (const [sizeName, config] of Object.entries(SIZES)) {
281
+ if (config.width > metadata.width) continue; // Never upscale
282
+
283
+ for (const format of FORMATS) {
284
+ const filename = `${baseName}-${sizeName}.${format}`;
285
+ const outputPath = path.join(imageDir, filename);
286
+
287
+ await pipeline.clone()
288
+ .resize({ width: config.width, fit: 'inside' })
289
+ [format]({ quality: config.quality[format] })
290
+ .toFile(outputPath);
291
+
292
+ variants.push({
293
+ size: sizeName,
294
+ format,
295
+ width: config.width,
296
+ path: `/uploads/processed/${id}/${filename}`,
297
+ });
298
+ }
299
+ }
300
+
301
+ return { id, originalName, variants };
302
+ }
303
+
304
+ // Express middleware
305
+ export async function imageProcessingMiddleware(req, res, next) {
306
+ if (!req.file) return next();
307
+
308
+ try {
309
+ const result = await processImage(req.file.buffer, req.file.originalname);
310
+ req.processedImage = result;
311
+ next();
312
+ } catch (err) {
313
+ next(new Error(`Image processing failed: ${err.message}`));
314
+ }
315
+ }
316
+ ```
317
+
318
+ ---
319
+
320
+ ## Responsive Image HTML
321
+
322
+ Serve the processed variants with proper `<picture>` tags:
323
+
324
+ ```html
325
+ <picture>
326
+ <!-- AVIF: best compression, modern browsers -->
327
+ <source
328
+ type="image/avif"
329
+ srcset="
330
+ /uploads/processed/abc123/hero-thumb.avif 320w,
331
+ /uploads/processed/abc123/hero-medium.avif 640w,
332
+ /uploads/processed/abc123/hero-large.avif 1024w,
333
+ /uploads/processed/abc123/hero-full.avif 1920w
334
+ "
335
+ sizes="(max-width: 640px) 100vw, (max-width: 1024px) 80vw, 1200px"
336
+ />
337
+
338
+ <!-- WebP: fallback for older browsers -->
339
+ <source
340
+ type="image/webp"
341
+ srcset="
342
+ /uploads/processed/abc123/hero-thumb.webp 320w,
343
+ /uploads/processed/abc123/hero-medium.webp 640w,
344
+ /uploads/processed/abc123/hero-large.webp 1024w,
345
+ /uploads/processed/abc123/hero-full.webp 1920w
346
+ "
347
+ sizes="(max-width: 640px) 100vw, (max-width: 1024px) 80vw, 1200px"
348
+ />
349
+
350
+ <!-- JPEG: ultimate fallback -->
351
+ <img
352
+ src="/uploads/processed/abc123/hero-large.jpg"
353
+ alt="Course hero image"
354
+ width="1024"
355
+ height="576"
356
+ loading="lazy"
357
+ decoding="async"
358
+ />
359
+ </picture>
360
+ ```
361
+
362
+ **`sizes` attribute explained:**
363
+ - `(max-width: 640px) 100vw` — on mobile, the image fills the viewport
364
+ - `(max-width: 1024px) 80vw` — on tablets, it fills 80% of the viewport
365
+ - `1200px` — on desktop, it never exceeds 1200px display width
366
+
367
+ The browser picks the smallest image from `srcset` that satisfies `sizes`.
368
+
369
+ ---
370
+
371
+ ## Format Decision Matrix
372
+
373
+ | Use Case | Format | Quality | Why |
374
+ |----------|--------|---------|-----|
375
+ | Photos (hero, gallery) | WebP 80 / AVIF 65 | High visual | AVIF 50% smaller than JPEG at equivalent quality |
376
+ | Thumbnails (cards, lists) | WebP 70 | Small dims reduce quality needs | Fast decode at small sizes matters more than fidelity |
377
+ | Icons / logos | SVG or PNG | Lossless | Sharp edges; SVG scales infinitely; PNG for raster icons |
378
+ | OG / social images | PNG 90 | High | Social platforms re-compress; start high to survive double encoding |
379
+ | User avatars | WebP 75 | Small crops | Typically 128-256px; WebP handles small images well |
380
+ | Screenshots / text-heavy | PNG or WebP lossless | Lossless | Text artifacts are very visible in lossy formats |
381
+ | Background patterns | WebP 85 | Medium-high | Repeated patterns show banding at low quality |
382
+
383
+ ---
384
+
385
+ ## Batch Processing Script
386
+
387
+ Convert an entire directory of images to optimized WebP and AVIF:
388
+
389
+ ```javascript
390
+ #!/usr/bin/env node
391
+ // batch-optimize.mjs — Convert all images in a directory
392
+ import sharp from 'sharp';
393
+ import fs from 'fs/promises';
394
+ import path from 'path';
395
+
396
+ const INPUT_DIR = process.argv[2] || './images';
397
+ const OUTPUT_DIR = process.argv[3] || './images/optimized';
398
+ const MAX_WIDTH = 1920;
399
+ const CONCURRENCY = 4; // Process 4 images simultaneously
400
+
401
+ const IMAGE_EXTENSIONS = new Set(['.jpg', '.jpeg', '.png', '.tiff', '.bmp', '.gif']);
402
+
403
+ async function optimizeImage(inputPath, outputDir) {
404
+ const baseName = path.parse(inputPath).name;
405
+ const pipeline = sharp(inputPath).rotate().withMetadata(false);
406
+ const meta = await pipeline.metadata();
407
+ const needsResize = meta.width > MAX_WIDTH;
408
+
409
+ const tasks = [
410
+ pipeline.clone()
411
+ .resize(needsResize ? { width: MAX_WIDTH } : undefined)
412
+ .webp({ quality: 80 })
413
+ .toFile(path.join(outputDir, `${baseName}.webp`)),
414
+ pipeline.clone()
415
+ .resize(needsResize ? { width: MAX_WIDTH } : undefined)
416
+ .avif({ quality: 65 })
417
+ .toFile(path.join(outputDir, `${baseName}.avif`)),
418
+ ];
419
+
420
+ const [webpResult, avifResult] = await Promise.all(tasks);
421
+ const originalSize = (await fs.stat(inputPath)).size;
422
+
423
+ return {
424
+ file: baseName,
425
+ original: `${(originalSize / 1024).toFixed(0)}KB`,
426
+ webp: `${(webpResult.size / 1024).toFixed(0)}KB (${((1 - webpResult.size / originalSize) * 100).toFixed(0)}% smaller)`,
427
+ avif: `${(avifResult.size / 1024).toFixed(0)}KB (${((1 - avifResult.size / originalSize) * 100).toFixed(0)}% smaller)`,
428
+ };
429
+ }
430
+
431
+ async function main() {
432
+ await fs.mkdir(OUTPUT_DIR, { recursive: true });
433
+
434
+ const files = (await fs.readdir(INPUT_DIR))
435
+ .filter(f => IMAGE_EXTENSIONS.has(path.extname(f).toLowerCase()));
436
+
437
+ console.log(`Processing ${files.length} images (concurrency: ${CONCURRENCY})...\n`);
438
+
439
+ // Process in batches to control memory
440
+ for (let i = 0; i < files.length; i += CONCURRENCY) {
441
+ const batch = files.slice(i, i + CONCURRENCY);
442
+ const results = await Promise.all(
443
+ batch.map(f => optimizeImage(path.join(INPUT_DIR, f), OUTPUT_DIR))
444
+ );
445
+ results.forEach(r => console.log(`${r.file}: ${r.original} -> WebP ${r.webp}, AVIF ${r.avif}`));
446
+ }
447
+
448
+ console.log('\nDone.');
449
+ }
450
+
451
+ main().catch(console.error);
452
+ ```
453
+
454
+ Run: `node batch-optimize.mjs ./photos ./photos/optimized`
455
+
456
+ ---
457
+
458
+ ## Performance Tips
459
+
460
+ ### Streaming vs Buffer
461
+
462
+ ```javascript
463
+ // BUFFER MODE — holds entire image in memory (simpler, fine for < 20MB)
464
+ const buffer = await sharp(inputBuffer)
465
+ .resize(800)
466
+ .webp()
467
+ .toBuffer();
468
+
469
+ // STREAMING MODE — lower memory for large images or high concurrency
470
+ import { createReadStream, createWriteStream } from 'fs';
471
+
472
+ const transform = sharp().resize(800).webp();
473
+ createReadStream('large-input.tiff')
474
+ .pipe(transform)
475
+ .pipe(createWriteStream('output.webp'));
476
+ ```
477
+
478
+ ### Sharp Concurrency Settings
479
+
480
+ ```javascript
481
+ import sharp from 'sharp';
482
+
483
+ // Default: uses all CPU cores for libvips thread pool
484
+ // In a web server with many concurrent requests, LOWER this to prevent thread contention
485
+ sharp.concurrency(2); // Use only 2 threads per Sharp operation
486
+
487
+ // Check current setting
488
+ console.log(sharp.concurrency()); // 2
489
+
490
+ // Guideline:
491
+ // - CLI batch script: sharp.concurrency(os.cpus().length) — use all cores
492
+ // - Web server (low traffic): sharp.concurrency(2)
493
+ // - Web server (high traffic): sharp.concurrency(1) — let Node handle parallelism
494
+ ```
495
+
496
+ ### Memory Management
497
+
498
+ ```javascript
499
+ // Sharp caches decoded images by default. In long-running servers, control the cache:
500
+ sharp.cache({ memory: 256, files: 20, items: 100 });
501
+
502
+ // Or disable caching entirely if each image is processed once
503
+ sharp.cache(false);
504
+
505
+ // Always handle pipeline errors to prevent memory leaks
506
+ try {
507
+ await sharp(input).resize(800).webp().toFile(output);
508
+ } catch (err) {
509
+ console.error(`Failed to process ${input}: ${err.message}`);
510
+ // Sharp cleans up internally on error, but log for monitoring
511
+ }
512
+
513
+ // For very large batches, process sequentially or in small batches
514
+ // to avoid opening hundreds of file descriptors simultaneously
515
+ ```
516
+
517
+ ---
518
+
519
+ ## Integration with Multer
520
+
521
+ Complete upload endpoint with Multer + Sharp processing:
522
+
523
+ ```javascript
524
+ import express from 'express';
525
+ import multer from 'multer';
526
+ import sharp from 'sharp';
527
+ import path from 'path';
528
+ import crypto from 'crypto';
529
+
530
+ const app = express();
531
+
532
+ // Store in memory buffer for Sharp processing (not disk)
533
+ const upload = multer({
534
+ storage: multer.memoryStorage(),
535
+ limits: {
536
+ fileSize: 10 * 1024 * 1024, // 10MB max
537
+ },
538
+ fileFilter: (req, file, cb) => {
539
+ const allowed = /^image\/(jpeg|png|webp|avif|gif|tiff)$/;
540
+ if (allowed.test(file.mimetype)) {
541
+ cb(null, true);
542
+ } else {
543
+ cb(new Error(`Unsupported image type: ${file.mimetype}`));
544
+ }
545
+ },
546
+ });
547
+
548
+ app.post('/api/upload', upload.single('image'), async (req, res) => {
549
+ if (!req.file) {
550
+ return res.status(400).json({ error: 'No image provided' });
551
+ }
552
+
553
+ try {
554
+ const id = crypto.randomUUID();
555
+ const outputDir = path.resolve(`./public/uploads/${id}`);
556
+ const { mkdir } = await import('fs/promises');
557
+ await mkdir(outputDir, { recursive: true });
558
+
559
+ const pipeline = sharp(req.file.buffer).rotate().withMetadata(false);
560
+ const meta = await pipeline.metadata();
561
+
562
+ // Generate thumbnail + main image in WebP
563
+ const [thumb, main] = await Promise.all([
564
+ pipeline.clone()
565
+ .resize(320, 320, { fit: 'cover', position: 'attention' })
566
+ .webp({ quality: 70 })
567
+ .toFile(path.join(outputDir, 'thumb.webp')),
568
+ pipeline.clone()
569
+ .resize({ width: Math.min(meta.width, 1920) })
570
+ .webp({ quality: 80 })
571
+ .toFile(path.join(outputDir, 'main.webp')),
572
+ ]);
573
+
574
+ res.json({
575
+ id,
576
+ original: {
577
+ width: meta.width,
578
+ height: meta.height,
579
+ format: meta.format,
580
+ size: req.file.size,
581
+ },
582
+ variants: {
583
+ thumb: { path: `/uploads/${id}/thumb.webp`, size: thumb.size },
584
+ main: { path: `/uploads/${id}/main.webp`, size: main.size },
585
+ },
586
+ });
587
+ } catch (err) {
588
+ res.status(500).json({ error: `Processing failed: ${err.message}` });
589
+ }
590
+ });
591
+
592
+ // Error handler for Multer errors
593
+ app.use((err, req, res, next) => {
594
+ if (err instanceof multer.MulterError) {
595
+ return res.status(400).json({ error: err.message });
596
+ }
597
+ if (err.message.startsWith('Unsupported image type')) {
598
+ return res.status(400).json({ error: err.message });
599
+ }
600
+ next(err);
601
+ });
602
+ ```
603
+
604
+ ---
605
+