15 KiB
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<br/>(PostgreSQL)"]
cache["Cache<br/>(Redis)"]
archive["Archive<br/>(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:
C4Deployment
title <Diagram Title>
Deployment_Node(<id>, "<Name>", "<Technology/Environment>") {
Container(<id>, "<Name>", "<Technology>", "<Description>")
}
Deployment_Node(<id>, "<Name>", "<Technology/Environment>") {
Deployment_Node(<id>, "<Name>", "<Technology>") {
Container(<id>, "<Name>", "<Technology>", "<Description>")
}
}
Deployment_Node(<id>, "<Name>", "<Technology/Environment>") {
Deployment_Node(<id>, "<Name>", "<Technology>") {
ContainerDb(<id>, "<Name>", "<Technology>", "<Description>")
}
}
Rel(<source_id>, <target_id>, "<Description>", "<Protocol>")
Rel_U(<source_id>, <target_id>, "<Description>")
Rel_R(<source_id>, <target_id>, "<Description>")
UpdateRelStyle(<source_id>, <target_id>, $offsetX="<value>", $offsetY="<value>")
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
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,<br/> 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
- Understand the context: Read and understand the system description
- Generate Diagram 1: System Context (C4 Level 1) - showing external relationships
- Generate Diagram 2: Container (C4 Level 2) - showing internal components and technologies
- Generate Diagram 3: Component (C4 Level 3) - showing one container's internal structure
- Generate Diagram 4: Data Flow - showing how data moves through the system
- Generate Diagram 5: Deployment (C4Deployment) - showing infrastructure and deployment topology
Output Format
For each diagram, output:
### 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 |