@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,838 @@
1
+ # Schema-Driven Form Generator
2
+
3
+ > Define fields once in a config file — get a complete admin form with validation, field types, and save logic
4
+ ---
5
+
6
+ ## Overview
7
+
8
+ Instead of hand-coding every admin form, you define your content model in a single config file and the system generates the complete form — inputs, validation, labels, help text, and save logic. Change the config, the form updates automatically.
9
+
10
+ **The problem this solves:**
11
+ - MINISTRY-LMS has 27+ plugins, each needing admin forms
12
+ - Hand-coding forms is repetitive and error-prone
13
+ - Adding a field means editing 3+ files (form, API, validation)
14
+ - Schema-driven: add one line to config → form, API, and validation all update
15
+
16
+ ---
17
+
18
+ ## Architecture
19
+
20
+ ```
21
+ ┌───────────────────────────────┐
22
+ │ Content Schema (config file) │ ← Single source of truth
23
+ │ │
24
+ │ { │
25
+ │ name: "lessons", │
26
+ │ fields: [ │
27
+ │ { name: "title", │
28
+ │ type: "text", │
29
+ │ required: true }, │
30
+ │ { name: "body", │
31
+ │ type: "richtext" }, │
32
+ │ { name: "difficulty", │
33
+ │ type: "select", │
34
+ │ options: [...] } │
35
+ │ ] │
36
+ │ } │
37
+ └────────────┬──────────────────┘
38
+
39
+ ┌────────┴────────┐
40
+ │ │
41
+ ▼ ▼
42
+ ┌──────────┐ ┌──────────────┐
43
+ │ React │ │ Express API │
44
+ │ Form │ │ Validation │
45
+ │ (auto) │ │ (auto) │
46
+ └──────────┘ └──────────────┘
47
+ ```
48
+
49
+ ---
50
+
51
+ ## Content Schema Definition
52
+
53
+ ```js
54
+ // config/content-schemas.js
55
+ // Define ALL content types in one place
56
+
57
+ export const contentSchemas = {
58
+ lessons: {
59
+ label: 'Lesson',
60
+ labelPlural: 'Lessons',
61
+ table: 'lessons',
62
+ icon: 'BookOpen',
63
+ fields: [
64
+ {
65
+ name: 'title',
66
+ type: 'text',
67
+ label: 'Lesson Title',
68
+ required: true,
69
+ maxLength: 200,
70
+ placeholder: 'Enter lesson title...',
71
+ },
72
+ {
73
+ name: 'subtitle',
74
+ type: 'text',
75
+ label: 'Subtitle',
76
+ maxLength: 300,
77
+ },
78
+ {
79
+ name: 'body',
80
+ type: 'richtext',
81
+ label: 'Lesson Content',
82
+ required: true,
83
+ help: 'Use the toolbar to format text, add images, and embed media.',
84
+ },
85
+ {
86
+ name: 'cover_image',
87
+ type: 'image',
88
+ label: 'Cover Image',
89
+ help: 'Recommended: 1200x630px',
90
+ },
91
+ {
92
+ name: 'difficulty',
93
+ type: 'select',
94
+ label: 'Difficulty Level',
95
+ options: [
96
+ { value: 'beginner', label: 'Beginner' },
97
+ { value: 'intermediate', label: 'Intermediate' },
98
+ { value: 'advanced', label: 'Advanced' },
99
+ ],
100
+ defaultValue: 'beginner',
101
+ },
102
+ {
103
+ name: 'duration_minutes',
104
+ type: 'number',
105
+ label: 'Duration (minutes)',
106
+ min: 1,
107
+ max: 480,
108
+ },
109
+ {
110
+ name: 'is_published',
111
+ type: 'toggle',
112
+ label: 'Published',
113
+ defaultValue: false,
114
+ },
115
+ {
116
+ name: 'course_id',
117
+ type: 'reference',
118
+ label: 'Course',
119
+ references: { table: 'courses', labelField: 'title' },
120
+ required: true,
121
+ },
122
+ {
123
+ name: 'tags',
124
+ type: 'tags',
125
+ label: 'Tags',
126
+ help: 'Press Enter to add a tag',
127
+ },
128
+ {
129
+ name: 'publish_at',
130
+ type: 'datetime',
131
+ label: 'Scheduled Publish Date',
132
+ help: 'Leave empty to publish immediately',
133
+ },
134
+ ],
135
+ },
136
+
137
+ courses: {
138
+ label: 'Course',
139
+ labelPlural: 'Courses',
140
+ table: 'courses',
141
+ icon: 'GraduationCap',
142
+ fields: [
143
+ {
144
+ name: 'title',
145
+ type: 'text',
146
+ label: 'Course Title',
147
+ required: true,
148
+ maxLength: 200,
149
+ },
150
+ {
151
+ name: 'description',
152
+ type: 'richtext',
153
+ label: 'Description',
154
+ },
155
+ {
156
+ name: 'cover_image',
157
+ type: 'image',
158
+ label: 'Cover Image',
159
+ },
160
+ {
161
+ name: 'category',
162
+ type: 'select',
163
+ label: 'Category',
164
+ options: [
165
+ { value: 'bible-study', label: 'Bible Study' },
166
+ { value: 'leadership', label: 'Leadership' },
167
+ { value: 'worship', label: 'Worship' },
168
+ { value: 'youth', label: 'Youth Ministry' },
169
+ { value: 'outreach', label: 'Outreach' },
170
+ ],
171
+ },
172
+ {
173
+ name: 'instructor_id',
174
+ type: 'reference',
175
+ label: 'Instructor',
176
+ references: { table: 'users', labelField: 'name', filter: { role: 'teacher' } },
177
+ },
178
+ ],
179
+ },
180
+
181
+ announcements: {
182
+ label: 'Announcement',
183
+ labelPlural: 'Announcements',
184
+ table: 'announcements',
185
+ icon: 'Megaphone',
186
+ fields: [
187
+ {
188
+ name: 'title',
189
+ type: 'text',
190
+ label: 'Title',
191
+ required: true,
192
+ },
193
+ {
194
+ name: 'body',
195
+ type: 'richtext',
196
+ label: 'Content',
197
+ required: true,
198
+ },
199
+ {
200
+ name: 'priority',
201
+ type: 'select',
202
+ label: 'Priority',
203
+ options: [
204
+ { value: 'normal', label: 'Normal' },
205
+ { value: 'important', label: 'Important' },
206
+ { value: 'urgent', label: 'Urgent' },
207
+ ],
208
+ defaultValue: 'normal',
209
+ },
210
+ {
211
+ name: 'expires_at',
212
+ type: 'datetime',
213
+ label: 'Expiry Date',
214
+ },
215
+ ],
216
+ },
217
+ };
218
+ ```
219
+
220
+ ---
221
+
222
+ ## Supported Field Types
223
+
224
+ | Type | Renders As | Validation |
225
+ |------|-----------|------------|
226
+ | `text` | `<input type="text">` | maxLength, required, pattern |
227
+ | `number` | `<input type="number">` | min, max, required |
228
+ | `richtext` | TipTap editor or `<textarea>` | required, maxLength |
229
+ | `image` | Upload component + preview | file type, max size |
230
+ | `select` | `<select>` dropdown | required, options list |
231
+ | `toggle` | Switch/checkbox | boolean |
232
+ | `reference` | Searchable dropdown (loads from referenced table) | required |
233
+ | `tags` | Tag input with autocomplete | maxTags |
234
+ | `datetime` | Date + time picker | min/max date |
235
+ | `textarea` | `<textarea>` | maxLength, required |
236
+ | `email` | `<input type="email">` | email format |
237
+ | `url` | `<input type="url">` | URL format |
238
+ | `color` | Color picker | hex format |
239
+ | `json` | Code editor (monospace) | valid JSON |
240
+
241
+ ---
242
+
243
+ ## SchemaForm Component (The Generator)
244
+
245
+ ```jsx
246
+ // components/cms/SchemaForm.jsx
247
+ import { useState, useEffect } from 'react';
248
+ import DOMPurify from 'dompurify';
249
+
250
+ /**
251
+ * Auto-generates a complete form from a content schema definition.
252
+ *
253
+ * Props:
254
+ * schema — schema object from contentSchemas (e.g., contentSchemas.lessons)
255
+ * values — current field values (for editing existing records)
256
+ * onSubmit — async function(values) => save to API
257
+ * mode — "create" | "edit"
258
+ */
259
+ export default function SchemaForm({ schema, values = {}, onSubmit, mode = 'create' }) {
260
+ const [formData, setFormData] = useState({});
261
+ const [errors, setErrors] = useState({});
262
+ const [saving, setSaving] = useState(false);
263
+
264
+ // Initialize form data from defaults or existing values
265
+ useEffect(() => {
266
+ const initial = {};
267
+ schema.fields.forEach((field) => {
268
+ initial[field.name] = values[field.name] ?? field.defaultValue ?? '';
269
+ });
270
+ setFormData(initial);
271
+ }, [schema, values]);
272
+
273
+ const updateField = (name, value) => {
274
+ setFormData((prev) => ({ ...prev, [name]: value }));
275
+ // Clear error on change
276
+ if (errors[name]) {
277
+ setErrors((prev) => ({ ...prev, [name]: null }));
278
+ }
279
+ };
280
+
281
+ const validate = () => {
282
+ const newErrors = {};
283
+ schema.fields.forEach((field) => {
284
+ const val = formData[field.name];
285
+
286
+ if (field.required && (val === '' || val === null || val === undefined)) {
287
+ newErrors[field.name] = `${field.label} is required`;
288
+ }
289
+ if (field.maxLength && typeof val === 'string' && val.length > field.maxLength) {
290
+ newErrors[field.name] = `${field.label} must be ${field.maxLength} characters or less`;
291
+ }
292
+ if (field.min !== undefined && typeof val === 'number' && val < field.min) {
293
+ newErrors[field.name] = `${field.label} must be at least ${field.min}`;
294
+ }
295
+ if (field.max !== undefined && typeof val === 'number' && val > field.max) {
296
+ newErrors[field.name] = `${field.label} must be at most ${field.max}`;
297
+ }
298
+ });
299
+
300
+ setErrors(newErrors);
301
+ return Object.keys(newErrors).length === 0;
302
+ };
303
+
304
+ const handleSubmit = async (e) => {
305
+ e.preventDefault();
306
+ if (!validate()) return;
307
+
308
+ setSaving(true);
309
+ try {
310
+ // Sanitize any HTML fields before submitting
311
+ const sanitized = { ...formData };
312
+ schema.fields.forEach((field) => {
313
+ if (field.type === 'richtext' && sanitized[field.name]) {
314
+ sanitized[field.name] = DOMPurify.sanitize(sanitized[field.name]);
315
+ }
316
+ });
317
+ await onSubmit(sanitized);
318
+ } catch (err) {
319
+ console.error('Form submit failed:', err);
320
+ } finally {
321
+ setSaving(false);
322
+ }
323
+ };
324
+
325
+ return (
326
+ <form onSubmit={handleSubmit} style={{ maxWidth: '720px' }}>
327
+ <h2>{mode === 'create' ? `New ${schema.label}` : `Edit ${schema.label}`}</h2>
328
+
329
+ {schema.fields.map((field) => (
330
+ <FieldRenderer
331
+ key={field.name}
332
+ field={field}
333
+ value={formData[field.name]}
334
+ onChange={(val) => updateField(field.name, val)}
335
+ error={errors[field.name]}
336
+ />
337
+ ))}
338
+
339
+ <div style={{ marginTop: '24px', display: 'flex', gap: '12px' }}>
340
+ <button
341
+ type="submit"
342
+ disabled={saving}
343
+ style={{
344
+ background: '#3b82f6',
345
+ color: 'white',
346
+ border: 'none',
347
+ padding: '10px 24px',
348
+ borderRadius: '6px',
349
+ fontSize: '15px',
350
+ cursor: 'pointer',
351
+ }}
352
+ >
353
+ {saving ? 'Saving...' : mode === 'create' ? `Create ${schema.label}` : 'Save Changes'}
354
+ </button>
355
+ </div>
356
+ </form>
357
+ );
358
+ }
359
+ ```
360
+
361
+ ---
362
+
363
+ ## Field Renderer (Routes to Correct Input)
364
+
365
+ ```jsx
366
+ // components/cms/FieldRenderer.jsx
367
+ import { useState, useEffect } from 'react';
368
+
369
+ export default function FieldRenderer({ field, value, onChange, error }) {
370
+ const wrapperStyle = {
371
+ marginBottom: '20px',
372
+ };
373
+
374
+ const labelStyle = {
375
+ display: 'block',
376
+ fontWeight: '600',
377
+ marginBottom: '6px',
378
+ fontSize: '14px',
379
+ };
380
+
381
+ const inputStyle = {
382
+ width: '100%',
383
+ padding: '8px 12px',
384
+ border: error ? '1px solid #ef4444' : '1px solid #d1d5db',
385
+ borderRadius: '6px',
386
+ fontSize: '14px',
387
+ boxSizing: 'border-box',
388
+ };
389
+
390
+ const errorStyle = {
391
+ color: '#ef4444',
392
+ fontSize: '13px',
393
+ marginTop: '4px',
394
+ };
395
+
396
+ const helpStyle = {
397
+ color: '#6b7280',
398
+ fontSize: '13px',
399
+ marginTop: '4px',
400
+ };
401
+
402
+ const renderField = () => {
403
+ switch (field.type) {
404
+ case 'text':
405
+ case 'email':
406
+ case 'url':
407
+ return (
408
+ <input
409
+ type={field.type}
410
+ value={value || ''}
411
+ onChange={(e) => onChange(e.target.value)}
412
+ placeholder={field.placeholder || ''}
413
+ maxLength={field.maxLength}
414
+ style={inputStyle}
415
+ />
416
+ );
417
+
418
+ case 'number':
419
+ return (
420
+ <input
421
+ type="number"
422
+ value={value ?? ''}
423
+ onChange={(e) => onChange(e.target.value ? Number(e.target.value) : '')}
424
+ min={field.min}
425
+ max={field.max}
426
+ style={inputStyle}
427
+ />
428
+ );
429
+
430
+ case 'textarea':
431
+ case 'richtext':
432
+ // For production, swap richtext with TipTap from tiptap-minimal-setup.md
433
+ return (
434
+ <textarea
435
+ value={value || ''}
436
+ onChange={(e) => onChange(e.target.value)}
437
+ rows={field.type === 'richtext' ? 10 : 4}
438
+ style={{ ...inputStyle, resize: 'vertical', fontFamily: 'inherit' }}
439
+ />
440
+ );
441
+
442
+ case 'select':
443
+ return (
444
+ <select
445
+ value={value || ''}
446
+ onChange={(e) => onChange(e.target.value)}
447
+ style={inputStyle}
448
+ >
449
+ <option value="">Select {field.label}...</option>
450
+ {(field.options || []).map((opt) => (
451
+ <option key={opt.value} value={opt.value}>
452
+ {opt.label}
453
+ </option>
454
+ ))}
455
+ </select>
456
+ );
457
+
458
+ case 'toggle':
459
+ return (
460
+ <label style={{ display: 'flex', alignItems: 'center', gap: '8px', cursor: 'pointer' }}>
461
+ <input
462
+ type="checkbox"
463
+ checked={!!value}
464
+ onChange={(e) => onChange(e.target.checked)}
465
+ style={{ width: '18px', height: '18px' }}
466
+ />
467
+ <span>{value ? 'Yes' : 'No'}</span>
468
+ </label>
469
+ );
470
+
471
+ case 'datetime':
472
+ return (
473
+ <input
474
+ type="datetime-local"
475
+ value={value || ''}
476
+ onChange={(e) => onChange(e.target.value)}
477
+ style={inputStyle}
478
+ />
479
+ );
480
+
481
+ case 'image':
482
+ return (
483
+ <div>
484
+ {value && (
485
+ <img
486
+ src={value}
487
+ alt="Preview"
488
+ style={{
489
+ maxWidth: '200px',
490
+ maxHeight: '120px',
491
+ borderRadius: '4px',
492
+ marginBottom: '8px',
493
+ display: 'block',
494
+ }}
495
+ />
496
+ )}
497
+ <input
498
+ type="text"
499
+ value={value || ''}
500
+ onChange={(e) => onChange(e.target.value)}
501
+ placeholder="Image URL"
502
+ style={inputStyle}
503
+ />
504
+ </div>
505
+ );
506
+
507
+ case 'reference':
508
+ return <ReferenceField field={field} value={value} onChange={onChange} style={inputStyle} />;
509
+
510
+ case 'tags':
511
+ return <TagsField value={value} onChange={onChange} />;
512
+
513
+ case 'color':
514
+ return (
515
+ <input
516
+ type="color"
517
+ value={value || '#000000'}
518
+ onChange={(e) => onChange(e.target.value)}
519
+ style={{ width: '60px', height: '36px', border: 'none', cursor: 'pointer' }}
520
+ />
521
+ );
522
+
523
+ case 'json':
524
+ return (
525
+ <textarea
526
+ value={typeof value === 'string' ? value : JSON.stringify(value, null, 2)}
527
+ onChange={(e) => onChange(e.target.value)}
528
+ rows={8}
529
+ style={{ ...inputStyle, fontFamily: 'monospace', fontSize: '13px' }}
530
+ />
531
+ );
532
+
533
+ default:
534
+ return <div>Unknown field type: {field.type}</div>;
535
+ }
536
+ };
537
+
538
+ return (
539
+ <div style={wrapperStyle}>
540
+ <label style={labelStyle}>
541
+ {field.label}
542
+ {field.required && <span style={{ color: '#ef4444' }}> *</span>}
543
+ </label>
544
+ {renderField()}
545
+ {error && <div style={errorStyle}>{error}</div>}
546
+ {field.help && !error && <div style={helpStyle}>{field.help}</div>}
547
+ </div>
548
+ );
549
+ }
550
+
551
+ // Reference field — loads options from another table
552
+ function ReferenceField({ field, value, onChange, style }) {
553
+ const [options, setOptions] = useState([]);
554
+ const [loading, setLoading] = useState(true);
555
+
556
+ useEffect(() => {
557
+ const load = async () => {
558
+ try {
559
+ const { table, labelField, filter } = field.references;
560
+ let url = `/api/${table}?limit=100`;
561
+ if (filter) {
562
+ Object.entries(filter).forEach(([k, v]) => {
563
+ url += `&${k}=${v}`;
564
+ });
565
+ }
566
+ const res = await fetch(url);
567
+ const data = await res.json();
568
+ setOptions(
569
+ (data.rows || data).map((row) => ({
570
+ value: row.id,
571
+ label: row[labelField] || row.name || row.title || row.id,
572
+ }))
573
+ );
574
+ } catch (err) {
575
+ console.error(`Failed to load ${field.references.table}:`, err);
576
+ } finally {
577
+ setLoading(false);
578
+ }
579
+ };
580
+ load();
581
+ }, [field.references]);
582
+
583
+ if (loading) return <div>Loading...</div>;
584
+
585
+ return (
586
+ <select value={value || ''} onChange={(e) => onChange(e.target.value)} style={style}>
587
+ <option value="">Select {field.label}...</option>
588
+ {options.map((opt) => (
589
+ <option key={opt.value} value={opt.value}>
590
+ {opt.label}
591
+ </option>
592
+ ))}
593
+ </select>
594
+ );
595
+ }
596
+
597
+ // Tags field — enter-to-add tag input
598
+ function TagsField({ value, onChange }) {
599
+ const tags = Array.isArray(value) ? value : [];
600
+ const [input, setInput] = useState('');
601
+
602
+ const addTag = () => {
603
+ const tag = input.trim();
604
+ if (tag && !tags.includes(tag)) {
605
+ onChange([...tags, tag]);
606
+ }
607
+ setInput('');
608
+ };
609
+
610
+ const removeTag = (index) => {
611
+ onChange(tags.filter((_, i) => i !== index));
612
+ };
613
+
614
+ return (
615
+ <div>
616
+ <div style={{ display: 'flex', flexWrap: 'wrap', gap: '6px', marginBottom: '8px' }}>
617
+ {tags.map((tag, i) => (
618
+ <span
619
+ key={i}
620
+ style={{
621
+ background: '#e0e7ff',
622
+ color: '#3730a3',
623
+ padding: '4px 10px',
624
+ borderRadius: '16px',
625
+ fontSize: '13px',
626
+ display: 'flex',
627
+ alignItems: 'center',
628
+ gap: '4px',
629
+ }}
630
+ >
631
+ {tag}
632
+ <button
633
+ type="button"
634
+ onClick={() => removeTag(i)}
635
+ style={{
636
+ background: 'none',
637
+ border: 'none',
638
+ color: '#6366f1',
639
+ cursor: 'pointer',
640
+ padding: '0',
641
+ fontSize: '16px',
642
+ lineHeight: '1',
643
+ }}
644
+ >
645
+ x
646
+ </button>
647
+ </span>
648
+ ))}
649
+ </div>
650
+ <input
651
+ type="text"
652
+ value={input}
653
+ onChange={(e) => setInput(e.target.value)}
654
+ onKeyDown={(e) => {
655
+ if (e.key === 'Enter') {
656
+ e.preventDefault();
657
+ addTag();
658
+ }
659
+ }}
660
+ placeholder="Type and press Enter to add"
661
+ style={{
662
+ width: '100%',
663
+ padding: '8px 12px',
664
+ border: '1px solid #d1d5db',
665
+ borderRadius: '6px',
666
+ fontSize: '14px',
667
+ }}
668
+ />
669
+ </div>
670
+ );
671
+ }
672
+ ```
673
+
674
+ ---
675
+
676
+ ## Server-Side Validation (Auto-Generated from Schema)
677
+
678
+ ```js
679
+ // server/middleware/schemaValidator.js
680
+ // Generates Express validation middleware from the same schema
681
+
682
+ const { contentSchemas } = require('../../config/content-schemas');
683
+
684
+ function createValidator(schemaName) {
685
+ const schema = contentSchemas[schemaName];
686
+ if (!schema) throw new Error(`Unknown schema: ${schemaName}`);
687
+
688
+ return (req, res, next) => {
689
+ const errors = [];
690
+ const body = req.body;
691
+
692
+ schema.fields.forEach((field) => {
693
+ const val = body[field.name];
694
+
695
+ if (field.required && (val === '' || val === null || val === undefined)) {
696
+ errors.push({ field: field.name, message: `${field.label} is required` });
697
+ }
698
+
699
+ if (val !== undefined && val !== null && val !== '') {
700
+ if (field.maxLength && typeof val === 'string' && val.length > field.maxLength) {
701
+ errors.push({
702
+ field: field.name,
703
+ message: `${field.label} exceeds max length of ${field.maxLength}`,
704
+ });
705
+ }
706
+ if (field.min !== undefined && typeof val === 'number' && val < field.min) {
707
+ errors.push({
708
+ field: field.name,
709
+ message: `${field.label} must be at least ${field.min}`,
710
+ });
711
+ }
712
+ if (field.max !== undefined && typeof val === 'number' && val > field.max) {
713
+ errors.push({
714
+ field: field.name,
715
+ message: `${field.label} must be at most ${field.max}`,
716
+ });
717
+ }
718
+ if (field.type === 'email' && !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(val)) {
719
+ errors.push({ field: field.name, message: 'Invalid email format' });
720
+ }
721
+ if (field.type === 'url' && !/^https?:\/\/.+/.test(val)) {
722
+ errors.push({ field: field.name, message: 'Invalid URL format' });
723
+ }
724
+ }
725
+ });
726
+
727
+ if (errors.length > 0) {
728
+ return res.status(400).json({ errors });
729
+ }
730
+
731
+ next();
732
+ };
733
+ }
734
+
735
+ module.exports = { createValidator };
736
+ ```
737
+
738
+ Usage:
739
+
740
+ ```js
741
+ // server/routes/lessons.js
742
+ const { createValidator } = require('../middleware/schemaValidator');
743
+
744
+ router.post('/api/lessons', authenticate, createValidator('lessons'), async (req, res) => {
745
+ // req.body is already validated — safe to insert
746
+ // ...
747
+ });
748
+ ```
749
+
750
+ ---
751
+
752
+ ## Auto-Generated CRUD Routes (Optional)
753
+
754
+ ```js
755
+ // server/routes/schemaCrud.js
756
+ // Generates full CRUD endpoints from schema definitions
757
+
758
+ const { contentSchemas } = require('../../config/content-schemas');
759
+ const { createValidator } = require('../middleware/schemaValidator');
760
+
761
+ function registerSchemaRoutes(router, schemaName) {
762
+ const schema = contentSchemas[schemaName];
763
+ const table = schema.table;
764
+
765
+ // LIST
766
+ router.get(`/api/${table}`, authenticate, async (req, res) => {
767
+ const page = parseInt(req.query.page) || 1;
768
+ const limit = parseInt(req.query.limit) || 20;
769
+ const offset = (page - 1) * limit;
770
+
771
+ const rows = await db.query(`SELECT * FROM ${table} ORDER BY created_at DESC LIMIT ? OFFSET ?`, [limit, offset]);
772
+ const [{ count }] = await db.query(`SELECT COUNT(*) as count FROM ${table}`);
773
+
774
+ res.json({ rows, total: count, page, limit });
775
+ });
776
+
777
+ // GET ONE
778
+ router.get(`/api/${table}/:id`, authenticate, async (req, res) => {
779
+ const [row] = await db.query(`SELECT * FROM ${table} WHERE id = ?`, [req.params.id]);
780
+ if (!row) return res.status(404).json({ error: 'Not found' });
781
+ res.json(row);
782
+ });
783
+
784
+ // CREATE
785
+ router.post(`/api/${table}`, authenticate, authorize(['admin', 'teacher']), createValidator(schemaName), async (req, res) => {
786
+ const fields = schema.fields.map((f) => f.name).filter((f) => req.body[f] !== undefined);
787
+ const values = fields.map((f) => req.body[f]);
788
+ const placeholders = fields.map(() => '?').join(', ');
789
+
790
+ await db.query(`INSERT INTO ${table} (${fields.join(', ')}) VALUES (${placeholders})`, values);
791
+
792
+ res.status(201).json({ message: `${schema.label} created` });
793
+ });
794
+
795
+ // UPDATE
796
+ router.put(`/api/${table}/:id`, authenticate, authorize(['admin', 'teacher']), createValidator(schemaName), async (req, res) => {
797
+ const fields = schema.fields.map((f) => f.name).filter((f) => req.body[f] !== undefined);
798
+ const setClauses = fields.map((f) => `${f} = ?`);
799
+ const values = [...fields.map((f) => req.body[f]), req.params.id];
800
+
801
+ await db.query(`UPDATE ${table} SET ${setClauses.join(', ')}, updated_at = NOW() WHERE id = ?`, values);
802
+
803
+ res.json({ message: `${schema.label} updated` });
804
+ });
805
+
806
+ // DELETE
807
+ router.delete(`/api/${table}/:id`, authenticate, authorize(['admin']), async (req, res) => {
808
+ await db.query(`DELETE FROM ${table} WHERE id = ?`, [req.params.id]);
809
+ res.json({ message: `${schema.label} deleted` });
810
+ });
811
+ }
812
+
813
+ module.exports = { registerSchemaRoutes };
814
+ ```
815
+
816
+ ---
817
+
818
+ ## Integration With Existing Skills
819
+
820
+ | Skill | How It Connects |
821
+ |-------|----------------|
822
+ | `inline-visual-editing.md` | SchemaForm handles admin forms; inline editing handles on-page editing |
823
+ | `tiptap-minimal-setup.md` | Swap the `richtext` textarea for TipTap in FieldRenderer |
824
+ | `content-publishing-states.md` | Add `status` field type that renders the state machine controls |
825
+ | `media-manager-abstraction.md` | Swap the `image` text input for the media manager upload widget |
826
+
827
+ ---
828
+
829
+ ## Adding a New Content Type
830
+
831
+ To add a completely new content type (e.g., "devotionals"):
832
+
833
+ 1. Add schema to `config/content-schemas.js`
834
+ 2. Create the database table (MySQL or PostgreSQL)
835
+ 3. Register routes: `registerSchemaRoutes(router, 'devotionals')`
836
+ 4. Add to admin nav menu
837
+
838
+ That's it — 4 steps. The form, validation, and CRUD API are all auto-generated.