@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,141 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: socket-io-broadcast-all-vs-room
|
|
3
|
+
category: integrations
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
contributed: 2026-02-21
|
|
6
|
+
contributor: my-other-project
|
|
7
|
+
last_updated: 2026-02-21
|
|
8
|
+
tags: [socket.io, websocket, real-time, broadcast, emit, rooms]
|
|
9
|
+
difficulty: easy
|
|
10
|
+
usage_count: 1
|
|
11
|
+
success_rate: 100
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Socket.IO: Broadcast to All Users vs. Room/Namespace
|
|
15
|
+
|
|
16
|
+
## Problem
|
|
17
|
+
|
|
18
|
+
In Socket.IO, there are several different `emit()` patterns that look similar but have very different scopes. Choosing the wrong one results in messages going to only admins, only one user, only users in a specific room, or being silently dropped.
|
|
19
|
+
|
|
20
|
+
Common confusion: a codebase already has `io.to('admins').emit()` and you need to send to **all** connected users.
|
|
21
|
+
|
|
22
|
+
## Solution Pattern
|
|
23
|
+
|
|
24
|
+
Use `io.emit()` (global emit on the io instance) to broadcast to every connected socket. This is different from `socket.emit()` (one socket) or `io.to('room').emit()` (room members only).
|
|
25
|
+
|
|
26
|
+
## Code Example
|
|
27
|
+
|
|
28
|
+
```js
|
|
29
|
+
// ❌ Wrong: emits to only one specific client
|
|
30
|
+
socket.emit('broadcast_announcement', data);
|
|
31
|
+
|
|
32
|
+
// ❌ Wrong: emits only to users in the 'admins' room
|
|
33
|
+
this.io.to('admins').emit('broadcast_announcement', data);
|
|
34
|
+
|
|
35
|
+
// ❌ Wrong: emits to everyone EXCEPT the sender socket
|
|
36
|
+
socket.broadcast.emit('broadcast_announcement', data);
|
|
37
|
+
|
|
38
|
+
// ✅ Correct: emits to ALL connected sockets (true broadcast)
|
|
39
|
+
this.io.emit('broadcast_announcement', data);
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Extending a SocketService class:
|
|
43
|
+
|
|
44
|
+
```js
|
|
45
|
+
class SocketService {
|
|
46
|
+
// Existing method — only reaches admin room
|
|
47
|
+
broadcastToAdmins(event, data) {
|
|
48
|
+
if (!this.io) return;
|
|
49
|
+
this.io.to('admins').emit(event, data);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// New method — reaches ALL connected users
|
|
53
|
+
broadcastAnnouncement(announcement) {
|
|
54
|
+
if (!this.io) return;
|
|
55
|
+
this.io.emit('broadcast_announcement', {
|
|
56
|
+
id: announcement.id,
|
|
57
|
+
title: announcement.title,
|
|
58
|
+
message: announcement.message,
|
|
59
|
+
image_url: announcement.image_url,
|
|
60
|
+
cta_label: announcement.cta_label,
|
|
61
|
+
cta_url: announcement.cta_url,
|
|
62
|
+
created_at: announcement.created_at
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Client listener (React):
|
|
69
|
+
|
|
70
|
+
```js
|
|
71
|
+
// In a top-level layout component that stays mounted when user is logged in
|
|
72
|
+
useEffect(() => {
|
|
73
|
+
if (!socket) return;
|
|
74
|
+
|
|
75
|
+
const handleAnnouncement = (announcement) => {
|
|
76
|
+
toast.custom((t) => (
|
|
77
|
+
<div
|
|
78
|
+
className={`${t.visible ? 'opacity-100' : 'opacity-0'} bg-white shadow-lg rounded-lg p-4 border-l-4 border-blue-500 cursor-pointer`}
|
|
79
|
+
onClick={() => {
|
|
80
|
+
toast.dismiss(t.id);
|
|
81
|
+
if (announcement.cta_url) window.open(announcement.cta_url, '_blank');
|
|
82
|
+
else window.location.href = '/dashboard/announcements';
|
|
83
|
+
}}
|
|
84
|
+
>
|
|
85
|
+
<p className="font-semibold text-sm">📢 {announcement.title}</p>
|
|
86
|
+
<p className="text-xs text-gray-500 line-clamp-2">{announcement.message}</p>
|
|
87
|
+
</div>
|
|
88
|
+
), { duration: 8000 });
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
socket.on('broadcast_announcement', handleAnnouncement);
|
|
92
|
+
return () => socket.off('broadcast_announcement', handleAnnouncement);
|
|
93
|
+
}, [socket]);
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Socket.IO Emit Reference
|
|
97
|
+
|
|
98
|
+
| Pattern | Reaches |
|
|
99
|
+
|---------|---------|
|
|
100
|
+
| `socket.emit(event, data)` | Only the one connected socket |
|
|
101
|
+
| `socket.broadcast.emit(event, data)` | All sockets EXCEPT the sender |
|
|
102
|
+
| `io.emit(event, data)` | ALL connected sockets (true broadcast) |
|
|
103
|
+
| `io.to('room').emit(event, data)` | All sockets in a specific room |
|
|
104
|
+
| `io.to('room1').to('room2').emit()` | All sockets in either room |
|
|
105
|
+
| `io.except('room').emit()` | All sockets NOT in the room |
|
|
106
|
+
|
|
107
|
+
## Implementation Steps
|
|
108
|
+
|
|
109
|
+
1. Add the broadcast method to your SocketService class using `this.io.emit()` (not `this.io.to('room').emit()`)
|
|
110
|
+
2. Guard against `!this.io` (io may not be initialized when called at startup)
|
|
111
|
+
3. Only emit safe/public fields — don't emit internal DB fields like `created_by` or `updated_at`
|
|
112
|
+
4. On the client, listen for the event in the highest always-mounted component (e.g., App.jsx or a layout wrapper) so it fires regardless of which page the user is on
|
|
113
|
+
5. Always clean up with `socket.off()` in the useEffect cleanup to prevent listener accumulation
|
|
114
|
+
|
|
115
|
+
## When to Use
|
|
116
|
+
|
|
117
|
+
- Admin-to-all-users announcement/notification systems
|
|
118
|
+
- Platform-wide alerts (maintenance windows, new feature announcements)
|
|
119
|
+
- Live events (countdown endings, contest results)
|
|
120
|
+
- Any case where ALL currently-online users should receive a message simultaneously
|
|
121
|
+
|
|
122
|
+
## When NOT to Use
|
|
123
|
+
|
|
124
|
+
- User-to-user direct messages (use rooms/namespaces)
|
|
125
|
+
- Notifications for specific users only (use `io.to(userSocketId).emit()` or a user-specific room)
|
|
126
|
+
- Admin-only updates (use `io.to('admins').emit()`)
|
|
127
|
+
|
|
128
|
+
## Common Mistakes
|
|
129
|
+
|
|
130
|
+
- **Using `socket.emit()` from the server** — this only goes to the socket that sent the triggering request, not all users
|
|
131
|
+
- **Listening in a component that unmounts** — if the listener is in a page component, navigating away stops receiving toasts. Always put broadcast listeners in the top-level layout.
|
|
132
|
+
- **Accumulating listeners** — always return a cleanup function: `return () => socket.off('event', handler)`
|
|
133
|
+
|
|
134
|
+
## Related Skills
|
|
135
|
+
|
|
136
|
+
- [BROADCAST_SCHEDULER_SHARED_EXECUTE_FUNCTION.md](../api-patterns/BROADCAST_SCHEDULER_SHARED_EXECUTE_FUNCTION.md)
|
|
137
|
+
|
|
138
|
+
## References
|
|
139
|
+
|
|
140
|
+
- Socket.IO docs: https://socket.io/docs/v4/broadcasting-events/
|
|
141
|
+
- Contributed from: my-other-project, Phase 15 Broadcast Announcements (2026-02-21)
|
|
@@ -0,0 +1,374 @@
|
|
|
1
|
+
# Virtual Meeting Integration Implementation
|
|
2
|
+
|
|
3
|
+
**Date:** October 27, 2025
|
|
4
|
+
**Status:** ✅ Complete and Ready for Testing
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
Implemented comprehensive virtual meeting integration for online events and sales. Admins and shop managers can now:
|
|
11
|
+
|
|
12
|
+
1. **Create Virtual Products** with Zoom, Google Meet, Microsoft Teams, or other platform links
|
|
13
|
+
2. **Manage Meeting URLs** directly in the product creation form
|
|
14
|
+
3. **Display Meeting Links** on product detail pages with "Join Meeting" button
|
|
15
|
+
4. **Support Multiple Platforms** (Zoom, Google Meet, Microsoft Teams, Other)
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Features Implemented
|
|
20
|
+
|
|
21
|
+
### 1. **Admin Product Form Enhancement**
|
|
22
|
+
|
|
23
|
+
**Location:** `client/src/pages/admin/Products.jsx`
|
|
24
|
+
|
|
25
|
+
Added conditional fields for virtual meeting products:
|
|
26
|
+
|
|
27
|
+
```javascript
|
|
28
|
+
// Form state updated to include:
|
|
29
|
+
{
|
|
30
|
+
meeting_url: '', // URL for the meeting link
|
|
31
|
+
meeting_platform: 'zoom' // Platform type (zoom, google_meet, microsoft_teams, other)
|
|
32
|
+
}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
**Features:**
|
|
36
|
+
- ✅ Meeting URL field (required for virtual_meeting products)
|
|
37
|
+
- ✅ Platform selector dropdown
|
|
38
|
+
- ✅ Only displays when `product_type === 'virtual_meeting'`
|
|
39
|
+
- ✅ URL validation (requires valid URL format)
|
|
40
|
+
- ✅ Helper text explaining accepted platforms
|
|
41
|
+
- ✅ Persists data when editing existing products
|
|
42
|
+
|
|
43
|
+
**UI:** Styled section with border separator, appears only for virtual meeting products
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
### 2. **Database Schema Update**
|
|
48
|
+
|
|
49
|
+
**Migration File:** `server/migrations/038_add_virtual_meeting_fields.sql`
|
|
50
|
+
|
|
51
|
+
Added columns to the `products` table:
|
|
52
|
+
|
|
53
|
+
```sql
|
|
54
|
+
-- Meeting URL column
|
|
55
|
+
ALTER TABLE products ADD COLUMN IF NOT EXISTS meeting_url VARCHAR(500);
|
|
56
|
+
|
|
57
|
+
-- Meeting platform enum type
|
|
58
|
+
CREATE TYPE meeting_platform_enum AS ENUM (
|
|
59
|
+
'zoom',
|
|
60
|
+
'google_meet',
|
|
61
|
+
'microsoft_teams',
|
|
62
|
+
'other'
|
|
63
|
+
);
|
|
64
|
+
|
|
65
|
+
ALTER TABLE products ADD COLUMN IF NOT EXISTS meeting_platform meeting_platform_enum DEFAULT 'zoom';
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
**Indexes Added:**
|
|
69
|
+
- `idx_products_meeting_url` - Find virtual meeting products with URLs
|
|
70
|
+
- `idx_products_meeting_platform` - Query by platform type
|
|
71
|
+
|
|
72
|
+
**Database Structure:**
|
|
73
|
+
```sql
|
|
74
|
+
products table:
|
|
75
|
+
├── meeting_url VARCHAR(500) - NULL if no URL provided
|
|
76
|
+
└── meeting_platform meeting_platform_enum - Defaults to 'zoom'
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
### 3. **Backend API Updates**
|
|
82
|
+
|
|
83
|
+
#### A. **Create Product Controller**
|
|
84
|
+
**File:** `server/controllers/productsController.js` (lines 199-268)
|
|
85
|
+
|
|
86
|
+
**Changes:**
|
|
87
|
+
- ✅ Added `meeting_url` and `meeting_platform` to request destructuring
|
|
88
|
+
- ✅ Included both fields in INSERT statement
|
|
89
|
+
- ✅ Validated meeting_url is provided for virtual products (if needed)
|
|
90
|
+
- ✅ Returns complete product data including meeting details
|
|
91
|
+
|
|
92
|
+
**Example Request:**
|
|
93
|
+
```json
|
|
94
|
+
{
|
|
95
|
+
"name": "Daily Prayer Session",
|
|
96
|
+
"description": "Join us for a live prayer meeting",
|
|
97
|
+
"product_type": "virtual_meeting",
|
|
98
|
+
"price": 0,
|
|
99
|
+
"meeting_url": "https://zoom.us/j/123456789",
|
|
100
|
+
"meeting_platform": "zoom"
|
|
101
|
+
}
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
#### B. **Update Product Controller**
|
|
105
|
+
**File:** `server/controllers/productsController.js` (lines 310-396)
|
|
106
|
+
|
|
107
|
+
**Changes:**
|
|
108
|
+
- ✅ Added `meeting_url` and `meeting_platform` to request destructuring
|
|
109
|
+
- ✅ Added update conditions for both fields
|
|
110
|
+
- ✅ Allows partial updates (only update meeting fields if provided)
|
|
111
|
+
- ✅ Handles null values (clearing meeting URL)
|
|
112
|
+
|
|
113
|
+
**Example Request:**
|
|
114
|
+
```json
|
|
115
|
+
{
|
|
116
|
+
"meeting_url": "https://meet.google.com/abc-defg-hij",
|
|
117
|
+
"meeting_platform": "google_meet"
|
|
118
|
+
}
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
**API Endpoints:**
|
|
122
|
+
- `POST /api/products` - Create virtual product with meeting URL
|
|
123
|
+
- `PUT /api/products/:id` - Update product's meeting details
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
### 4. **Frontend Product Detail Display**
|
|
128
|
+
|
|
129
|
+
**File:** `client/src/pages/ProductDetail.jsx` (lines 255-301)
|
|
130
|
+
|
|
131
|
+
**Features:**
|
|
132
|
+
- ✅ Conditional rendering for virtual_meeting products
|
|
133
|
+
- ✅ Displays meeting platform (formatted from database enum)
|
|
134
|
+
- ✅ Shows "Join Meeting" button linking to the URL
|
|
135
|
+
- ✅ Opens meeting link in new tab/window
|
|
136
|
+
- ✅ Integrated with existing meeting details (date, duration, participants)
|
|
137
|
+
- ✅ Styled with blue theme matching product detail page
|
|
138
|
+
|
|
139
|
+
**Display Structure:**
|
|
140
|
+
```
|
|
141
|
+
Meeting/Event Details Box (blue background)
|
|
142
|
+
├── Calendar: [Meeting Date]
|
|
143
|
+
├── Duration: [Minutes]
|
|
144
|
+
├── Max Participants: [Number]
|
|
145
|
+
└── Platform & Join Button:
|
|
146
|
+
└── Platform: [ZOOM / GOOGLE MEET / MICROSOFT TEAMS / OTHER]
|
|
147
|
+
└── [Join Meeting Button]
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
**Example UI:**
|
|
151
|
+
```
|
|
152
|
+
┌─────────────────────────────────────┐
|
|
153
|
+
│ Meeting/Event Details │
|
|
154
|
+
│ │
|
|
155
|
+
│ 📅 10/27/2025 │
|
|
156
|
+
│ 🕐 60 minutes │
|
|
157
|
+
│ 👥 Max 100 participants │
|
|
158
|
+
│ │
|
|
159
|
+
│ Platform: ZOOM │
|
|
160
|
+
│ [Join Meeting Button] → │
|
|
161
|
+
└─────────────────────────────────────┘
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
## Form Fields Reference
|
|
167
|
+
|
|
168
|
+
### Products Admin Form - Virtual Meeting Section
|
|
169
|
+
|
|
170
|
+
When `product_type === "virtual_meeting"`:
|
|
171
|
+
|
|
172
|
+
| Field | Type | Required | Placeholder | Validation |
|
|
173
|
+
|-------|------|----------|-------------|-----------|
|
|
174
|
+
| Meeting Platform | Select Dropdown | No | - | zoom, google_meet, microsoft_teams, other |
|
|
175
|
+
| Meeting Link/URL | Text (URL) | **Yes** | https://zoom.us/j/... | Valid URL format |
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
## API Response Examples
|
|
180
|
+
|
|
181
|
+
### Create Virtual Product Response
|
|
182
|
+
|
|
183
|
+
```json
|
|
184
|
+
{
|
|
185
|
+
"success": true,
|
|
186
|
+
"message": "Product created successfully",
|
|
187
|
+
"data": {
|
|
188
|
+
"id": "uuid-1234",
|
|
189
|
+
"name": "Daily Prayer Session",
|
|
190
|
+
"product_type": "virtual_meeting",
|
|
191
|
+
"price": 0,
|
|
192
|
+
"meeting_url": "https://zoom.us/j/123456789",
|
|
193
|
+
"meeting_platform": "zoom",
|
|
194
|
+
"status": "active",
|
|
195
|
+
"created_at": "2025-10-27T19:30:00Z"
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### Get Product Details Response
|
|
201
|
+
|
|
202
|
+
```json
|
|
203
|
+
{
|
|
204
|
+
"success": true,
|
|
205
|
+
"data": {
|
|
206
|
+
"id": "uuid-1234",
|
|
207
|
+
"name": "Daily Prayer Session",
|
|
208
|
+
"product_type": "virtual_meeting",
|
|
209
|
+
"meeting_url": "https://zoom.us/j/123456789",
|
|
210
|
+
"meeting_platform": "zoom",
|
|
211
|
+
"meeting_datetime": "2025-10-28T10:00:00Z",
|
|
212
|
+
"details": {
|
|
213
|
+
"duration": 60,
|
|
214
|
+
"max_participants": 100
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
## Admin Workflow
|
|
223
|
+
|
|
224
|
+
### Step 1: Create Virtual Product
|
|
225
|
+
1. Go to Admin → Products
|
|
226
|
+
2. Click "Add Product"
|
|
227
|
+
3. Fill in basic details (name, description, price)
|
|
228
|
+
4. Select "Virtual Meeting" from Product Type dropdown
|
|
229
|
+
5. **New:** Meeting Settings section appears
|
|
230
|
+
6. Select Platform (Zoom, Google Meet, etc.)
|
|
231
|
+
7. Paste meeting URL
|
|
232
|
+
8. Click "Create Product"
|
|
233
|
+
|
|
234
|
+
### Step 2: Edit Meeting Link
|
|
235
|
+
1. Go to Admin → Products
|
|
236
|
+
2. Click "Edit" on virtual meeting product
|
|
237
|
+
3. Modify meeting URL or platform
|
|
238
|
+
4. Click "Update Product"
|
|
239
|
+
|
|
240
|
+
### Step 3: Customer Sees Meeting Link
|
|
241
|
+
1. Customer browses to product detail page
|
|
242
|
+
2. For virtual_meeting products, they see the "Join Meeting" button
|
|
243
|
+
3. Click button to open meeting in new window
|
|
244
|
+
|
|
245
|
+
---
|
|
246
|
+
|
|
247
|
+
## Supported Platforms
|
|
248
|
+
|
|
249
|
+
```
|
|
250
|
+
Platform Format Example Enum Value
|
|
251
|
+
────────────────────────────────────────────────────────────────────
|
|
252
|
+
Zoom https://zoom.us/j/123456789 zoom
|
|
253
|
+
Google Meet https://meet.google.com/abc-defg-hij google_meet
|
|
254
|
+
Microsoft Teams https://teams.microsoft.com/l/meetup-join/... microsoft_teams
|
|
255
|
+
Other Any custom URL other
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
---
|
|
259
|
+
|
|
260
|
+
## Database Migration Steps
|
|
261
|
+
|
|
262
|
+
**To apply the migration:**
|
|
263
|
+
|
|
264
|
+
```bash
|
|
265
|
+
# If using runMigration.js:
|
|
266
|
+
node runMigration.js 038_add_virtual_meeting_fields
|
|
267
|
+
|
|
268
|
+
# Or manually in Supabase:
|
|
269
|
+
# 1. Go to Supabase Dashboard
|
|
270
|
+
# 2. SQL Editor
|
|
271
|
+
# 3. Copy contents of 038_add_virtual_meeting_fields.sql
|
|
272
|
+
# 4. Execute query
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
**Verify migration:**
|
|
276
|
+
```sql
|
|
277
|
+
-- Check columns added:
|
|
278
|
+
SELECT column_name, data_type
|
|
279
|
+
FROM information_schema.columns
|
|
280
|
+
WHERE table_name = 'products'
|
|
281
|
+
AND column_name IN ('meeting_url', 'meeting_platform');
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
---
|
|
285
|
+
|
|
286
|
+
## Testing Checklist
|
|
287
|
+
|
|
288
|
+
### Backend Tests
|
|
289
|
+
- [ ] Create virtual_meeting product with meeting_url
|
|
290
|
+
- [ ] Update product to change meeting_url
|
|
291
|
+
- [ ] Update product to change meeting_platform
|
|
292
|
+
- [ ] Get product details includes meeting fields
|
|
293
|
+
- [ ] Non-virtual products don't show meeting fields
|
|
294
|
+
- [ ] Meeting URL can be NULL/empty
|
|
295
|
+
|
|
296
|
+
### Frontend Tests
|
|
297
|
+
- [ ] Admin form shows meeting fields for virtual_meeting type only
|
|
298
|
+
- [ ] Admin form hides meeting fields for other product types
|
|
299
|
+
- [ ] Can save virtual product with meeting URL
|
|
300
|
+
- [ ] Can edit meeting URL on existing product
|
|
301
|
+
- [ ] Product detail page shows "Join Meeting" button for virtual products
|
|
302
|
+
- [ ] Join button links to correct URL
|
|
303
|
+
- [ ] Join button opens in new tab
|
|
304
|
+
|
|
305
|
+
### Integration Tests
|
|
306
|
+
- [ ] Create product → See meeting link on detail page
|
|
307
|
+
- [ ] Edit product meeting URL → Detail page updates
|
|
308
|
+
- [ ] Delete product → Meeting reference removed
|
|
309
|
+
|
|
310
|
+
---
|
|
311
|
+
|
|
312
|
+
## Future Enhancements
|
|
313
|
+
|
|
314
|
+
### Phase 2: Zoom API Integration
|
|
315
|
+
- [ ] Auto-create Zoom meetings when product created
|
|
316
|
+
- [ ] Auto-update meeting links if duration changes
|
|
317
|
+
- [ ] Fetch real Zoom meeting details for display
|
|
318
|
+
- [ ] Attendance tracking integration
|
|
319
|
+
|
|
320
|
+
### Phase 3: Advanced Features
|
|
321
|
+
- [ ] Google Calendar integration for meeting dates
|
|
322
|
+
- [ ] Automatic email reminders before meetings
|
|
323
|
+
- [ ] Meeting recording storage and access
|
|
324
|
+
- [ ] Attendee list management
|
|
325
|
+
- [ ] Q&A and chat feature integration
|
|
326
|
+
|
|
327
|
+
### Phase 4: Performance
|
|
328
|
+
- [ ] Cache meeting URLs in Redis
|
|
329
|
+
- [ ] Queue async Zoom API calls
|
|
330
|
+
- [ ] Add pagination for large meeting lists
|
|
331
|
+
|
|
332
|
+
---
|
|
333
|
+
|
|
334
|
+
## File Changes Summary
|
|
335
|
+
|
|
336
|
+
### Modified Files
|
|
337
|
+
1. **`client/src/pages/admin/Products.jsx`** - Added meeting URL form fields
|
|
338
|
+
2. **`client/src/pages/ProductDetail.jsx`** - Added meeting link display
|
|
339
|
+
3. **`server/controllers/productsController.js`** - Added meeting field handling
|
|
340
|
+
|
|
341
|
+
### New Files
|
|
342
|
+
1. **`server/migrations/038_add_virtual_meeting_fields.sql`** - Database schema update
|
|
343
|
+
|
|
344
|
+
---
|
|
345
|
+
|
|
346
|
+
## Related Documentation
|
|
347
|
+
|
|
348
|
+
- **Image Upload Features:** See [IMAGE_UPLOAD_FIX.md](./IMAGE_UPLOAD_FIX.md)
|
|
349
|
+
- **E-Commerce Complete:** See [ECOMMERCE_COMPLETE_HANDOFF.md](./ECOMMERCE_COMPLETE_HANDOFF.md)
|
|
350
|
+
- **Product Analytics:** See [Product Analytics in productsController.js](./server/controllers/productsController.js)
|
|
351
|
+
|
|
352
|
+
---
|
|
353
|
+
|
|
354
|
+
## Support & Questions
|
|
355
|
+
|
|
356
|
+
For issues or questions:
|
|
357
|
+
1. Check the test checklist above
|
|
358
|
+
2. Verify database migration was applied
|
|
359
|
+
3. Check browser console for form validation errors
|
|
360
|
+
4. Verify API responses in Network tab
|
|
361
|
+
|
|
362
|
+
---
|
|
363
|
+
|
|
364
|
+
## Deployment Notes
|
|
365
|
+
|
|
366
|
+
1. **Apply migration before deploying backend changes**
|
|
367
|
+
2. Frontend changes are backward compatible
|
|
368
|
+
3. Existing products without meeting_url will work fine
|
|
369
|
+
4. No data migration needed (new columns default to NULL)
|
|
370
|
+
5. No breaking API changes - all additions are optional
|
|
371
|
+
|
|
372
|
+
---
|
|
373
|
+
|
|
374
|
+
**Status:** Ready for production deployment ✅
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# WordPress LMS Course Data Recovery - Extraction & Migration
|
|
2
|
+
|
|
3
|
+
## The Problem
|
|
4
|
+
|
|
5
|
+
You have WordPress LMS course data exported as JSON files, and need to extract course structure, find embedded media URLs, and recreate the course in a new LMS system.
|
|
6
|
+
|
|
7
|
+
### Why It Was Hard
|
|
8
|
+
|
|
9
|
+
- LMS exports are spread across multiple JSON files (courses, lessons, topics)
|
|
10
|
+
- Media URLs are embedded in HTML content fields
|
|
11
|
+
- Course iterations create duplicate entries with slug suffixes like `-2-2-2-3`
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## The Solution
|
|
16
|
+
|
|
17
|
+
### LMS Export Structure
|
|
18
|
+
|
|
19
|
+
| File | Post Type | Contains |
|
|
20
|
+
|------|-----------|----------|
|
|
21
|
+
| `wordpress-courses.json` | `sfwd-courses` | Course metadata |
|
|
22
|
+
| `wordpress-lessons.json` | `sfwd-lessons` | Lesson titles, ordering |
|
|
23
|
+
| `wordpress-topics.json` | `sfwd-topic` | Sub-lessons with actual content/media |
|
|
24
|
+
|
|
25
|
+
### Extract Media URLs
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
# Find all Castos audio URLs
|
|
29
|
+
grep -oE "https://[^\"']*castos[^\"']*\.mp3" wordpress-topics.json | sort -u
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### Generate Embed HTML
|
|
33
|
+
|
|
34
|
+
```html
|
|
35
|
+
<audio controls style="width:100%">
|
|
36
|
+
<source src="https://episodes.castos.com/.../file.mp3" type="audio/mpeg">
|
|
37
|
+
</audio>
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Key Insight
|
|
43
|
+
|
|
44
|
+
LMS spreads content across three post types. Lessons often just have titles - the actual content with media is in **Topics**. Always search all three JSON files.
|
|
45
|
+
|
|
46
|
+
## Difficulty Level
|
|
47
|
+
|
|
48
|
+
⭐⭐⭐ (3/5)
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
**Author Notes:**
|
|
53
|
+
"Activation completed during a live session" means no audio exists - it was conducted live.
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
# YouTube API Setup Guide
|
|
2
|
+
|
|
3
|
+
This guide will help you set up the YouTube Data API v3 for importing YouTube playlists into your LMS.
|
|
4
|
+
|
|
5
|
+
## Prerequisites
|
|
6
|
+
|
|
7
|
+
- Google Account
|
|
8
|
+
- Google Cloud Platform (GCP) access
|
|
9
|
+
|
|
10
|
+
## Step-by-Step Setup
|
|
11
|
+
|
|
12
|
+
### 1. Create a Google Cloud Project
|
|
13
|
+
|
|
14
|
+
1. Go to [Google Cloud Console](https://console.cloud.google.com/)
|
|
15
|
+
2. Click on the project dropdown at the top
|
|
16
|
+
3. Click "New Project"
|
|
17
|
+
4. Enter project name (e.g., "MERN-LMS")
|
|
18
|
+
5. Click "Create"
|
|
19
|
+
|
|
20
|
+
### 2. Enable YouTube Data API v3
|
|
21
|
+
|
|
22
|
+
1. In the Google Cloud Console, make sure your project is selected
|
|
23
|
+
2. Go to **APIs & Services** > **Library**
|
|
24
|
+
3. Search for "YouTube Data API v3"
|
|
25
|
+
4. Click on it
|
|
26
|
+
5. Click **Enable**
|
|
27
|
+
|
|
28
|
+
### 3. Create API Credentials
|
|
29
|
+
|
|
30
|
+
1. Go to **APIs & Services** > **Credentials**
|
|
31
|
+
2. Click **Create Credentials** > **API Key**
|
|
32
|
+
3. Your API key will be created and displayed
|
|
33
|
+
4. **Important**: Click **Restrict Key** to secure it
|
|
34
|
+
|
|
35
|
+
### 4. Restrict the API Key (Recommended)
|
|
36
|
+
|
|
37
|
+
#### Application Restrictions:
|
|
38
|
+
- **None** (or HTTP referrers if you want to restrict to your domain)
|
|
39
|
+
|
|
40
|
+
#### API Restrictions:
|
|
41
|
+
- Select "Restrict key"
|
|
42
|
+
- Check only "YouTube Data API v3"
|
|
43
|
+
- Click "Save"
|
|
44
|
+
|
|
45
|
+
### 5. Add API Key to Your Environment
|
|
46
|
+
|
|
47
|
+
1. Copy the API key
|
|
48
|
+
2. Open `server/.env` file
|
|
49
|
+
3. Add or update the following line:
|
|
50
|
+
```
|
|
51
|
+
YOUTUBE_API_KEY=YOUR_API_KEY_HERE
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### 6. Test the API
|
|
55
|
+
|
|
56
|
+
Run the test script to verify everything works:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
cd server
|
|
60
|
+
node test-youtube-api.js
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
You should see:
|
|
64
|
+
```
|
|
65
|
+
✅ All tests passed!
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Usage Limits
|
|
69
|
+
|
|
70
|
+
### Free Tier Quota:
|
|
71
|
+
- **10,000 units per day** (quota resets at midnight Pacific Time)
|
|
72
|
+
|
|
73
|
+
### Cost Per Operation:
|
|
74
|
+
- List playlist items: **1 unit per request** (50 videos)
|
|
75
|
+
- Get playlist metadata: **1 unit per request**
|
|
76
|
+
|
|
77
|
+
### Example:
|
|
78
|
+
- Importing a 50-video playlist = **2 units**
|
|
79
|
+
- Importing a 200-video playlist = **6 units** (4 paginated requests + 1 metadata)
|
|
80
|
+
|
|
81
|
+
**You can import approximately 2,500 playlists per day within the free tier.**
|
|
82
|
+
|
|
83
|
+
## Troubleshooting
|
|
84
|
+
|
|
85
|
+
### Error: "API key not valid"
|
|
86
|
+
**Solution:**
|
|
87
|
+
1. Make sure YouTube Data API v3 is enabled
|
|
88
|
+
2. Check that the API key is copied correctly
|
|
89
|
+
3. Wait a few minutes after creating the key (can take time to activate)
|
|
90
|
+
4. Verify API restrictions don't block your requests
|
|
91
|
+
|
|
92
|
+
### Error: "The request cannot be completed because you have exceeded your quota"
|
|
93
|
+
**Solution:**
|
|
94
|
+
1. Wait 24 hours for quota reset
|
|
95
|
+
2. Request a quota increase in Google Cloud Console:
|
|
96
|
+
- Go to **APIs & Services** > **Quotas**
|
|
97
|
+
- Find "YouTube Data API v3"
|
|
98
|
+
- Click "Edit Quotas"
|
|
99
|
+
- Submit quota increase request
|
|
100
|
+
|
|
101
|
+
### Error: "Playlist not found or is private"
|
|
102
|
+
**Solution:**
|
|
103
|
+
- Make sure the playlist is public or unlisted
|
|
104
|
+
- Private playlists cannot be imported
|
|
105
|
+
|
|
106
|
+
### Error: "Access Not Configured"
|
|
107
|
+
**Solution:**
|
|
108
|
+
- Ensure YouTube Data API v3 is enabled in your project
|
|
109
|
+
- Try disabling and re-enabling the API
|
|
110
|
+
|
|
111
|
+
## Security Best Practices
|
|
112
|
+
|
|
113
|
+
1. **Never commit API keys to version control**
|
|
114
|
+
- Add `.env` to `.gitignore`
|
|
115
|
+
- Use environment variables in production
|
|
116
|
+
|
|
117
|
+
2. **Restrict API key usage**
|
|
118
|
+
- Set application restrictions (HTTP referrers, IP addresses)
|
|
119
|
+
- Limit to YouTube Data API v3 only
|
|
120
|
+
- Rotate keys periodically
|
|
121
|
+
|
|
122
|
+
3. **Monitor usage**
|
|
123
|
+
- Check quota usage in Google Cloud Console
|
|
124
|
+
- Set up billing alerts if using paid quota
|
|
125
|
+
|
|
126
|
+
## Alternative: Vimeo Showcase Import
|
|
127
|
+
|
|
128
|
+
If you prefer not to use YouTube or need an alternative, the LMS also supports Vimeo showcases:
|
|
129
|
+
|
|
130
|
+
1. Get a Vimeo access token from [Vimeo Developer](https://developer.vimeo.com/apps)
|
|
131
|
+
2. Add to `.env`:
|
|
132
|
+
```
|
|
133
|
+
VIMEO_ACCESS_TOKEN=YOUR_TOKEN_HERE
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
## Support
|
|
137
|
+
|
|
138
|
+
For more help:
|
|
139
|
+
- [YouTube Data API Documentation](https://developers.google.com/youtube/v3)
|
|
140
|
+
- [Google Cloud Console](https://console.cloud.google.com/)
|
|
141
|
+
- [API Key Best Practices](https://cloud.google.com/docs/authentication/api-keys)
|