@thierrynakoa/fire-flow 12.2.2 → 13.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CREDITS.md +25 -0
- package/DOMINION-FLOW-OVERVIEW.md +182 -38
- package/README.md +399 -690
- package/TROUBLESHOOTING.md +264 -367
- 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-verify-uat.md +9 -177
- 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 -25
- 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/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/browser-use-expert.md +0 -210
- 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,219 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sqlite-to-pg-migration
|
|
3
|
+
category: database-solutions
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
contributed: 2026-03-10
|
|
6
|
+
contributor: research
|
|
7
|
+
last_updated: 2026-03-10
|
|
8
|
+
tags: [sqlite, postgresql, migration, prototype, production]
|
|
9
|
+
difficulty: medium
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# SQLite to PostgreSQL Migration
|
|
13
|
+
|
|
14
|
+
## Problem
|
|
15
|
+
|
|
16
|
+
Applications that start on SQLite for simplicity need to graduate to PostgreSQL for concurrency, scale, and production features. This is the most common "prototype to production" migration path (n8n, many Next.js apps, self-hosted tools). The challenge: SQLite's dynamic typing, file-based storage, and limited ALTER TABLE make the migration non-trivial.
|
|
17
|
+
## Solution Pattern
|
|
18
|
+
|
|
19
|
+
### Step 0: Should You Even Migrate?
|
|
20
|
+
|
|
21
|
+
Before migrating, consider whether SQLite is actually insufficient:
|
|
22
|
+
|
|
23
|
+
| Stay on SQLite if... | Migrate to PG if... |
|
|
24
|
+
|---|---|
|
|
25
|
+
| Single-user or read-heavy workload | Multiple concurrent writers |
|
|
26
|
+
| < 1GB database | > 1GB or growing fast |
|
|
27
|
+
| Edge/embedded deployment | Centralized server |
|
|
28
|
+
| Litestream/LiteFS replication is sufficient | Need full ACID with concurrent transactions |
|
|
29
|
+
| Simple queries, no joins across large tables | Complex queries, full-text search, JSON indexing |
|
|
30
|
+
|
|
31
|
+
### Step 1: Audit SQLite Schema
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
# List all tables
|
|
35
|
+
sqlite3 mydb.db ".tables"
|
|
36
|
+
|
|
37
|
+
# Dump schema
|
|
38
|
+
sqlite3 mydb.db ".schema"
|
|
39
|
+
|
|
40
|
+
# Check for dynamic typing issues
|
|
41
|
+
sqlite3 mydb.db "SELECT typeof(col), COUNT(*) FROM mytable GROUP BY typeof(col);"
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
**Dynamic typing audit:** SQLite allows any value in any column regardless of declared type. Before migration, verify actual stored types match intended types:
|
|
45
|
+
|
|
46
|
+
```sql
|
|
47
|
+
-- Find columns with mixed types (SQLite-specific problem)
|
|
48
|
+
SELECT 'users' AS tbl, 'age' AS col,
|
|
49
|
+
SUM(CASE WHEN typeof(age) = 'integer' THEN 1 ELSE 0 END) AS int_count,
|
|
50
|
+
SUM(CASE WHEN typeof(age) = 'text' THEN 1 ELSE 0 END) AS text_count,
|
|
51
|
+
SUM(CASE WHEN typeof(age) = 'null' THEN 1 ELSE 0 END) AS null_count
|
|
52
|
+
FROM users;
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### Step 2: Type Mapping
|
|
56
|
+
|
|
57
|
+
| SQLite | PostgreSQL | Notes |
|
|
58
|
+
|---|---|---|
|
|
59
|
+
| `INTEGER` (any size) | `INTEGER` or `BIGINT` | Check max values to choose |
|
|
60
|
+
| `INTEGER PRIMARY KEY` | `SERIAL PRIMARY KEY` | SQLite auto-increment via ROWID |
|
|
61
|
+
| `REAL` | `DOUBLE PRECISION` | |
|
|
62
|
+
| `TEXT` | `TEXT` or `VARCHAR(n)` | Add length constraints as needed |
|
|
63
|
+
| `BLOB` | `BYTEA` | |
|
|
64
|
+
| `TEXT` (storing dates) | `TIMESTAMPTZ` | Parse ISO 8601 strings |
|
|
65
|
+
| `INTEGER` (storing booleans 0/1) | `BOOLEAN` | Cast during migration |
|
|
66
|
+
| `TEXT` (storing JSON) | `JSONB` | Parse and validate during migration |
|
|
67
|
+
| `TEXT` (storing UUIDs) | `UUID` | Validate format during migration |
|
|
68
|
+
|
|
69
|
+
### Step 3: Migration with pgloader
|
|
70
|
+
|
|
71
|
+
```lisp
|
|
72
|
+
-- pgloader-sqlite.conf
|
|
73
|
+
LOAD DATABASE
|
|
74
|
+
FROM sqlite:///path/to/mydb.db
|
|
75
|
+
INTO postgresql://user:pass@localhost/mydb_pg
|
|
76
|
+
|
|
77
|
+
WITH
|
|
78
|
+
include drop,
|
|
79
|
+
create tables,
|
|
80
|
+
create indexes,
|
|
81
|
+
reset sequences
|
|
82
|
+
|
|
83
|
+
-- Override dynamic types
|
|
84
|
+
CAST
|
|
85
|
+
type string to text,
|
|
86
|
+
type integer to bigint when (> 2147483647 max-value)
|
|
87
|
+
|
|
88
|
+
AFTER LOAD DO
|
|
89
|
+
$$ VACUUM ANALYZE; $$
|
|
90
|
+
;
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
pgloader pgloader-sqlite.conf
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Step 4: Manual Migration (Alternative)
|
|
98
|
+
|
|
99
|
+
If pgloader is unavailable or you need more control:
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
# 1. Dump SQLite as SQL
|
|
103
|
+
sqlite3 mydb.db .dump > dump.sql
|
|
104
|
+
|
|
105
|
+
# 2. Clean up for PG compatibility
|
|
106
|
+
sed -i 's/INTEGER PRIMARY KEY AUTOINCREMENT/SERIAL PRIMARY KEY/g' dump.sql
|
|
107
|
+
sed -i 's/PRAGMA.*//g' dump.sql
|
|
108
|
+
sed -i 's/BEGIN TRANSACTION/BEGIN/g' dump.sql
|
|
109
|
+
|
|
110
|
+
# 3. Create PG database and import
|
|
111
|
+
createdb mydb_pg
|
|
112
|
+
psql -d mydb_pg -f dump.sql
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
**Better approach — use Python for type-aware migration:**
|
|
116
|
+
|
|
117
|
+
```python
|
|
118
|
+
import sqlite3
|
|
119
|
+
import psycopg2
|
|
120
|
+
|
|
121
|
+
# Connect to both
|
|
122
|
+
sqlite_conn = sqlite3.connect('mydb.db')
|
|
123
|
+
pg_conn = psycopg2.connect('postgresql://user:pass@localhost/mydb_pg')
|
|
124
|
+
|
|
125
|
+
# For each table: read from SQLite, insert into PG
|
|
126
|
+
cursor = sqlite_conn.execute("SELECT * FROM users")
|
|
127
|
+
columns = [d[0] for d in cursor.description]
|
|
128
|
+
placeholders = ','.join(['%s'] * len(columns))
|
|
129
|
+
|
|
130
|
+
pg_cur = pg_conn.cursor()
|
|
131
|
+
for row in cursor:
|
|
132
|
+
pg_cur.execute(f"INSERT INTO users ({','.join(columns)}) VALUES ({placeholders})", row)
|
|
133
|
+
|
|
134
|
+
pg_conn.commit()
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### Step 5: Application Code Changes
|
|
138
|
+
|
|
139
|
+
1. **Connection:** `better-sqlite3` / `sql.js` → `pg` / `postgres.js`
|
|
140
|
+
2. **Parameters:** `?` → `$1, $2, $3`
|
|
141
|
+
3. **Boolean values:** `0/1` → `true/false`
|
|
142
|
+
4. **Date handling:** Parse TEXT dates into proper TIMESTAMP values
|
|
143
|
+
5. **JSON columns:** TEXT → JSONB (add validation)
|
|
144
|
+
6. **RETURNING:** Now available natively (SQLite 3.35+ also has it)
|
|
145
|
+
7. **Concurrent access:** Remove `PRAGMA journal_mode=WAL` and similar
|
|
146
|
+
|
|
147
|
+
### Step 6: Post-Migration Health Check
|
|
148
|
+
|
|
149
|
+
```sql
|
|
150
|
+
-- Run ANALYZE on all tables
|
|
151
|
+
ANALYZE;
|
|
152
|
+
|
|
153
|
+
-- Verify row counts match
|
|
154
|
+
SELECT relname, n_live_tup FROM pg_stat_user_tables ORDER BY n_live_tup DESC;
|
|
155
|
+
|
|
156
|
+
-- Check for NULL where not expected (dynamic typing cleanup)
|
|
157
|
+
SELECT COUNT(*) FROM users WHERE email IS NULL; -- should be 0 if required
|
|
158
|
+
|
|
159
|
+
-- Verify sequences
|
|
160
|
+
SELECT sequencename, last_value FROM pg_sequences;
|
|
161
|
+
|
|
162
|
+
-- Test indexes are working
|
|
163
|
+
EXPLAIN ANALYZE SELECT * FROM users WHERE email = 'test@example.com';
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### SQLite File Safety
|
|
167
|
+
|
|
168
|
+
When copying SQLite databases:
|
|
169
|
+
|
|
170
|
+
```bash
|
|
171
|
+
# WRONG: copying while app is running risks corruption
|
|
172
|
+
cp mydb.db backup.db # ❌
|
|
173
|
+
|
|
174
|
+
# RIGHT: close all connections first, then copy ALL files
|
|
175
|
+
# SQLite may have -wal (write-ahead log) and -shm (shared memory) files
|
|
176
|
+
cp mydb.db mydb.db-wal mydb.db-shm /backup/ # ✅
|
|
177
|
+
|
|
178
|
+
# BEST: use sqlite3 backup command
|
|
179
|
+
sqlite3 mydb.db ".backup /backup/mydb.db" # ✅
|
|
180
|
+
|
|
181
|
+
# VERIFY backup integrity
|
|
182
|
+
sqlite3 /backup/mydb.db "PRAGMA integrity_check;" # Should return "ok"
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
## Common Pitfalls
|
|
186
|
+
|
|
187
|
+
1. **Dynamic typing:** SQLite column "age" might contain strings, integers, and NULLs. PG will reject mixed types.
|
|
188
|
+
2. **Missing constraints:** SQLite doesn't enforce CHECK constraints by default. Data may violate PG constraints.
|
|
189
|
+
3. **Foreign keys off:** SQLite FKs are OFF by default (`PRAGMA foreign_keys = ON`). Data may have orphaned references.
|
|
190
|
+
4. **Date strings:** SQLite stores dates as TEXT. Must parse and validate every date value during migration.
|
|
191
|
+
5. **Boolean ambiguity:** SQLite has no BOOLEAN. Values could be 0/1, 'true'/'false', 'yes'/'no', or anything else.
|
|
192
|
+
6. **AUTOINCREMENT behavior:** SQLite AUTOINCREMENT prevents reuse of deleted IDs. PG SERIAL allows reuse. If your app depends on never-reused IDs, use `GENERATED ALWAYS AS IDENTITY`.
|
|
193
|
+
|
|
194
|
+
## When to Use
|
|
195
|
+
|
|
196
|
+
- Graduating a prototype from SQLite to PostgreSQL
|
|
197
|
+
- Migrating self-hosted tools (n8n, etc.) to managed databases
|
|
198
|
+
- Building the DATABASE phase of `/fire-resurrect` for SQLite sources
|
|
199
|
+
|
|
200
|
+
## When NOT to Use
|
|
201
|
+
|
|
202
|
+
- Staying on SQLite (edge deployments, read-heavy, small data)
|
|
203
|
+
- Migrating between client-server databases (use mysql-to-pg-migration or pg-to-mysql)
|
|
204
|
+
- Migrating to MySQL (rare — use the compatibility matrix)
|
|
205
|
+
|
|
206
|
+
## Related Skills
|
|
207
|
+
|
|
208
|
+
- [sql-dialect-compatibility-matrix](sql-dialect-compatibility-matrix.md)
|
|
209
|
+
- [data-type-mapping-reference](data-type-mapping-reference.md)
|
|
210
|
+
- [mysql-to-pg-migration](mysql-to-pg-migration.md)
|
|
211
|
+
|
|
212
|
+
## References
|
|
213
|
+
|
|
214
|
+
- Render — "How to Migrate from SQLite to PostgreSQL" (2025)
|
|
215
|
+
- Bytebase — "Database Migration: SQLite to PostgreSQL" (2025)
|
|
216
|
+
- n8n Community — SQLite to PostgreSQL migration thread (2025)
|
|
217
|
+
- SitePoint — "Is SQLite on the Edge Production Ready?" (2026)
|
|
218
|
+
- pgloader SQLite source documentation
|
|
219
|
+
- sqlite3_rsync — SQLite safe remote copy tool
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: canvas-bubble-animation-grouping
|
|
3
|
+
category: frontend
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
contributed: 2026-02-27
|
|
6
|
+
contributor: scribe-bible
|
|
7
|
+
last_updated: 2026-02-27
|
|
8
|
+
tags: [canvas, animation, framer-motion, bubble-chart, grouping, layout-algorithm, data-visualization, react, golden-spiral, rectangular-grid]
|
|
9
|
+
difficulty: medium
|
|
10
|
+
usage_count: 0
|
|
11
|
+
success_rate: 100
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Canvas Bubble Animation & Grouping Patterns
|
|
15
|
+
|
|
16
|
+
## Problem
|
|
17
|
+
|
|
18
|
+
You have a large collection of items (100-500+) that need to be visualized as bubbles on a canvas. Users switch between multiple view modes (e.g., "by category", "by author", "by feature"), and bubbles should smoothly animate to new positions in each mode. The modes require fundamentally different layouts:
|
|
19
|
+
|
|
20
|
+
- **Overview**: All items in a single cluster (spiral)
|
|
21
|
+
- **Grouped modes**: Items clustered into labeled groups (rectangular grids)
|
|
22
|
+
- **Filter modes**: Binary split — items with/without a feature (quadrants)
|
|
23
|
+
|
|
24
|
+
Flex-wrap layouts can't handle this — you need absolute positioning with computed coordinates, but the items must still animate smoothly between modes.
|
|
25
|
+
|
|
26
|
+
## Solution Pattern
|
|
27
|
+
|
|
28
|
+
Use **Framer Motion absolute-positioned bubbles** with a **layout algorithm registry**. Each mode computes `(x, y, opacity, scale)` for every item. When the mode changes, React re-renders with new coordinates, and Framer Motion's `spring` transition animates each bubble to its new position.
|
|
29
|
+
|
|
30
|
+
Three layout algorithms cover all common data visualization needs:
|
|
31
|
+
|
|
32
|
+
1. **Golden-angle spiral** — uniform radial distribution for "all items" overview
|
|
33
|
+
2. **Rectangular grid packing** — items arranged in rows/columns within labeled group clusters
|
|
34
|
+
3. **Binary filter quadrants** — items split into "has feature" / "doesn't have feature" regions
|
|
35
|
+
|
|
36
|
+
### Architecture
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
ViewMode → layout algorithm → Map<id, {x, y, opacity, scale}> + GroupLabel[]
|
|
40
|
+
↓
|
|
41
|
+
Framer Motion spring transition animates delta
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
- **Pure functions** compute positions from `(mode, items, canvasWidth, canvasHeight)` — no side effects
|
|
45
|
+
- **`useMemo`** recomputes only when mode, items, or container size changes
|
|
46
|
+
- **Dynamic canvas height** — grouped modes return `totalHeight` so the container expands to fit content
|
|
47
|
+
- **Bubble size by data** — each item's size is proportional to a data attribute (e.g., verse count), scaled down in grouped modes via `GROUPED_BUBBLE_SCALE`
|
|
48
|
+
|
|
49
|
+
## Code Example
|
|
50
|
+
|
|
51
|
+
### 1. Golden-Angle Spiral (Overview)
|
|
52
|
+
|
|
53
|
+
```typescript
|
|
54
|
+
function packInCircle(count: number, cx: number, cy: number, maxRadius: number) {
|
|
55
|
+
if (count === 0) return [];
|
|
56
|
+
if (count === 1) return [{ x: cx, y: cy }];
|
|
57
|
+
|
|
58
|
+
const goldenAngle = Math.PI * (3 - Math.sqrt(5));
|
|
59
|
+
const positions: { x: number; y: number }[] = [];
|
|
60
|
+
|
|
61
|
+
for (let i = 0; i < count; i++) {
|
|
62
|
+
const r = maxRadius * Math.sqrt(i / count) * 0.9;
|
|
63
|
+
const theta = i * goldenAngle;
|
|
64
|
+
positions.push({
|
|
65
|
+
x: cx + r * Math.cos(theta),
|
|
66
|
+
y: cy + r * Math.sin(theta),
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
return positions;
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
**When**: "Show all N items" mode. Distributes items uniformly in a circle with no gaps or clusters. The golden angle (137.5°) ensures even spacing at any count.
|
|
74
|
+
|
|
75
|
+
### 2. Rectangular Grid Packing (Grouped Modes)
|
|
76
|
+
|
|
77
|
+
```typescript
|
|
78
|
+
const GROUPED_BUBBLE_SCALE = 0.5;
|
|
79
|
+
|
|
80
|
+
function packInRect(
|
|
81
|
+
count: number, cx: number, cy: number, avgBubbleSize: number, gap: number,
|
|
82
|
+
): { positions: { x: number; y: number }[]; gridW: number; gridH: number } {
|
|
83
|
+
if (count === 0) return { positions: [], gridW: 0, gridH: 0 };
|
|
84
|
+
if (count === 1) return { positions: [{ x: cx, y: cy }], gridW: avgBubbleSize, gridH: avgBubbleSize };
|
|
85
|
+
|
|
86
|
+
const step = avgBubbleSize + gap;
|
|
87
|
+
const cols = Math.ceil(Math.sqrt(count * 1.3)); // Slightly wider than tall
|
|
88
|
+
const rows = Math.ceil(count / cols);
|
|
89
|
+
const gridW = cols * step;
|
|
90
|
+
const gridH = rows * step;
|
|
91
|
+
const startX = cx - (gridW - step) / 2;
|
|
92
|
+
const startY = cy - (gridH - step) / 2;
|
|
93
|
+
|
|
94
|
+
const positions: { x: number; y: number }[] = [];
|
|
95
|
+
for (let i = 0; i < count; i++) {
|
|
96
|
+
positions.push({
|
|
97
|
+
x: startX + (i % cols) * step,
|
|
98
|
+
y: startY + Math.floor(i / cols) * step,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
return { positions, gridW, gridH };
|
|
102
|
+
}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
**When**: Grouping by a categorical attribute (genre, author, category). Each group gets a labeled rectangular region with items laid out in a grid. The `1.3` aspect ratio factor creates rectangles that feel natural (slightly wider than tall).
|
|
106
|
+
|
|
107
|
+
### 3. Dynamic Grouped Layout with Row-Based Height
|
|
108
|
+
|
|
109
|
+
```typescript
|
|
110
|
+
function calculateGroupedCanvasPositions(
|
|
111
|
+
mode: ViewMode, nodes: Item[], canvasWidth: number,
|
|
112
|
+
): { positions: Map<id, Pos>; labels: GroupLabel[]; totalHeight: number } {
|
|
113
|
+
const groups = groupItems(nodes, mode);
|
|
114
|
+
const positions = new Map();
|
|
115
|
+
const labels: GroupLabel[] = [];
|
|
116
|
+
|
|
117
|
+
// Pre-compute grid dimensions per group
|
|
118
|
+
const groupMeta = groups.map(([name, items]) => {
|
|
119
|
+
const avgSize = items.reduce((s, n) => s + getSize(n) * GROUPED_BUBBLE_SCALE, 0) / items.length;
|
|
120
|
+
const step = avgSize + gap;
|
|
121
|
+
const cols = Math.ceil(Math.sqrt(items.length * 1.3));
|
|
122
|
+
const rows = Math.ceil(items.length / cols);
|
|
123
|
+
return { name, items, avgSize, gridW: cols * step, gridH: rows * step };
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
// Adaptive column count based on group count
|
|
127
|
+
const maxCols = groups.length <= 4 ? 2 : groups.length <= 9 ? 3 : 4;
|
|
128
|
+
const layoutCols = Math.min(maxCols, groups.length);
|
|
129
|
+
const cellW = (canvasWidth - padX * 2) / layoutCols;
|
|
130
|
+
|
|
131
|
+
// Compute max height per layout row (for consistent row spacing)
|
|
132
|
+
const rowMaxGridH: number[] = Array(layoutRows).fill(0);
|
|
133
|
+
groupMeta.forEach((g, i) => {
|
|
134
|
+
const row = Math.floor(i / layoutCols);
|
|
135
|
+
rowMaxGridH[row] = Math.max(rowMaxGridH[row], g.gridH);
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
// Accumulate Y positions row by row
|
|
139
|
+
let yAccum = 25;
|
|
140
|
+
const rowCenterY: number[] = [];
|
|
141
|
+
for (let r = 0; r < layoutRows; r++) {
|
|
142
|
+
yAccum += labelHeight;
|
|
143
|
+
rowCenterY.push(yAccum + rowMaxGridH[r] / 2);
|
|
144
|
+
yAccum += rowMaxGridH[r] + rowGap;
|
|
145
|
+
}
|
|
146
|
+
const totalHeight = yAccum + 20;
|
|
147
|
+
|
|
148
|
+
// Place each group
|
|
149
|
+
groupMeta.forEach((g, i) => {
|
|
150
|
+
const col = i % layoutCols;
|
|
151
|
+
const row = Math.floor(i / layoutCols);
|
|
152
|
+
const cx = padX + cellW * (col + 0.5);
|
|
153
|
+
const cy = rowCenterY[row];
|
|
154
|
+
|
|
155
|
+
labels.push({ name: g.name, x: cx, y: cy - g.gridH / 2 - 14, color, count: g.items.length });
|
|
156
|
+
|
|
157
|
+
const grid = packInRect(g.items.length, cx, cy, g.avgSize, gap);
|
|
158
|
+
g.items.forEach((item, j) => {
|
|
159
|
+
positions.set(item.id, { ...grid.positions[j], opacity: 0.9, scale: 1 });
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
return { positions, labels, totalHeight };
|
|
164
|
+
}
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
**Key technique**: The canvas height is **dynamic** — computed from the actual content. The container's `style.height` reads `totalHeight` so groups never overflow or leave empty space.
|
|
168
|
+
|
|
169
|
+
### 4. Binary Filter Quadrants
|
|
170
|
+
|
|
171
|
+
```typescript
|
|
172
|
+
function calculateFilterPositions(mode: string, nodes: Item[], w: number, h: number) {
|
|
173
|
+
const filter = FILTERS[mode]; // e.g., (item) => item.hasFeature
|
|
174
|
+
const members = nodes.filter(filter);
|
|
175
|
+
const nonMembers = nodes.filter(n => !filter(n));
|
|
176
|
+
|
|
177
|
+
const positions = new Map();
|
|
178
|
+
|
|
179
|
+
// Members: bright, full-size, in the feature's quadrant
|
|
180
|
+
const memberPositions = packInCircle(members.length, quadrant.cx, quadrant.cy, quadrant.radius);
|
|
181
|
+
members.forEach((node, i) => {
|
|
182
|
+
positions.set(node.id, { ...memberPositions[i], opacity: 1, scale: 1 });
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
// Non-members: faded, small, pushed to opposite corner
|
|
186
|
+
const nonMemberPositions = packInCircle(nonMembers.length, fadedCx, fadedCy, fadedRadius);
|
|
187
|
+
nonMembers.forEach((node, i) => {
|
|
188
|
+
positions.set(node.id, { ...nonMemberPositions[i], opacity: 0.12, scale: 0.5 });
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
return positions;
|
|
192
|
+
}
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
**When**: Showing which items have/don't have a boolean attribute. Members glow in a labeled quadrant; non-members fade to near-invisible in the opposite corner.
|
|
196
|
+
|
|
197
|
+
### 5. Bubble Component with Spring Animation
|
|
198
|
+
|
|
199
|
+
```tsx
|
|
200
|
+
<motion.button
|
|
201
|
+
style={{
|
|
202
|
+
position: 'absolute',
|
|
203
|
+
left: x,
|
|
204
|
+
top: y,
|
|
205
|
+
width: size,
|
|
206
|
+
height: size,
|
|
207
|
+
borderRadius: '50%',
|
|
208
|
+
backgroundColor: color,
|
|
209
|
+
transform: 'translate(-50%, -50%)',
|
|
210
|
+
}}
|
|
211
|
+
animate={{ left: x, top: y, opacity, scale }}
|
|
212
|
+
transition={{
|
|
213
|
+
type: 'spring',
|
|
214
|
+
stiffness: 300,
|
|
215
|
+
damping: 25,
|
|
216
|
+
delay: index * 0.006, // Staggered animation
|
|
217
|
+
}}
|
|
218
|
+
whileHover={{ scale: 1.3, zIndex: 50 }}
|
|
219
|
+
whileTap={{ scale: 0.9 }}
|
|
220
|
+
/>
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
**Stagger delay**: `index * 0.006` creates a wave effect (0.9s total for 150 items) where bubbles fly to their positions in sequence rather than all at once.
|
|
224
|
+
|
|
225
|
+
## Implementation Steps
|
|
226
|
+
|
|
227
|
+
1. **Define view modes** as a union type with three categories: overview, grouped (genre/author/category), and filter (has/doesn't have feature)
|
|
228
|
+
2. **Create pure layout functions** — each takes `(mode, items, width, height)` and returns `Map<id, {x, y, opacity, scale}>` plus optional labels
|
|
229
|
+
3. **Wrap in `useMemo`** keyed on `[viewMode, items, containerSize]`
|
|
230
|
+
4. **Use `ResizeObserver`** on the canvas container to get responsive dimensions
|
|
231
|
+
5. **Render absolute-positioned Framer Motion elements** with `animate` set to computed coordinates
|
|
232
|
+
6. **Compute dynamic canvas height** for grouped modes — return `totalHeight` from the layout function
|
|
233
|
+
7. **Scale bubbles** in grouped modes (`GROUPED_BUBBLE_SCALE = 0.5`) to prevent overcrowding
|
|
234
|
+
8. **Add group labels** as absolute-positioned divs above each cluster
|
|
235
|
+
|
|
236
|
+
## When to Use
|
|
237
|
+
|
|
238
|
+
- Data exploration dashboards with 50-500+ items and multiple grouping modes
|
|
239
|
+
- Bubble charts where items have categorical attributes AND a size metric
|
|
240
|
+
- Any visualization where items must animate between fundamentally different spatial arrangements
|
|
241
|
+
- When you need three+ distinct layout strategies in one component
|
|
242
|
+
|
|
243
|
+
## When NOT to Use
|
|
244
|
+
|
|
245
|
+
- Small item counts (<20) — a simple flex-wrap with `layoutId` is simpler (see `framer-motion-layoutid-grouping`)
|
|
246
|
+
- Items that only need to sort within the same grid — CSS `order` + `transition` suffices
|
|
247
|
+
- Graph/network visualizations — use React Flow or D3 force layouts instead
|
|
248
|
+
- Mobile-only UIs — canvas layouts need 700px+ width to be useful
|
|
249
|
+
|
|
250
|
+
## Common Mistakes
|
|
251
|
+
|
|
252
|
+
- **Using full emotional tone strings as group keys** — multi-word comma-separated strings create 100+ unique groups. Extract the **primary word** (`tone.split(',')[0].trim()`) to get ~10 meaningful groups.
|
|
253
|
+
- **Circle packing for large groups** — `packInCircle` makes dense groups (70+ items) into an indistinguishable blob. Use `packInRect` for grouped modes where individual items must be selectable.
|
|
254
|
+
- **Fixed canvas height** — a 700px fixed height works for overview/filter but overflows for grouped modes with 10+ groups. Always compute `totalHeight` from content and set `height: Math.max(totalHeight, minHeight)`.
|
|
255
|
+
- **Uniform bubble size in groups** — loses the data dimension. Keep `getSize(item) * GROUPED_BUBBLE_SCALE` so the largest items are still visually prominent within their grid cells.
|
|
256
|
+
- **Forgetting `translate(-50%, -50%)`** — bubble positions are computed as center points. Without centering the transform, bubbles offset by half their diameter.
|
|
257
|
+
- **Too many grid columns** — with 3 groups, use 2 columns (not 3) for breathing room. Adaptive: `groups.length <= 4 ? 2 : groups.length <= 9 ? 3 : 4`.
|
|
258
|
+
|
|
259
|
+
## Related Skills
|
|
260
|
+
|
|
261
|
+
- [framer-motion-layoutid-grouping](framer-motion-layoutid-grouping.md) — Flex-wrap approach for smaller collections (<100 items)
|
|
262
|
+
- [domain-specific-layout-algorithms](../patterns-standards/domain-specific-layout-algorithms.md) — Pure-function layout registry pattern
|
|
263
|
+
- [svg-sparkline-no-charting-library](svg-sparkline-no-charting-library.md) — Lightweight data visualization with zero dependencies
|
|
264
|
+
|
|
265
|
+
## References
|
|
266
|
+
|
|
267
|
+
- Golden angle distribution: https://en.wikipedia.org/wiki/Golden_angle
|
|
268
|
+
- Framer Motion spring physics: https://www.framer.com/motion/transition/#spring
|
|
269
|
+
- Discovered in: scribe-bible PsalmOverview (150 psalms, 9 view modes, 3 layout algorithms)
|
|
270
|
+
- Evolved through 3 iterations: circle packing → content-derived radius → rectangular grid
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: color-token-migration
|
|
3
|
+
category: frontend
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
contributed: 2026-03-12
|
|
6
|
+
contributor: claude-mission-control
|
|
7
|
+
last_updated: 2026-03-12
|
|
8
|
+
contributors:
|
|
9
|
+
- claude-mission-control
|
|
10
|
+
tags: [css, tailwind, design-system, reskin, color-tokens, theming]
|
|
11
|
+
difficulty: medium
|
|
12
|
+
usage_count: 0
|
|
13
|
+
success_rate: 100
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# Color Token Migration — Systematic App-Wide Color System Swap
|
|
17
|
+
|
|
18
|
+
## Problem
|
|
19
|
+
|
|
20
|
+
Rebranding or reskinning an app requires changing the entire color palette consistently across all components. Direct find-and-replace of hex values is error-prone (same hex used for different purposes), and missing a single reference creates visual inconsistencies.
|
|
21
|
+
|
|
22
|
+
**Symptoms:**
|
|
23
|
+
- Scattered hardcoded hex values across components
|
|
24
|
+
- Some components still show old brand colors after "reskin"
|
|
25
|
+
- Hover/active states don't match the new palette
|
|
26
|
+
- Glass/blur effects clash with new color scheme
|
|
27
|
+
|
|
28
|
+
## Solution Pattern
|
|
29
|
+
|
|
30
|
+
Use **CSS custom properties (tokens)** mapped through Tailwind's config, then change colors in ONE place (the token definitions). For existing apps without tokens, migrate in this order:
|
|
31
|
+
|
|
32
|
+
1. **Audit:** Extract all unique color values used
|
|
33
|
+
2. **Define tokens:** Create semantic token names (`mc-bg`, `mc-accent`, `mc-success`)
|
|
34
|
+
3. **Replace:** Swap hardcoded values for token references
|
|
35
|
+
4. **Verify:** Visual diff every component
|
|
36
|
+
|
|
37
|
+
## Code Example
|
|
38
|
+
|
|
39
|
+
```css
|
|
40
|
+
/* tailwind.config — token definitions (change here = change everywhere) */
|
|
41
|
+
:root {
|
|
42
|
+
/* Old (indigo) */
|
|
43
|
+
/* --mc-bg: #09090b; --mc-accent: #6366f1; --mc-success: #22c55e; */
|
|
44
|
+
|
|
45
|
+
/* New (purple) */
|
|
46
|
+
--mc-bg: #0a0a0f;
|
|
47
|
+
--mc-card: #12121a;
|
|
48
|
+
--mc-accent: #8b5cf6;
|
|
49
|
+
--mc-success: #10b981;
|
|
50
|
+
--mc-text: #e4e4ef;
|
|
51
|
+
--mc-muted: #8888a0;
|
|
52
|
+
--mc-border: #2a2a3e;
|
|
53
|
+
--mc-surface2: #1a1a2e;
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
```typescript
|
|
58
|
+
// Components use tokens, not hardcoded colors
|
|
59
|
+
<div className="bg-mc-card border-mc-border text-mc-text">
|
|
60
|
+
<button className="bg-mc-accent hover:bg-mc-accent/80">
|
|
61
|
+
Action
|
|
62
|
+
</button>
|
|
63
|
+
</div>
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Migration Checklist
|
|
67
|
+
|
|
68
|
+
| Token | Purpose | Old | New |
|
|
69
|
+
|-------|---------|-----|-----|
|
|
70
|
+
| mc-bg | Page background | #09090b | #0a0a0f |
|
|
71
|
+
| mc-card | Card/panel background | #18181b | #12121a |
|
|
72
|
+
| mc-accent | Primary brand color | #6366f1 | #8b5cf6 |
|
|
73
|
+
| mc-success | Success indicators | #22c55e | #10b981 |
|
|
74
|
+
| mc-text | Primary text | #fafafa | #e4e4ef |
|
|
75
|
+
| mc-muted | Secondary text | #a1a1aa | #8888a0 |
|
|
76
|
+
| mc-border | Borders/dividers | #27272a | #2a2a3e |
|
|
77
|
+
| mc-surface2 | Elevated surfaces | (new) | #1a1a2e |
|
|
78
|
+
|
|
79
|
+
## Implementation Steps
|
|
80
|
+
|
|
81
|
+
1. Grep all unique hex/RGB values: `grep -roh '#[0-9a-fA-F]\{6\}' src/ | sort -u`
|
|
82
|
+
2. Map each to a semantic purpose (background, text, accent, etc.)
|
|
83
|
+
3. Define tokens in CSS custom properties + Tailwind extend
|
|
84
|
+
4. Replace hardcoded values with token classes (component by component)
|
|
85
|
+
5. Also update: glass/blur effects, box-shadows, gradients, inline styles
|
|
86
|
+
6. Remove old glass/blur effects if new design is flat
|
|
87
|
+
|
|
88
|
+
## When to Use
|
|
89
|
+
|
|
90
|
+
- App rebranding or reskinning
|
|
91
|
+
- Dark/light mode implementation
|
|
92
|
+
- White-labeling (customer-specific themes)
|
|
93
|
+
- Design system migration (Material → custom)
|
|
94
|
+
|
|
95
|
+
## When NOT to Use
|
|
96
|
+
|
|
97
|
+
- Single component color changes (just change the one value)
|
|
98
|
+
- Prototype/MVP stage (premature abstraction)
|
|
99
|
+
- Static sites with no theming needs
|
|
100
|
+
|
|
101
|
+
## Common Mistakes
|
|
102
|
+
|
|
103
|
+
- Missing inline `style={{}}` attributes — grep doesn't catch them in JSX
|
|
104
|
+
- Forgetting opacity variants (`bg-mc-accent/10`, `border-mc-border/30`)
|
|
105
|
+
- Not updating gradient definitions (`linear-gradient(135deg, ...)`)
|
|
106
|
+
- Leaving old glow/shadow effects that reference old colors
|
|
107
|
+
- SVG `fill` and `stroke` attributes embedded in component JSX
|
|
108
|
+
|
|
109
|
+
## References
|
|
110
|
+
|
|
111
|
+
- Tailwind CSS: "Customizing Colors" — extending with CSS custom properties
|
|
112
|
+
- Contributed from: claude-mission-control (indigo → purple reskin, ~50 files)
|