# Generate 5 Essential Architecture Diagrams in Mermaid.js ## Including C4 Level 1, 2, 3, Data Flow, and C4 Deployment --- Goal: generate **5 essential architecture diagrams** in Mermaid.js format based on the provided system information. --- ## Instructions Generate exactly **5 diagrams** in the following order. Each diagram should be complete, syntactically valid Mermaid code ready to render. ### Diagram 1: System Context Diagram (C4 Level 1) **Purpose**: Show the big picture - your system in context with external users, systems, and services it connects to. **Output Format**: Use C4Context Mermaid syntax **Requirements**: - Show the primary software system as the central element - Include all external users/actors who interact with the system - Include all external systems/services the system depends on - Label all relationships with interaction descriptions - Use clear, descriptive titles and descriptions **Mermaid Syntax Template**: ``` C4Context title System Context - [System Name] Person(customer, "Customer", "End user of the system") System(system, "[System Name]", "Core business functionality") System_Ext(external, "External System", "Third-party integration") Rel(customer, system, "uses") Rel(system, external, "calls API") ``` **Key Elements to Include**: - At least 1-2 external users - The primary system (your product) - 2-3 external systems/services it depends on --- ### Diagram 2: Container Diagram (C4 Level 2) **Purpose**: Zoom into the primary system and show its main building blocks (containers) like web apps, APIs, databases, message queues, etc. **Output Format**: Use C4Container Mermaid syntax **Requirements**: - Break down the system into logical containers (applications, services, databases) - Show technology choices for each container (e.g., "Node.js API", "PostgreSQL") - Show interactions between containers with labels - Keep external systems visible but less detailed - Include brief descriptions of what each container does **Mermaid Syntax Template**: ``` C4Container title Container Diagram - [System Name] Person(user, "User", "System end user") System_Boundary(system, "[System Name]") { Container(web, "Web Application", "React", "Serves the UI") Container(api, "API Server", "Node.js", "Provides API services") Container(db, "Database", "PostgreSQL", "Stores application data") Container(cache, "Cache", "Redis", "Session and data caching") } System_Ext(external, "External Service", "Third-party API") Rel(user, web, "Uses [HTTPS]") Rel(web, api, "Calls [REST API]") Rel(api, db, "Reads/Writes [SQL]") Rel(api, cache, "Reads/Writes") Rel(api, external, "Calls [REST API]") ``` **Key Elements to Include**: - 3-5 main containers (apps, APIs, databases, services) - Technology stack for each container - Container-to-container relationships --- ### Diagram 3: Component Diagram (C4 Level 3) **Purpose**: Zoom into a specific container and show its internal components/structure (controllers, services, repositories, etc.). **Output Format**: Use C4Component Mermaid syntax **Requirements**: - Focus on ONE important container (usually the API or main service) - Show internal components/classes/modules within that container - Show technology/framework for each component - Show dependencies between components - Include clear descriptions of each component's responsibility - Keep it focused - don't show every single component, show the main 5-8 **Mermaid Syntax Template**: ``` C4Component title Component Diagram - [Container Name] Container_Boundary(container, "[Container Name]") { Component(ctrl, "API Controller", "Express Router", "Handles HTTP requests") Component(service, "Business Service", "Service Class", "Contains business logic") Component(repo, "Data Repository", "Data Access Layer", "Database queries") Component(auth, "Auth Component", "JWT/OAuth", "Handles authentication") Component(email, "Email Component", "Email Service", "Sends emails") } ContainerDb(db, "Database", "PostgreSQL", "Persistence") System_Ext(email_service, "Email Service", "SendGrid/SMTP") Rel(ctrl, service, "Uses") Rel(service, repo, "Uses") Rel(service, auth, "Uses") Rel(service, email, "Uses") Rel(repo, db, "Reads/Writes") Rel(email, email_service, "Sends via") ``` **Key Elements to Include**: - 5-8 main internal components - Component responsibilities clearly described - Dependencies between components - External dependencies (databases, services) - Focus on one container (usually API/backend service) --- ### Diagram 4: Data Flow Diagram (DFD) **Purpose**: Show how data moves through the system - from sources, through processes and transformations, to storage and destinations. **Output Format**: Use flowchart syntax with data process symbols **Requirements**: - Identify all data sources (users, external systems) - Show major data processing/transformation steps - Show all data storage locations (databases, caches, files) - Show data destinations (output systems, reports, notifications) - Label flows with data type descriptions - Use consistent formatting for similar element types **Mermaid Syntax Template**: ``` flowchart LR subgraph sources["📥 Data Sources"] user["👤 User Input"] external["🔗 External APIs"] end subgraph processes["⚙️ Data Processing"] validation["Validate Data"] transform["Transform Data"] aggregate["Aggregate Data"] end subgraph storage["💾 Data Storage"] db["Primary DB
(PostgreSQL)"] cache["Cache
(Redis)"] archive["Archive
(S3)"] end subgraph outputs["📤 Data Outputs"] api_out["API Response"] report["Reports"] notification["Notifications"] end user -->|"raw input"| validation external -->|"API data"| validation validation -->|"valid data"| transform transform -->|"structured data"| aggregate aggregate -->|"final data"| db aggregate -->|"hot data"| cache db -->|"queries"| api_out cache -->|"session data"| api_out db -->|"historical"| report aggregate -->|"events"| notification db -->|"old data"| archive ``` **Key Elements to Include**: - Data sources (at least 2) - Data transformation steps (at least 3) - Data storage locations - Data destinations - Flow labels showing data types --- ### Diagram 5: Deployment Diagram (C4Deployment) **Purpose**: Show how software components are deployed across physical/cloud infrastructure, environments, and how they're replicated/distributed. **Output Format**: Use C4Deployment Mermaid syntax with Deployment_Node and Node elements **Requirements**: - Show deployment environments (production, staging) - Show cloud providers or infrastructure boundaries - Show servers/nodes/instances where containers run - Show load balancers, databases, and other infrastructure - Show internal connections between nodes - Indicate scaling and high availability configurations - Use proper C4Deployment syntax with Deployment_Node, Node, and Rel **Mermaid Syntax Template**: ```mermaid C4Deployment title Deployment_Node(, "", "") {   Container(, "", "", "") } Deployment_Node(, "", "") {   Deployment_Node(, "", "") {     Container(, "", "", "")   } } Deployment_Node(, "", "") {   Deployment_Node(, "", "") {     ContainerDb(, "", "", "")   } } Rel(, , "", "") Rel_U(, , "") Rel_R(, , "") UpdateRelStyle(, , $offsetX="", $offsetY="") ``` **Notes:** - Use Deployment_Node for devices, servers, or environments. - Use Container for applications or services. - Use ContainerDb for databases. - Use Rel, Rel_U, or Rel_R for relationships. - Use UpdateRelStyle to adjust label or arrow positions. ## Example: C4Deployment for Internet Banking System ```mermaid C4Deployment title Deployment Diagram for Internet Banking System - Live Deployment_Node(mob, "Customer's mobile device", "Apple IOS or Android"){ Container(mobile, "Mobile App", "Xamarin", "Provides a limited subset of the Internet Banking functionality to customers via their mobile device.") } Deployment_Node(comp, "Customer's computer", "Microsoft Windows or Apple macOS"){ Deployment_Node(browser, "Web Browser", "Google Chrome, Mozilla Firefox,
Apple Safari or Microsoft Edge"){ Container(spa, "Single Page Application", "JavaScript and Angular", "Provides all of the Internet Banking functionality to customers via their web browser.") } } Deployment_Node(plc, "Big Bank plc", "Big Bank plc data center"){ Deployment_Node(dn, "bigbank-api*** x8", "Ubuntu 16.04 LTS"){ Deployment_Node(apache, "Apache Tomcat", "Apache Tomcat 8.x"){ Container(api, "API Application", "Java and Spring MVC", "Provides Internet Banking functionality via a JSON/HTTPS API.") } } Deployment_Node(bb2, "bigbank-web*** x4", "Ubuntu 16.04 LTS"){ Deployment_Node(apache2, "Apache Tomcat", "Apache Tomcat 8.x"){ Container(web, "Web Application", "Java and Spring MVC", "Delivers the static content and the Internet Banking single page application.") } } Deployment_Node(bigbankdb01, "bigbank-db01", "Ubuntu 16.04 LTS"){ Deployment_Node(oracle, "Oracle - Primary", "Oracle 12c"){ ContainerDb(db, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.") } } Deployment_Node(bigbankdb02, "bigbank-db02", "Ubuntu 16.04 LTS") { Deployment_Node(oracle2, "Oracle - Secondary", "Oracle 12c") { ContainerDb(db2, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.") } } } Rel(mobile, api, "Makes API calls to", "json/HTTPS") Rel(spa, api, "Makes API calls to", "json/HTTPS") Rel_U(web, spa, "Delivers to the customer's web browser") Rel(api, db, "Reads from and writes to", "JDBC") Rel(api, db2, "Reads from and writes to", "JDBC") Rel_R(db, db2, "Replicates data to") UpdateRelStyle(spa, api, $offsetY="-40") UpdateRelStyle(web, spa, $offsetY="-40") UpdateRelStyle(api, db, $offsetY="-20", $offsetX="5") UpdateRelStyle(api, db2, $offsetX="-40", $offsetY="-20") UpdateRelStyle(db, db2, $offsetY="-10") ``` --- **Key Elements to Include**: - Cloud provider/infrastructure boundary - Production environment with load balancer - Multiple instances of compute nodes for high availability - Database with read replicas - Caching layer - External service connections - Message queues for async processing --- ## Input Information Required Before generating the diagrams, gather or confirm the following information about the system: ### Project Overview - System name and purpose - Primary users/actors - Main external systems it integrates with ### Technical Components (Containers) - List all applications/services in the system - Technology stack for each container (language, framework) - Database systems and their purposes - Message queues, caches, or other data stores - Third-party services (payment, auth, notifications, etc.) ### Internal Components (for Level 3) - Main controller/handler types - Key service/business logic components - Data access/repository layers - Utility/helper components - Authentication/authorization components ### Data Processing - Main data types flowing through the system - How data enters the system (APIs, uploads, imports) - Major processing/transformation steps - How data is stored and how long - How data exits the system (exports, reports, APIs) ### Infrastructure & Deployment - Cloud provider (AWS, GCP, Azure, on-premises) - Number of instances/replicas for high availability - Load balancing strategy - Database replication/backup strategy - CDN or content delivery strategy - Message queue setup --- ## Generation Steps 1. **Understand the context**: Read and understand the system description 2. **Generate Diagram 1**: System Context (C4 Level 1) - showing external relationships 3. **Generate Diagram 2**: Container (C4 Level 2) - showing internal components and technologies 4. **Generate Diagram 3**: Component (C4 Level 3) - showing one container's internal structure 5. **Generate Diagram 4**: Data Flow - showing how data moves through the system 6. **Generate Diagram 5**: Deployment (C4Deployment) - showing infrastructure and deployment topology --- ## Output Format For each diagram, output: ```markdown ### Diagram [Number]: [Diagram Title] **Description**: [One sentence about what this diagram shows] **Focus**: [What this diagram emphasizes] \`\`\`mermaid [Complete Mermaid diagram code] \`\`\` ``` --- ## Quality Checklist For each diagram, verify: - ✅ Syntax is valid Mermaid.js code - ✅ Diagram clearly shows the intended architectural layer - ✅ All relationships/connections are labeled - ✅ Component descriptions are concise and clear - ✅ Technology choices are explicitly shown (where applicable) - ✅ No syntax errors or unclosed elements - ✅ Diagram is readable and not overcrowded - ✅ Follows C4 model conventions for that level - ✅ For C4Deployment: Uses proper Deployment_Node, Node, and Rel syntax --- ## Why All 5 Diagrams? | Diagram | Audience | Detail Level | Purpose | | ---------------------- | -------------------------------------- | ---------------- | ------------------------------------------ | | **Level 1: Context** | Everyone | Ultra-high level | System boundary and external relationships | | **Level 2: Container** | Tech leads, architects, devs | High level | Main technical components | | **Level 3: Component** | Senior devs, architects | Mid-level | How one container is built internally | | **Data Flow** | Data engineers, backend devs, security | Process level | Data movement and transformations | | **Deployment** | DevOps, SRE, ops team | Infrastructure | How it runs in production | ---