@thierrynakoa/fire-flow 12.2.2 → 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 (501) hide show
  1. package/CREDITS.md +25 -0
  2. package/DOMINION-FLOW-OVERVIEW.md +182 -38
  3. package/README.md +399 -690
  4. package/TROUBLESHOOTING.md +264 -367
  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-verify-uat.md +9 -177
  52. package/commands/fire-vuln-scan.md +492 -493
  53. package/hooks/run-hook.sh +8 -8
  54. package/hooks/run-session-end.sh +7 -7
  55. package/hooks/session-end.sh +90 -90
  56. package/hooks/session-start.sh +1 -1
  57. package/package.json +4 -25
  58. package/plugin.json +7 -7
  59. package/references/autonomy-levels.md +235 -0
  60. package/references/behavioral-directives.md +95 -3
  61. package/references/blocker-tracking.md +1 -1
  62. package/references/circuit-breaker.md +93 -2
  63. package/references/context-engineering.md +227 -9
  64. package/references/honesty-protocols.md +70 -1
  65. package/references/issue-to-pr-pipeline.md +149 -150
  66. package/references/metrics-and-trends.md +1 -2
  67. package/references/research-improvements.md +4 -108
  68. package/references/sdlc-mapping.md +73 -0
  69. package/references/state-machine.md +151 -0
  70. package/skills-library/AVAILABLE_TOOLS_REFERENCE.md +333 -0
  71. package/skills-library/SKILLS-INDEX.md +57 -558
  72. package/skills-library/SKILLS_LIBRARY_INDEX.md +532 -0
  73. package/skills-library/_general/api-patterns/api-field-name-mismatch.md +107 -0
  74. package/skills-library/_general/api-patterns/streaming-command-timeout.md +122 -0
  75. package/skills-library/_general/api-patterns/streaming-proxy-cors-bypass.md +102 -0
  76. package/skills-library/_general/automation/settings-gui-generator.md +172 -0
  77. package/skills-library/_general/database-solutions/data-type-mapping-reference.md +181 -0
  78. package/skills-library/_general/database-solutions/mysql-limit-offset-string-coercion.md +102 -0
  79. package/skills-library/_general/database-solutions/mysql-to-pg-migration.md +195 -0
  80. package/skills-library/_general/database-solutions/orm-schema-portability.md +193 -0
  81. package/skills-library/_general/database-solutions/persistent-analysis-storage.md +207 -0
  82. package/skills-library/_general/database-solutions/pg-to-mysql-schema-migration-methodology.md +190 -0
  83. package/skills-library/_general/database-solutions/sql-dialect-compatibility-matrix.md +306 -0
  84. package/skills-library/_general/database-solutions/sqlite-to-pg-migration.md +219 -0
  85. package/skills-library/_general/frontend/canvas-bubble-animation-grouping.md +270 -0
  86. package/skills-library/_general/frontend/color-token-migration.md +112 -0
  87. package/skills-library/_general/frontend/framer-motion-layoutid-grouping.md +150 -0
  88. package/skills-library/_general/frontend/pyqt6-settings-dialog.md +191 -0
  89. package/skills-library/_general/frontend/react-flow-animated-layout-switching.md +101 -0
  90. package/skills-library/_general/frontend/react-hooks-order-debugging.md +141 -0
  91. package/skills-library/_general/frontend/redux-localstorage-auth-desync.md +126 -0
  92. package/skills-library/_general/frontend/safari-csp-theme-color-debugging.md +124 -0
  93. package/skills-library/_general/frontend/safari-sw-cache-poisoning.md +138 -0
  94. package/skills-library/_general/frontend/svg-sparkline-no-charting-library.md +131 -0
  95. package/skills-library/_general/growth-marketing/oss-daily-growth-intelligence.md +224 -0
  96. package/skills-library/_general/integrations/claude-code-local-mcp-integration.md +250 -0
  97. package/skills-library/_general/integrations/mcp-composite-tool-orchestration.md +200 -0
  98. package/skills-library/_general/methodology/AGENT_SDK_STANDALONE_TOOLING.md +181 -0
  99. package/skills-library/_general/methodology/AGENT_TEAMS_GUIDE.md +169 -0
  100. package/skills-library/_general/methodology/ALAS_STATEFUL_EXECUTION.md +207 -0
  101. package/skills-library/_general/methodology/AUTO_REVIEWER_SUBAGENT.md +211 -0
  102. package/skills-library/_general/methodology/CONSISTENCY_CHECK_AMBIGUITY_GATE.md +96 -0
  103. package/skills-library/_general/methodology/DEAD_ENDS_SHELF.md +4 -4
  104. package/skills-library/_general/methodology/DISTILL_NOT_DUMP.md +108 -0
  105. package/skills-library/_general/methodology/EXECUTION_PROGRESS_MONITOR.md +157 -0
  106. package/skills-library/_general/methodology/HIERARCHICAL_REVIEW_MARS.md +122 -0
  107. package/skills-library/_general/methodology/MCP_INTER_AGENT_BRIDGE.md +207 -0
  108. package/skills-library/_general/methodology/MERMAID_WIZARD_DIAGRAMS.md +77 -0
  109. package/skills-library/_general/methodology/MISSING_DIMENSION_DETECTOR.md +89 -0
  110. package/skills-library/_general/methodology/MULTI_AGENT_COORDINATION.md +397 -0
  111. package/skills-library/_general/methodology/OBSERVATION_MASKING.md +100 -0
  112. package/skills-library/_general/methodology/PHOENIX_REBUILD_METHODOLOGY.md +82 -11
  113. package/skills-library/_general/methodology/REVIEW_BACKTRACK_PANEL.md +140 -0
  114. package/skills-library/_general/methodology/REVIEW_FIX_LOOP.md +117 -0
  115. package/skills-library/_general/methodology/VOTING_VERDICT_ARBITRATION.md +155 -0
  116. package/skills-library/_general/methodology/ZERO_FRICTION_CLI_SETUP.md +2 -2
  117. package/skills-library/_general/methodology/dead-code-activation.md +123 -0
  118. package/skills-library/_general/methodology/debug-swarm-researcher-escape-hatch.md +240 -240
  119. package/skills-library/_general/methodology/shell-autonomous-loop-fixplan.md +1 -1
  120. package/skills-library/_general/patterns-standards/GOF_DESIGN_PATTERNS_FOR_AI_AGENTS.md +5 -5
  121. package/skills-library/_general/patterns-standards/cascading-failure-diagnosis.md +119 -0
  122. package/skills-library/_general/patterns-standards/domain-specific-layout-algorithms.md +209 -0
  123. package/skills-library/_general/patterns-standards/python-desktop-app-architecture.md +399 -0
  124. package/skills-library/_general/patterns-standards/realtime-monitoring-dashboard.md +457 -0
  125. package/skills-library/_general/patterns-standards/togglable-processing-pipeline.md +169 -0
  126. package/skills-library/_general/performance/liveclock-extraction.md +112 -0
  127. package/skills-library/_general/performance/ref-based-canvas-animation.md +117 -0
  128. package/skills-library/_general/performance/use-visible-interval.md +131 -0
  129. package/skills-library/_general/testing/playwright-firefox-withcredentials-auth-issue.md +104 -0
  130. package/skills-library/_quarantine/README.md +30 -0
  131. package/skills-library/api-patterns/BROADCAST_SCHEDULER_SHARED_EXECUTE_FUNCTION.md +150 -0
  132. package/skills-library/api-patterns/ERROR_RESPONSE_STANDARDS.md +145 -0
  133. package/skills-library/api-patterns/EXPRESS_ROUTE_ORDERING_MIDDLEWARE_INTERCEPTION.md +326 -0
  134. package/skills-library/api-patterns/PAGINATION_PATTERNS.md +137 -0
  135. package/skills-library/api-patterns/PODCAST_PROGRESS_TRACKING_THREE_ROOT_CAUSES.md +277 -0
  136. package/skills-library/api-patterns/RATE_LIMITING_TOGGLE.md +155 -0
  137. package/skills-library/api-patterns/graphql-content-queries.md +708 -0
  138. package/skills-library/appointment-scheduler-design.md +423 -0
  139. package/skills-library/automation/AUTO_POPULATE_COMPLETE_GUIDE.md +631 -0
  140. package/skills-library/automation/CC_WORKFLOW_STUDIO.md +83 -0
  141. package/skills-library/automation/CLAUDE_CODE_SWARM_MODE.md +95 -0
  142. package/skills-library/automation/DAEMON_TRIGGER_FILE_IPC.md +195 -0
  143. package/skills-library/automation/scheduled-content-publishing.md +608 -0
  144. package/skills-library/awesome-workflows/Blogging-Platform-Instructions/view_commands.md +25 -0
  145. package/skills-library/awesome-workflows/CREDENTIAL-SECURITY-WORKFLOW.md +109 -0
  146. package/skills-library/awesome-workflows/DEBUGGING-WORKFLOW.md +124 -0
  147. package/skills-library/awesome-workflows/Design-Review-Workflow/README.md +31 -0
  148. package/skills-library/awesome-workflows/Design-Review-Workflow/design-principles-example.md +129 -0
  149. package/skills-library/awesome-workflows/Design-Review-Workflow/design-review-agent.md +107 -0
  150. package/skills-library/awesome-workflows/Design-Review-Workflow/design-review-claude-md-snippet.md +24 -0
  151. package/skills-library/awesome-workflows/Design-Review-Workflow/design-review-slash-command.md +38 -0
  152. package/skills-library/awesome-workflows/PARALLEL-RESEARCH-WORKFLOW.md +89 -0
  153. package/skills-library/awesome-workflows/PHASE-EXECUTION-WORKFLOW.md +97 -0
  154. package/skills-library/awesome-workflows/SESSION-HANDOFF-WORKFLOW.md +116 -0
  155. package/skills-library/cms-patterns/content-branch-preview.md +515 -0
  156. package/skills-library/cms-patterns/inline-visual-editing.md +666 -0
  157. package/skills-library/cms-patterns/mdx-component-content.md +649 -0
  158. package/skills-library/cms-patterns/media-manager-abstraction.md +827 -0
  159. package/skills-library/cms-patterns/schema-driven-form-generator.md +838 -0
  160. package/skills-library/complexity-metrics/complexity-divider.md +707 -0
  161. package/skills-library/complexity-metrics/work-with-complexity.md +193 -0
  162. package/skills-library/creative-multimedia/animation-stack-guide.md +577 -0
  163. package/skills-library/creative-multimedia/audio-enhancement-pipeline.md +625 -0
  164. package/skills-library/creative-multimedia/content-repurposing-pipeline.md +1146 -0
  165. package/skills-library/creative-multimedia/data-visualization-generator.md +862 -0
  166. package/skills-library/creative-multimedia/doc-to-podcast-pipeline.md +2184 -0
  167. package/skills-library/creative-multimedia/ffmpeg-command-generator.md +405 -0
  168. package/skills-library/creative-multimedia/image-optimization-pipeline.md +605 -0
  169. package/skills-library/creative-multimedia/multi-format-content-generator.md +1759 -0
  170. package/skills-library/creative-multimedia/og-image-generator.md +635 -0
  171. package/skills-library/creative-multimedia/podcast-audio-composition.md +1355 -0
  172. package/skills-library/creative-multimedia/podcast-quality-evaluation.md +1452 -0
  173. package/skills-library/creative-multimedia/podcast-script-generation.md +1841 -0
  174. package/skills-library/creative-multimedia/svg-generation.md +750 -0
  175. package/skills-library/creative-multimedia/text-to-speech-provider-selector.md +1414 -0
  176. package/skills-library/creative-multimedia/transcription-pipeline-selector.md +677 -0
  177. package/skills-library/creative-multimedia/video-streaming-setup.md +559 -0
  178. package/skills-library/database-solutions/AI_RESPONSE_DATABASE_CACHING.md +520 -0
  179. package/skills-library/database-solutions/CONDITIONAL_SQL_MIGRATION_PATTERN.md +119 -0
  180. package/skills-library/database-solutions/DATABASE_COLUMN_NAME_MISMATCH.md +393 -0
  181. package/skills-library/database-solutions/DATABASE_SCHEMA.md +394 -0
  182. package/skills-library/database-solutions/DATABASE_SCHEMA_VERIFICATION_GUIDE.md +348 -0
  183. package/skills-library/database-solutions/DATABASE_STRATEGY.md +71 -0
  184. package/skills-library/database-solutions/ES_MODULE_SEED_SCRIPT_PATTERN.md +52 -0
  185. package/skills-library/database-solutions/MIGRATION_GUIDE.md +3 -0
  186. package/skills-library/database-solutions/PLPGSQL_VARIABLE_CONFLICT_FIX.md +208 -0
  187. package/skills-library/database-solutions/POSTGRESQL_JSONB_DOUBLE_STRINGIFY_FIX.md +245 -0
  188. package/skills-library/database-solutions/POSTGRESQL_LICENSE_TABLE_DESIGN.md +393 -0
  189. package/skills-library/database-solutions/POSTGRESQL_UUID_DOCUMENT_RAG_DUAL_SCOPE.md +732 -0
  190. package/skills-library/database-solutions/POSTGRES_SQL_TEMPLATE_BINDING_ERROR.md +240 -0
  191. package/skills-library/database-solutions/PRISMA_DB_PUSH_DATA_LOSS_PREVENTION.md +141 -0
  192. package/skills-library/database-solutions/PRODUCTION_QUERY_OPTIMIZATION_RESTART_FIX.md +389 -0
  193. package/skills-library/database-solutions/RLS_SECURITY_GUIDE.md +107 -0
  194. package/skills-library/database-solutions/SCHEMA_ENHANCEMENTS_GUIDE.md +373 -0
  195. package/skills-library/database-solutions/SCHEMA_MIGRATION_GUIDE.md +368 -0
  196. package/skills-library/database-solutions/SCHEMA_VERIFICATION_QUICK_REFERENCE.md +104 -0
  197. package/skills-library/database-solutions/ai-erd-generator.md +1213 -0
  198. package/skills-library/database-solutions/content-publishing-states.md +631 -0
  199. package/skills-library/database-solutions/database-schema-designer.md +522 -0
  200. package/skills-library/database-solutions/er-diagram-components.md +569 -0
  201. package/skills-library/database-solutions/er-to-ddl-mapping.md +1405 -0
  202. package/skills-library/database-solutions/erd-creator-textbook-research.md +433 -0
  203. package/skills-library/database-solutions/erd-react-flow-architecture.md +1965 -0
  204. package/skills-library/database-solutions/mariadb-aggregate-function-replacement.md +145 -0
  205. package/skills-library/database-solutions/normalization-validator.md +778 -0
  206. package/skills-library/database-solutions/postgres-full-text-search-content.md +494 -0
  207. package/skills-library/database-solutions/postgresql-to-mysql-runtime-translation.md +286 -0
  208. package/skills-library/database-solutions/regex-alternation-ordering-sql-types.md +92 -0
  209. package/skills-library/database-solutions/reserved-word-context-aware-quoting.md +142 -0
  210. package/skills-library/database-solutions/sql-ddl-generator.md +756 -0
  211. package/skills-library/database-solutions/supabase-connection-pooler-fix.md +102 -0
  212. package/skills-library/deployment-security/CPANEL_NODE_DEPLOYMENT.md +166 -0
  213. package/skills-library/deployment-security/DEPLOYMENT.md +275 -0
  214. package/skills-library/deployment-security/DEPLOYMENT_CHECKLIST.md +363 -0
  215. package/skills-library/deployment-security/DEPLOYMENT_PLAN.md +669 -0
  216. package/skills-library/deployment-security/KNEX_DATABASE_ABSTRACTION.md +444 -0
  217. package/skills-library/deployment-security/LICENSE_KEY_SYSTEM.md +206 -0
  218. package/skills-library/deployment-security/NODE18_DEPENDENCY_COMPATIBILITY.md +284 -0
  219. package/skills-library/deployment-security/PHP_INSTALLER_WIZARD_GUIDE.md +315 -0
  220. package/skills-library/deployment-security/PM2_ENVIRONMENT_VARIABLE_CACHING.md +256 -0
  221. package/skills-library/deployment-security/PM2_MEMORY_EXHAUSTION_FIX.md +370 -0
  222. package/skills-library/deployment-security/PRODUCTION_DEPLOYMENT_GUIDE.md +592 -0
  223. package/skills-library/deployment-security/PRODUCTION_HARDENING_DOCUMENTATION.md +307 -0
  224. package/skills-library/deployment-security/PRODUCTION_RECOVERY_CHERRY_PICK_PATTERN.md +202 -0
  225. package/skills-library/deployment-security/PYINSTALLER_CUDA_WHISPER_BUNDLING.md +236 -0
  226. package/skills-library/deployment-security/SECURITY.md +41 -0
  227. package/skills-library/deployment-security/SMTP_SSL_HOSTNAME_MISMATCH_SHARED_HOSTING.md +220 -0
  228. package/skills-library/deployment-security/SPA_SEO_OPTIMIZATION_CPANEL.md +200 -0
  229. package/skills-library/deployment-security/SUPABASE_EDGE_FUNCTIONS.md +338 -0
  230. package/skills-library/deployment-security/VERCEL_GITHUB_DEPLOYMENT_GUIDE.md +858 -0
  231. package/skills-library/deployment-security/VPS_DEPLOYMENT_READINESS.md +356 -0
  232. package/skills-library/deployment-security/deployment-changes-not-applying.md +241 -0
  233. package/skills-library/deployment-security/env-file-management-production-local.md +203 -0
  234. package/skills-library/deployment-security/express-secure-file-downloads.md +413 -0
  235. package/skills-library/deployment-security/react-production-deployment-desktop-guide.md +2011 -0
  236. package/skills-library/deployment-security/self-hosted-supabase-coolify-guide.md +1684 -0
  237. package/skills-library/deployment-security/unique-features-ai-strategy-plaid-security.md +1613 -0
  238. package/skills-library/deployment-security/vps-deployment.md +135 -0
  239. package/skills-library/document-processing/WORD_EXPORT_MARKDOWN_FORMATTING.md +482 -0
  240. package/skills-library/document-processing/document-ai-landingai-integration.md +677 -0
  241. package/skills-library/document-processing/express-secure-file-downloads-mern.md +413 -0
  242. package/skills-library/document-processing/express-secure-file-downloads.md +413 -0
  243. package/skills-library/document-processing/md-to-word-converter.md +318 -0
  244. package/skills-library/document-processing/pdf-forms-integration/README.md +101 -0
  245. package/skills-library/document-processing/pdf-forms-integration/SKILL.md +662 -0
  246. package/skills-library/ecommerce/ADMIN_PRODUCTS_GUIDE.md +428 -0
  247. package/skills-library/ecommerce/ECOMMERCE_API_REFERENCE.md +776 -0
  248. package/skills-library/ecommerce/ECOMMERCE_COMPLETION_SUMMARY.md +673 -0
  249. package/skills-library/ecommerce/ECOMMERCE_IMPLEMENTATION_GUIDE.md +729 -0
  250. package/skills-library/ecommerce/ECOMMERCE_QUICK_REFERENCE.md +521 -0
  251. package/skills-library/ecommerce/ECOMMERCE_TESTING_CHECKLIST.md +565 -0
  252. package/skills-library/ecommerce/ECOMMERCE_WORKFLOW_GUIDE.md +1059 -0
  253. package/skills-library/ecommerce/PRODUCT_CREATION_EXPANDED.md +522 -0
  254. package/skills-library/ecommerce/agentic-commerce-protocol.md +203 -0
  255. package/skills-library/ecommerce/cart-abandonment-recovery.md +236 -0
  256. package/skills-library/ecommerce/cart-architecture-patterns.md +300 -0
  257. package/skills-library/ecommerce/cart-item-count-indicator.md +264 -0
  258. package/skills-library/ecommerce/checkout-ux-conversion.md +227 -0
  259. package/skills-library/ecommerce/composable-commerce-selection.md +166 -0
  260. package/skills-library/ecommerce/ecommerce-analytics-patterns.md +167 -0
  261. package/skills-library/ecommerce/fraud-detection-patterns.md +179 -0
  262. package/skills-library/ecommerce/inventory-stock-management.md +270 -0
  263. package/skills-library/ecommerce/order-saga-state-machine.md +336 -0
  264. package/skills-library/ecommerce/payment-provider-abstraction.md +245 -0
  265. package/skills-library/ecommerce/pci-compliance-checklist.md +192 -0
  266. package/skills-library/ecommerce/refund-chargeback-handling.md +177 -0
  267. package/skills-library/ecommerce/shipping-carrier-integration.md +218 -0
  268. package/skills-library/ecommerce/webhook-idempotency-patterns.md +253 -0
  269. package/skills-library/excalidraw-diagrams/.github/workflows/ci.yml +558 -0
  270. package/skills-library/excalidraw-diagrams/.github/workflows/prompt-gallery.yml +448 -0
  271. package/skills-library/excalidraw-diagrams/.github/workflows/release.yml +42 -0
  272. package/skills-library/excalidraw-diagrams/.github/workflows/test-reusable-ci.yml +25 -0
  273. package/skills-library/excalidraw-diagrams/CLAUDE.md +57 -0
  274. package/skills-library/excalidraw-diagrams/LICENSE +21 -0
  275. package/skills-library/excalidraw-diagrams/README.md +178 -0
  276. package/skills-library/excalidraw-diagrams/SKILL.md +715 -0
  277. package/skills-library/form-solutions/BUTTON_TYPE_FORM_SUBMISSION.md +336 -0
  278. package/skills-library/form-solutions/FILLABLE_PDF_IMPLEMENTATION.md +226 -0
  279. package/skills-library/form-solutions/SURVEYJS_QUESTIONNAIRE_SYSTEM.md +367 -0
  280. package/skills-library/form-solutions/tiptap-minimal-setup.md +690 -0
  281. package/skills-library/frontend/scholarly-classification-bubble-map.md +149 -0
  282. package/skills-library/infrastructure/ci-cd-pipeline-builder.md +517 -0
  283. package/skills-library/infrastructure/observability-designer.md +264 -0
  284. package/skills-library/infrastructure/performance-profiler.md +621 -0
  285. package/skills-library/installer-wizard-patterns.md +249 -0
  286. package/skills-library/integrations/CLAUDE_CODE_TOKEN_ANALYTICS.md +160 -0
  287. package/skills-library/integrations/CONFIGURABLE_AI_PROVIDER_SELECTION.md +728 -0
  288. package/skills-library/integrations/SOCKET_IO_BROADCAST_ALL_VS_ROOM.md +141 -0
  289. package/skills-library/integrations/VIRTUAL_MEETINGS_IMPLEMENTATION.md +374 -0
  290. package/skills-library/integrations/WORDPRESS_LEARNDASH_DATA_RECOVERY.md +53 -0
  291. package/skills-library/integrations/YOUTUBE_API_SETUP.md +141 -0
  292. package/skills-library/integrations/YOUTUBE_BOOKMARKING_EXPLANATION.md +252 -0
  293. package/skills-library/integrations/YOUTUBE_BOOKMARKING_SOLUTION.md +268 -0
  294. package/skills-library/integrations/YOUTUBE_OAUTH_SETUP_GUIDE.md +200 -0
  295. package/skills-library/integrations/YOUTUBE_VIDEO_FIX_COMPLETE.md +192 -0
  296. package/skills-library/integrations/ai-ml/GEMINI_AI_RAG_PIPELINE_COMPLETE_GUIDE.md +195 -0
  297. package/skills-library/integrations/ai-ml/GEMINI_IMAGE_GENERATION_SETUP.md +64 -0
  298. package/skills-library/integrations/cloudflare/cloudflare-turnstile-debugging.md +202 -0
  299. package/skills-library/integrations/cloudflare/cloudflare-turnstile-implementation.md +476 -0
  300. package/skills-library/integrations/cloudflare-turnstile-debugging.md +202 -0
  301. package/skills-library/integrations/cloudflare-turnstile-implementation.md +476 -0
  302. package/skills-library/integrations/ghost-creator-monetization-pattern.md +454 -0
  303. package/skills-library/integrations/headless-cms-architecture.md +484 -0
  304. package/skills-library/integrations/headless-cms-stack-selection.md +183 -0
  305. package/skills-library/integrations/payload-cms-patterns.md +674 -0
  306. package/skills-library/integrations/realtimestt-openwakeword-cuda-windows.md +229 -0
  307. package/skills-library/integrations/rss-podcast-integration.md +300 -0
  308. package/skills-library/integrations/wordpress/WORDPRESS_LEARNDASH_DATA_RECOVERY.md +53 -0
  309. package/skills-library/integrations/youtube/YOUTUBE_API_SETUP.md +141 -0
  310. package/skills-library/integrations/youtube/YOUTUBE_BOOKMARKING_EXPLANATION.md +252 -0
  311. package/skills-library/integrations/youtube/YOUTUBE_BOOKMARKING_SOLUTION.md +268 -0
  312. package/skills-library/integrations/youtube/YOUTUBE_OAUTH_SETUP_GUIDE.md +200 -0
  313. package/skills-library/integrations/youtube/YOUTUBE_VIDEO_FIX_COMPLETE.md +192 -0
  314. package/skills-library/marketing/campaign-analytics.md +97 -0
  315. package/skills-library/marketing/content-creator.md +105 -0
  316. package/skills-library/marketing/marketing-strategy-pmm.md +94 -0
  317. package/skills-library/marketing/social-media-analyzer.md +81 -0
  318. package/skills-library/methodology/ADVANCED_ORCHESTRATION_PATTERNS.md +401 -0
  319. package/skills-library/methodology/AGENT_SELF_IMPROVEMENT_LOOP.md +179 -0
  320. package/skills-library/methodology/BREATH_BASED_PARALLEL_EXECUTION.md +1 -1
  321. package/skills-library/methodology/CLEANSING_CYCLE.md +358 -0
  322. package/skills-library/methodology/CONFIDENCE_ANNOTATION_PATTERN.md +143 -0
  323. package/skills-library/methodology/CRITICAL_PATTERNS_DOCUMENTATION_COMPLETE.md +204 -0
  324. package/skills-library/methodology/DELIVERABLES_SUMMARY.md +341 -0
  325. package/skills-library/methodology/DIFFICULTY_AWARE_AGENT_ROUTING.md +252 -0
  326. package/skills-library/methodology/EVOLUTIONARY_SKILL_SYNTHESIS.md +219 -0
  327. package/skills-library/methodology/GLOMERULUS_DECISION_GATE.md +223 -0
  328. package/skills-library/methodology/HIBERNATION_SYSTEM.md +231 -0
  329. package/skills-library/methodology/INSTRUMENTATION_OVER_RESTRICTION.md +192 -0
  330. package/skills-library/methodology/MASTER_COMPLETION_SUMMARY.md +444 -0
  331. package/skills-library/methodology/MASTER_SESSION_COMPLETION.md +743 -0
  332. package/skills-library/methodology/MERN_QUICK_REFERENCE.md +358 -0
  333. package/skills-library/methodology/ORGAN_AGENT_MAPPING.md +177 -0
  334. package/skills-library/methodology/PARALLEL_WAVE_BASED_REFACTORING.md +440 -0
  335. package/skills-library/methodology/QUICK_REFERENCE.md +358 -0
  336. package/skills-library/methodology/SDFT_ONPOLICY_SELF_DISTILLATION.md +186 -0
  337. package/skills-library/methodology/SELF_QUESTIONING_TASK_GENERATION.md +270 -0
  338. package/skills-library/methodology/SESSION_COMPLETION_SUMMARY.md +304 -0
  339. package/skills-library/methodology/SESSION_SUMMARY.md +432 -0
  340. package/skills-library/methodology/WARRIOR_WORKFLOW_DEBUGGING_PROTOCOL.md +252 -0
  341. package/skills-library/methodology/tech-debt-tracker.md +570 -0
  342. package/skills-library/parallel-debug/SKILL.md +60 -0
  343. package/skills-library/patterns-standards/API_PATTERN_FIX_SUMMARY.md +236 -0
  344. package/skills-library/patterns-standards/BATCH_OPERATIONS_WITH_PROGRESS_MODAL.md +362 -0
  345. package/skills-library/patterns-standards/CRITICAL_CODING_PATTERNS.md +639 -0
  346. package/skills-library/patterns-standards/DARK_MODE_MODAL_VISIBILITY.md +258 -0
  347. package/skills-library/patterns-standards/ERROR_RESILIENCE_IMPLEMENTATION.md +375 -0
  348. package/skills-library/patterns-standards/ES_MODULE_IMPORT_HOISTING_DOTENV.md +298 -0
  349. package/skills-library/patterns-standards/NESTED_BACKDROP_FILTER_CSS_ARTIFACT_FIX.md +76 -0
  350. package/skills-library/patterns-standards/ORDERED_DETECTOR_PIPELINE_GRACEFUL_FALLBACK.md +333 -0
  351. package/skills-library/patterns-standards/PHASE_IMPORT_ERROR_DEBUGGING.md +271 -0
  352. package/skills-library/patterns-standards/PYNPUT_GLOBAL_HOTKEY_VK_MATCHING.md +252 -0
  353. package/skills-library/patterns-standards/REACT_USEEFFECT_CASCADE_RESET_FIX.md +132 -0
  354. package/skills-library/patterns-standards/SUBMENU_HOVER_DROPDOWN_PATTERN.md +225 -0
  355. package/skills-library/patterns-standards/TAILWIND_TEXT_VISIBILITY_OVERRIDE.md +322 -0
  356. package/skills-library/patterns-standards/THEME_AWARE_CSS_VARIABLES_PATTERN.md +209 -0
  357. package/skills-library/patterns-standards/THEME_USER_OBJECT_PROPERTY_NAMING.md +194 -0
  358. package/skills-library/patterns-standards/TOOLTIP_BLOCKING_CLICKS_FIX.md +267 -0
  359. package/skills-library/patterns-standards/claude-code-plugin-structure.md +235 -0
  360. package/skills-library/patterns-standards/react-i18next-setup.md +429 -0
  361. package/skills-library/patterns-standards/thesys-c1-generative-ui-integration.md +967 -0
  362. package/skills-library/plugin-development/CLAUDE_CODE_COMMAND_REGISTRATION_SILENT_FAILURE.md +315 -0
  363. package/skills-library/plugin-development/plugin-command-namespace-vs-global.md +390 -0
  364. package/skills-library/plugin-development/plugin-doc-auto-generation.md +172 -0
  365. package/skills-library/security/GITHUB_REPO_SECURITY_AUDIT.md +115 -0
  366. package/skills-library/security/admin-deletion-safety.md +396 -0
  367. package/skills-library/security/application-vuln-patterns.md +477 -0
  368. package/skills-library/security/env-secrets-manager.md +686 -0
  369. package/skills-library/security/secure-ai-application-templates.md +347 -0
  370. package/skills-library/security/sql-injection-prevention-postgresjs.md +151 -0
  371. package/skills-library/supabase-connection-pooler-fix.md +102 -0
  372. package/skills-library/system-context/POWERSHELL_BASH_INTEROP.md +82 -0
  373. package/skills-library/system-context/SERVICE_LIFECYCLE_MANAGEMENT.md +119 -0
  374. package/skills-library/system-context/SKILL.md +40 -0
  375. package/skills-library/system-context/WINDOWS_DEV_ENVIRONMENT.md +73 -0
  376. package/skills-library/testing/E2E_PLAYWRIGHT_PATTERNS.md +99 -0
  377. package/skills-library/testing/INTEGRATION_TEST_STRATEGY.md +82 -0
  378. package/skills-library/testing/RED_GREEN_BUGFIX_GATE.md +203 -0
  379. package/skills-library/testing/TEST_DATA_MANAGEMENT.md +69 -0
  380. package/skills-library/testing/VITEST_UNIT_TEST_PATTERNS.md +75 -0
  381. package/skills-library/testing/playwright-api-security-tests.md +202 -0
  382. package/skills-library/toolbox/SKILL.md +84 -0
  383. package/skills-library/toolbox/code-graph-and-web-scraping-mcps.md +237 -0
  384. package/skills-library/ui-ux-pro-max/ACCESSIBILITY_ESSENTIALS.md +115 -0
  385. package/skills-library/ui-ux-pro-max/DESIGN_SYSTEM_SCAFFOLDING.md +133 -0
  386. package/skills-library/ui-ux-pro-max/RESPONSIVE_LAYOUT_PATTERNS.md +119 -0
  387. package/skills-library/ui-ux-pro-max/SKILL.md +386 -0
  388. package/skills-library/ui-ux-pro-max/data/charts.csv +26 -0
  389. package/skills-library/ui-ux-pro-max/data/colors.csv +97 -0
  390. package/skills-library/ui-ux-pro-max/data/icons.csv +101 -0
  391. package/skills-library/ui-ux-pro-max/data/landing.csv +31 -0
  392. package/skills-library/ui-ux-pro-max/data/products.csv +97 -0
  393. package/skills-library/ui-ux-pro-max/data/react-performance.csv +45 -0
  394. package/skills-library/ui-ux-pro-max/data/stacks/astro.csv +54 -0
  395. package/skills-library/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
  396. package/skills-library/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
  397. package/skills-library/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
  398. package/skills-library/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
  399. package/skills-library/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
  400. package/skills-library/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
  401. package/skills-library/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
  402. package/skills-library/ui-ux-pro-max/data/stacks/react.csv +54 -0
  403. package/skills-library/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
  404. package/skills-library/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
  405. package/skills-library/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
  406. package/skills-library/ui-ux-pro-max/data/stacks/vue.csv +50 -0
  407. package/skills-library/ui-ux-pro-max/data/styles.csv +68 -0
  408. package/skills-library/ui-ux-pro-max/data/typography.csv +58 -0
  409. package/skills-library/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
  410. package/skills-library/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
  411. package/skills-library/ui-ux-pro-max/data/web-interface.csv +31 -0
  412. package/skills-library/wordpress-style-theme-components.md +1526 -0
  413. package/templates/ASSUMPTIONS.md +1 -1
  414. package/templates/DECISION_LOG.md +0 -1
  415. package/templates/phase-prompt.md +1 -1
  416. package/templates/phoenix-comparison.md +6 -6
  417. package/templates/skill-api-integration.md +106 -0
  418. package/templates/skill-architecture-pattern.md +92 -0
  419. package/templates/skill-debug-pattern.md +98 -0
  420. package/templates/skill-devops-recipe.md +107 -0
  421. package/templates/skill-general.md +65 -0
  422. package/templates/skill-ui-component.md +113 -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/browser-use-expert.md +0 -210
  484. package/skills-library/specialists/quality/code-documenter.md +0 -51
  485. package/skills-library/specialists/quality/code-reviewer.md +0 -67
  486. package/skills-library/specialists/quality/debugging-wizard.md +0 -51
  487. package/skills-library/specialists/quality/fullstack-guardian.md +0 -51
  488. package/skills-library/specialists/quality/legacy-modernizer.md +0 -50
  489. package/skills-library/specialists/quality/playwright-expert.md +0 -65
  490. package/skills-library/specialists/quality/spec-miner.md +0 -56
  491. package/skills-library/specialists/quality/test-master.md +0 -65
  492. package/skills-library/specialists/security/secure-code-guardian.md +0 -55
  493. package/skills-library/specialists/security/security-reviewer.md +0 -53
  494. package/skills-library/specialists/workflow/architecture-designer.md +0 -53
  495. package/skills-library/specialists/workflow/cli-developer.md +0 -70
  496. package/skills-library/specialists/workflow/feature-forge.md +0 -65
  497. package/skills-library/specialists/workflow/prompt-engineer.md +0 -54
  498. package/skills-library/specialists/workflow/the-fool.md +0 -62
  499. /package/skills-library/{performance → _general/performance}/cache-augmented-generation.md +0 -0
  500. /package/skills-library/{debugging → parallel-debug}/FAILURE_TAXONOMY_CLASSIFICATION.md +0 -0
  501. /package/skills-library/{debugging → parallel-debug}/THREE_AGENT_HYPOTHESIS_DEBUGGING.md +0 -0
