%% Autogenerated java-spring-boot-k8s
graph TD
classDef standard fill:#1e293b,stroke:#38bdf8,stroke-width:1px,color:#e5e7eb;
classDef c-actor fill:#1e293b,stroke:#e5e7eb,stroke-width:1px,stroke-dasharray: 5 5,color:#e5e7eb;
classDef c-compute fill:#422006,stroke:#fb923c,stroke-width:1px,color:#fed7aa;
classDef c-database fill:#064e3b,stroke:#34d399,stroke-width:1px,color:#d1fae5;
classDef c-network fill:#2e1065,stroke:#a855f7,stroke-width:1px,color:#f3e8ff;
classDef c-storage fill:#450a0a,stroke:#f87171,stroke-width:1px,color:#fee2e2;
classDef c-security fill:#450a0a,stroke:#f87171,stroke-width:1px,color:#fee2e2;
classDef c-gateway fill:#2e1065,stroke:#a855f7,stroke-width:1px,color:#f3e8ff;
classDef c-container fill:#422006,stroke:#facc15,stroke-width:1px,color:#fef9c3;
subgraph k8s_cluster ["Kubernetes Cluster"]
direction TB
ingress(("<img src="/icons/inframap/edge.png" width="32" height="32" /><br/><b>Ingress Controller</b><br/><i>gateway</i><br/><span style='font-size:0.8em'>Nginx / Traefik</span>"))
class ingress c-network
api_gateway(("<img src="/icons/inframap/edge.png" width="32" height="32" /><br/><b>Spring Cloud Gateway</b><br/><i>gateway</i><br/><span style='font-size:0.8em'>API routing & auth</span>"))
class api_gateway c-network
service_a("<img src="/icons/inframap/compute.png" width="32" height="32" /><br/><b>User Service</b><br/><i>service</i><br/><span style='font-size:0.8em'>Spring Boot app</span>")
class service_a c-compute
service_b("<img src="/icons/inframap/compute.png" width="32" height="32" /><br/><b>Order Service</b><br/><i>service</i><br/><span style='font-size:0.8em'>Spring Boot app</span>")
class service_b c-compute
config_server("<img src="/icons/inframap/compute.png" width="32" height="32" /><br/><b>Config Server</b><br/><i>service</i><br/><span style='font-size:0.8em'>Centralized config</span>")
class config_server c-compute
eureka("<img src="/icons/inframap/compute.png" width="32" height="32" /><br/><b>Eureka</b><br/><i>service</i><br/><span style='font-size:0.8em'>Service discovery</span>")
class eureka c-compute
end
subgraph data_layer ["Data Layer"]
direction TB
postgres[("<img src="/icons/inframap/database.png" width="32" height="32" /><br/><b>PostgreSQL</b><br/><i>database</i><br/><span style='font-size:0.8em'>Relational DB</span>")]
class postgres c-database
redis[("<img src="/icons/inframap/database.png" width="32" height="32" /><br/><b>Redis</b><br/><i>database</i><br/><span style='font-size:0.8em'>Cache & sessions</span>")]
class redis c-database
kafka("<img src="/icons/inframap/compute.png" width="32" height="32" /><br/><b>Kafka</b><br/><i>service</i><br/><span style='font-size:0.8em'>Event streaming</span>")
class kafka c-compute
end
%% Orphans
users(("<img src="/icons/inframap/user.png" width="32" height="32" /><br/><b>Users</b><br/><i>actor</i><br/><span style='font-size:0.8em'>End users</span>"))
class users c-actor
%% Edges
users -.-> ingress
ingress -.-> api_gateway
api_gateway -.-> service_a
api_gateway -.-> service_b
service_a -.-> postgres
service_a -.-> redis
service_a -.-> kafka
service_b -.-> postgres
service_b -.-> redis
service_b -.-> kafka