@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,236 @@
1
+ # PyInstaller + CUDA/faster-whisper Bundling — Solution & Implementation
2
+
3
+ ## The Problem
4
+
5
+ Packaging a Python desktop app that uses **faster-whisper** (CTranslate2 backend with CUDA GPU acceleration) into a distributable Windows `.exe` via PyInstaller. The build either crashes at runtime with missing DLLs, fails to find the Whisper model, or silently falls back to CPU because CUDA libraries weren't bundled.
6
+
7
+ ### Why It Was Hard
8
+
9
+ - CTranslate2 ships CUDA/cuDNN DLLs as binary extensions that PyInstaller doesn't auto-detect
10
+ - `faster-whisper` has implicit imports PyInstaller's analysis misses
11
+ - `sounddevice` bundles PortAudio as data files, not standard Python imports
12
+ - `pynput`, `pystray`, and `keyboard` all have platform-specific backends (`_win32`) that need explicit hidden imports
13
+ - The `anthropic` SDK pulls in `httpx`/`httpcore`/`anyio` — deep async dependency chains
14
+ - `--onefile` mode is a trap: CUDA DLLs are 500MB+ and extract to temp on every launch
15
+
16
+ ### Impact
17
+
18
+ - App won't start (missing DLL errors)
19
+ - Whisper transcription fails or runs on CPU (10x slower) instead of GPU
20
+ - End users get cryptic `ModuleNotFoundError` at runtime
21
+ - Build appears to succeed but the exe is broken
22
+
23
+ ---
24
+
25
+ ## The Solution
26
+
27
+ ### Root Cause
28
+
29
+ PyInstaller's static analysis can't trace binary extensions loaded via `ctypes`, platform-dispatched backends (e.g., `pystray._win32`), or data files shipped alongside packages. You must explicitly collect these.
30
+
31
+ ### The Spec File Pattern
32
+
33
+ ```python
34
+ # -*- mode: python ; coding: utf-8 -*-
35
+ """PyInstaller spec for apps using faster-whisper with CUDA."""
36
+ from PyInstaller.utils.hooks import collect_data_files, collect_dynamic_libs
37
+
38
+ block_cipher = None
39
+
40
+ # KEY INSIGHT: collect_dynamic_libs grabs ALL .dll/.so from the package
41
+ # This catches CUDA, cuDNN, and CTranslate2 backend libraries
42
+ ctranslate2_binaries = collect_dynamic_libs('ctranslate2')
43
+
44
+ # sounddevice ships PortAudio as data files, not binaries
45
+ sounddevice_data = collect_data_files('sounddevice')
46
+
47
+ # faster-whisper may include tokenizer assets
48
+ faster_whisper_data = collect_data_files('faster_whisper')
49
+
50
+ a = Analysis(
51
+ ['src/your_app/__main__.py'],
52
+ binaries=ctranslate2_binaries,
53
+ datas=(
54
+ sounddevice_data
55
+ + faster_whisper_data
56
+ + [('assets', 'assets')] # your app's data files
57
+ ),
58
+ hiddenimports=[
59
+ # -- CUDA transcription backend --
60
+ 'ctranslate2',
61
+ 'faster_whisper',
62
+
63
+ # -- Audio --
64
+ 'sounddevice',
65
+ '_sounddevice_data',
66
+
67
+ # -- Global hotkeys (if using keyboard lib) --
68
+ 'keyboard',
69
+
70
+ # -- pynput (platform-specific backends) --
71
+ 'pynput.keyboard._win32',
72
+ 'pynput.mouse._win32',
73
+
74
+ # -- System tray (platform-specific) --
75
+ 'pystray._win32',
76
+
77
+ # -- Anthropic SDK + HTTP stack --
78
+ 'anthropic',
79
+ 'httpx', 'httpcore', 'h11',
80
+ 'sniffio', 'anyio', 'anyio._backends._asyncio',
81
+
82
+ # -- Config --
83
+ 'yaml',
84
+
85
+ # -- Image handling (Pillow, used by pystray) --
86
+ 'PIL', 'PIL.Image',
87
+
88
+ # -- GUI --
89
+ 'tkinter', 'tkinter.ttk', 'tkinter.font',
90
+ 'tkinter.scrolledtext', 'tkinter.messagebox',
91
+
92
+ # -- Other --
93
+ 'numpy', 'winsound', 'pyperclip',
94
+ ],
95
+ excludes=['pytest', 'setuptools', 'pip', 'wheel'],
96
+ cipher=block_cipher,
97
+ noarchive=False,
98
+ )
99
+
100
+ pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
101
+
102
+ # IMPORTANT: Use onedir, not onefile. CUDA DLLs are too large.
103
+ exe = EXE(
104
+ pyz, a.scripts, [],
105
+ exclude_binaries=True,
106
+ name='YourApp',
107
+ console=False, # GUI/tray app — no console window
108
+ upx=False, # Don't compress — CUDA DLLs don't compress well
109
+ )
110
+
111
+ coll = COLLECT(
112
+ exe, a.binaries, a.zipfiles, a.datas,
113
+ strip=False, upx=False,
114
+ name='YourApp',
115
+ )
116
+ ```
117
+
118
+ ### Critical Decisions Explained
119
+
120
+ | Decision | Why |
121
+ |----------|-----|
122
+ | `--onedir` not `--onefile` | CUDA DLLs are 500MB+. Onefile extracts to temp on every launch — 30s+ startup |
123
+ | `upx=False` | UPX breaks CUDA DLLs and provides minimal savings on binary extensions |
124
+ | `console=False` | Tray/GUI apps shouldn't show a console window |
125
+ | `collect_dynamic_libs('ctranslate2')` | The **key** line — grabs CUDA + cuDNN wrapper DLLs |
126
+ | `collect_data_files('sounddevice')` | PortAudio is shipped as data, not a Python import |
127
+ | Platform-specific hidden imports | `pystray._win32`, `pynput.keyboard._win32` — PyInstaller can't detect dispatch |
128
+
129
+ ### Frozen Mode Detection (for autostart, paths, etc.)
130
+
131
+ ```python
132
+ import sys
133
+
134
+ if getattr(sys, 'frozen', False):
135
+ # Running as PyInstaller bundle
136
+ app_dir = sys._MEIPASS # Extracted temp dir (onefile) or bundle dir (onedir)
137
+ exe_path = sys.executable # The actual .exe path
138
+ else:
139
+ # Running from source
140
+ app_dir = os.path.dirname(__file__)
141
+ exe_path = sys.executable # Python interpreter
142
+ ```
143
+
144
+ ### Build Script (Windows)
145
+
146
+ ```bat
147
+ @echo off
148
+ call .venv\Scripts\activate.bat
149
+ pip install pyinstaller>=6.0 >nul 2>&1
150
+ pyinstaller voice-bridge.spec --clean --noconfirm
151
+ ```
152
+
153
+ ---
154
+
155
+ ## Testing the Fix
156
+
157
+ ### Build Verification
158
+ ```bash
159
+ # Build completes without errors
160
+ pyinstaller your-app.spec --clean --noconfirm
161
+
162
+ # Output directory exists with exe + DLLs
163
+ dir dist\YourApp\YourApp.exe
164
+ dir dist\YourApp\*.dll | find /c ".dll" # Should show CUDA DLLs
165
+ ```
166
+
167
+ ### Runtime Verification
168
+ ```
169
+ 1. Launch dist\YourApp\YourApp.exe
170
+ 2. Verify tray icon appears (pystray works)
171
+ 3. Trigger audio recording (sounddevice works)
172
+ 4. Trigger transcription (faster-whisper + CUDA works)
173
+ 5. Check GPU is used: look for "Model loaded on cuda" in logs
174
+ ```
175
+
176
+ ### Common Runtime Errors and Fixes
177
+
178
+ | Error | Cause | Fix |
179
+ |-------|-------|-----|
180
+ | `ModuleNotFoundError: ctranslate2` | Missing hidden import | Add `'ctranslate2'` to hiddenimports |
181
+ | `Could not load library cudnn` | cuDNN DLLs not bundled | Verify `collect_dynamic_libs('ctranslate2')` is in binaries |
182
+ | `No module named 'pystray._win32'` | Platform backend not found | Add `'pystray._win32'` to hiddenimports |
183
+ | `PortAudio not found` | sounddevice data not bundled | Add `collect_data_files('sounddevice')` to datas |
184
+ | `httpcore not found` | anthropic SDK dependency chain | Add `'httpx', 'httpcore', 'h11'` to hiddenimports |
185
+ | App starts but GPU not used | CUDA DLLs missing at runtime | Check `dist/YourApp/` for `cublas*.dll`, `cudnn*.dll` |
186
+
187
+ ---
188
+
189
+ ## Prevention
190
+
191
+ 1. **Always use `collect_dynamic_libs`** for packages with native extensions (ctranslate2, torch, onnxruntime)
192
+ 2. **Always use `collect_data_files`** for packages that ship non-Python data (sounddevice, transformers)
193
+ 3. **Test the frozen build immediately** — don't assume build success = runtime success
194
+ 4. **Log which device** your ML model loads on (cuda vs cpu) so you can catch silent fallbacks
195
+ 5. **Use `--onedir`** for CUDA apps — `--onefile` is a trap
196
+
197
+ ---
198
+
199
+ ## Related Patterns
200
+
201
+ - GPU fallback pattern: try CUDA, catch exception, fall back to CPU with logging
202
+ - Frozen path detection: `getattr(sys, 'frozen', False)` for all path-dependent code
203
+ - Windows autostart with registry: different commands for frozen vs source
204
+
205
+ ---
206
+
207
+ ## Common Mistakes to Avoid
208
+
209
+ - Using `--onefile` with CUDA libraries (30s+ startup, temp extraction issues)
210
+ - Forgetting platform-specific backends (pystray, pynput on Windows)
211
+ - Not testing the actual .exe (build succeeding doesn't mean runtime works)
212
+ - Using `upx=True` which breaks CUDA DLLs
213
+ - Assuming PyInstaller traces `ctypes.cdll.LoadLibrary` calls (it doesn't)
214
+
215
+ ---
216
+
217
+ ## Resources
218
+
219
+ - [PyInstaller hooks documentation](https://pyinstaller.org/en/stable/hooks.html)
220
+ - [faster-whisper GitHub](https://github.com/SYSTRAN/faster-whisper)
221
+ - [CTranslate2 packaging](https://github.com/OpenNMT/CTranslate2)
222
+
223
+ ---
224
+
225
+ ## Time to Implement
226
+
227
+ **30-60 minutes** for initial spec file creation and testing. Most time spent on iterating hidden imports after runtime errors.
228
+
229
+ ## Difficulty Level
230
+
231
+ Stars: 4/5 — Requires understanding of PyInstaller internals, CUDA library loading, and platform-specific Python package dispatch. Hard to debug because errors only appear at runtime in the frozen build.
232
+
233
+ ---
234
+
235
+ **Author Notes:**
236
+ The #1 insight: `collect_dynamic_libs('ctranslate2')` is the magic line. Without it, you get a build that succeeds but an exe that crashes. The second insight: always use `--onedir` for ML/CUDA apps. The `--onefile` mode is tempting but creates a terrible user experience with multi-hundred-MB temp extractions on every launch.
@@ -0,0 +1,41 @@
1
+ <!-- BEGIN MICROSOFT SECURITY.MD V0.0.7 BLOCK -->
2
+
3
+ ## Security
4
+
5
+ Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/).
6
+
7
+ If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://aka.ms/opensource/security/definition), please report it to us as described below.
8
+
9
+ ## Reporting Security Issues
10
+
11
+ **Please do not report security vulnerabilities through public GitHub issues.**
12
+
13
+ Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://aka.ms/opensource/security/create-report).
14
+
15
+ If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://aka.ms/opensource/security/pgpkey).
16
+
17
+ You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://aka.ms/opensource/security/msrc).
18
+
19
+ Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue:
20
+
21
+ * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.)
22
+ * Full paths of source file(s) related to the manifestation of the issue
23
+ * The location of the affected source code (tag/branch/commit or direct URL)
24
+ * Any special configuration required to reproduce the issue
25
+ * Step-by-step instructions to reproduce the issue
26
+ * Proof-of-concept or exploit code (if possible)
27
+ * Impact of the issue, including how an attacker might exploit the issue
28
+
29
+ This information will help us triage your report more quickly.
30
+
31
+ If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://aka.ms/opensource/security/bounty) page for more details about our active programs.
32
+
33
+ ## Preferred Languages
34
+
35
+ We prefer all communications to be in English.
36
+
37
+ ## Policy
38
+
39
+ Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://aka.ms/opensource/security/cvd).
40
+
41
+ <!-- END MICROSOFT SECURITY.MD BLOCK -->
@@ -0,0 +1,220 @@
1
+ # SMTP SSL Certificate Hostname Mismatch on Shared Hosting - Solution
2
+
3
+ ## The Problem
4
+
5
+ When sending emails (e.g., verification emails) from a Node.js application on shared hosting, you get an SSL certificate error:
6
+
7
+ ```
8
+ Hostname/IP does not match certificate's altnames:
9
+ Host: mail.yourdomain.com. is not in the cert's altnames:
10
+ DNS:autoconfig.server1.hostingprovider.com,
11
+ DNS:mail.server1.hostingprovider.com,
12
+ DNS:server1.hostingprovider.com,
13
+ ...
14
+ ```
15
+
16
+ ### Why It Was Hard
17
+
18
+ - The error message is confusing - it lists hostnames that ARE valid, not what's wrong
19
+ - Many developers assume they need to disable SSL entirely (insecure)
20
+ - The `rejectUnauthorized: false` setting doesn't always work as expected
21
+ - Understanding shared hosting SSL certificate architecture isn't obvious
22
+ - Multiple potential solutions exist, unclear which is best
23
+
24
+ ### Impact
25
+
26
+ - Email verification fails for new users
27
+ - Password reset emails don't send
28
+ - Any transactional email fails
29
+ - Users cannot complete registration/enrollment flows
30
+
31
+ ---
32
+
33
+ ## The Solution
34
+
35
+ ### Root Cause
36
+
37
+ On shared hosting, your mail subdomain `mail.yourdomain.com` is a DNS alias pointing to the hosting provider's actual mail server (e.g., `mail.server1.hostingprovider.com`).
38
+
39
+ The SSL certificate on that server covers the **provider's hostnames**, not your domain's hostname. When nodemailer connects to `mail.yourdomain.com`, SSL verification fails because that hostname isn't in the certificate.
40
+
41
+ ### Two Solutions
42
+
43
+ #### Option A: Use the Provider's Mail Server Hostname (Quick Fix)
44
+
45
+ Change your `EMAIL_HOST` environment variable to use the hostname that's actually in the certificate:
46
+
47
+ ```bash
48
+ # Instead of:
49
+ EMAIL_HOST=mail.yourdomain.com
50
+
51
+ # Use:
52
+ EMAIL_HOST=mail.server1.hostingprovider.com
53
+ ```
54
+
55
+ **How to find the correct hostname:**
56
+ Look at the error message - it lists all valid hostnames. Find the one that starts with `mail.` (e.g., `mail.server1.hostingprovider.com`).
57
+
58
+ **Why this works:**
59
+ - You connect to the hostname that matches the certificate (SSL passes)
60
+ - You still authenticate with your email credentials (`user@yourdomain.com`)
61
+ - Emails are still sent FROM your domain (controlled by `EMAIL_FROM`)
62
+ - Recipients see your domain, not the provider's
63
+
64
+ #### Option B: Install SSL Certificate for Your Mail Subdomain (Proper Fix)
65
+
66
+ Get an SSL certificate that covers `mail.yourdomain.com`:
67
+
68
+ 1. **In cPanel:** Go to SSL/TLS Status or AutoSSL
69
+ 2. **Find your mail subdomain** in the list
70
+ 3. **Issue/install a certificate** for `mail.yourdomain.com`
71
+ 4. After installation, keep `EMAIL_HOST=mail.yourdomain.com`
72
+
73
+ This is cleaner but requires:
74
+ - Purchasing or provisioning an SSL cert
75
+ - Access to cPanel/hosting control panel
76
+ - Waiting for cert issuance (can take minutes to hours)
77
+
78
+ ---
79
+
80
+ ## Code Implementation
81
+
82
+ ### Nodemailer Configuration with TLS Fallback
83
+
84
+ ```javascript
85
+ // server/config/email.js
86
+ import nodemailer from 'nodemailer';
87
+
88
+ const createTransporter = () => {
89
+ const config = {
90
+ host: process.env.EMAIL_HOST,
91
+ port: parseInt(process.env.EMAIL_PORT || '465'),
92
+ secure: process.env.EMAIL_PORT === '465',
93
+ auth: {
94
+ user: process.env.EMAIL_USER,
95
+ pass: process.env.EMAIL_PASSWORD
96
+ }
97
+ };
98
+
99
+ // Allow hostname-mismatched certs for shared hosting
100
+ // Set EMAIL_TLS_REJECT_UNAUTHORIZED=false to enable this
101
+ const rejectUnauthorized = process.env.EMAIL_TLS_REJECT_UNAUTHORIZED !== 'false';
102
+
103
+ config.tls = {
104
+ rejectUnauthorized,
105
+ };
106
+
107
+ return nodemailer.createTransport(config);
108
+ };
109
+ ```
110
+
111
+ ### Environment Variables
112
+
113
+ ```bash
114
+ # .env file
115
+
116
+ # Option A: Use provider's hostname (recommended for shared hosting)
117
+ EMAIL_HOST=mail.server1.hostingprovider.com
118
+ EMAIL_PORT=465
119
+ EMAIL_USER=noreply@yourdomain.com
120
+ EMAIL_PASSWORD=your-email-password
121
+ EMAIL_FROM="Your App <noreply@yourdomain.com>"
122
+
123
+ # Optional: Disable TLS verification (less secure fallback)
124
+ # Only use if Option A doesn't work
125
+ EMAIL_TLS_REJECT_UNAUTHORIZED=false
126
+ ```
127
+
128
+ ---
129
+
130
+ ## Testing the Fix
131
+
132
+ ### Before Fix
133
+ ```
134
+ Error: Hostname/IP does not match certificate's altnames
135
+ Email sending: FAILED
136
+ ```
137
+
138
+ ### After Fix (Option A)
139
+ ```
140
+ [EmailService] Connecting to mail.server1.hostingprovider.com:465
141
+ [EmailService] Email sent successfully: <message-id@yourdomain.com>
142
+ Email sending: SUCCESS
143
+ ```
144
+
145
+ ### Verification Steps
146
+
147
+ 1. SSH into server
148
+ 2. Update `.env` with new `EMAIL_HOST`
149
+ 3. Restart application: `pm2 restart all`
150
+ 4. Test email sending (e.g., trigger verification email)
151
+ 5. Check logs for success message
152
+
153
+ ---
154
+
155
+ ## Prevention
156
+
157
+ 1. **Document your hosting's mail server hostname** - Keep it in deployment docs
158
+ 2. **Use environment variables** - Never hardcode mail server hostnames
159
+ 3. **Add TLS fallback option** - Include `EMAIL_TLS_REJECT_UNAUTHORIZED` in your config
160
+ 4. **Test email in staging** - Before deploying to production
161
+
162
+ ---
163
+
164
+ ## Related Patterns
165
+
166
+ - [env-file-management-production-local.md](./env-file-management-production-local.md) - Environment variable management
167
+ - [deployment-changes-not-applying.md](./deployment-changes-not-applying.md) - Debugging deployment issues
168
+
169
+ ---
170
+
171
+ ## Common Mistakes to Avoid
172
+
173
+ - **Setting `rejectUnauthorized: false` blindly** - This disables ALL certificate verification. Use Option A instead.
174
+ - **Assuming your domain has its own mail cert** - On shared hosting, it usually doesn't.
175
+ - **Not restarting PM2 after .env changes** - PM2 caches environment variables.
176
+ - **Using `pm2 restart` instead of `pm2 delete && pm2 start`** - Sometimes restart doesn't reload env vars.
177
+
178
+ ---
179
+
180
+ ## Hosting Provider Examples
181
+
182
+ | Provider | Typical Mail Hostname |
183
+ |----------|----------------------|
184
+ | cPanel shared | `mail.serverX.provider.com` |
185
+ | Hostinger | `smtp.hostinger.com` |
186
+ | Bluehost | `mail.yourdomain.com` (usually has cert) |
187
+ | GoDaddy | `smtpout.secureserver.net` |
188
+ | SiteGround | `mail.yourdomain.com` (usually has cert) |
189
+
190
+ **Always check the error message** - it tells you exactly which hostnames are valid.
191
+
192
+ ---
193
+
194
+ ## Resources
195
+
196
+ - [Nodemailer TLS Options](https://nodemailer.com/smtp/#tls-options)
197
+ - [Let's Encrypt for cPanel](https://docs.cpanel.net/knowledge-base/security/ssl-tls/)
198
+ - [Understanding SSL Certificate SANs](https://www.ssl.com/faqs/what-is-a-san-certificate/)
199
+
200
+ ---
201
+
202
+ ## Time to Implement
203
+
204
+ **Option A:** 5 minutes (just change env var)
205
+ **Option B:** 15-60 minutes (depends on SSL provisioning time)
206
+
207
+ ## Difficulty Level
208
+
209
+ **Diagnosis:** 3/5 - Error message is confusing
210
+ **Fix:** 1/5 - Just an env var change once you understand the issue
211
+
212
+ ---
213
+
214
+ **Author Notes:**
215
+
216
+ This issue is extremely common on shared hosting but poorly documented. The key insight is understanding that `mail.yourdomain.com` is just a DNS alias - the actual server uses the hosting provider's certificate.
217
+
218
+ The error message actually gives you the solution - it lists all the valid hostnames. Look for the one starting with `mail.` and use that as your `EMAIL_HOST`.
219
+
220
+ Don't waste time trying to make `rejectUnauthorized: false` work. Just use the correct hostname. It's simpler, more secure, and works reliably.
@@ -0,0 +1,200 @@
1
+ # React SPA SEO Optimization on cPanel Shared Hosting
2
+
3
+ ## The Problem
4
+
5
+ Client-side React SPAs render zero content for search engine crawlers. Google sees:
6
+ - Title: "Loading..." or generic title
7
+ - Content: 0 words, 0 headings, 0 links
8
+ - No structured data, no OG tags, no sitemap
9
+
10
+ This results in Grade F (40-50/100) on SEO audits.
11
+
12
+ ### Why It Was Hard
13
+
14
+ - SPA architecture fundamentally conflicts with SEO — content is JavaScript-rendered
15
+ - cPanel shared hosting with nginx reverse proxy adds complexity for security headers
16
+ - `.htaccess` rules must coexist with WebSocket proxy, API proxy, and PHP handler rules
17
+ - `cp -rf dist/*` during deployment silently skips dotfiles (`.htaccess`)
18
+ - No SSR/pre-rendering infrastructure available on shared hosting
19
+
20
+ ### Impact
21
+
22
+ - Zero Google visibility — site effectively invisible to search engines
23
+ - No rich results (missing structured data)
24
+ - No social sharing previews (missing OG tags)
25
+ - Security headers only on API routes (Express/Helmet), not on static files
26
+
27
+ ---
28
+
29
+ ## The Solution
30
+
31
+ ### Strategy: Quick Wins Without SSR
32
+
33
+ Instead of adding SSR infrastructure, use these techniques to go from Grade F → Grade C:
34
+
35
+ 1. **Static SEO in `index.html`** — title, description, canonical, OG tags, JSON-LD
36
+ 2. **`<noscript>` fallback** — crawlable HTML with nav, content sections, footer
37
+ 3. **Visible SEO footer** — privacy/legal links outside `<noscript>` (hidden by React on mount)
38
+ 4. **Static `sitemap.xml`** — list all public routes for crawler discovery
39
+ 5. **`.htaccess` security headers** — CSP, HSTS, X-Frame-Options for Apache-served files
40
+ 6. **CSP `<meta http-equiv>` fallback** — browsers honor CSP via meta tag
41
+ 7. **Vite code splitting** — `manualChunks` to reduce main bundle size
42
+
43
+ ### Implementation
44
+
45
+ #### 1. index.html — Complete SEO Head
46
+
47
+ ```html
48
+ <head>
49
+ <title>Site Name - Description (under 60 chars)</title>
50
+ <meta name="description" content="Under 160 chars..." />
51
+ <link rel="canonical" href="https://yoursite.com/" />
52
+
53
+ <!-- Robot Control -->
54
+ <meta name="robots" content="index, follow, noarchive, nocache, noimageindex" />
55
+
56
+ <!-- CSP meta fallback (for static hosting without HTTP header control) -->
57
+ <meta http-equiv="Content-Security-Policy" content="default-src 'self'; ..." />
58
+
59
+ <!-- Open Graph -->
60
+ <meta property="og:type" content="website" />
61
+ <meta property="og:title" content="..." />
62
+ <meta property="og:image" content="https://yoursite.com/og-image.jpg" />
63
+
64
+ <!-- JSON-LD Structured Data -->
65
+ <script type="application/ld+json">
66
+ { "@context": "https://schema.org", "@type": "EducationalOrganization", ... }
67
+ </script>
68
+ </head>
69
+ ```
70
+
71
+ #### 2. Noscript Fallback + SEO Footer
72
+
73
+ ```html
74
+ <body>
75
+ <div id="root"></div>
76
+
77
+ <!-- Visible to crawlers, removed by React on mount -->
78
+ <footer id="seo-footer" class="text-xs text-gray-500 text-center p-4">
79
+ <a href="/privacy">Privacy Policy</a> |
80
+ <a href="/terms">Terms of Service</a>
81
+ </footer>
82
+
83
+ <noscript>
84
+ <header><h1>Site Title</h1></header>
85
+ <nav><ul><!-- all public page links --></ul></nav>
86
+ <main><!-- content sections --></main>
87
+ <footer><!-- legal links --></footer>
88
+ </noscript>
89
+ </body>
90
+ ```
91
+
92
+ In main.jsx, remove the SEO footer when React loads:
93
+ ```javascript
94
+ const seoFooter = document.getElementById('seo-footer');
95
+ if (seoFooter) seoFooter.remove();
96
+ ```
97
+
98
+ #### 3. .htaccess — Merged Configuration
99
+
100
+ **CRITICAL:** On cPanel, `.htaccess` likely already has WebSocket proxy, API proxy, and PHP handler rules. **Never overwrite** — always merge.
101
+
102
+ ```apache
103
+ # Security Headers (add BEFORE existing rules)
104
+ <IfModule mod_headers.c>
105
+ Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
106
+ Header always set X-Frame-Options "SAMEORIGIN"
107
+ Header always set X-Content-Type-Options "nosniff"
108
+ Header always set Content-Security-Policy "default-src 'self'; ..."
109
+ </IfModule>
110
+
111
+ # KEEP EXISTING: WebSocket proxy, API proxy, SPA routing, PHP handler
112
+ ```
113
+
114
+ #### 4. Deploy Script Fix
115
+
116
+ Bash `cp -rf dist/*` skips dotfiles. Add explicit copy:
117
+
118
+ ```bash
119
+ cp -rf client/dist/* ~/public_html/
120
+ cp -f client/dist/.htaccess ~/public_html/.htaccess 2>/dev/null || true
121
+ ```
122
+
123
+ #### 5. Vite Code Splitting
124
+
125
+ ```javascript
126
+ // vite.config.js
127
+ rollupOptions: {
128
+ output: {
129
+ manualChunks: {
130
+ 'vendor-react': ['react', 'react-dom', 'react-router-dom'],
131
+ 'vendor-redux': ['@reduxjs/toolkit', 'react-redux'],
132
+ 'vendor-ui': ['@headlessui/react', 'lucide-react'],
133
+ }
134
+ }
135
+ }
136
+ ```
137
+
138
+ ---
139
+
140
+ ## Results
141
+
142
+ | Metric | Before | After | Change |
143
+ |--------|--------|-------|--------|
144
+ | Overall Score | 47 (F) | 73 (C) | +26 |
145
+ | Security | 64 | 97 | +33 |
146
+ | Legal Compliance | -- | 100 | +100 |
147
+ | Structured Data | 0 | 100 | +100 |
148
+ | Social Media | 0 | 100 | +100 |
149
+ | Content | 0 | 75 | +75 |
150
+ | Crawlability | 50 | 95 | +45 |
151
+ | Core SEO | 43 | 81 | +38 |
152
+
153
+ ---
154
+
155
+ ## Common Mistakes to Avoid
156
+
157
+ - ❌ **Overwriting production `.htaccess`** — always SSH and check existing rules first
158
+ - ❌ **Using `/privacy-policy` when React route is `/privacy`** — verify actual route names
159
+ - ❌ **Relying on `.htaccess` alone for security** — nginx may bypass Apache; add CSP meta tag as fallback
160
+ - ❌ **Forgetting dotfile copy in deploy scripts** — `cp dist/*` skips `.htaccess`
161
+ - ❌ **Adding `noimageindex` without understanding impact** — blocks ALL image indexing, OG images still work for social sharing
162
+ - ❌ **Setting `nofollow` in robots meta** — blocks Google from following ANY links on the page
163
+
164
+ ## Content Protection Without Hurting SEO
165
+
166
+ - `noarchive` — prevents cached copies (Google Cache)
167
+ - `nocache` — prevents snippet caching
168
+ - `noimageindex` — blocks image search indexing (OG images still work)
169
+ - robots.txt AI bot blocks (GPTBot, ClaudeBot, etc.) — prevents AI training
170
+ - `nofollow` in robots meta is **NOT** for content protection — it kills SEO
171
+
172
+ ---
173
+
174
+ ## Tools
175
+
176
+ - **squirrelscan CLI** — `squirrel audit <url> --format llm --coverage surface`
177
+ - Install: https://squirrelscan.com/download
178
+ - Use `--refresh` flag to bypass cache after changes
179
+
180
+ ## Remaining Limitations (Require SSR)
181
+
182
+ - Duplicate titles across all pages (SPA serves same index.html)
183
+ - Thin content (noscript provides ~130 words, not full page content)
184
+ - No per-page meta descriptions
185
+ - To reach Grade A (90+), need SSR (Next.js) or pre-rendering
186
+
187
+ ---
188
+
189
+ ## Time to Implement
190
+
191
+ **1-2 hours** for all quick wins (no SSR)
192
+
193
+ ## Difficulty Level
194
+
195
+ ⭐⭐⭐ (3/5) — Conceptually simple but many gotchas with cPanel/nginx/.htaccess
196
+
197
+ ---
198
+
199
+ **Author Notes:**
200
+ The biggest insight was that cPanel shared hosting uses nginx as a reverse proxy in front of Apache. The `.htaccess` IS processed (Apache handles it), but you have to actually get the file deployed. The `cp dist/*` glob silently skipping dotfiles cost us an entire debug cycle. Also, always SSH and check the existing `.htaccess` before deploying — it likely has critical proxy rules you don't want to overwrite.