@@ -0,0 +1,666 @@
1
+ # Inline Visual Editing
2
+
3
+ > Click-to-edit content directly on the rendered page — no separate admin form needed
4
+ ---
5
+
6
+ ## Overview
7
+
8
+ Inline visual editing lets users click on any piece of content on the **actual rendered page** and edit it in place. Instead of filling out a form in an admin panel, teachers and admins see the real page and type directly on it. Changes save back to the database.
9
+
10
+ **Key difference from a rich text editor (like TipTap):**
11
+ - TipTap = a form field where you type formatted text
12
+ - Inline editing = the entire rendered page becomes editable. Click a heading, a paragraph, an image caption — edit it right there
13
+
14
+ ---
15
+
16
+ ## Architecture
17
+
18
+ ```
19
+ ┌─────────────────────────────────────────────────┐
20
+ │ Rendered Page (what students see) │
21
+ │ │
22
+ │ ┌──────────────────────────────────┐ │
23
+ │ │ "Introduction to Prayer" ← click to edit │
24
+ │ │ Welcome to this lesson... ← click to edit │
25
+ │ │ [image] ← click to swap │
26
+ │ └──────────────────────────────────┘ │
27
+ │ │
28
+ │ ┌────────────────────┐ │
29
+ │ │ Editing Sidebar │ ← appears on click │
30
+ │ │ Field type: text │ │
31
+ │ │ [Save] [Cancel] │ │
32
+ │ └────────────────────┘ │
33
+ └─────────────────────────────────────────────────┘
34
+
35
+ Data flow:
36
+ 1. Page loads → fetches content from API
37
+ 2. EditableRegion wraps each content block
38
+ 3. User clicks → region becomes editable
39
+ 4. User types → local state updates (optimistic)
40
+ 5. User saves → PATCH to API → database update
41
+ 6. Page re-renders with new content
42
+ ```
43
+
44
+ ---
45
+
46
+ ## Core Pattern: EditableRegion Component
47
+
48
+ This is the building block. Wrap any content in `<EditableRegion>` and it becomes click-to-edit.
49
+
50
+ ```jsx
51
+ // components/cms/EditableRegion.jsx
52
+ import { useState, useRef, useEffect } from 'react';
53
+ import DOMPurify from 'dompurify';
54
+
55
+ /**
56
+ * Wraps any content block to make it click-to-edit.
57
+ *
58
+ * Props:
59
+ * fieldName — which database column this maps to (e.g., "title", "body")
60
+ * value — current content value
61
+ * onSave — async function(fieldName, newValue) => save to API
62
+ * type — "text" | "richtext" | "image" | "markdown"
63
+ * editable — boolean, false for students (only admins/teachers edit)
64
+ */
65
+ export default function EditableRegion({
66
+ fieldName,
67
+ value,
68
+ onSave,
69
+ type = 'text',
70
+ editable = false,
71
+ className = '',
72
+ children,
73
+ }) {
74
+ const [isEditing, setIsEditing] = useState(false);
75
+ const [draft, setDraft] = useState(value);
76
+ const [saving, setSaving] = useState(false);
77
+ const ref = useRef(null);
78
+
79
+ // Sync when value changes externally
80
+ useEffect(() => {
81
+ if (!isEditing) setDraft(value);
82
+ }, [value, isEditing]);
83
+
84
+ // If not editable (student view), just render children
85
+ if (!editable) return <>{children}</>;
86
+
87
+ const handleClick = () => {
88
+ if (!isEditing) setIsEditing(true);
89
+ };
90
+
91
+ const handleSave = async () => {
92
+ setSaving(true);
93
+ try {
94
+ // Sanitize HTML content before saving
95
+ const sanitized = type === 'richtext' ? DOMPurify.sanitize(draft) : draft;
96
+ await onSave(fieldName, sanitized);
97
+ setIsEditing(false);
98
+ } catch (err) {
99
+ console.error(`Failed to save ${fieldName}:`, err);
100
+ } finally {
101
+ setSaving(false);
102
+ }
103
+ };
104
+
105
+ const handleCancel = () => {
106
+ setDraft(value);
107
+ setIsEditing(false);
108
+ };
109
+
110
+ const handleKeyDown = (e) => {
111
+ if (e.key === 'Escape') handleCancel();
112
+ if (e.key === 'Enter' && e.ctrlKey && type === 'text') handleSave();
113
+ };
114
+
115
+ return (
116
+ <div
117
+ className={`editable-region ${isEditing ? 'editing' : ''} ${className}`}
118
+ onClick={handleClick}
119
+ onKeyDown={handleKeyDown}
120
+ style={{
121
+ position: 'relative',
122
+ cursor: editable && !isEditing ? 'pointer' : 'default',
123
+ outline: isEditing ? '2px solid #3b82f6' : 'none',
124
+ outlineOffset: '4px',
125
+ borderRadius: '4px',
126
+ }}
127
+ >
128
+ {/* Hover indicator for editable regions */}
129
+ {!isEditing && (
130
+ <div
131
+ className="edit-hint"
132
+ style={{
133
+ position: 'absolute',
134
+ top: '-8px',
135
+ right: '-8px',
136
+ background: '#3b82f6',
137
+ color: 'white',
138
+ borderRadius: '50%',
139
+ width: '24px',
140
+ height: '24px',
141
+ display: 'flex',
142
+ alignItems: 'center',
143
+ justifyContent: 'center',
144
+ fontSize: '12px',
145
+ opacity: 0,
146
+ transition: 'opacity 0.2s',
147
+ pointerEvents: 'none',
148
+ }}
149
+ >
150
+
151
+ </div>
152
+ )}
153
+
154
+ {isEditing ? (
155
+ <EditField
156
+ type={type}
157
+ value={draft}
158
+ onChange={setDraft}
159
+ onSave={handleSave}
160
+ onCancel={handleCancel}
161
+ saving={saving}
162
+ ref={ref}
163
+ />
164
+ ) : (
165
+ children
166
+ )}
167
+
168
+ {/* CSS for hover effect */}
169
+ <style>{`
170
+ .editable-region:hover .edit-hint { opacity: 1 !important; }
171
+ .editable-region:hover { background: rgba(59, 130, 246, 0.05); }
172
+ `}</style>
173
+ </div>
174
+ );
175
+ }
176
+ ```
177
+
178
+ ---
179
+
180
+ ## Edit Field Renderers (by type)
181
+
182
+ ```jsx
183
+ // components/cms/EditField.jsx
184
+ import { forwardRef, useEffect, useRef } from 'react';
185
+
186
+ const EditField = forwardRef(function EditField(
187
+ { type, value, onChange, onSave, onCancel, saving },
188
+ ref
189
+ ) {
190
+ const inputRef = useRef(null);
191
+
192
+ useEffect(() => {
193
+ // Auto-focus when entering edit mode
194
+ if (inputRef.current) {
195
+ inputRef.current.focus();
196
+ // Place cursor at end for text inputs
197
+ if (type === 'text' && inputRef.current.setSelectionRange) {
198
+ const len = (value || '').length;
199
+ inputRef.current.setSelectionRange(len, len);
200
+ }
201
+ }
202
+ }, []);
203
+
204
+ const toolbar = (
205
+ <div style={{ marginTop: '8px', display: 'flex', gap: '8px' }}>
206
+ <button
207
+ onClick={onSave}
208
+ disabled={saving}
209
+ style={{
210
+ background: '#3b82f6',
211
+ color: 'white',
212
+ border: 'none',
213
+ padding: '6px 16px',
214
+ borderRadius: '4px',
215
+ cursor: 'pointer',
216
+ fontSize: '13px',
217
+ }}
218
+ >
219
+ {saving ? 'Saving...' : 'Save'}
220
+ </button>
221
+ <button
222
+ onClick={onCancel}
223
+ style={{
224
+ background: '#e5e7eb',
225
+ border: 'none',
226
+ padding: '6px 16px',
227
+ borderRadius: '4px',
228
+ cursor: 'pointer',
229
+ fontSize: '13px',
230
+ }}
231
+ >
232
+ Cancel
233
+ </button>
234
+ <span style={{ color: '#9ca3af', fontSize: '12px', alignSelf: 'center' }}>
235
+ Ctrl+Enter to save | Esc to cancel
236
+ </span>
237
+ </div>
238
+ );
239
+
240
+ switch (type) {
241
+ case 'text':
242
+ return (
243
+ <div>
244
+ <input
245
+ ref={inputRef}
246
+ type="text"
247
+ value={value || ''}
248
+ onChange={(e) => onChange(e.target.value)}
249
+ style={{
250
+ width: '100%',
251
+ fontSize: 'inherit',
252
+ fontFamily: 'inherit',
253
+ fontWeight: 'inherit',
254
+ padding: '4px 8px',
255
+ border: '1px solid #d1d5db',
256
+ borderRadius: '4px',
257
+ }}
258
+ />
259
+ {toolbar}
260
+ </div>
261
+ );
262
+
263
+ case 'richtext':
264
+ // For rich text, integrate your TipTap editor here
265
+ // This is where the tiptap-minimal-setup.md skill connects
266
+ return (
267
+ <div>
268
+ <textarea
269
+ ref={inputRef}
270
+ value={value || ''}
271
+ onChange={(e) => onChange(e.target.value)}
272
+ rows={8}
273
+ style={{
274
+ width: '100%',
275
+ fontSize: 'inherit',
276
+ fontFamily: 'inherit',
277
+ padding: '8px',
278
+ border: '1px solid #d1d5db',
279
+ borderRadius: '4px',
280
+ resize: 'vertical',
281
+ }}
282
+ />
283
+ {toolbar}
284
+ </div>
285
+ );
286
+
287
+ case 'image':
288
+ return (
289
+ <div>
290
+ <div style={{ marginBottom: '8px' }}>
291
+ {value && (
292
+ <img
293
+ src={value}
294
+ alt="Current"
295
+ style={{ maxWidth: '200px', borderRadius: '4px' }}
296
+ />
297
+ )}
298
+ </div>
299
+ <input
300
+ ref={inputRef}
301
+ type="text"
302
+ value={value || ''}
303
+ onChange={(e) => onChange(e.target.value)}
304
+ placeholder="Image URL or upload path"
305
+ style={{
306
+ width: '100%',
307
+ padding: '4px 8px',
308
+ border: '1px solid #d1d5db',
309
+ borderRadius: '4px',
310
+ }}
311
+ />
312
+ {toolbar}
313
+ </div>
314
+ );
315
+
316
+ case 'markdown':
317
+ return (
318
+ <div>
319
+ <textarea
320
+ ref={inputRef}
321
+ value={value || ''}
322
+ onChange={(e) => onChange(e.target.value)}
323
+ rows={12}
324
+ style={{
325
+ width: '100%',
326
+ fontFamily: 'monospace',
327
+ fontSize: '14px',
328
+ padding: '8px',
329
+ border: '1px solid #d1d5db',
330
+ borderRadius: '4px',
331
+ resize: 'vertical',
332
+ }}
333
+ />
334
+ {toolbar}
335
+ </div>
336
+ );
337
+
338
+ default:
339
+ return <div>Unsupported field type: {type}</div>;
340
+ }
341
+ });
342
+
343
+ export default EditField;
344
+ ```
345
+
346
+ ---
347
+
348
+ ## Using EditableRegion on a Page
349
+
350
+ ```jsx
351
+ // pages/LessonView.jsx — Example: making a lesson page inline-editable
352
+ import EditableRegion from '../components/cms/EditableRegion';
353
+ import DOMPurify from 'dompurify';
354
+ import { useAuth } from '../hooks/useAuth';
355
+ import { updateLesson } from '../api/lessonApi';
356
+
357
+ export default function LessonView({ lesson }) {
358
+ const { user } = useAuth();
359
+ const canEdit = user?.role === 'teacher' || user?.role === 'admin';
360
+
361
+ const handleSave = async (fieldName, newValue) => {
362
+ await updateLesson(lesson.id, { [fieldName]: newValue });
363
+ };
364
+
365
+ return (
366
+ <article className="lesson-view">
367
+ <EditableRegion
368
+ fieldName="title"
369
+ value={lesson.title}
370
+ onSave={handleSave}
371
+ type="text"
372
+ editable={canEdit}
373
+ >
374
+ <h1>{lesson.title}</h1>
375
+ </EditableRegion>
376
+
377
+ <EditableRegion
378
+ fieldName="subtitle"
379
+ value={lesson.subtitle}
380
+ onSave={handleSave}
381
+ type="text"
382
+ editable={canEdit}
383
+ >
384
+ <p className="subtitle">{lesson.subtitle}</p>
385
+ </EditableRegion>
386
+
387
+ <EditableRegion
388
+ fieldName="cover_image"
389
+ value={lesson.cover_image}
390
+ onSave={handleSave}
391
+ type="image"
392
+ editable={canEdit}
393
+ >
394
+ <img src={lesson.cover_image} alt={lesson.title} />
395
+ </EditableRegion>
396
+
397
+ <EditableRegion
398
+ fieldName="body"
399
+ value={lesson.body}
400
+ onSave={handleSave}
401
+ type="richtext"
402
+ editable={canEdit}
403
+ >
404
+ <div
405
+ className="lesson-body"
406
+ dangerouslySetInnerHTML={{ __html: DOMPurify.sanitize(lesson.body) }}
407
+ />
408
+ </EditableRegion>
409
+ </article>
410
+ );
411
+ }
412
+ ```
413
+
414
+ ---
415
+
416
+ ## API Endpoint Pattern
417
+
418
+ ```js
419
+ // server/routes/content.js — Generic content update endpoint
420
+ // Works with any table that has an id column
421
+ const DOMPurify = require('isomorphic-dompurify');
422
+
423
+ router.patch('/api/content/:table/:id', authenticate, authorize(['admin', 'teacher']), async (req, res) => {
424
+ const { table, id } = req.params;
425
+ const updates = req.body;
426
+
427
+ // Whitelist allowed tables and fields
428
+ const EDITABLE = {
429
+ lessons: ['title', 'subtitle', 'body', 'cover_image', 'summary'],
430
+ courses: ['title', 'description', 'cover_image'],
431
+ announcements: ['title', 'body'],
432
+ pages: ['title', 'content', 'meta_description'],
433
+ };
434
+
435
+ if (!EDITABLE[table]) {
436
+ return res.status(403).json({ error: 'Table not editable' });
437
+ }
438
+
439
+ // Filter to only allowed fields and sanitize HTML
440
+ const allowed = {};
441
+ const HTML_FIELDS = ['body', 'content', 'description'];
442
+ for (const [key, val] of Object.entries(updates)) {
443
+ if (EDITABLE[table].includes(key)) {
444
+ allowed[key] = HTML_FIELDS.includes(key) ? DOMPurify.sanitize(val) : val;
445
+ }
446
+ }
447
+
448
+ if (Object.keys(allowed).length === 0) {
449
+ return res.status(400).json({ error: 'No valid fields to update' });
450
+ }
451
+
452
+ // Build SET clause — works for both MySQL and PostgreSQL
453
+ const setClauses = Object.keys(allowed).map((key) => `${key} = ?`);
454
+ const values = [...Object.values(allowed), id];
455
+
456
+ const sql = `UPDATE ${table} SET ${setClauses.join(', ')}, updated_at = NOW() WHERE id = ?`;
457
+
458
+ await db.query(sql, values);
459
+
460
+ // Return updated record
461
+ const [updated] = await db.query(`SELECT * FROM ${table} WHERE id = ?`, [id]);
462
+ res.json(updated);
463
+ });
464
+ ```
465
+
466
+ ---
467
+
468
+ ## Edit Mode Toggle
469
+
470
+ Teachers shouldn't always be in edit mode — they also need to preview as students see it.
471
+
472
+ ```jsx
473
+ // components/cms/EditModeProvider.jsx
474
+ import { createContext, useContext, useState } from 'react';
475
+ import { useAuth } from '../hooks/useAuth';
476
+
477
+ const EditModeContext = createContext({ editMode: false, toggleEditMode: () => {} });
478
+
479
+ export function EditModeProvider({ children }) {
480
+ const { user } = useAuth();
481
+ const canEdit = user?.role === 'teacher' || user?.role === 'admin';
482
+ const [editMode, setEditMode] = useState(false);
483
+
484
+ if (!canEdit) {
485
+ return (
486
+ <EditModeContext.Provider value={{ editMode: false, toggleEditMode: () => {} }}>
487
+ {children}
488
+ </EditModeContext.Provider>
489
+ );
490
+ }
491
+
492
+ return (
493
+ <EditModeContext.Provider
494
+ value={{ editMode, toggleEditMode: () => setEditMode((prev) => !prev) }}
495
+ >
496
+ {children}
497
+
498
+ {/* Floating toggle button */}
499
+ <button
500
+ onClick={() => setEditMode((prev) => !prev)}
501
+ style={{
502
+ position: 'fixed',
503
+ bottom: '20px',
504
+ right: '20px',
505
+ background: editMode ? '#ef4444' : '#3b82f6',
506
+ color: 'white',
507
+ border: 'none',
508
+ borderRadius: '50px',
509
+ padding: '12px 24px',
510
+ fontSize: '14px',
511
+ fontWeight: 'bold',
512
+ cursor: 'pointer',
513
+ boxShadow: '0 4px 12px rgba(0,0,0,0.15)',
514
+ zIndex: 9999,
515
+ transition: 'background 0.2s',
516
+ }}
517
+ >
518
+ {editMode ? 'Exit Editing' : 'Edit Page'}
519
+ </button>
520
+ </EditModeContext.Provider>
521
+ );
522
+ }
523
+
524
+ export function useEditMode() {
525
+ return useContext(EditModeContext);
526
+ }
527
+ ```
528
+
529
+ Then in EditableRegion, replace the `editable` prop with context:
530
+
531
+ ```jsx
532
+ import { useEditMode } from './EditModeProvider';
533
+
534
+ // Inside EditableRegion:
535
+ const { editMode } = useEditMode();
536
+ if (!editMode) return <>{children}</>;
537
+ ```
538
+
539
+ ---
540
+
541
+ ## Auto-Save Pattern (Optional)
542
+
543
+ For a smoother experience, auto-save after the user stops typing:
544
+
545
+ ```jsx
546
+ // hooks/useAutoSave.js
547
+ import { useRef, useCallback } from 'react';
548
+
549
+ export function useAutoSave(saveFn, delayMs = 1500) {
550
+ const timerRef = useRef(null);
551
+ const latestValueRef = useRef(null);
552
+
553
+ const scheduleSave = useCallback(
554
+ (fieldName, value) => {
555
+ latestValueRef.current = { fieldName, value };
556
+
557
+ if (timerRef.current) clearTimeout(timerRef.current);
558
+
559
+ timerRef.current = setTimeout(async () => {
560
+ const { fieldName: f, value: v } = latestValueRef.current;
561
+ try {
562
+ await saveFn(f, v);
563
+ } catch (err) {
564
+ console.error('Auto-save failed:', err);
565
+ }
566
+ }, delayMs);
567
+ },
568
+ [saveFn, delayMs]
569
+ );
570
+
571
+ const flushSave = useCallback(async () => {
572
+ if (timerRef.current) {
573
+ clearTimeout(timerRef.current);
574
+ timerRef.current = null;
575
+ }
576
+ if (latestValueRef.current) {
577
+ const { fieldName, value } = latestValueRef.current;
578
+ await saveFn(fieldName, value);
579
+ latestValueRef.current = null;
580
+ }
581
+ }, [saveFn]);
582
+
583
+ return { scheduleSave, flushSave };
584
+ }
585
+ ```
586
+
587
+ ---
588
+
589
+ ## Audit Trail (Database Schema)
590
+
591
+ Track every inline edit for accountability — who changed what, when.
592
+
593
+ ### MySQL
594
+
595
+ ```sql
596
+ CREATE TABLE content_edits (
597
+ id INT AUTO_INCREMENT PRIMARY KEY,
598
+ table_name VARCHAR(64) NOT NULL,
599
+ record_id VARCHAR(36) NOT NULL,
600
+ field_name VARCHAR(64) NOT NULL,
601
+ old_value TEXT,
602
+ new_value TEXT,
603
+ edited_by VARCHAR(36) NOT NULL,
604
+ edited_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
605
+ INDEX idx_record (table_name, record_id),
606
+ INDEX idx_editor (edited_by),
607
+ FOREIGN KEY (edited_by) REFERENCES users(id)
608
+ );
609
+ ```
610
+
611
+ ### PostgreSQL
612
+
613
+ ```sql
614
+ CREATE TABLE content_edits (
615
+ id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
616
+ table_name VARCHAR(64) NOT NULL,
617
+ record_id UUID NOT NULL,
618
+ field_name VARCHAR(64) NOT NULL,
619
+ old_value TEXT,
620
+ new_value TEXT,
621
+ edited_by UUID NOT NULL REFERENCES users(id),
622
+ edited_at TIMESTAMPTZ DEFAULT NOW()
623
+ );
624
+
625
+ CREATE INDEX idx_content_edits_record ON content_edits(table_name, record_id);
626
+ CREATE INDEX idx_content_edits_editor ON content_edits(edited_by);
627
+ ```
628
+
629
+ ---
630
+
631
+ ## Integration With Existing Skills
632
+
633
+ | Skill | How It Connects |
634
+ |-------|----------------|
635
+ | `tiptap-minimal-setup.md` | Use TipTap as the `richtext` field renderer inside EditField |
636
+ | `content-publishing-states.md` | Only allow inline editing on DRAFT content, not PUBLISHED |
637
+ | `media-manager-abstraction.md` | Use the media manager for the `image` field type |
638
+ | `schema-driven-form-generator.md` | Generate EditableRegion configs from schema definitions |
639
+
640
+ ---
641
+
642
+ ## Security Checklist
643
+
644
+ - [ ] Server-side field whitelist (EDITABLE map) — never trust client field names
645
+ - [ ] Authentication + role check on every PATCH endpoint
646
+ - [ ] Sanitize HTML content before saving (DOMPurify on both client and server)
647
+ - [ ] Rate limit inline save endpoints (prevent spam)
648
+ - [ ] Audit trail records editor identity from JWT, not from client
649
+ - [ ] Content Security Policy headers if rendering user HTML
650
+
651
+ ---
652
+
653
+ ## When to Use This Pattern
654
+
655
+ **Use inline editing when:**
656
+ - Content creators are not developers
657
+ - The "what you see" matters (visual layout, styling context)
658
+ - Edits are small and frequent (fixing typos, updating announcements)
659
+ - Multiple content types share the same page layout
660
+
661
+ **Use a traditional admin form when:**
662
+ - Editing involves complex relationships (assigning teachers to courses)
663
+ - Bulk operations are common (publish 20 lessons at once)
664
+ - The content structure is more important than visual layout
665
+
666
+ **Best practice:** Use BOTH. Inline editing for content text/images on the rendered page. Admin forms for metadata, relationships, and bulk operations.