@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.
- package/CREDITS.md +25 -0
- package/DOMINION-FLOW-OVERVIEW.md +182 -38
- package/README.md +399 -455
- package/TROUBLESHOOTING.md +264 -264
- package/agents/fire-debugger.md +54 -0
- package/agents/fire-executor.md +1610 -1033
- package/agents/fire-fact-checker.md +1 -1
- package/agents/fire-planner.md +85 -17
- package/agents/fire-project-researcher.md +1 -1
- package/agents/fire-researcher.md +4 -22
- package/agents/{fire-phoenix-analyst.md → fire-resurrection-analyst.md} +394 -394
- package/agents/fire-reviewer.md +552 -499
- package/agents/fire-verifier.md +114 -19
- package/bin/cli.js +18 -101
- package/commands/fire-0-orient.md +2 -2
- package/commands/fire-1a-new.md +50 -15
- package/commands/fire-1c-setup.md +33 -5
- package/commands/fire-1d-discuss.md +87 -1
- package/commands/fire-2-plan.md +556 -527
- package/commands/fire-3-execute.md +2046 -1356
- package/commands/fire-4-verify.md +975 -906
- package/commands/fire-5-handoff.md +46 -5
- package/commands/fire-6-resume.md +2 -31
- package/commands/fire-add-new-skill.md +138 -19
- package/commands/fire-autonomous.md +14 -2
- package/commands/fire-complete-milestone.md +1 -1
- package/commands/fire-cost.md +179 -183
- package/commands/fire-debug.md +1 -6
- package/commands/fire-loop-resume.md +2 -2
- package/commands/fire-loop-stop.md +1 -1
- package/commands/fire-loop.md +2 -15
- package/commands/fire-map-codebase.md +1 -1
- package/commands/fire-migrate-database.md +548 -0
- package/commands/fire-new-milestone.md +1 -1
- package/commands/fire-reflect.md +1 -2
- package/commands/fire-research.md +142 -21
- package/commands/{fire-phoenix.md → fire-resurrect.md} +859 -603
- package/commands/fire-scaffold.md +297 -0
- package/commands/fire-search.md +1 -2
- package/commands/fire-security-scan.md +483 -484
- package/commands/fire-setup.md +359 -0
- package/commands/fire-skill.md +770 -0
- package/commands/fire-skills-diff.md +506 -506
- package/commands/fire-skills-history.md +388 -388
- package/commands/fire-skills-rollback.md +7 -7
- package/commands/fire-skills-sync.md +470 -470
- package/commands/fire-test.md +5 -5
- package/commands/fire-todos.md +1 -1
- package/commands/fire-update.md +5 -5
- package/commands/fire-validate-skills.md +282 -0
- package/commands/fire-vuln-scan.md +492 -493
- package/hooks/run-hook.sh +8 -8
- package/hooks/run-session-end.sh +7 -7
- package/hooks/session-end.sh +90 -90
- package/hooks/session-start.sh +1 -1
- package/package.json +4 -24
- package/plugin.json +7 -7
- package/references/autonomy-levels.md +235 -0
- package/references/behavioral-directives.md +95 -3
- package/references/blocker-tracking.md +1 -1
- package/references/circuit-breaker.md +93 -2
- package/references/context-engineering.md +227 -9
- package/references/honesty-protocols.md +70 -1
- package/references/issue-to-pr-pipeline.md +149 -150
- package/references/metrics-and-trends.md +1 -2
- package/references/research-improvements.md +4 -108
- package/references/sdlc-mapping.md +73 -0
- package/references/state-machine.md +151 -0
- package/skills-library/AVAILABLE_TOOLS_REFERENCE.md +333 -0
- package/skills-library/SKILLS-INDEX.md +57 -558
- package/skills-library/SKILLS_LIBRARY_INDEX.md +532 -0
- package/skills-library/_general/api-patterns/api-field-name-mismatch.md +107 -0
- package/skills-library/_general/api-patterns/streaming-command-timeout.md +122 -0
- package/skills-library/_general/api-patterns/streaming-proxy-cors-bypass.md +102 -0
- package/skills-library/_general/automation/settings-gui-generator.md +172 -0
- package/skills-library/_general/database-solutions/data-type-mapping-reference.md +181 -0
- package/skills-library/_general/database-solutions/mysql-limit-offset-string-coercion.md +102 -0
- package/skills-library/_general/database-solutions/mysql-to-pg-migration.md +195 -0
- package/skills-library/_general/database-solutions/orm-schema-portability.md +193 -0
- package/skills-library/_general/database-solutions/persistent-analysis-storage.md +207 -0
- package/skills-library/_general/database-solutions/pg-to-mysql-schema-migration-methodology.md +190 -0
- package/skills-library/_general/database-solutions/sql-dialect-compatibility-matrix.md +306 -0
- package/skills-library/_general/database-solutions/sqlite-to-pg-migration.md +219 -0
- package/skills-library/_general/frontend/canvas-bubble-animation-grouping.md +270 -0
- package/skills-library/_general/frontend/color-token-migration.md +112 -0
- package/skills-library/_general/frontend/framer-motion-layoutid-grouping.md +150 -0
- package/skills-library/_general/frontend/pyqt6-settings-dialog.md +191 -0
- package/skills-library/_general/frontend/react-flow-animated-layout-switching.md +101 -0
- package/skills-library/_general/frontend/react-hooks-order-debugging.md +141 -0
- package/skills-library/_general/frontend/redux-localstorage-auth-desync.md +126 -0
- package/skills-library/_general/frontend/safari-csp-theme-color-debugging.md +124 -0
- package/skills-library/_general/frontend/safari-sw-cache-poisoning.md +138 -0
- package/skills-library/_general/frontend/svg-sparkline-no-charting-library.md +131 -0
- package/skills-library/_general/growth-marketing/oss-daily-growth-intelligence.md +224 -0
- package/skills-library/_general/integrations/claude-code-local-mcp-integration.md +250 -0
- package/skills-library/_general/integrations/mcp-composite-tool-orchestration.md +200 -0
- package/skills-library/_general/methodology/AGENT_SDK_STANDALONE_TOOLING.md +181 -0
- package/skills-library/_general/methodology/AGENT_TEAMS_GUIDE.md +169 -0
- package/skills-library/_general/methodology/ALAS_STATEFUL_EXECUTION.md +207 -0
- package/skills-library/_general/methodology/AUTO_REVIEWER_SUBAGENT.md +211 -0
- package/skills-library/_general/methodology/CONSISTENCY_CHECK_AMBIGUITY_GATE.md +96 -0
- package/skills-library/_general/methodology/DEAD_ENDS_SHELF.md +4 -4
- package/skills-library/_general/methodology/DISTILL_NOT_DUMP.md +108 -0
- package/skills-library/_general/methodology/EXECUTION_PROGRESS_MONITOR.md +157 -0
- package/skills-library/_general/methodology/HIERARCHICAL_REVIEW_MARS.md +122 -0
- package/skills-library/_general/methodology/MCP_INTER_AGENT_BRIDGE.md +207 -0
- package/skills-library/_general/methodology/MERMAID_WIZARD_DIAGRAMS.md +77 -0
- package/skills-library/_general/methodology/MISSING_DIMENSION_DETECTOR.md +89 -0
- package/skills-library/_general/methodology/MULTI_AGENT_COORDINATION.md +397 -0
- package/skills-library/_general/methodology/OBSERVATION_MASKING.md +100 -0
- package/skills-library/_general/methodology/PHOENIX_REBUILD_METHODOLOGY.md +82 -11
- package/skills-library/_general/methodology/REVIEW_BACKTRACK_PANEL.md +140 -0
- package/skills-library/_general/methodology/REVIEW_FIX_LOOP.md +117 -0
- package/skills-library/_general/methodology/VOTING_VERDICT_ARBITRATION.md +155 -0
- package/skills-library/_general/methodology/ZERO_FRICTION_CLI_SETUP.md +2 -2
- package/skills-library/_general/methodology/dead-code-activation.md +123 -0
- package/skills-library/_general/methodology/debug-swarm-researcher-escape-hatch.md +240 -240
- package/skills-library/_general/methodology/shell-autonomous-loop-fixplan.md +1 -1
- package/skills-library/_general/patterns-standards/GOF_DESIGN_PATTERNS_FOR_AI_AGENTS.md +5 -5
- package/skills-library/_general/patterns-standards/cascading-failure-diagnosis.md +119 -0
- package/skills-library/_general/patterns-standards/domain-specific-layout-algorithms.md +209 -0
- package/skills-library/_general/patterns-standards/python-desktop-app-architecture.md +399 -0
- package/skills-library/_general/patterns-standards/realtime-monitoring-dashboard.md +457 -0
- package/skills-library/_general/patterns-standards/togglable-processing-pipeline.md +169 -0
- package/skills-library/_general/performance/liveclock-extraction.md +112 -0
- package/skills-library/_general/performance/ref-based-canvas-animation.md +117 -0
- package/skills-library/_general/performance/use-visible-interval.md +131 -0
- package/skills-library/_general/testing/playwright-firefox-withcredentials-auth-issue.md +104 -0
- package/skills-library/_quarantine/README.md +30 -0
- package/skills-library/api-patterns/BROADCAST_SCHEDULER_SHARED_EXECUTE_FUNCTION.md +150 -0
- package/skills-library/api-patterns/ERROR_RESPONSE_STANDARDS.md +145 -0
- package/skills-library/api-patterns/EXPRESS_ROUTE_ORDERING_MIDDLEWARE_INTERCEPTION.md +326 -0
- package/skills-library/api-patterns/PAGINATION_PATTERNS.md +137 -0
- package/skills-library/api-patterns/PODCAST_PROGRESS_TRACKING_THREE_ROOT_CAUSES.md +277 -0
- package/skills-library/api-patterns/RATE_LIMITING_TOGGLE.md +155 -0
- package/skills-library/api-patterns/graphql-content-queries.md +708 -0
- package/skills-library/appointment-scheduler-design.md +423 -0
- package/skills-library/automation/AUTO_POPULATE_COMPLETE_GUIDE.md +631 -0
- package/skills-library/automation/CC_WORKFLOW_STUDIO.md +83 -0
- package/skills-library/automation/CLAUDE_CODE_SWARM_MODE.md +95 -0
- package/skills-library/automation/DAEMON_TRIGGER_FILE_IPC.md +195 -0
- package/skills-library/automation/scheduled-content-publishing.md +608 -0
- package/skills-library/awesome-workflows/Blogging-Platform-Instructions/view_commands.md +25 -0
- package/skills-library/awesome-workflows/CREDENTIAL-SECURITY-WORKFLOW.md +109 -0
- package/skills-library/awesome-workflows/DEBUGGING-WORKFLOW.md +124 -0
- package/skills-library/awesome-workflows/Design-Review-Workflow/README.md +31 -0
- package/skills-library/awesome-workflows/Design-Review-Workflow/design-principles-example.md +129 -0
- package/skills-library/awesome-workflows/Design-Review-Workflow/design-review-agent.md +107 -0
- package/skills-library/awesome-workflows/Design-Review-Workflow/design-review-claude-md-snippet.md +24 -0
- package/skills-library/awesome-workflows/Design-Review-Workflow/design-review-slash-command.md +38 -0
- package/skills-library/awesome-workflows/PARALLEL-RESEARCH-WORKFLOW.md +89 -0
- package/skills-library/awesome-workflows/PHASE-EXECUTION-WORKFLOW.md +97 -0
- package/skills-library/awesome-workflows/SESSION-HANDOFF-WORKFLOW.md +116 -0
- package/skills-library/cms-patterns/content-branch-preview.md +515 -0
- package/skills-library/cms-patterns/inline-visual-editing.md +666 -0
- package/skills-library/cms-patterns/mdx-component-content.md +649 -0
- package/skills-library/cms-patterns/media-manager-abstraction.md +827 -0
- package/skills-library/cms-patterns/schema-driven-form-generator.md +838 -0
- package/skills-library/complexity-metrics/complexity-divider.md +707 -0
- package/skills-library/complexity-metrics/work-with-complexity.md +193 -0
- package/skills-library/creative-multimedia/animation-stack-guide.md +577 -0
- package/skills-library/creative-multimedia/audio-enhancement-pipeline.md +625 -0
- package/skills-library/creative-multimedia/content-repurposing-pipeline.md +1146 -0
- package/skills-library/creative-multimedia/data-visualization-generator.md +862 -0
- package/skills-library/creative-multimedia/doc-to-podcast-pipeline.md +2184 -0
- package/skills-library/creative-multimedia/ffmpeg-command-generator.md +405 -0
- package/skills-library/creative-multimedia/image-optimization-pipeline.md +605 -0
- package/skills-library/creative-multimedia/multi-format-content-generator.md +1759 -0
- package/skills-library/creative-multimedia/og-image-generator.md +635 -0
- package/skills-library/creative-multimedia/podcast-audio-composition.md +1355 -0
- package/skills-library/creative-multimedia/podcast-quality-evaluation.md +1452 -0
- package/skills-library/creative-multimedia/podcast-script-generation.md +1841 -0
- package/skills-library/creative-multimedia/svg-generation.md +750 -0
- package/skills-library/creative-multimedia/text-to-speech-provider-selector.md +1414 -0
- package/skills-library/creative-multimedia/transcription-pipeline-selector.md +677 -0
- package/skills-library/creative-multimedia/video-streaming-setup.md +559 -0
- package/skills-library/database-solutions/AI_RESPONSE_DATABASE_CACHING.md +520 -0
- package/skills-library/database-solutions/CONDITIONAL_SQL_MIGRATION_PATTERN.md +119 -0
- package/skills-library/database-solutions/DATABASE_COLUMN_NAME_MISMATCH.md +393 -0
- package/skills-library/database-solutions/DATABASE_SCHEMA.md +394 -0
- package/skills-library/database-solutions/DATABASE_SCHEMA_VERIFICATION_GUIDE.md +348 -0
- package/skills-library/database-solutions/DATABASE_STRATEGY.md +71 -0
- package/skills-library/database-solutions/ES_MODULE_SEED_SCRIPT_PATTERN.md +52 -0
- package/skills-library/database-solutions/MIGRATION_GUIDE.md +3 -0
- package/skills-library/database-solutions/PLPGSQL_VARIABLE_CONFLICT_FIX.md +208 -0
- package/skills-library/database-solutions/POSTGRESQL_JSONB_DOUBLE_STRINGIFY_FIX.md +245 -0
- package/skills-library/database-solutions/POSTGRESQL_LICENSE_TABLE_DESIGN.md +393 -0
- package/skills-library/database-solutions/POSTGRESQL_UUID_DOCUMENT_RAG_DUAL_SCOPE.md +732 -0
- package/skills-library/database-solutions/POSTGRES_SQL_TEMPLATE_BINDING_ERROR.md +240 -0
- package/skills-library/database-solutions/PRISMA_DB_PUSH_DATA_LOSS_PREVENTION.md +141 -0
- package/skills-library/database-solutions/PRODUCTION_QUERY_OPTIMIZATION_RESTART_FIX.md +389 -0
- package/skills-library/database-solutions/RLS_SECURITY_GUIDE.md +107 -0
- package/skills-library/database-solutions/SCHEMA_ENHANCEMENTS_GUIDE.md +373 -0
- package/skills-library/database-solutions/SCHEMA_MIGRATION_GUIDE.md +368 -0
- package/skills-library/database-solutions/SCHEMA_VERIFICATION_QUICK_REFERENCE.md +104 -0
- package/skills-library/database-solutions/ai-erd-generator.md +1213 -0
- package/skills-library/database-solutions/content-publishing-states.md +631 -0
- package/skills-library/database-solutions/database-schema-designer.md +522 -0
- package/skills-library/database-solutions/er-diagram-components.md +569 -0
- package/skills-library/database-solutions/er-to-ddl-mapping.md +1405 -0
- package/skills-library/database-solutions/erd-creator-textbook-research.md +433 -0
- package/skills-library/database-solutions/erd-react-flow-architecture.md +1965 -0
- package/skills-library/database-solutions/mariadb-aggregate-function-replacement.md +145 -0
- package/skills-library/database-solutions/normalization-validator.md +778 -0
- package/skills-library/database-solutions/postgres-full-text-search-content.md +494 -0
- package/skills-library/database-solutions/postgresql-to-mysql-runtime-translation.md +286 -0
- package/skills-library/database-solutions/regex-alternation-ordering-sql-types.md +92 -0
- package/skills-library/database-solutions/reserved-word-context-aware-quoting.md +142 -0
- package/skills-library/database-solutions/sql-ddl-generator.md +756 -0
- package/skills-library/database-solutions/supabase-connection-pooler-fix.md +102 -0
- package/skills-library/deployment-security/CPANEL_NODE_DEPLOYMENT.md +166 -0
- package/skills-library/deployment-security/DEPLOYMENT.md +275 -0
- package/skills-library/deployment-security/DEPLOYMENT_CHECKLIST.md +363 -0
- package/skills-library/deployment-security/DEPLOYMENT_PLAN.md +669 -0
- package/skills-library/deployment-security/KNEX_DATABASE_ABSTRACTION.md +444 -0
- package/skills-library/deployment-security/LICENSE_KEY_SYSTEM.md +206 -0
- package/skills-library/deployment-security/NODE18_DEPENDENCY_COMPATIBILITY.md +284 -0
- package/skills-library/deployment-security/PHP_INSTALLER_WIZARD_GUIDE.md +315 -0
- package/skills-library/deployment-security/PM2_ENVIRONMENT_VARIABLE_CACHING.md +256 -0
- package/skills-library/deployment-security/PM2_MEMORY_EXHAUSTION_FIX.md +370 -0
- package/skills-library/deployment-security/PRODUCTION_DEPLOYMENT_GUIDE.md +592 -0
- package/skills-library/deployment-security/PRODUCTION_HARDENING_DOCUMENTATION.md +307 -0
- package/skills-library/deployment-security/PRODUCTION_RECOVERY_CHERRY_PICK_PATTERN.md +202 -0
- package/skills-library/deployment-security/PYINSTALLER_CUDA_WHISPER_BUNDLING.md +236 -0
- package/skills-library/deployment-security/SECURITY.md +41 -0
- package/skills-library/deployment-security/SMTP_SSL_HOSTNAME_MISMATCH_SHARED_HOSTING.md +220 -0
- package/skills-library/deployment-security/SPA_SEO_OPTIMIZATION_CPANEL.md +200 -0
- package/skills-library/deployment-security/SUPABASE_EDGE_FUNCTIONS.md +338 -0
- package/skills-library/deployment-security/VERCEL_GITHUB_DEPLOYMENT_GUIDE.md +858 -0
- package/skills-library/deployment-security/VPS_DEPLOYMENT_READINESS.md +356 -0
- package/skills-library/deployment-security/deployment-changes-not-applying.md +241 -0
- package/skills-library/deployment-security/env-file-management-production-local.md +203 -0
- package/skills-library/deployment-security/express-secure-file-downloads.md +413 -0
- package/skills-library/deployment-security/react-production-deployment-desktop-guide.md +2011 -0
- package/skills-library/deployment-security/self-hosted-supabase-coolify-guide.md +1684 -0
- package/skills-library/deployment-security/unique-features-ai-strategy-plaid-security.md +1613 -0
- package/skills-library/deployment-security/vps-deployment.md +135 -0
- package/skills-library/document-processing/WORD_EXPORT_MARKDOWN_FORMATTING.md +482 -0
- package/skills-library/document-processing/document-ai-landingai-integration.md +677 -0
- package/skills-library/document-processing/express-secure-file-downloads-mern.md +413 -0
- package/skills-library/document-processing/express-secure-file-downloads.md +413 -0
- package/skills-library/document-processing/md-to-word-converter.md +318 -0
- package/skills-library/document-processing/pdf-forms-integration/README.md +101 -0
- package/skills-library/document-processing/pdf-forms-integration/SKILL.md +662 -0
- package/skills-library/ecommerce/ADMIN_PRODUCTS_GUIDE.md +428 -0
- package/skills-library/ecommerce/ECOMMERCE_API_REFERENCE.md +776 -0
- package/skills-library/ecommerce/ECOMMERCE_COMPLETION_SUMMARY.md +673 -0
- package/skills-library/ecommerce/ECOMMERCE_IMPLEMENTATION_GUIDE.md +729 -0
- package/skills-library/ecommerce/ECOMMERCE_QUICK_REFERENCE.md +521 -0
- package/skills-library/ecommerce/ECOMMERCE_TESTING_CHECKLIST.md +565 -0
- package/skills-library/ecommerce/ECOMMERCE_WORKFLOW_GUIDE.md +1059 -0
- package/skills-library/ecommerce/PRODUCT_CREATION_EXPANDED.md +522 -0
- package/skills-library/ecommerce/agentic-commerce-protocol.md +203 -0
- package/skills-library/ecommerce/cart-abandonment-recovery.md +236 -0
- package/skills-library/ecommerce/cart-architecture-patterns.md +300 -0
- package/skills-library/ecommerce/cart-item-count-indicator.md +264 -0
- package/skills-library/ecommerce/checkout-ux-conversion.md +227 -0
- package/skills-library/ecommerce/composable-commerce-selection.md +166 -0
- package/skills-library/ecommerce/ecommerce-analytics-patterns.md +167 -0
- package/skills-library/ecommerce/fraud-detection-patterns.md +179 -0
- package/skills-library/ecommerce/inventory-stock-management.md +270 -0
- package/skills-library/ecommerce/order-saga-state-machine.md +336 -0
- package/skills-library/ecommerce/payment-provider-abstraction.md +245 -0
- package/skills-library/ecommerce/pci-compliance-checklist.md +192 -0
- package/skills-library/ecommerce/refund-chargeback-handling.md +177 -0
- package/skills-library/ecommerce/shipping-carrier-integration.md +218 -0
- package/skills-library/ecommerce/webhook-idempotency-patterns.md +253 -0
- package/skills-library/excalidraw-diagrams/.github/workflows/ci.yml +558 -0
- package/skills-library/excalidraw-diagrams/.github/workflows/prompt-gallery.yml +448 -0
- package/skills-library/excalidraw-diagrams/.github/workflows/release.yml +42 -0
- package/skills-library/excalidraw-diagrams/.github/workflows/test-reusable-ci.yml +25 -0
- package/skills-library/excalidraw-diagrams/CLAUDE.md +57 -0
- package/skills-library/excalidraw-diagrams/LICENSE +21 -0
- package/skills-library/excalidraw-diagrams/README.md +178 -0
- package/skills-library/excalidraw-diagrams/SKILL.md +715 -0
- package/skills-library/form-solutions/BUTTON_TYPE_FORM_SUBMISSION.md +336 -0
- package/skills-library/form-solutions/FILLABLE_PDF_IMPLEMENTATION.md +226 -0
- package/skills-library/form-solutions/SURVEYJS_QUESTIONNAIRE_SYSTEM.md +367 -0
- package/skills-library/form-solutions/tiptap-minimal-setup.md +690 -0
- package/skills-library/frontend/scholarly-classification-bubble-map.md +149 -0
- package/skills-library/infrastructure/ci-cd-pipeline-builder.md +517 -0
- package/skills-library/infrastructure/observability-designer.md +264 -0
- package/skills-library/infrastructure/performance-profiler.md +621 -0
- package/skills-library/installer-wizard-patterns.md +249 -0
- package/skills-library/integrations/CLAUDE_CODE_TOKEN_ANALYTICS.md +160 -0
- package/skills-library/integrations/CONFIGURABLE_AI_PROVIDER_SELECTION.md +728 -0
- package/skills-library/integrations/SOCKET_IO_BROADCAST_ALL_VS_ROOM.md +141 -0
- package/skills-library/integrations/VIRTUAL_MEETINGS_IMPLEMENTATION.md +374 -0
- package/skills-library/integrations/WORDPRESS_LEARNDASH_DATA_RECOVERY.md +53 -0
- package/skills-library/integrations/YOUTUBE_API_SETUP.md +141 -0
- package/skills-library/integrations/YOUTUBE_BOOKMARKING_EXPLANATION.md +252 -0
- package/skills-library/integrations/YOUTUBE_BOOKMARKING_SOLUTION.md +268 -0
- package/skills-library/integrations/YOUTUBE_OAUTH_SETUP_GUIDE.md +200 -0
- package/skills-library/integrations/YOUTUBE_VIDEO_FIX_COMPLETE.md +192 -0
- package/skills-library/integrations/ai-ml/GEMINI_AI_RAG_PIPELINE_COMPLETE_GUIDE.md +195 -0
- package/skills-library/integrations/ai-ml/GEMINI_IMAGE_GENERATION_SETUP.md +64 -0
- package/skills-library/integrations/cloudflare/cloudflare-turnstile-debugging.md +202 -0
- package/skills-library/integrations/cloudflare/cloudflare-turnstile-implementation.md +476 -0
- package/skills-library/integrations/cloudflare-turnstile-debugging.md +202 -0
- package/skills-library/integrations/cloudflare-turnstile-implementation.md +476 -0
- package/skills-library/integrations/ghost-creator-monetization-pattern.md +454 -0
- package/skills-library/integrations/headless-cms-architecture.md +484 -0
- package/skills-library/integrations/headless-cms-stack-selection.md +183 -0
- package/skills-library/integrations/payload-cms-patterns.md +674 -0
- package/skills-library/integrations/realtimestt-openwakeword-cuda-windows.md +229 -0
- package/skills-library/integrations/rss-podcast-integration.md +300 -0
- package/skills-library/integrations/wordpress/WORDPRESS_LEARNDASH_DATA_RECOVERY.md +53 -0
- package/skills-library/integrations/youtube/YOUTUBE_API_SETUP.md +141 -0
- package/skills-library/integrations/youtube/YOUTUBE_BOOKMARKING_EXPLANATION.md +252 -0
- package/skills-library/integrations/youtube/YOUTUBE_BOOKMARKING_SOLUTION.md +268 -0
- package/skills-library/integrations/youtube/YOUTUBE_OAUTH_SETUP_GUIDE.md +200 -0
- package/skills-library/integrations/youtube/YOUTUBE_VIDEO_FIX_COMPLETE.md +192 -0
- package/skills-library/marketing/campaign-analytics.md +97 -0
- package/skills-library/marketing/content-creator.md +105 -0
- package/skills-library/marketing/marketing-strategy-pmm.md +94 -0
- package/skills-library/marketing/social-media-analyzer.md +81 -0
- package/skills-library/methodology/ADVANCED_ORCHESTRATION_PATTERNS.md +401 -0
- package/skills-library/methodology/AGENT_SELF_IMPROVEMENT_LOOP.md +179 -0
- package/skills-library/methodology/BREATH_BASED_PARALLEL_EXECUTION.md +1 -1
- package/skills-library/methodology/CLEANSING_CYCLE.md +358 -0
- package/skills-library/methodology/CONFIDENCE_ANNOTATION_PATTERN.md +143 -0
- package/skills-library/methodology/CRITICAL_PATTERNS_DOCUMENTATION_COMPLETE.md +204 -0
- package/skills-library/methodology/DELIVERABLES_SUMMARY.md +341 -0
- package/skills-library/methodology/DIFFICULTY_AWARE_AGENT_ROUTING.md +252 -0
- package/skills-library/methodology/EVOLUTIONARY_SKILL_SYNTHESIS.md +219 -0
- package/skills-library/methodology/GLOMERULUS_DECISION_GATE.md +223 -0
- package/skills-library/methodology/HIBERNATION_SYSTEM.md +231 -0
- package/skills-library/methodology/INSTRUMENTATION_OVER_RESTRICTION.md +192 -0
- package/skills-library/methodology/MASTER_COMPLETION_SUMMARY.md +444 -0
- package/skills-library/methodology/MASTER_SESSION_COMPLETION.md +743 -0
- package/skills-library/methodology/MERN_QUICK_REFERENCE.md +358 -0
- package/skills-library/methodology/ORGAN_AGENT_MAPPING.md +177 -0
- package/skills-library/methodology/PARALLEL_WAVE_BASED_REFACTORING.md +440 -0
- package/skills-library/methodology/QUICK_REFERENCE.md +358 -0
- package/skills-library/methodology/SDFT_ONPOLICY_SELF_DISTILLATION.md +186 -0
- package/skills-library/methodology/SELF_QUESTIONING_TASK_GENERATION.md +270 -0
- package/skills-library/methodology/SESSION_COMPLETION_SUMMARY.md +304 -0
- package/skills-library/methodology/SESSION_SUMMARY.md +432 -0
- package/skills-library/methodology/WARRIOR_WORKFLOW_DEBUGGING_PROTOCOL.md +252 -0
- package/skills-library/methodology/tech-debt-tracker.md +570 -0
- package/skills-library/parallel-debug/SKILL.md +60 -0
- package/skills-library/patterns-standards/API_PATTERN_FIX_SUMMARY.md +236 -0
- package/skills-library/patterns-standards/BATCH_OPERATIONS_WITH_PROGRESS_MODAL.md +362 -0
- package/skills-library/patterns-standards/CRITICAL_CODING_PATTERNS.md +639 -0
- package/skills-library/patterns-standards/DARK_MODE_MODAL_VISIBILITY.md +258 -0
- package/skills-library/patterns-standards/ERROR_RESILIENCE_IMPLEMENTATION.md +375 -0
- package/skills-library/patterns-standards/ES_MODULE_IMPORT_HOISTING_DOTENV.md +298 -0
- package/skills-library/patterns-standards/NESTED_BACKDROP_FILTER_CSS_ARTIFACT_FIX.md +76 -0
- package/skills-library/patterns-standards/ORDERED_DETECTOR_PIPELINE_GRACEFUL_FALLBACK.md +333 -0
- package/skills-library/patterns-standards/PHASE_IMPORT_ERROR_DEBUGGING.md +271 -0
- package/skills-library/patterns-standards/PYNPUT_GLOBAL_HOTKEY_VK_MATCHING.md +252 -0
- package/skills-library/patterns-standards/REACT_USEEFFECT_CASCADE_RESET_FIX.md +132 -0
- package/skills-library/patterns-standards/SUBMENU_HOVER_DROPDOWN_PATTERN.md +225 -0
- package/skills-library/patterns-standards/TAILWIND_TEXT_VISIBILITY_OVERRIDE.md +322 -0
- package/skills-library/patterns-standards/THEME_AWARE_CSS_VARIABLES_PATTERN.md +209 -0
- package/skills-library/patterns-standards/THEME_USER_OBJECT_PROPERTY_NAMING.md +194 -0
- package/skills-library/patterns-standards/TOOLTIP_BLOCKING_CLICKS_FIX.md +267 -0
- package/skills-library/patterns-standards/claude-code-plugin-structure.md +235 -0
- package/skills-library/patterns-standards/react-i18next-setup.md +429 -0
- package/skills-library/patterns-standards/thesys-c1-generative-ui-integration.md +967 -0
- package/skills-library/plugin-development/CLAUDE_CODE_COMMAND_REGISTRATION_SILENT_FAILURE.md +315 -0
- package/skills-library/plugin-development/plugin-command-namespace-vs-global.md +390 -0
- package/skills-library/plugin-development/plugin-doc-auto-generation.md +172 -0
- package/skills-library/security/GITHUB_REPO_SECURITY_AUDIT.md +115 -0
- package/skills-library/security/admin-deletion-safety.md +396 -0
- package/skills-library/security/application-vuln-patterns.md +477 -0
- package/skills-library/security/env-secrets-manager.md +686 -0
- package/skills-library/security/secure-ai-application-templates.md +347 -0
- package/skills-library/security/sql-injection-prevention-postgresjs.md +151 -0
- package/skills-library/supabase-connection-pooler-fix.md +102 -0
- package/skills-library/system-context/POWERSHELL_BASH_INTEROP.md +82 -0
- package/skills-library/system-context/SERVICE_LIFECYCLE_MANAGEMENT.md +119 -0
- package/skills-library/system-context/SKILL.md +40 -0
- package/skills-library/system-context/WINDOWS_DEV_ENVIRONMENT.md +73 -0
- package/skills-library/testing/E2E_PLAYWRIGHT_PATTERNS.md +99 -0
- package/skills-library/testing/INTEGRATION_TEST_STRATEGY.md +82 -0
- package/skills-library/testing/RED_GREEN_BUGFIX_GATE.md +203 -0
- package/skills-library/testing/TEST_DATA_MANAGEMENT.md +69 -0
- package/skills-library/testing/VITEST_UNIT_TEST_PATTERNS.md +75 -0
- package/skills-library/testing/playwright-api-security-tests.md +202 -0
- package/skills-library/toolbox/SKILL.md +84 -0
- package/skills-library/toolbox/code-graph-and-web-scraping-mcps.md +237 -0
- package/skills-library/ui-ux-pro-max/ACCESSIBILITY_ESSENTIALS.md +115 -0
- package/skills-library/ui-ux-pro-max/DESIGN_SYSTEM_SCAFFOLDING.md +133 -0
- package/skills-library/ui-ux-pro-max/RESPONSIVE_LAYOUT_PATTERNS.md +119 -0
- package/skills-library/ui-ux-pro-max/SKILL.md +386 -0
- package/skills-library/ui-ux-pro-max/data/charts.csv +26 -0
- package/skills-library/ui-ux-pro-max/data/colors.csv +97 -0
- package/skills-library/ui-ux-pro-max/data/icons.csv +101 -0
- package/skills-library/ui-ux-pro-max/data/landing.csv +31 -0
- package/skills-library/ui-ux-pro-max/data/products.csv +97 -0
- package/skills-library/ui-ux-pro-max/data/react-performance.csv +45 -0
- package/skills-library/ui-ux-pro-max/data/stacks/astro.csv +54 -0
- package/skills-library/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/skills-library/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
- package/skills-library/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
- package/skills-library/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/skills-library/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
- package/skills-library/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
- package/skills-library/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/skills-library/ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/skills-library/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
- package/skills-library/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/skills-library/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/skills-library/ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/skills-library/ui-ux-pro-max/data/styles.csv +68 -0
- package/skills-library/ui-ux-pro-max/data/typography.csv +58 -0
- package/skills-library/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
- package/skills-library/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/skills-library/ui-ux-pro-max/data/web-interface.csv +31 -0
- package/skills-library/wordpress-style-theme-components.md +1526 -0
- package/templates/ASSUMPTIONS.md +1 -1
- package/templates/DECISION_LOG.md +0 -1
- package/templates/phase-prompt.md +1 -1
- package/templates/phoenix-comparison.md +6 -6
- package/templates/skill-api-integration.md +106 -0
- package/templates/skill-architecture-pattern.md +92 -0
- package/templates/skill-debug-pattern.md +98 -0
- package/templates/skill-devops-recipe.md +107 -0
- package/templates/skill-general.md +65 -0
- package/templates/skill-ui-component.md +113 -0
- package/tools/uat-runner.py +179 -0
- package/version.json +7 -3
- package/workflows/handoff-session.md +2 -2
- package/workflows/new-project.md +2 -2
- package/workflows/plan-phase.md +1 -1
- package/.claude-plugin/plugin.json +0 -64
- package/skills-library/_general/methodology/LIVE_BREADCRUMB_PROTOCOL.md +0 -242
- package/skills-library/_general/methodology/llm-judge-memory-crud.md +0 -241
- package/skills-library/methodology/REFLEXION_MEMORY_PATTERN.md +0 -183
- package/skills-library/methodology/RESEARCH_BACKED_WORKFLOW_UPGRADE.md +0 -263
- package/skills-library/methodology/SABBATH_REST_PATTERN.md +0 -267
- package/skills-library/methodology/STONE_AND_SCAFFOLD.md +0 -220
- package/skills-library/specialists/api-architecture/api-designer.md +0 -49
- package/skills-library/specialists/api-architecture/graphql-architect.md +0 -49
- package/skills-library/specialists/api-architecture/mcp-developer.md +0 -51
- package/skills-library/specialists/api-architecture/microservices-architect.md +0 -50
- package/skills-library/specialists/api-architecture/websocket-engineer.md +0 -48
- package/skills-library/specialists/backend/django-expert.md +0 -52
- package/skills-library/specialists/backend/fastapi-expert.md +0 -52
- package/skills-library/specialists/backend/laravel-specialist.md +0 -52
- package/skills-library/specialists/backend/nestjs-expert.md +0 -51
- package/skills-library/specialists/backend/rails-expert.md +0 -53
- package/skills-library/specialists/backend/spring-boot-engineer.md +0 -56
- package/skills-library/specialists/data-ml/fine-tuning-expert.md +0 -48
- package/skills-library/specialists/data-ml/ml-pipeline.md +0 -47
- package/skills-library/specialists/data-ml/pandas-pro.md +0 -47
- package/skills-library/specialists/data-ml/rag-architect.md +0 -51
- package/skills-library/specialists/data-ml/spark-engineer.md +0 -47
- package/skills-library/specialists/frontend/angular-architect.md +0 -52
- package/skills-library/specialists/frontend/flutter-expert.md +0 -51
- package/skills-library/specialists/frontend/nextjs-developer.md +0 -54
- package/skills-library/specialists/frontend/react-native-expert.md +0 -50
- package/skills-library/specialists/frontend/vue-expert.md +0 -51
- package/skills-library/specialists/infrastructure/chaos-engineer.md +0 -74
- package/skills-library/specialists/infrastructure/cloud-architect.md +0 -70
- package/skills-library/specialists/infrastructure/database-optimizer.md +0 -64
- package/skills-library/specialists/infrastructure/devops-engineer.md +0 -70
- package/skills-library/specialists/infrastructure/kubernetes-specialist.md +0 -52
- package/skills-library/specialists/infrastructure/monitoring-expert.md +0 -70
- package/skills-library/specialists/infrastructure/sre-engineer.md +0 -70
- package/skills-library/specialists/infrastructure/terraform-engineer.md +0 -51
- package/skills-library/specialists/languages/cpp-pro.md +0 -74
- package/skills-library/specialists/languages/csharp-developer.md +0 -69
- package/skills-library/specialists/languages/dotnet-core-expert.md +0 -54
- package/skills-library/specialists/languages/golang-pro.md +0 -51
- package/skills-library/specialists/languages/java-architect.md +0 -49
- package/skills-library/specialists/languages/javascript-pro.md +0 -68
- package/skills-library/specialists/languages/kotlin-specialist.md +0 -68
- package/skills-library/specialists/languages/php-pro.md +0 -49
- package/skills-library/specialists/languages/python-pro.md +0 -52
- package/skills-library/specialists/languages/react-expert.md +0 -51
- package/skills-library/specialists/languages/rust-engineer.md +0 -50
- package/skills-library/specialists/languages/sql-pro.md +0 -56
- package/skills-library/specialists/languages/swift-expert.md +0 -69
- package/skills-library/specialists/languages/typescript-pro.md +0 -51
- package/skills-library/specialists/platform/atlassian-mcp.md +0 -52
- package/skills-library/specialists/platform/embedded-systems.md +0 -53
- package/skills-library/specialists/platform/game-developer.md +0 -53
- package/skills-library/specialists/platform/salesforce-developer.md +0 -53
- package/skills-library/specialists/platform/shopify-expert.md +0 -49
- package/skills-library/specialists/platform/wordpress-pro.md +0 -49
- package/skills-library/specialists/quality/code-documenter.md +0 -51
- package/skills-library/specialists/quality/code-reviewer.md +0 -67
- package/skills-library/specialists/quality/debugging-wizard.md +0 -51
- package/skills-library/specialists/quality/fullstack-guardian.md +0 -51
- package/skills-library/specialists/quality/legacy-modernizer.md +0 -50
- package/skills-library/specialists/quality/playwright-expert.md +0 -65
- package/skills-library/specialists/quality/spec-miner.md +0 -56
- package/skills-library/specialists/quality/test-master.md +0 -65
- package/skills-library/specialists/security/secure-code-guardian.md +0 -55
- package/skills-library/specialists/security/security-reviewer.md +0 -53
- package/skills-library/specialists/workflow/architecture-designer.md +0 -53
- package/skills-library/specialists/workflow/cli-developer.md +0 -70
- package/skills-library/specialists/workflow/feature-forge.md +0 -65
- package/skills-library/specialists/workflow/prompt-engineer.md +0 -54
- package/skills-library/specialists/workflow/the-fool.md +0 -62
- /package/skills-library/{performance → _general/performance}/cache-augmented-generation.md +0 -0
- /package/skills-library/{debugging → parallel-debug}/FAILURE_TAXONOMY_CLASSIFICATION.md +0 -0
- /package/skills-library/{debugging → parallel-debug}/THREE_AGENT_HYPOTHESIS_DEBUGGING.md +0 -0
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
# Cart Architecture Patterns
|
|
2
|
+
|
|
3
|
+
> Server-side cart management, state synchronization, guest-to-user cart merging, and constraint verification for AI-generated e-commerce code.
|
|
4
|
+
|
|
5
|
+
**When to use:** Building any shopping cart system — from simple single-product checkout to multi-vendor marketplace carts.
|
|
6
|
+
**Stack:** Node.js/Express, React/Next.js, PostgreSQL/MySQL
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Architecture Decision: Where Does the Cart Live?
|
|
11
|
+
|
|
12
|
+
### Option 1: Server-Side Cart (Recommended for most apps)
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
Client (React) Server (Express) Database
|
|
16
|
+
┌──────────┐ ┌──────────────┐ ┌────────┐
|
|
17
|
+
│ Cart UI │──POST───▶│ Cart API │──INSERT──▶│ carts │
|
|
18
|
+
│ (display │◀─JSON────│ /api/cart │◀─SELECT───│ items │
|
|
19
|
+
│ only) │ │ │ │ │
|
|
20
|
+
└──────────┘ └──────────────┘ └────────┘
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
**Pros:** Single source of truth, survives page refresh/device switch, supports cart abandonment tracking
|
|
24
|
+
**Cons:** Every cart action requires API call, slightly slower UX without optimistic updates
|
|
25
|
+
**Use when:** Multi-device support needed, cart abandonment emails, server-side price validation required
|
|
26
|
+
|
|
27
|
+
### Option 2: Client-Side Cart (Simple use cases only)
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
Client (React) Server (Express)
|
|
31
|
+
┌──────────────────┐ ┌──────────────┐
|
|
32
|
+
│ Cart in │──POST───────▶│ Checkout only │
|
|
33
|
+
│ localStorage/ │ (checkout) │ /api/checkout │
|
|
34
|
+
│ React Context │ └──────────────┘
|
|
35
|
+
└──────────────────┘
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
**Pros:** Instant UI, no API calls for cart operations, works offline
|
|
39
|
+
**Cons:** Lost on browser clear, no cross-device, no abandonment tracking, vulnerable to price manipulation
|
|
40
|
+
**Use when:** Simple single-page apps, digital downloads, no cart abandonment needed
|
|
41
|
+
|
|
42
|
+
### Option 3: Hybrid (Best UX)
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
Client reads from local cache (fast)
|
|
46
|
+
Client writes through server API (safe)
|
|
47
|
+
Server is source of truth
|
|
48
|
+
Local cache is optimistic preview
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
**Use when:** You want instant UX AND server-side safety.
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Database Schema
|
|
56
|
+
|
|
57
|
+
```sql
|
|
58
|
+
-- Carts table (one per user or session)
|
|
59
|
+
CREATE TABLE carts (
|
|
60
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
61
|
+
user_id UUID REFERENCES users(id), -- NULL for guest carts
|
|
62
|
+
session_token VARCHAR(255), -- For guest identification
|
|
63
|
+
status VARCHAR(20) DEFAULT 'active', -- active | merged | abandoned | converted
|
|
64
|
+
created_at TIMESTAMP DEFAULT NOW(),
|
|
65
|
+
updated_at TIMESTAMP DEFAULT NOW(),
|
|
66
|
+
expires_at TIMESTAMP DEFAULT NOW() + INTERVAL '30 days',
|
|
67
|
+
CONSTRAINT chk_cart_owner CHECK (user_id IS NOT NULL OR session_token IS NOT NULL)
|
|
68
|
+
);
|
|
69
|
+
|
|
70
|
+
-- Cart items
|
|
71
|
+
CREATE TABLE cart_items (
|
|
72
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
73
|
+
cart_id UUID NOT NULL REFERENCES carts(id) ON DELETE CASCADE,
|
|
74
|
+
product_id UUID NOT NULL REFERENCES products(id),
|
|
75
|
+
variant_id UUID REFERENCES product_variants(id), -- Size, color, etc.
|
|
76
|
+
quantity INTEGER NOT NULL DEFAULT 1 CHECK (quantity > 0),
|
|
77
|
+
price_at_add DECIMAL(10,2) NOT NULL, -- Snapshot price when added
|
|
78
|
+
created_at TIMESTAMP DEFAULT NOW(),
|
|
79
|
+
updated_at TIMESTAMP DEFAULT NOW(),
|
|
80
|
+
UNIQUE(cart_id, product_id, variant_id) -- One entry per product+variant
|
|
81
|
+
);
|
|
82
|
+
|
|
83
|
+
-- Indexes
|
|
84
|
+
CREATE INDEX idx_carts_user ON carts(user_id) WHERE user_id IS NOT NULL;
|
|
85
|
+
CREATE INDEX idx_carts_session ON carts(session_token) WHERE session_token IS NOT NULL;
|
|
86
|
+
CREATE INDEX idx_carts_status ON carts(status);
|
|
87
|
+
CREATE INDEX idx_cart_items_cart ON cart_items(cart_id);
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## API Endpoints
|
|
93
|
+
|
|
94
|
+
```javascript
|
|
95
|
+
// GET /api/cart — Get current cart
|
|
96
|
+
router.get('/cart', async (req, res) => {
|
|
97
|
+
const cart = await getOrCreateCart(req.user?.id, req.sessionToken);
|
|
98
|
+
const items = await getCartItems(cart.id);
|
|
99
|
+
|
|
100
|
+
// Validate prices are still current
|
|
101
|
+
const validated = await validateCartPrices(items);
|
|
102
|
+
|
|
103
|
+
res.json({
|
|
104
|
+
cart_id: cart.id,
|
|
105
|
+
items: validated.items,
|
|
106
|
+
price_changes: validated.changes, // Alert user if prices changed
|
|
107
|
+
subtotal: validated.subtotal,
|
|
108
|
+
item_count: validated.itemCount,
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
// POST /api/cart/items — Add item
|
|
113
|
+
router.post('/cart/items', async (req, res) => {
|
|
114
|
+
const { product_id, variant_id, quantity } = req.body;
|
|
115
|
+
|
|
116
|
+
// ALWAYS validate price server-side
|
|
117
|
+
const product = await getProduct(product_id);
|
|
118
|
+
if (!product || !product.is_active) {
|
|
119
|
+
return res.status(404).json({ error: 'Product not available' });
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// Check stock
|
|
123
|
+
const available = await checkStock(product_id, variant_id, quantity);
|
|
124
|
+
if (!available) {
|
|
125
|
+
return res.status(409).json({ error: 'Insufficient stock', available: available.count });
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
const cart = await getOrCreateCart(req.user?.id, req.sessionToken);
|
|
129
|
+
const item = await addToCart(cart.id, product_id, variant_id, quantity, product.price);
|
|
130
|
+
|
|
131
|
+
res.json({ item, cart_total: await getCartTotal(cart.id) });
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
// PATCH /api/cart/items/:id — Update quantity
|
|
135
|
+
router.patch('/cart/items/:id', async (req, res) => {
|
|
136
|
+
const { quantity } = req.body;
|
|
137
|
+
if (quantity < 1) {
|
|
138
|
+
return res.status(400).json({ error: 'Quantity must be at least 1' });
|
|
139
|
+
}
|
|
140
|
+
// Re-check stock at new quantity
|
|
141
|
+
const item = await getCartItem(req.params.id);
|
|
142
|
+
const available = await checkStock(item.product_id, item.variant_id, quantity);
|
|
143
|
+
if (!available) {
|
|
144
|
+
return res.status(409).json({ error: 'Insufficient stock' });
|
|
145
|
+
}
|
|
146
|
+
const updated = await updateCartItemQuantity(req.params.id, quantity);
|
|
147
|
+
res.json(updated);
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
// DELETE /api/cart/items/:id — Remove item
|
|
151
|
+
router.delete('/cart/items/:id', async (req, res) => {
|
|
152
|
+
await removeCartItem(req.params.id);
|
|
153
|
+
res.json({ removed: true });
|
|
154
|
+
});
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## Cart Merge on Login
|
|
160
|
+
|
|
161
|
+
When a guest user logs in, their anonymous cart must merge with their account cart:
|
|
162
|
+
|
|
163
|
+
```javascript
|
|
164
|
+
async function mergeCartsOnLogin(userId, sessionToken) {
|
|
165
|
+
const guestCart = await getCartBySession(sessionToken);
|
|
166
|
+
const userCart = await getCartByUser(userId);
|
|
167
|
+
|
|
168
|
+
if (!guestCart || guestCart.items.length === 0) return userCart;
|
|
169
|
+
if (!userCart) {
|
|
170
|
+
// Simple case: assign guest cart to user
|
|
171
|
+
await db.query('UPDATE carts SET user_id = $1, session_token = NULL WHERE id = $2',
|
|
172
|
+
[userId, guestCart.id]);
|
|
173
|
+
return guestCart;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
// Merge: guest items into user cart
|
|
177
|
+
for (const guestItem of guestCart.items) {
|
|
178
|
+
const existingItem = userCart.items.find(
|
|
179
|
+
i => i.product_id === guestItem.product_id && i.variant_id === guestItem.variant_id
|
|
180
|
+
);
|
|
181
|
+
|
|
182
|
+
if (existingItem) {
|
|
183
|
+
// Same product: take higher quantity (guest was shopping more recently)
|
|
184
|
+
const newQty = Math.max(existingItem.quantity, guestItem.quantity);
|
|
185
|
+
await updateCartItemQuantity(existingItem.id, newQty);
|
|
186
|
+
} else {
|
|
187
|
+
// New product: add to user cart
|
|
188
|
+
await addToCart(userCart.id, guestItem.product_id, guestItem.variant_id,
|
|
189
|
+
guestItem.quantity, guestItem.price_at_add);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// Mark guest cart as merged
|
|
194
|
+
await db.query("UPDATE carts SET status = 'merged' WHERE id = $1", [guestCart.id]);
|
|
195
|
+
|
|
196
|
+
return await getCartByUser(userId);
|
|
197
|
+
}
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## Price Validation at Checkout
|
|
203
|
+
|
|
204
|
+
Never trust the cart's stored prices at checkout time — always re-validate:
|
|
205
|
+
|
|
206
|
+
```javascript
|
|
207
|
+
async function validateCartForCheckout(cartId) {
|
|
208
|
+
const items = await getCartItems(cartId);
|
|
209
|
+
const issues = [];
|
|
210
|
+
|
|
211
|
+
for (const item of items) {
|
|
212
|
+
const currentProduct = await getProduct(item.product_id);
|
|
213
|
+
|
|
214
|
+
// Product still exists and is active?
|
|
215
|
+
if (!currentProduct || !currentProduct.is_active) {
|
|
216
|
+
issues.push({ item_id: item.id, type: 'unavailable', message: `${item.name} is no longer available` });
|
|
217
|
+
continue;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
// Price changed?
|
|
221
|
+
if (currentProduct.price !== item.price_at_add) {
|
|
222
|
+
issues.push({
|
|
223
|
+
item_id: item.id, type: 'price_change',
|
|
224
|
+
old_price: item.price_at_add, new_price: currentProduct.price,
|
|
225
|
+
message: `Price changed from $${item.price_at_add} to $${currentProduct.price}`
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
// Still in stock?
|
|
230
|
+
const stock = await checkStock(item.product_id, item.variant_id, item.quantity);
|
|
231
|
+
if (!stock.available) {
|
|
232
|
+
issues.push({
|
|
233
|
+
item_id: item.id, type: 'stock',
|
|
234
|
+
requested: item.quantity, available: stock.count,
|
|
235
|
+
message: `Only ${stock.count} available (you have ${item.quantity})`
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
return { valid: issues.length === 0, issues };
|
|
241
|
+
}
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
## Session Token Middleware
|
|
247
|
+
|
|
248
|
+
```javascript
|
|
249
|
+
function cartSessionMiddleware(req, res, next) {
|
|
250
|
+
// Authenticated users use their user ID
|
|
251
|
+
if (req.user) {
|
|
252
|
+
req.cartIdentifier = { user_id: req.user.id };
|
|
253
|
+
return next();
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
// Guest users get a session token
|
|
257
|
+
let sessionToken = req.cookies?.cart_session;
|
|
258
|
+
if (!sessionToken) {
|
|
259
|
+
sessionToken = crypto.randomUUID();
|
|
260
|
+
res.cookie('cart_session', sessionToken, {
|
|
261
|
+
httpOnly: true,
|
|
262
|
+
secure: process.env.NODE_ENV === 'production',
|
|
263
|
+
sameSite: 'lax',
|
|
264
|
+
maxAge: 30 * 24 * 60 * 60 * 1000, // 30 days
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
req.cartIdentifier = { session_token: sessionToken };
|
|
268
|
+
req.sessionToken = sessionToken;
|
|
269
|
+
next();
|
|
270
|
+
}
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
---
|
|
274
|
+
|
|
275
|
+
## Constraint Verification Checklist
|
|
276
|
+
|
|
277
|
+
Before marking any cart feature complete:
|
|
278
|
+
|
|
279
|
+
```
|
|
280
|
+
□ Prices validated server-side (never from client)
|
|
281
|
+
□ Stock checked before adding and at checkout
|
|
282
|
+
□ Race condition handled (two users buy last item)
|
|
283
|
+
□ Cart expires after configurable period (default 30 days)
|
|
284
|
+
□ Guest cart merges correctly on login
|
|
285
|
+
□ Price changes shown to user before checkout
|
|
286
|
+
□ Unavailable products removed/flagged at checkout
|
|
287
|
+
□ Quantity limits enforced (min 1, max per product policy)
|
|
288
|
+
□ Cart total calculated server-side (not client sum)
|
|
289
|
+
□ Session token is httpOnly, secure, sameSite
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
---
|
|
293
|
+
|
|
294
|
+
## Sources
|
|
295
|
+
|
|
296
|
+
- ShoppingComp (arXiv:2511.22978) — LLM Shopping Cart Benchmark (Nov 2025)
|
|
297
|
+
- WebMall (arXiv:2508.13024) — Multi-Shop E-Commerce Agent Benchmark (Aug 2025)
|
|
298
|
+
- ShoppingBench (arXiv:2508.04266) — Intent-Grounded Shopping Agent Benchmark (Aug 2025)
|
|
299
|
+
- Adobe Commerce: `mergeCarts` GraphQL mutation reference
|
|
300
|
+
- WooCommerce: Cart data flow documentation (2025)
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
# Cart Item Count Indicator
|
|
2
|
+
|
|
3
|
+
## Problem Statement
|
|
4
|
+
Users need visual feedback when they add items to their cart. Industry standard (Amazon, Shopify) shows a badge with the number of items directly on the cart icon in the main navigation.
|
|
5
|
+
|
|
6
|
+
## Solution Overview
|
|
7
|
+
Implement a real-time cart count badge that:
|
|
8
|
+
1. Shows the number of items in the cart on the cart icon
|
|
9
|
+
2. Updates automatically when items are added/removed
|
|
10
|
+
3. Fetches count from backend API
|
|
11
|
+
4. Displays elegantly with a red badge for visibility
|
|
12
|
+
|
|
13
|
+
## Implementation
|
|
14
|
+
|
|
15
|
+
### 1. Backend - Cart Count Endpoint
|
|
16
|
+
|
|
17
|
+
#### Controller Function (`server/controllers/cartController.js`)
|
|
18
|
+
```javascript
|
|
19
|
+
/**
|
|
20
|
+
* Get cart item count
|
|
21
|
+
* @route GET /api/cart/count
|
|
22
|
+
* @access Private
|
|
23
|
+
*/
|
|
24
|
+
export const getCartCount = async (req, res) => {
|
|
25
|
+
try {
|
|
26
|
+
const userId = req.user.id;
|
|
27
|
+
|
|
28
|
+
const result = await sql`
|
|
29
|
+
SELECT COUNT(*)::int as count
|
|
30
|
+
FROM cart_items ci
|
|
31
|
+
JOIN products p ON p.id = ci.product_id
|
|
32
|
+
WHERE ci.user_id = ${userId}
|
|
33
|
+
AND p.deleted_at IS NULL
|
|
34
|
+
AND p.status = 'published'
|
|
35
|
+
`;
|
|
36
|
+
|
|
37
|
+
res.json({
|
|
38
|
+
success: true,
|
|
39
|
+
count: result[0]?.count || 0
|
|
40
|
+
});
|
|
41
|
+
} catch (error) {
|
|
42
|
+
console.error('❌ [Get Cart Count Error]:', error);
|
|
43
|
+
res.status(500).json({
|
|
44
|
+
success: false,
|
|
45
|
+
message: 'Error fetching cart count',
|
|
46
|
+
count: 0
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
#### Route Definition (`server/routes/cartRoutes.js`)
|
|
53
|
+
```javascript
|
|
54
|
+
import { getCartCount } from '../controllers/cartController.js';
|
|
55
|
+
|
|
56
|
+
// Add route BEFORE the generic GET '/' route to avoid conflicts
|
|
57
|
+
router.get('/count', auth, getCartCount);
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### 2. Frontend - Header Component
|
|
61
|
+
|
|
62
|
+
#### State and Functions (`client/src/components/layout/Header.jsx`)
|
|
63
|
+
```javascript
|
|
64
|
+
const Header = () => {
|
|
65
|
+
const [cartCount, setCartCount] = useState(0);
|
|
66
|
+
const { isAuthenticated } = useSelector((state) => state.auth);
|
|
67
|
+
const location = useLocation();
|
|
68
|
+
|
|
69
|
+
// Fetch cart count
|
|
70
|
+
useEffect(() => {
|
|
71
|
+
if (isAuthenticated) {
|
|
72
|
+
fetchCartCount();
|
|
73
|
+
} else {
|
|
74
|
+
setCartCount(0);
|
|
75
|
+
}
|
|
76
|
+
}, [isAuthenticated, location.pathname]);
|
|
77
|
+
|
|
78
|
+
const fetchCartCount = async () => {
|
|
79
|
+
try {
|
|
80
|
+
const { data } = await axios.get('/api/cart/count');
|
|
81
|
+
setCartCount(data.count || 0);
|
|
82
|
+
} catch (error) {
|
|
83
|
+
console.error('Failed to fetch cart count:', error);
|
|
84
|
+
setCartCount(0);
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
#### Visual Badge Display
|
|
90
|
+
```javascript
|
|
91
|
+
{/* Shopping Cart Icon */}
|
|
92
|
+
{isAuthenticated && (
|
|
93
|
+
<Link
|
|
94
|
+
to="/cart"
|
|
95
|
+
className="relative p-2 text-gray-600 hover:text-gray-900 transition-colors duration-200"
|
|
96
|
+
>
|
|
97
|
+
<svg className="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
98
|
+
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2}
|
|
99
|
+
d="M3 3h2l.4 2M7 13h10l4-8H5.4M7 13L5.4 5M7 13l-2.293 2.293c-.63.63-.184 1.707.707 1.707H17m0 0a2 2 0 100 4 2 2 0 000-4zm-8 2a2 2 0 11-4 0 2 2 0 014 0z" />
|
|
100
|
+
</svg>
|
|
101
|
+
{cartCount > 0 && (
|
|
102
|
+
<span className="absolute -top-1 -right-1 h-5 w-5 bg-red-500 text-white text-xs font-bold rounded-full flex items-center justify-center">
|
|
103
|
+
{cartCount > 99 ? '99+' : cartCount}
|
|
104
|
+
</span>
|
|
105
|
+
)}
|
|
106
|
+
</Link>
|
|
107
|
+
)}
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### 3. Real-Time Updates
|
|
111
|
+
|
|
112
|
+
To ensure the cart count updates when items are added/removed:
|
|
113
|
+
|
|
114
|
+
#### After Adding to Cart
|
|
115
|
+
```javascript
|
|
116
|
+
const handleAddToCart = async (productId) => {
|
|
117
|
+
try {
|
|
118
|
+
await axios.post('/api/cart', { product_id: productId });
|
|
119
|
+
|
|
120
|
+
// Trigger cart count refresh
|
|
121
|
+
await fetchCartCount();
|
|
122
|
+
|
|
123
|
+
toast.success('Added to cart!');
|
|
124
|
+
} catch (error) {
|
|
125
|
+
toast.error('Failed to add to cart');
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
#### After Removing from Cart
|
|
131
|
+
```javascript
|
|
132
|
+
const handleRemoveFromCart = async (itemId) => {
|
|
133
|
+
try {
|
|
134
|
+
await axios.delete(`/api/cart/${itemId}`);
|
|
135
|
+
|
|
136
|
+
// Update cart count in header
|
|
137
|
+
await fetchCartCount();
|
|
138
|
+
|
|
139
|
+
toast.success('Removed from cart');
|
|
140
|
+
} catch (error) {
|
|
141
|
+
toast.error('Failed to remove item');
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
## Design Decisions
|
|
147
|
+
|
|
148
|
+
### Badge Styling
|
|
149
|
+
- **Red background** (`bg-red-500`): High visibility, industry standard for notifications
|
|
150
|
+
- **Circular shape** (`rounded-full`): Clean, modern look
|
|
151
|
+
- **Absolute positioning**: Overlays on top-right of cart icon
|
|
152
|
+
- **Small size** (`h-5 w-5`): Non-intrusive but visible
|
|
153
|
+
- **White text**: Maximum contrast with red background
|
|
154
|
+
|
|
155
|
+
### Performance Optimizations
|
|
156
|
+
1. **Conditional fetching**: Only fetch when authenticated
|
|
157
|
+
2. **Location-based refresh**: Update count when navigating (useful after checkout)
|
|
158
|
+
3. **Error handling**: Gracefully default to 0 on errors
|
|
159
|
+
4. **SQL optimization**: Direct COUNT with JOIN for accuracy
|
|
160
|
+
|
|
161
|
+
### UX Considerations
|
|
162
|
+
1. **99+ display**: Prevents badge from getting too wide with large numbers
|
|
163
|
+
2. **Hide when 0**: Don't show badge when cart is empty
|
|
164
|
+
3. **Smooth transitions**: CSS transitions on hover states
|
|
165
|
+
4. **Responsive**: Works on both desktop and mobile views
|
|
166
|
+
|
|
167
|
+
## Testing
|
|
168
|
+
|
|
169
|
+
### Manual Testing
|
|
170
|
+
1. **Add item to cart**: Badge should appear/increment
|
|
171
|
+
2. **Remove item**: Badge should decrement/disappear
|
|
172
|
+
3. **Clear cart**: Badge should disappear
|
|
173
|
+
4. **Login/Logout**: Badge should appear/disappear appropriately
|
|
174
|
+
5. **Page refresh**: Count should persist
|
|
175
|
+
|
|
176
|
+
### API Testing
|
|
177
|
+
```bash
|
|
178
|
+
# Test cart count endpoint
|
|
179
|
+
curl -X GET http://localhost:5000/api/cart/count \
|
|
180
|
+
-H "Authorization: Bearer YOUR_TOKEN"
|
|
181
|
+
|
|
182
|
+
# Expected response:
|
|
183
|
+
{
|
|
184
|
+
"success": true,
|
|
185
|
+
"count": 3
|
|
186
|
+
}
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
## Common Issues and Solutions
|
|
190
|
+
|
|
191
|
+
### Issue: Count not updating after adding item
|
|
192
|
+
**Solution**: Ensure `fetchCartCount()` is called after successful cart operations
|
|
193
|
+
|
|
194
|
+
### Issue: Badge overlapping with other elements
|
|
195
|
+
**Solution**: Parent element needs `relative` positioning
|
|
196
|
+
|
|
197
|
+
### Issue: Count showing wrong number
|
|
198
|
+
**Solution**: Check SQL query joins products table and filters by status
|
|
199
|
+
|
|
200
|
+
## Alternative Implementations
|
|
201
|
+
|
|
202
|
+
### 1. Redux State Management
|
|
203
|
+
Instead of local component state, use Redux:
|
|
204
|
+
```javascript
|
|
205
|
+
// Redux slice
|
|
206
|
+
const cartSlice = createSlice({
|
|
207
|
+
name: 'cart',
|
|
208
|
+
initialState: { count: 0 },
|
|
209
|
+
reducers: {
|
|
210
|
+
setCartCount: (state, action) => {
|
|
211
|
+
state.count = action.payload;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
});
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
### 2. WebSocket Real-Time Updates
|
|
218
|
+
For multi-tab synchronization:
|
|
219
|
+
```javascript
|
|
220
|
+
socket.on('cart-updated', (data) => {
|
|
221
|
+
if (data.userId === currentUserId) {
|
|
222
|
+
setCartCount(data.count);
|
|
223
|
+
}
|
|
224
|
+
});
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
### 3. Context API
|
|
228
|
+
For sharing cart count across components:
|
|
229
|
+
```javascript
|
|
230
|
+
const CartContext = createContext();
|
|
231
|
+
|
|
232
|
+
export const CartProvider = ({ children }) => {
|
|
233
|
+
const [cartCount, setCartCount] = useState(0);
|
|
234
|
+
return (
|
|
235
|
+
<CartContext.Provider value={{ cartCount, setCartCount }}>
|
|
236
|
+
{children}
|
|
237
|
+
</CartContext.Provider>
|
|
238
|
+
);
|
|
239
|
+
};
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
## Industry Standards Reference
|
|
243
|
+
|
|
244
|
+
### Amazon Style
|
|
245
|
+
- Red badge with white number
|
|
246
|
+
- Shows total item count (not unique products)
|
|
247
|
+
- Updates instantly on add/remove
|
|
248
|
+
|
|
249
|
+
### Shopify Style
|
|
250
|
+
- Often shows slide-out panel with items
|
|
251
|
+
- Badge shows item count
|
|
252
|
+
- May include mini cart preview on hover
|
|
253
|
+
|
|
254
|
+
### Best Practices
|
|
255
|
+
1. **Instant feedback**: Update immediately, even before server confirms
|
|
256
|
+
2. **Optimistic updates**: Show change, rollback on error
|
|
257
|
+
3. **Accessibility**: Include aria-label for screen readers
|
|
258
|
+
4. **Mobile-friendly**: Ensure touch targets are adequate size
|
|
259
|
+
|
|
260
|
+
---
|
|
261
|
+
|
|
262
|
+
**Last Updated**: October 31, 2024
|
|
263
|
+
**Tested With**: React 18, Node.js/Express, PostgreSQL
|
|
264
|
+
**Author**: Claude (Anthropic)
|