@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,708 @@
1
+ # GraphQL Content Queries
2
+
3
+ > Production GraphQL patterns for content platforms: schema design, N+1 prevention with DataLoader, cursor pagination, mutations, and Apollo Client setup.
4
+
5
+ **When to use:** Building a content API where different consumers (web, mobile, third-party) need different shapes of the same data, or when content is deeply relational (posts → authors → categories → related posts).
6
+ **Stack:** Node.js/Express, graphql-yoga or Apollo Server, DataLoader, PostgreSQL, Apollo Client (React)
7
+
8
+ ---
9
+
10
+ ## Schema: Content Types
11
+
12
+ ```graphql
13
+ # schema.graphql
14
+
15
+ scalar DateTime
16
+ scalar JSON # for TipTap's body_json
17
+
18
+ type Post {
19
+ id: ID!
20
+ title: String!
21
+ slug: String!
22
+ excerpt: String
23
+ bodyHtml: String
24
+ bodyJson: JSON
25
+ featuredImage: MediaAsset
26
+ status: PostStatus!
27
+ publishedAt: DateTime
28
+ scheduledAt: DateTime
29
+ readingTimeMinutes: Int
30
+ wordCount: Int
31
+ tags: [String!]!
32
+
33
+ # Relationships — these trigger DataLoader
34
+ author: Author!
35
+ categories: [Category!]!
36
+ relatedPosts: [Post!]!
37
+ }
38
+
39
+ type Author {
40
+ id: ID!
41
+ name: String!
42
+ email: String!
43
+ bio: String
44
+ avatar: String
45
+ posts(first: Int, after: String): PostConnection!
46
+ }
47
+
48
+ type Category {
49
+ id: ID!
50
+ name: String!
51
+ slug: String!
52
+ posts(first: Int, after: String, status: PostStatus): PostConnection!
53
+ }
54
+
55
+ type MediaAsset {
56
+ url: String!
57
+ alt: String
58
+ width: Int
59
+ height: Int
60
+ mimeType: String
61
+ }
62
+
63
+ enum PostStatus {
64
+ DRAFT
65
+ IN_REVIEW
66
+ SCHEDULED
67
+ PUBLISHED
68
+ ARCHIVED
69
+ }
70
+
71
+ # Cursor-based pagination (Relay spec)
72
+ type PostConnection {
73
+ edges: [PostEdge!]!
74
+ pageInfo: PageInfo!
75
+ totalCount: Int!
76
+ }
77
+
78
+ type PostEdge {
79
+ node: Post!
80
+ cursor: String!
81
+ }
82
+
83
+ type PageInfo {
84
+ hasNextPage: Boolean!
85
+ hasPreviousPage: Boolean!
86
+ startCursor: String
87
+ endCursor: String
88
+ }
89
+ ```
90
+
91
+ ---
92
+
93
+ ## Query Schema
94
+
95
+ ```graphql
96
+ type Query {
97
+ # Single post
98
+ post(slug: String!): Post
99
+ postById(id: ID!): Post
100
+
101
+ # List posts
102
+ posts(
103
+ first: Int = 20
104
+ after: String
105
+ last: Int
106
+ before: String
107
+ filter: PostFilter
108
+ orderBy: PostOrderBy
109
+ ): PostConnection!
110
+
111
+ # Search
112
+ searchPosts(query: String!, first: Int = 20, after: String): PostConnection!
113
+
114
+ # Authors
115
+ author(id: ID!): Author
116
+ authors(first: Int = 20, after: String): AuthorConnection!
117
+
118
+ # Categories
119
+ category(slug: String!): Category
120
+ categories: [Category!]!
121
+ }
122
+
123
+ input PostFilter {
124
+ status: PostStatus
125
+ categoryId: ID
126
+ tag: String
127
+ authorId: ID
128
+ publishedAfter: DateTime
129
+ publishedBefore: DateTime
130
+ }
131
+
132
+ enum PostOrderBy {
133
+ PUBLISHED_AT_DESC
134
+ PUBLISHED_AT_ASC
135
+ TITLE_ASC
136
+ CREATED_AT_DESC
137
+ }
138
+ ```
139
+
140
+ ---
141
+
142
+ ## Mutation Schema
143
+
144
+ ```graphql
145
+ type Mutation {
146
+ createPost(input: CreatePostInput!): PostMutationResult!
147
+ updatePost(id: ID!, input: UpdatePostInput!): PostMutationResult!
148
+ publishPost(id: ID!): PostMutationResult!
149
+ schedulePost(id: ID!, scheduledAt: DateTime!): PostMutationResult!
150
+ archivePost(id: ID!): PostMutationResult!
151
+ deletePost(id: ID!): DeleteResult!
152
+ }
153
+
154
+ input CreatePostInput {
155
+ title: String!
156
+ slug: String
157
+ excerpt: String
158
+ bodyJson: JSON
159
+ tags: [String!]
160
+ categoryIds: [ID!]
161
+ featuredImageId: ID
162
+ }
163
+
164
+ input UpdatePostInput {
165
+ title: String
166
+ slug: String
167
+ excerpt: String
168
+ bodyJson: JSON
169
+ tags: [String!]
170
+ categoryIds: [ID!]
171
+ }
172
+
173
+ # GraphQL errors live in the result type, not HTTP status codes
174
+ type PostMutationResult {
175
+ post: Post
176
+ errors: [UserError!]
177
+ }
178
+
179
+ type DeleteResult {
180
+ id: ID
181
+ errors: [UserError!]
182
+ }
183
+
184
+ type UserError {
185
+ field: String
186
+ message: String!
187
+ code: String
188
+ }
189
+ ```
190
+
191
+ ---
192
+
193
+ ## Resolvers with DataLoader (N+1 Prevention)
194
+
195
+ ### The N+1 Problem
196
+
197
+ ```graphql
198
+ # This query looks innocent but causes 1 + N DB queries without DataLoader:
199
+ query {
200
+ posts(first: 20) {
201
+ edges {
202
+ node {
203
+ title
204
+ author { # This fires a SELECT for EACH of the 20 posts = 21 queries total
205
+ name
206
+ }
207
+ }
208
+ }
209
+ }
210
+ }
211
+ ```
212
+
213
+ ### DataLoader Solution
214
+
215
+ ```typescript
216
+ // lib/data-loaders.ts
217
+ import DataLoader from 'dataloader'; // npm install dataloader
218
+ import { Pool } from 'pg';
219
+
220
+ export function createLoaders(db: Pool) {
221
+ return {
222
+ // Batch-load authors by ID — fires ONE query for all unique author IDs
223
+ authorLoader: new DataLoader<string, Author>(async (authorIds) => {
224
+ const { rows } = await db.query(
225
+ 'SELECT * FROM users WHERE id = ANY($1::uuid[])',
226
+ [authorIds]
227
+ );
228
+ // DataLoader requires results in the same order as the input keys
229
+ const authorMap = new Map(rows.map(r => [r.id, r]));
230
+ return authorIds.map(id => authorMap.get(id) ?? new Error(`Author not found: ${id}`));
231
+ }),
232
+
233
+ // Batch-load categories by post ID
234
+ postCategoriesLoader: new DataLoader<string, Category[]>(async (postIds) => {
235
+ const { rows } = await db.query(`
236
+ SELECT pc.post_id, c.id, c.name, c.slug
237
+ FROM post_categories pc
238
+ JOIN categories c ON c.id = pc.category_id
239
+ WHERE pc.post_id = ANY($1::uuid[])
240
+ ORDER BY c.name
241
+ `, [postIds]);
242
+
243
+ // Group categories by post_id
244
+ const categoryMap = new Map<string, Category[]>();
245
+ postIds.forEach(id => categoryMap.set(id, []));
246
+ rows.forEach(row => {
247
+ categoryMap.get(row.post_id)?.push({ id: row.id, name: row.name, slug: row.slug });
248
+ });
249
+ return postIds.map(id => categoryMap.get(id) ?? []);
250
+ }),
251
+
252
+ // Batch-load related posts (last 3 posts in same category)
253
+ // Uses ROW_NUMBER() OVER PARTITION to get top 3 per base post — not a
254
+ // global LIMIT which would return at most 3 rows total across all posts.
255
+ relatedPostsLoader: new DataLoader<string, Post[]>(async (postIds) => {
256
+ const { rows } = await db.query(`
257
+ SELECT base_post_id, id, title, slug, excerpt, published_at, reading_time_minutes
258
+ FROM (
259
+ SELECT
260
+ base.id AS base_post_id,
261
+ p.id, p.title, p.slug, p.excerpt, p.published_at, p.reading_time_minutes,
262
+ ROW_NUMBER() OVER (PARTITION BY base.id ORDER BY p.published_at DESC) AS rn
263
+ FROM content base
264
+ JOIN post_categories pc_base ON pc_base.post_id = base.id
265
+ JOIN post_categories pc ON pc.category_id = pc_base.category_id AND pc.post_id != base.id
266
+ JOIN content p ON p.id = pc.post_id
267
+ WHERE base.id = ANY($1::uuid[])
268
+ AND p.status = 'published'
269
+ ) ranked
270
+ WHERE rn <= 3
271
+ ORDER BY base_post_id, published_at DESC
272
+ `, [postIds]);
273
+
274
+ const relatedMap = new Map<string, Post[]>();
275
+ postIds.forEach(id => relatedMap.set(id, []));
276
+ rows.forEach(row => {
277
+ const list = relatedMap.get(row.base_post_id) ?? [];
278
+ if (list.length < 3) {
279
+ list.push(row);
280
+ relatedMap.set(row.base_post_id, list);
281
+ }
282
+ });
283
+ return postIds.map(id => relatedMap.get(id) ?? []);
284
+ }),
285
+ };
286
+ }
287
+
288
+ export type Loaders = ReturnType<typeof createLoaders>;
289
+ ```
290
+
291
+ ### Resolver Implementation
292
+
293
+ ```typescript
294
+ // resolvers/post-resolvers.ts
295
+ import { buildCursor, parseCursor, applyPagination } from '../lib/pagination';
296
+
297
+ export const postResolvers = {
298
+ Query: {
299
+ post: async (_: unknown, { slug }: { slug: string }, { db }) => {
300
+ const { rows } = await db.query(
301
+ 'SELECT * FROM content WHERE slug = $1 AND status = $2',
302
+ [slug, 'published']
303
+ );
304
+ return rows[0] ?? null;
305
+ },
306
+
307
+ posts: async (_: unknown, args: PostsArgs, { db }) => {
308
+ const { first = 20, after, filter = {}, orderBy = 'PUBLISHED_AT_DESC' } = args;
309
+
310
+ const conditions: string[] = ["c.status = 'published'"];
311
+ const params: unknown[] = [];
312
+ let paramIdx = 1;
313
+
314
+ if (filter.categoryId) {
315
+ conditions.push(`EXISTS (
316
+ SELECT 1 FROM post_categories pc
317
+ WHERE pc.post_id = c.id AND pc.category_id = $${paramIdx++}
318
+ )`);
319
+ params.push(filter.categoryId);
320
+ }
321
+
322
+ if (filter.tag) {
323
+ conditions.push(`$${paramIdx++} = ANY(c.tags)`);
324
+ params.push(filter.tag);
325
+ }
326
+
327
+ // Cursor pagination
328
+ if (after) {
329
+ const cursor = parseCursor(after);
330
+ conditions.push(`(c.published_at, c.id) < ($${paramIdx++}, $${paramIdx++})`);
331
+ params.push(cursor.publishedAt, cursor.id);
332
+ }
333
+
334
+ const orderClause = {
335
+ PUBLISHED_AT_DESC: 'c.published_at DESC, c.id DESC',
336
+ PUBLISHED_AT_ASC: 'c.published_at ASC, c.id ASC',
337
+ TITLE_ASC: 'c.title ASC, c.id ASC',
338
+ CREATED_AT_DESC: 'c.created_at DESC, c.id DESC',
339
+ }[orderBy];
340
+
341
+ params.push(first + 1); // fetch one extra to check hasNextPage
342
+
343
+ const { rows } = await db.query(`
344
+ SELECT c.*, COUNT(*) OVER() AS total_count
345
+ FROM content c
346
+ WHERE ${conditions.join(' AND ')}
347
+ ORDER BY ${orderClause}
348
+ LIMIT $${paramIdx}
349
+ `, params);
350
+
351
+ const hasNextPage = rows.length > first;
352
+ const edges = rows.slice(0, first).map(row => ({
353
+ node: row,
354
+ cursor: buildCursor({ publishedAt: row.published_at, id: row.id }),
355
+ }));
356
+
357
+ return {
358
+ edges,
359
+ totalCount: rows[0]?.total_count ? parseInt(rows[0].total_count, 10) : 0,
360
+ pageInfo: {
361
+ hasNextPage,
362
+ hasPreviousPage: !!after,
363
+ startCursor: edges[0]?.cursor ?? null,
364
+ endCursor: edges[edges.length - 1]?.cursor ?? null,
365
+ },
366
+ };
367
+ },
368
+
369
+ searchPosts: async (_: unknown, { query, first = 20, after }: SearchArgs, { db }) => {
370
+ const { rows } = await db.query(`
371
+ SELECT *, ts_rank(search_vector, q) AS rank, COUNT(*) OVER() AS total_count
372
+ FROM content, websearch_to_tsquery('english', $1) AS q
373
+ WHERE status = 'published' AND search_vector @@ q
374
+ ORDER BY rank DESC, published_at DESC
375
+ LIMIT $2
376
+ `, [query, first + 1]);
377
+
378
+ const hasNextPage = rows.length > first;
379
+ const edges = rows.slice(0, first).map(row => ({
380
+ node: row,
381
+ cursor: buildCursor({ rank: row.rank, id: row.id }),
382
+ }));
383
+
384
+ return {
385
+ edges,
386
+ totalCount: rows[0]?.total_count ? parseInt(rows[0].total_count, 10) : 0,
387
+ pageInfo: {
388
+ hasNextPage,
389
+ hasPreviousPage: false, // search doesn't support backwards pagination
390
+ startCursor: edges[0]?.cursor ?? null,
391
+ endCursor: edges[edges.length - 1]?.cursor ?? null,
392
+ },
393
+ };
394
+ },
395
+ },
396
+
397
+ // Field resolvers — these use DataLoader for batching
398
+ Post: {
399
+ author: (post: Post, _: unknown, { loaders }: { loaders: Loaders }) =>
400
+ loaders.authorLoader.load(post.author_id),
401
+
402
+ categories: (post: Post, _: unknown, { loaders }: { loaders: Loaders }) =>
403
+ loaders.postCategoriesLoader.load(post.id),
404
+
405
+ relatedPosts: (post: Post, _: unknown, { loaders }: { loaders: Loaders }) =>
406
+ loaders.relatedPostsLoader.load(post.id),
407
+
408
+ // Computed fields
409
+ bodyHtml: (post: Post) => post.body_html ?? '',
410
+ bodyJson: (post: Post) => post.body_json ?? null,
411
+ },
412
+
413
+ // Mutations
414
+ Mutation: {
415
+ publishPost: async (_: unknown, { id }: { id: string }, { db, user }) => {
416
+ if (!user) return { post: null, errors: [{ message: 'Unauthorized', code: 'UNAUTHORIZED' }] };
417
+
418
+ const { rows } = await db.query(
419
+ 'UPDATE content SET status = $1, published_at = NOW() WHERE id = $2 AND status = $3 RETURNING *',
420
+ ['published', id, 'in_review']
421
+ );
422
+
423
+ if (!rows[0]) {
424
+ return { post: null, errors: [{ message: 'Post not found or not in review', code: 'NOT_FOUND' }] };
425
+ }
426
+
427
+ return { post: rows[0], errors: [] };
428
+ },
429
+ },
430
+ };
431
+ ```
432
+
433
+ ---
434
+
435
+ ## Cursor-Based Pagination Utilities
436
+
437
+ ```typescript
438
+ // lib/pagination.ts
439
+
440
+ interface CursorData {
441
+ [key: string]: string | number | Date;
442
+ }
443
+
444
+ // Cursors are base64-encoded JSON — opaque to clients
445
+ export function buildCursor(data: CursorData): string {
446
+ return Buffer.from(JSON.stringify(data)).toString('base64url');
447
+ }
448
+
449
+ export function parseCursor(cursor: string): CursorData {
450
+ try {
451
+ return JSON.parse(Buffer.from(cursor, 'base64url').toString('utf-8'));
452
+ } catch {
453
+ throw new Error('Invalid cursor');
454
+ }
455
+ }
456
+ ```
457
+
458
+ ---
459
+
460
+ ## Error Handling in GraphQL
461
+
462
+ **CRITICAL: Do NOT throw HTTP errors in GraphQL resolvers.** Return errors in the result type.
463
+
464
+ ```typescript
465
+ // Wrong:
466
+ throw new Error('Unauthorized'); // This returns a 200 with an error in the "errors" array (GraphQL spec)
467
+ // but breaks client error handling
468
+
469
+ // Correct pattern: UserError in the result type
470
+ return {
471
+ post: null,
472
+ errors: [
473
+ {
474
+ field: 'id',
475
+ message: 'Post not found',
476
+ code: 'NOT_FOUND',
477
+ }
478
+ ]
479
+ };
480
+
481
+ // For unrecoverable/unexpected errors, throwing IS correct:
482
+ // (GraphQL will catch it and put it in the top-level "errors" array)
483
+ throw new Error('Database connection failed'); // OK for internal errors
484
+ ```
485
+
486
+ ---
487
+
488
+ ## Caching: GET Requests for CDN Cacheability
489
+
490
+ ```typescript
491
+ // GraphQL over GET (persisted queries) — CDN-cacheable
492
+ // Client sends query hash, server returns response
493
+
494
+ // Apollo Server: Automatic Persisted Queries (APQ)
495
+ import { ApolloServer } from '@apollo/server';
496
+ import { createPersistedQueryLink } from '@apollo/client/link/persisted-queries';
497
+ import { generatePersistedQueryIdsFromOperation } from '@apollo/generate-persisted-query-manifest';
498
+
499
+ // This converts POST /graphql to GET /graphql?extensions={"persistedQuery":{...}}
500
+ // CDNs can cache GET requests — POST requests are never cached
501
+
502
+ // Client setup:
503
+ import { ApolloClient, InMemoryCache, createHttpLink } from '@apollo/client';
504
+ import { createPersistedQueryLink } from '@apollo/client/link/persisted-queries';
505
+ import { sha256 } from 'crypto-hash';
506
+
507
+ const persistedQueriesLink = createPersistedQueryLink({ sha256 });
508
+ const httpLink = createHttpLink({ uri: '/api/graphql', useGETForQueries: true });
509
+
510
+ export const apolloClient = new ApolloClient({
511
+ link: persistedQueriesLink.concat(httpLink),
512
+ cache: new InMemoryCache({
513
+ typePolicies: {
514
+ Post: { keyFields: ['id'] },
515
+ PostConnection: {
516
+ keyArgs: ['filter', 'orderBy'],
517
+ merge(existing, incoming, { args }) {
518
+ const existingEdges = existing?.edges ?? [];
519
+ const incomingEdges = incoming.edges ?? [];
520
+ return {
521
+ ...incoming,
522
+ edges: args?.after ? [...existingEdges, ...incomingEdges] : incomingEdges,
523
+ };
524
+ },
525
+ },
526
+ },
527
+ }),
528
+ });
529
+ ```
530
+
531
+ ---
532
+
533
+ ## Apollo Client React Setup
534
+
535
+ ```tsx
536
+ // lib/apollo-provider.tsx
537
+ 'use client';
538
+ import { ApolloProvider } from '@apollo/client';
539
+ import { apolloClient } from './apollo-client';
540
+
541
+ export function ApolloClientProvider({ children }: { children: React.ReactNode }) {
542
+ return <ApolloProvider client={apolloClient}>{children}</ApolloProvider>;
543
+ }
544
+
545
+ // hooks/usePosts.ts
546
+ import { useQuery, gql } from '@apollo/client';
547
+
548
+ const POST_LIST_FRAGMENT = gql`
549
+ fragment PostListItem on Post {
550
+ id
551
+ title
552
+ slug
553
+ excerpt
554
+ publishedAt
555
+ readingTimeMinutes
556
+ author {
557
+ id
558
+ name
559
+ avatar
560
+ }
561
+ categories {
562
+ id
563
+ name
564
+ slug
565
+ }
566
+ tags
567
+ }
568
+ `;
569
+
570
+ const GET_POSTS = gql`
571
+ ${POST_LIST_FRAGMENT}
572
+ query GetPosts($first: Int, $after: String, $filter: PostFilter) {
573
+ posts(first: $first, after: $after, filter: $filter) {
574
+ edges {
575
+ node { ...PostListItem }
576
+ cursor
577
+ }
578
+ pageInfo {
579
+ hasNextPage
580
+ endCursor
581
+ }
582
+ totalCount
583
+ }
584
+ }
585
+ `;
586
+
587
+ export function usePosts(filter?: PostFilter) {
588
+ const { data, loading, error, fetchMore } = useQuery(GET_POSTS, {
589
+ variables: { first: 20, filter },
590
+ });
591
+
592
+ const loadMore = () => {
593
+ const { endCursor, hasNextPage } = data?.posts.pageInfo ?? {};
594
+ if (!hasNextPage) return;
595
+
596
+ fetchMore({
597
+ variables: { after: endCursor },
598
+ updateQuery: (prev, { fetchMoreResult }) => {
599
+ if (!fetchMoreResult) return prev;
600
+ return {
601
+ posts: {
602
+ ...fetchMoreResult.posts,
603
+ edges: [...prev.posts.edges, ...fetchMoreResult.posts.edges],
604
+ },
605
+ };
606
+ },
607
+ });
608
+ };
609
+
610
+ return {
611
+ posts: data?.posts.edges.map(e => e.node) ?? [],
612
+ totalCount: data?.posts.totalCount ?? 0,
613
+ hasNextPage: data?.posts.pageInfo.hasNextPage ?? false,
614
+ loading,
615
+ error,
616
+ loadMore,
617
+ };
618
+ }
619
+ ```
620
+
621
+ ---
622
+
623
+ ## Fragment Reuse
624
+
625
+ ```graphql
626
+ # Consistent content shapes across queries — no divergence between list and detail views
627
+ fragment PostCard on Post {
628
+ id
629
+ title
630
+ slug
631
+ excerpt
632
+ publishedAt
633
+ readingTimeMinutes
634
+ featuredImage { url alt width height }
635
+ author { id name avatar }
636
+ tags
637
+ }
638
+
639
+ fragment PostDetail on Post {
640
+ ...PostCard
641
+ bodyHtml
642
+ categories { id name slug }
643
+ relatedPosts { ...PostCard }
644
+ }
645
+
646
+ query GetPost($slug: String!) {
647
+ post(slug: $slug) {
648
+ ...PostDetail
649
+ }
650
+ }
651
+ ```
652
+
653
+ ---
654
+
655
+ ## Code-First vs SDL-First
656
+
657
+ | Approach | Tools | When to use |
658
+ |----------|-------|-------------|
659
+ | SDL-first | `graphql-tag`, `graphql-tools` | Schema is the contract, multiple implementations |
660
+ | Code-first | `nexus`, `pothos`, `type-graphql` | TypeScript-first, single implementation, want type safety |
661
+
662
+ **Code-first with Pothos (recommended for TypeScript projects):**
663
+
664
+ ```typescript
665
+ // schema.ts
666
+ import SchemaBuilder from '@pothos/core';
667
+
668
+ const builder = new SchemaBuilder<{ Context: AppContext }>({});
669
+
670
+ builder.queryType({
671
+ fields: (t) => ({
672
+ post: t.field({
673
+ type: PostRef,
674
+ nullable: true,
675
+ args: { slug: t.arg.string({ required: true }) },
676
+ resolve: async (_, { slug }, { db }) => {
677
+ const { rows } = await db.query('SELECT * FROM content WHERE slug = $1', [slug]);
678
+ return rows[0] ?? null;
679
+ },
680
+ }),
681
+ }),
682
+ });
683
+
684
+ const PostRef = builder.objectRef<Post>('Post').implement({
685
+ fields: (t) => ({
686
+ id: t.exposeID('id'),
687
+ title: t.exposeString('title'),
688
+ slug: t.exposeString('slug'),
689
+ author: t.field({
690
+ type: AuthorRef,
691
+ resolve: (post, _, { loaders }) => loaders.authorLoader.load(post.author_id),
692
+ }),
693
+ }),
694
+ });
695
+
696
+ export const schema = builder.toSchema();
697
+ ```
698
+
699
+ ---
700
+
701
+ ## Common Gotchas
702
+
703
+ 1. **N+1 is silent** — it won't error, it just makes your server slow. Always use DataLoader for any field resolver that makes a DB query. Log query counts in development to catch N+1 early.
704
+ 2. **DataLoader caches per request, not globally** — create a new DataLoader instance per GraphQL request (in the context factory), not once at startup. Otherwise data leaks between requests.
705
+ 3. **`errors` array ≠ HTTP error** — GraphQL always returns 200 OK. Even completely failed operations return 200 with `{"errors": [...]}`. Your API gateway or client must check the `errors` array, not the HTTP status.
706
+ 4. **Don't expose internal error messages** — use a custom `formatError` function to sanitize errors before they reach the client. Log the original, return a generic message.
707
+ 5. **File uploads require multipart** — GraphQL doesn't natively support file uploads. Use `graphql-upload` or handle uploads as REST endpoints and pass URLs to GraphQL.
708
+ 6. **Mutations should return the mutated object** — always return the full post/entity in mutation results so clients can update their Apollo cache without a separate refetch.