@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,569 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: er-diagram-components
|
|
3
|
+
category: database-solutions
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
contributed: 2026-03-09
|
|
6
|
+
contributor: fire-research
|
|
7
|
+
last_updated: 2026-03-09
|
|
8
|
+
tags: [erd, entity-relationship, database-design, react-flow, crow-foot, chen-notation]
|
|
9
|
+
difficulty: medium
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# ER Diagram Components
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
## Problem
|
|
16
|
+
|
|
17
|
+
Building a visual ERD editor requires precise knowledge of all ER diagram components, their visual representations, notation variants, and how they map to UI framework primitives (React Flow nodes/edges). Without a canonical reference, developers mix notation systems, miss attribute variants, or implement incomplete cardinality symbols — producing diagrams that look professional but encode incorrect semantics.
|
|
18
|
+
|
|
19
|
+
## Solution Pattern
|
|
20
|
+
|
|
21
|
+
Implement ER diagrams as a layered system:
|
|
22
|
+
|
|
23
|
+
1. **Data model layer** — TypeScript types for entities, attributes, relationships, cardinality, participation
|
|
24
|
+
2. **Notation layer** — Rendering rules that map the data model to visual shapes (Chen or Crow's Foot)
|
|
25
|
+
3. **React Flow layer** — Custom node components, edge types, SVG markers, and handle placement
|
|
26
|
+
4. **Validation layer** — Cardinality checks, participation constraint enforcement, normalization warnings
|
|
27
|
+
|
|
28
|
+
Start with Crow's Foot notation (modern, compact, professional standard). Add Chen as an alternate view. The textbook explicitly notes the newer ERD style (attributes inside entities) is preferred because it reduces visual clutter — "if depicted in the older model, we would see 21 attribute ovals and a minimum of 8 actions."
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Entity Types
|
|
33
|
+
|
|
34
|
+
### Strong Entity
|
|
35
|
+
- **Visual:** Rectangle with entity name as header
|
|
36
|
+
- **Definition:** Has its own primary key. Can exist independently.
|
|
37
|
+
- **React Flow node type:** `entityNode` — rectangular card with name header + attribute rows
|
|
38
|
+
|
|
39
|
+
### Weak Entity
|
|
40
|
+
- **Visual:** Double-bordered rectangle
|
|
41
|
+
- **Definition:** Cannot exist without its identifying (owner) entity. Requires partial key + owner's PK for full identification.
|
|
42
|
+
- **React Flow node type:** `weakEntityNode` — same as entityNode but with `border: double 3px` or nested border via CSS `outline` + `border`
|
|
43
|
+
- **Implementation note:** Always paired with an identifying relationship (double diamond in Chen, or a labeled edge with "ID" marker in Crow's Foot)
|
|
44
|
+
|
|
45
|
+
```typescript
|
|
46
|
+
// Entity data model
|
|
47
|
+
interface EREntity {
|
|
48
|
+
id: string;
|
|
49
|
+
name: string;
|
|
50
|
+
type: 'strong' | 'weak';
|
|
51
|
+
attributes: ERAttribute[];
|
|
52
|
+
position: { x: number; y: number };
|
|
53
|
+
// Weak entity fields
|
|
54
|
+
ownerEntityId?: string; // FK to identifying entity
|
|
55
|
+
partialKeyAttributes?: string[]; // attribute IDs forming partial key
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## Attribute Types
|
|
62
|
+
|
|
63
|
+
Six variants exist. In Crow's Foot, all render as rows inside the entity box. In Chen, each has a distinct oval shape.
|
|
64
|
+
|
|
65
|
+
### 1. Simple Attribute
|
|
66
|
+
- **Chen visual:** Single oval connected by line to entity
|
|
67
|
+
- **Crow's Foot visual:** Plain row inside entity box (e.g., `first_name VARCHAR(50)`)
|
|
68
|
+
- **Example:** `email`, `phone`, `salary`
|
|
69
|
+
|
|
70
|
+
### 2. Key Attribute (Primary Key)
|
|
71
|
+
- **Chen visual:** Oval with **underlined** text
|
|
72
|
+
- **Crow's Foot visual:** Row with **PK** prefix marker, bold or key icon
|
|
73
|
+
- **Example:** `student_id`, `order_id`
|
|
74
|
+
- **Rendering:** Always rendered first/top in entity box
|
|
75
|
+
|
|
76
|
+
### 3. Composite Attribute
|
|
77
|
+
- **Chen visual:** Oval that branches into sub-ovals (tree structure)
|
|
78
|
+
- **Crow's Foot visual:** Flattened to leaf-level columns inside entity box (e.g., `Address` becomes `street`, `city`, `state`, `zip`)
|
|
79
|
+
- **Example:** `Name` -> `FirstName`, `LastName`; `Address` -> `Street`, `City`, `State`, `Zip`
|
|
80
|
+
- **DDL mapping:** Only leaf attributes become columns
|
|
81
|
+
|
|
82
|
+
### 4. Multivalued Attribute
|
|
83
|
+
- **Chen visual:** Double-bordered oval
|
|
84
|
+
- **Crow's Foot visual:** Not shown inline — generates a **separate table** with FK back to entity
|
|
85
|
+
- **Example:** `PhoneNumbers` (a person can have multiple), `Skills`, `Colors`
|
|
86
|
+
- **DDL mapping:** Creates separate table: `entity_attribute(entity_pk FK, attribute_value, PRIMARY KEY(entity_pk, attribute_value))`
|
|
87
|
+
|
|
88
|
+
### 5. Derived Attribute
|
|
89
|
+
- **Chen visual:** Dashed-bordered oval
|
|
90
|
+
- **Crow's Foot visual:** Typically omitted or shown with `(derived)` annotation / italic text
|
|
91
|
+
- **Example:** `Age` derived from `DateOfBirth`, `TotalPrice` derived from `Quantity * UnitPrice`
|
|
92
|
+
- **DDL mapping:** Usually NOT stored. Implemented as computed column (`GENERATED ALWAYS AS`) or application-level calculation.
|
|
93
|
+
|
|
94
|
+
### 6. Partial Key (Weak Entity Discriminator)
|
|
95
|
+
- **Chen visual:** Oval with **dashed underline**
|
|
96
|
+
- **Crow's Foot visual:** Row with partial-key marker inside weak entity box
|
|
97
|
+
- **Example:** In a weak entity `Dependent` owned by `Employee`, the partial key `dependent_name` uniquely identifies within one employee but not globally
|
|
98
|
+
- **DDL mapping:** Combined with owner PK to form composite primary key
|
|
99
|
+
|
|
100
|
+
```typescript
|
|
101
|
+
// Attribute data model
|
|
102
|
+
interface ERAttribute {
|
|
103
|
+
id: string;
|
|
104
|
+
name: string;
|
|
105
|
+
type: 'simple' | 'key' | 'composite' | 'multivalued' | 'derived' | 'partial-key';
|
|
106
|
+
dataType: string; // VARCHAR(50), INTEGER, etc.
|
|
107
|
+
nullable: boolean;
|
|
108
|
+
defaultValue?: string;
|
|
109
|
+
children?: ERAttribute[]; // For composite attributes
|
|
110
|
+
derivedFrom?: string; // Expression for derived attributes
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## Relationship Types
|
|
117
|
+
|
|
118
|
+
### Unary (Recursive)
|
|
119
|
+
- **Definition:** Entity relates to itself
|
|
120
|
+
- **Example:** `Employee` manages `Employee`, `Person` is_married_to `Person`
|
|
121
|
+
- **React Flow:** Self-loop edge from entity back to itself (use `sourceHandle` and `targetHandle` on different sides of the same node)
|
|
122
|
+
- **Cardinality:** Can be 1:1, 1:N, or M:N (e.g., manager is 1:N, married_to is 1:1)
|
|
123
|
+
|
|
124
|
+
### Binary
|
|
125
|
+
- **Definition:** Two entities connected. Most common type (>90% of relationships).
|
|
126
|
+
- **Example:** `Student` enrolls_in `Course`, `Order` belongs_to `Customer`
|
|
127
|
+
- **React Flow:** Standard edge between two entity nodes
|
|
128
|
+
|
|
129
|
+
### N-ary (Ternary+)
|
|
130
|
+
- **Definition:** Three or more entities in a single relationship
|
|
131
|
+
- **Example:** `Doctor` prescribes `Drug` to `Patient` (ternary — the relationship only makes sense with all three)
|
|
132
|
+
- **React Flow:** Represented as a diamond node (relationship node) with edges to 3+ entities, OR converted to a junction table entity in Crow's Foot
|
|
133
|
+
- **DDL mapping:** Always becomes a junction table with FKs to all participating entities
|
|
134
|
+
|
|
135
|
+
### Cardinality Constraints
|
|
136
|
+
|
|
137
|
+
| Notation | Meaning | Example |
|
|
138
|
+
|----------|---------|---------|
|
|
139
|
+
| **1:1** | One-to-one | Person HAS Passport |
|
|
140
|
+
| **1:N** | One-to-many | Department HAS Employees |
|
|
141
|
+
| **M:N** | Many-to-many | Student ENROLLS Course |
|
|
142
|
+
|
|
143
|
+
### Participation Constraints
|
|
144
|
+
|
|
145
|
+
| Constraint | Visual (Chen) | Visual (Crow's Foot) | Meaning |
|
|
146
|
+
|-----------|---------------|----------------------|---------|
|
|
147
|
+
| **Total (mandatory)** | Double line | Bar symbol `\|\|` on entity side | Every instance MUST participate |
|
|
148
|
+
| **Partial (optional)** | Single line | Circle `O` on entity side | Instances MAY participate |
|
|
149
|
+
|
|
150
|
+
**Combined reading (Crow's Foot):** Read from each entity toward the relationship. A `Customer` with `\|\|` (total) on its side and `\|<` (one-or-many) on the `Order` side means: "each customer MUST have one or more orders."
|
|
151
|
+
|
|
152
|
+
```typescript
|
|
153
|
+
// Relationship data model
|
|
154
|
+
interface ERRelationship {
|
|
155
|
+
id: string;
|
|
156
|
+
name: string;
|
|
157
|
+
type: 'unary' | 'binary' | 'ternary' | 'n-ary';
|
|
158
|
+
entities: {
|
|
159
|
+
entityId: string;
|
|
160
|
+
role?: string; // "manager", "subordinate" for recursive
|
|
161
|
+
cardinality: '1' | 'N' | 'M';
|
|
162
|
+
participation: 'total' | 'partial';
|
|
163
|
+
}[];
|
|
164
|
+
attributes?: ERAttribute[]; // Relationship can have attributes (e.g., enrollment_date)
|
|
165
|
+
isIdentifying?: boolean; // True for weak entity identifying relationships
|
|
166
|
+
}
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## Notation Systems
|
|
172
|
+
|
|
173
|
+
### Chen Notation (Peter Chen, 1976)
|
|
174
|
+
|
|
175
|
+
The original academic notation. Best for teaching and conceptual modeling.
|
|
176
|
+
|
|
177
|
+
**Node types required (5):**
|
|
178
|
+
|
|
179
|
+
| Shape | Meaning | CSS/SVG |
|
|
180
|
+
|-------|---------|---------|
|
|
181
|
+
| Rectangle | Strong Entity | `border: 2px solid` |
|
|
182
|
+
| Double Rectangle | Weak Entity | `border: 2px solid; outline: 2px solid; outline-offset: 3px` |
|
|
183
|
+
| Oval/Ellipse | Attribute | `border-radius: 50%; border: 2px solid` |
|
|
184
|
+
| Diamond | Relationship | `transform: rotate(45deg)` on inner div, or SVG `<polygon>` |
|
|
185
|
+
| Double Diamond | Weak/Identifying Relationship | Diamond with double border |
|
|
186
|
+
|
|
187
|
+
**Attribute variants (6):**
|
|
188
|
+
|
|
189
|
+
| Variant | Visual Modifier |
|
|
190
|
+
|---------|----------------|
|
|
191
|
+
| Simple | Plain oval |
|
|
192
|
+
| Key | Underlined text (`text-decoration: underline`) |
|
|
193
|
+
| Composite | Oval with child ovals branching off |
|
|
194
|
+
| Multivalued | Double-bordered oval (`border: double 3px`) |
|
|
195
|
+
| Derived | Dashed border (`border-style: dashed`) |
|
|
196
|
+
| Partial Key | Dashed underline (`text-decoration: underline; text-decoration-style: dashed`) |
|
|
197
|
+
|
|
198
|
+
**Line styles:**
|
|
199
|
+
- Single line = partial participation
|
|
200
|
+
- Double line = total participation
|
|
201
|
+
- Cardinality labels (1, M, N) placed near entity on the connecting line
|
|
202
|
+
|
|
203
|
+
### Crow's Foot Notation (Modern Industry Standard)
|
|
204
|
+
|
|
205
|
+
Used by ERwin, Lucidchart, dbdiagram.io, draw.io, and most professional tools.
|
|
206
|
+
|
|
207
|
+
**Node types required (1):**
|
|
208
|
+
- Entity box: Rectangle with header (entity name) + rows (attributes with PK/FK markers and data types)
|
|
209
|
+
|
|
210
|
+
**Line-end symbols (4):**
|
|
211
|
+
|
|
212
|
+
| Symbol | Name | Meaning | Visual Description |
|
|
213
|
+
|--------|------|---------|-------------------|
|
|
214
|
+
| `\|\|` | Exactly one | Mandatory single | Two short perpendicular bars |
|
|
215
|
+
| `O\|` | Zero or one | Optional single | Circle + perpendicular bar |
|
|
216
|
+
| `\|<` | One or many | Mandatory multiple | Bar + crow's foot (three-pronged fork) |
|
|
217
|
+
| `O<` | Zero or many | Optional multiple | Circle + crow's foot |
|
|
218
|
+
|
|
219
|
+
**Reading convention:** Each end of the line describes the cardinality as seen FROM the other entity. The symbol closest to an entity describes how many of THAT entity participate.
|
|
220
|
+
|
|
221
|
+
**SVG Marker Definitions for Crow's Foot Endpoints:**
|
|
222
|
+
|
|
223
|
+
```svg
|
|
224
|
+
<!-- Define these once in an <svg> <defs> block at the app root -->
|
|
225
|
+
<svg style="position: absolute; width: 0; height: 0;">
|
|
226
|
+
<defs>
|
|
227
|
+
<!-- Exactly One: || (two vertical bars) -->
|
|
228
|
+
<marker
|
|
229
|
+
id="crowsfoot-one"
|
|
230
|
+
viewBox="0 0 20 20"
|
|
231
|
+
refX="20"
|
|
232
|
+
refY="10"
|
|
233
|
+
markerWidth="20"
|
|
234
|
+
markerHeight="20"
|
|
235
|
+
orient="auto-start-reverse"
|
|
236
|
+
>
|
|
237
|
+
<line x1="14" y1="2" x2="14" y2="18" stroke="currentColor" strokeWidth="2" />
|
|
238
|
+
<line x1="20" y1="2" x2="20" y2="18" stroke="currentColor" strokeWidth="2" />
|
|
239
|
+
</marker>
|
|
240
|
+
|
|
241
|
+
<!-- Zero or One: O| (circle + bar) -->
|
|
242
|
+
<marker
|
|
243
|
+
id="crowsfoot-zero-one"
|
|
244
|
+
viewBox="0 0 30 20"
|
|
245
|
+
refX="30"
|
|
246
|
+
refY="10"
|
|
247
|
+
markerWidth="30"
|
|
248
|
+
markerHeight="20"
|
|
249
|
+
orient="auto-start-reverse"
|
|
250
|
+
>
|
|
251
|
+
<circle cx="10" cy="10" r="6" fill="white" stroke="currentColor" strokeWidth="2" />
|
|
252
|
+
<line x1="24" y1="2" x2="24" y2="18" stroke="currentColor" strokeWidth="2" />
|
|
253
|
+
</marker>
|
|
254
|
+
|
|
255
|
+
<!-- One or Many: |< (bar + crow's foot fork) -->
|
|
256
|
+
<marker
|
|
257
|
+
id="crowsfoot-many"
|
|
258
|
+
viewBox="0 0 20 20"
|
|
259
|
+
refX="20"
|
|
260
|
+
refY="10"
|
|
261
|
+
markerWidth="20"
|
|
262
|
+
markerHeight="20"
|
|
263
|
+
orient="auto-start-reverse"
|
|
264
|
+
>
|
|
265
|
+
<line x1="2" y1="2" x2="2" y2="18" stroke="currentColor" strokeWidth="2" />
|
|
266
|
+
<polyline points="20,2 2,10 20,18" fill="none" stroke="currentColor" strokeWidth="2" />
|
|
267
|
+
</marker>
|
|
268
|
+
|
|
269
|
+
<!-- Zero or Many: O< (circle + crow's foot fork) -->
|
|
270
|
+
<marker
|
|
271
|
+
id="crowsfoot-zero-many"
|
|
272
|
+
viewBox="0 0 30 20"
|
|
273
|
+
refX="30"
|
|
274
|
+
refY="10"
|
|
275
|
+
markerWidth="30"
|
|
276
|
+
markerHeight="20"
|
|
277
|
+
orient="auto-start-reverse"
|
|
278
|
+
>
|
|
279
|
+
<circle cx="8" cy="10" r="6" fill="white" stroke="currentColor" strokeWidth="2" />
|
|
280
|
+
<polyline points="30,2 14,10 30,18" fill="none" stroke="currentColor" strokeWidth="2" />
|
|
281
|
+
</marker>
|
|
282
|
+
</defs>
|
|
283
|
+
</svg>
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
**Applying markers to React Flow edges:**
|
|
287
|
+
|
|
288
|
+
```typescript
|
|
289
|
+
// Map cardinality + participation to marker IDs
|
|
290
|
+
function getMarkerIds(
|
|
291
|
+
cardinality: '1' | 'N' | 'M',
|
|
292
|
+
participation: 'total' | 'partial'
|
|
293
|
+
): string {
|
|
294
|
+
if (cardinality === '1' && participation === 'total') return 'crowsfoot-one';
|
|
295
|
+
if (cardinality === '1' && participation === 'partial') return 'crowsfoot-zero-one';
|
|
296
|
+
if (participation === 'total') return 'crowsfoot-many';
|
|
297
|
+
return 'crowsfoot-zero-many';
|
|
298
|
+
}
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
---
|
|
302
|
+
|
|
303
|
+
## React Flow Implementation
|
|
304
|
+
|
|
305
|
+
### DatabaseSchemaNode (Crow's Foot Entity)
|
|
306
|
+
|
|
307
|
+
Based on React Flow's official `DatabaseSchemaNode` component pattern (reactflow.dev/ui/components/database-schema-node) and the ChartDB architecture (React Flow + shadcn/ui + TypeScript).
|
|
308
|
+
|
|
309
|
+
```typescript
|
|
310
|
+
import { Handle, Position, type NodeProps } from '@xyflow/react';
|
|
311
|
+
|
|
312
|
+
interface Column {
|
|
313
|
+
id: string;
|
|
314
|
+
name: string;
|
|
315
|
+
type: string;
|
|
316
|
+
isPrimaryKey: boolean;
|
|
317
|
+
isForeignKey: boolean;
|
|
318
|
+
isNullable: boolean;
|
|
319
|
+
defaultValue?: string;
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
interface EntityNodeData {
|
|
323
|
+
name: string;
|
|
324
|
+
type: 'strong' | 'weak';
|
|
325
|
+
columns: Column[];
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
export function EntityNode({ data }: NodeProps<EntityNodeData>) {
|
|
329
|
+
const borderStyle = data.type === 'weak'
|
|
330
|
+
? 'border-2 border-gray-800 outline outline-2 outline-offset-2 outline-gray-800'
|
|
331
|
+
: 'border-2 border-gray-800';
|
|
332
|
+
|
|
333
|
+
return (
|
|
334
|
+
<div className={`bg-white rounded-lg shadow-md min-w-[200px] ${borderStyle}`}>
|
|
335
|
+
{/* Entity name header */}
|
|
336
|
+
<div className="bg-gray-800 text-white px-3 py-2 rounded-t-md font-semibold text-sm">
|
|
337
|
+
{data.name}
|
|
338
|
+
</div>
|
|
339
|
+
|
|
340
|
+
{/* Column rows with per-column handles */}
|
|
341
|
+
<div className="divide-y divide-gray-200">
|
|
342
|
+
{data.columns.map((col, index) => (
|
|
343
|
+
<div
|
|
344
|
+
key={col.id}
|
|
345
|
+
className="relative flex items-center gap-2 px-3 py-1.5 text-xs font-mono"
|
|
346
|
+
>
|
|
347
|
+
{/* Left handle — for incoming FK connections */}
|
|
348
|
+
<Handle
|
|
349
|
+
type="target"
|
|
350
|
+
position={Position.Left}
|
|
351
|
+
id={`${col.id}-target`}
|
|
352
|
+
style={{ top: '50%' }}
|
|
353
|
+
className="!w-2 !h-2"
|
|
354
|
+
/>
|
|
355
|
+
|
|
356
|
+
{/* PK/FK markers */}
|
|
357
|
+
<span className="text-gray-400 w-6 text-right">
|
|
358
|
+
{col.isPrimaryKey && <span className="text-yellow-600">PK</span>}
|
|
359
|
+
{col.isForeignKey && <span className="text-blue-600">FK</span>}
|
|
360
|
+
</span>
|
|
361
|
+
|
|
362
|
+
{/* Column name */}
|
|
363
|
+
<span className={col.isPrimaryKey ? 'font-bold' : ''}>
|
|
364
|
+
{col.name}
|
|
365
|
+
</span>
|
|
366
|
+
|
|
367
|
+
{/* Data type */}
|
|
368
|
+
<span className="ml-auto text-gray-400">
|
|
369
|
+
{col.type}
|
|
370
|
+
{!col.isNullable && ' NN'}
|
|
371
|
+
</span>
|
|
372
|
+
|
|
373
|
+
{/* Right handle — for outgoing PK connections */}
|
|
374
|
+
<Handle
|
|
375
|
+
type="source"
|
|
376
|
+
position={Position.Right}
|
|
377
|
+
id={`${col.id}-source`}
|
|
378
|
+
style={{ top: '50%' }}
|
|
379
|
+
className="!w-2 !h-2"
|
|
380
|
+
/>
|
|
381
|
+
</div>
|
|
382
|
+
))}
|
|
383
|
+
</div>
|
|
384
|
+
</div>
|
|
385
|
+
);
|
|
386
|
+
}
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
### Per-Column Handle Placement
|
|
390
|
+
|
|
391
|
+
The critical pattern from React Flow's official DatabaseSchemaNode: each column row gets its own `Handle` pair (source + target). This enables **field-level relationship connections** — an FK column connects directly to the PK column it references, not just entity-to-entity.
|
|
392
|
+
|
|
393
|
+
```typescript
|
|
394
|
+
// Handle IDs follow the pattern: {columnId}-source / {columnId}-target
|
|
395
|
+
// Edge sourceHandle and targetHandle reference these IDs
|
|
396
|
+
|
|
397
|
+
const edge = {
|
|
398
|
+
id: 'order-customer-fk',
|
|
399
|
+
source: 'orders-entity', // source node
|
|
400
|
+
target: 'customers-entity', // target node
|
|
401
|
+
sourceHandle: 'customer_id-source', // FK column handle
|
|
402
|
+
targetHandle: 'id-target', // PK column handle
|
|
403
|
+
markerStart: 'crowsfoot-many', // many orders...
|
|
404
|
+
markerEnd: 'crowsfoot-one', // ...to one customer
|
|
405
|
+
label: 'belongs_to',
|
|
406
|
+
};
|
|
407
|
+
```
|
|
408
|
+
|
|
409
|
+
### Custom Edge with Crow's Foot Markers
|
|
410
|
+
|
|
411
|
+
```typescript
|
|
412
|
+
import { BaseEdge, getSmoothStepPath, type EdgeProps } from '@xyflow/react';
|
|
413
|
+
|
|
414
|
+
interface RelationshipEdgeData {
|
|
415
|
+
label?: string;
|
|
416
|
+
sourceCardinality: '1' | 'N' | 'M';
|
|
417
|
+
sourceParticipation: 'total' | 'partial';
|
|
418
|
+
targetCardinality: '1' | 'N' | 'M';
|
|
419
|
+
targetParticipation: 'total' | 'partial';
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
export function RelationshipEdge(props: EdgeProps<RelationshipEdgeData>) {
|
|
423
|
+
const [edgePath, labelX, labelY] = getSmoothStepPath({
|
|
424
|
+
sourceX: props.sourceX,
|
|
425
|
+
sourceY: props.sourceY,
|
|
426
|
+
targetX: props.targetX,
|
|
427
|
+
targetY: props.targetY,
|
|
428
|
+
sourcePosition: props.sourcePosition,
|
|
429
|
+
targetPosition: props.targetPosition,
|
|
430
|
+
borderRadius: 8,
|
|
431
|
+
});
|
|
432
|
+
|
|
433
|
+
const sourceMarker = getMarkerIds(
|
|
434
|
+
props.data?.sourceCardinality ?? '1',
|
|
435
|
+
props.data?.sourceParticipation ?? 'total'
|
|
436
|
+
);
|
|
437
|
+
const targetMarker = getMarkerIds(
|
|
438
|
+
props.data?.targetCardinality ?? 'N',
|
|
439
|
+
props.data?.targetParticipation ?? 'total'
|
|
440
|
+
);
|
|
441
|
+
|
|
442
|
+
return (
|
|
443
|
+
<>
|
|
444
|
+
<BaseEdge
|
|
445
|
+
path={edgePath}
|
|
446
|
+
markerStart={`url(#${sourceMarker})`}
|
|
447
|
+
markerEnd={`url(#${targetMarker})`}
|
|
448
|
+
style={{ stroke: '#374151', strokeWidth: 2 }}
|
|
449
|
+
/>
|
|
450
|
+
{props.data?.label && (
|
|
451
|
+
<text
|
|
452
|
+
x={labelX}
|
|
453
|
+
y={labelY - 10}
|
|
454
|
+
textAnchor="middle"
|
|
455
|
+
className="fill-gray-600 text-xs"
|
|
456
|
+
>
|
|
457
|
+
{props.data.label}
|
|
458
|
+
</text>
|
|
459
|
+
)}
|
|
460
|
+
</>
|
|
461
|
+
);
|
|
462
|
+
}
|
|
463
|
+
```
|
|
464
|
+
|
|
465
|
+
### Registering Node and Edge Types
|
|
466
|
+
|
|
467
|
+
```typescript
|
|
468
|
+
import { ReactFlow } from '@xyflow/react';
|
|
469
|
+
import { EntityNode } from './nodes/EntityNode';
|
|
470
|
+
import { RelationshipEdge } from './edges/RelationshipEdge';
|
|
471
|
+
|
|
472
|
+
const nodeTypes = {
|
|
473
|
+
entity: EntityNode,
|
|
474
|
+
// Add Chen notation nodes if supporting both:
|
|
475
|
+
// attribute: AttributeOvalNode,
|
|
476
|
+
// relationship: RelationshipDiamondNode,
|
|
477
|
+
};
|
|
478
|
+
|
|
479
|
+
const edgeTypes = {
|
|
480
|
+
relationship: RelationshipEdge,
|
|
481
|
+
};
|
|
482
|
+
|
|
483
|
+
function ERDEditor() {
|
|
484
|
+
return (
|
|
485
|
+
<>
|
|
486
|
+
{/* SVG defs for crow's foot markers — render once at app root */}
|
|
487
|
+
<CrowsFootMarkerDefs />
|
|
488
|
+
|
|
489
|
+
<ReactFlow
|
|
490
|
+
nodeTypes={nodeTypes}
|
|
491
|
+
edgeTypes={edgeTypes}
|
|
492
|
+
nodes={nodes}
|
|
493
|
+
edges={edges}
|
|
494
|
+
fitView
|
|
495
|
+
/>
|
|
496
|
+
</>
|
|
497
|
+
);
|
|
498
|
+
}
|
|
499
|
+
```
|
|
500
|
+
|
|
501
|
+
---
|
|
502
|
+
|
|
503
|
+
## AI Integration Notes
|
|
504
|
+
|
|
505
|
+
### LLM Cardinality Weakness (Cogent Education 2025)
|
|
506
|
+
|
|
507
|
+
The study "Challenges and Feasibility of Multimodal LLMs in ER Diagram Evaluation" found:
|
|
508
|
+
|
|
509
|
+
1. **LLMs struggle most with cardinality interpretation.** When given an ER diagram image, models frequently misidentify 1:N as M:N or confuse participation constraints (total vs partial).
|
|
510
|
+
|
|
511
|
+
2. **Chain-of-Thought (CoT) prompting improves Chen notation parsing** — asking the model to "first identify each entity, then list relationships, then determine cardinality for each" produced more accurate results.
|
|
512
|
+
|
|
513
|
+
3. **CoT has mixed effects on Crow's Foot notation** — the compact visual format with line-end symbols is harder for vision models to parse reliably. The fork/bar/circle symbols are often misread.
|
|
514
|
+
|
|
515
|
+
4. **Implication for ERD editors with AI features:**
|
|
516
|
+
- Always validate AI-generated cardinality with human confirmation
|
|
517
|
+
- When using AI to suggest relationships, present cardinality as a dropdown the user must explicitly confirm — never auto-commit
|
|
518
|
+
- If implementing AI-powered "describe your schema in plain text" features, use CoT prompting internally and present results as editable suggestions
|
|
519
|
+
- Store cardinality as explicit enum values in the data model, not as visual-only markers
|
|
520
|
+
|
|
521
|
+
### Recommended AI Integration Pattern
|
|
522
|
+
|
|
523
|
+
```typescript
|
|
524
|
+
// When AI suggests a relationship, always mark it as unconfirmed
|
|
525
|
+
interface AIRelationshipSuggestion {
|
|
526
|
+
relationship: ERRelationship;
|
|
527
|
+
confidence: number; // 0-1
|
|
528
|
+
reasoning: string; // CoT explanation
|
|
529
|
+
confirmed: false; // MUST be confirmed by user
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
// UI should show unconfirmed relationships with dashed lines
|
|
533
|
+
// and a "Confirm cardinality" button/dropdown
|
|
534
|
+
```
|
|
535
|
+
|
|
536
|
+
---
|
|
537
|
+
|
|
538
|
+
## When to Use
|
|
539
|
+
|
|
540
|
+
- Building visual ERD editors with React Flow
|
|
541
|
+
- Implementing database diagramming features in any web application
|
|
542
|
+
- Choosing between Chen and Crow's Foot notation for a diagram tool
|
|
543
|
+
- Mapping ER concepts to React Flow nodes, edges, and handles
|
|
544
|
+
- Defining the data model for a schema design tool
|
|
545
|
+
- Implementing crow's foot line-end markers with SVG
|
|
546
|
+
|
|
547
|
+
## When NOT to Use
|
|
548
|
+
|
|
549
|
+
- Simple schema documentation (use `sql-ddl-generator` instead)
|
|
550
|
+
- Runtime database operations (query building, connection pooling)
|
|
551
|
+
- Query optimization (indexing strategy, execution plans)
|
|
552
|
+
- Generating Mermaid/DBML text diagrams (use `database-schema-designer` ERD section)
|
|
553
|
+
|
|
554
|
+
## Related Skills
|
|
555
|
+
|
|
556
|
+
- `er-to-ddl-mapping` — Converting ER diagrams to SQL DDL (the 7 canonical mapping rules)
|
|
557
|
+
- `sql-ddl-generator` — DDL output templates with multi-database type mapping
|
|
558
|
+
- `normalization-validator` — 1NF/2NF/3NF violation detection and fix recommendations
|
|
559
|
+
- `database-schema-designer` — General schema design patterns (Prisma, Drizzle, RLS, seed data)
|
|
560
|
+
|
|
561
|
+
## References
|
|
562
|
+
|
|
563
|
+
- LibreTexts "Database Design" — Dr. Sarah North, Affordable Learning Georgia (CC BY 4.0), Chapters 6-10
|
|
564
|
+
- Cogent Education 2025 — "Challenges and Feasibility of Multimodal LLMs in ER Diagram Evaluation"
|
|
565
|
+
- React Flow Database Schema Node — reactflow.dev/ui/components/database-schema-node
|
|
566
|
+
- ChartDB — github.com/chartdb/chartdb (React Flow + shadcn/ui + TypeScript ERD tool)
|
|
567
|
+
- DrawDB — github.com/drawdb-io/drawdb (browser-based database diagram editor)
|
|
568
|
+
- relliv/crows-foot-notations — github.com/relliv/crows-foot-notations (SVG symbol reference)
|
|
569
|
+
- Peter Chen, "The Entity-Relationship Model — Toward a Unified View of Data" (1976)
|