digraph deployment { rankdir=TB bgcolor="#0a0e17" fontname="Helvetica" node [fontname="Helvetica" fontsize=10 style=filled color="#1e2a4a" fontcolor="#e8eaf0"] edge [fontname="Helvetica" fontsize=9 fontcolor="#8892a8" color="#4a5568"] label="Deployment — Kind Clusters (dev) / EC2 (prod)" labelloc=t fontsize=14 fontcolor="#0066ff" user [label="Browser" fillcolor="#243056" shape=box] subgraph cluster_ec2 { label="EC2 (mcrn.ar)" color="#ff9800" fontcolor="#ff9800" style=rounded nginx_edge [label="nginx (gateway container)\n443 · SSL\nstellarair.mcrn.ar\nlangfuse.mcrn.ar\nnova.mcrn.ar (Kong backend)" fillcolor="#121829" shape=box] nova_ui [label="nova-ui\nnginx + Vue build" fillcolor="#0d1a33" shape=box] nova_api [label="nova-api\nuvicorn · FastAPI\nMCP clients (stdio)" fillcolor="#0d1a33" shape=box] } subgraph cluster_kind_unt { label="Kind Cluster: unt (local dev)" color="#0066ff" fontcolor="#0066ff" style=rounded unt_ui [label="ui pod\nnginx + Vue\nNodePort 30040" fillcolor="#121829" shape=box] unt_api [label="api pod\nuvicorn · FastAPI" fillcolor="#121829" shape=box] } subgraph cluster_kind_lng { label="Kind Cluster: lng (shared observability)" color="#00c853" fontcolor="#00c853" style=rounded lf_web [label="langfuse-web\nNext.js\nNodePort 30030" fillcolor="#121829" shape=box] lf_worker [label="langfuse-worker\nClickHouse writer" fillcolor="#121829" shape=box] lf_ch [label="ClickHouse\ntraces · spans" fillcolor="#0d1a33" shape=cylinder] lf_pg [label="Postgres\nmetadata" fillcolor="#0d1a33" shape=cylinder] lf_redis [label="Redis\nqueue · cache" fillcolor="#0d1a33" shape=cylinder] lf_minio [label="MinIO\nS3 events" fillcolor="#0d1a33" shape=cylinder] } subgraph cluster_external { label="External APIs" color="#00c853" fontcolor="#00c853" style=dashed ext_weather [label="OpenMeteo" fillcolor="#0d2a0d" shape=octagon fontcolor="#00c853"] ext_faa [label="FAA" fillcolor="#0d2a0d" shape=octagon fontcolor="#00c853"] ext_bedrock [label="Bedrock / Groq\nAnthropic / OpenAI" fillcolor="#243056" shape=octagon] ext_kong [label="Kong Konnect\n(optional gateway)" fillcolor="#243056" shape=octagon style="filled,dashed"] } // Prod path user -> nginx_edge [label="stellarair.mcrn.ar" color="#ff9800"] user -> ext_kong [label="(API governance)" style=dashed color="#4a5568"] ext_kong -> nginx_edge [label="X-Gateway-Secret" style=dashed color="#4a5568"] nginx_edge -> nova_ui nova_ui -> nova_api [label="/agents /scenarios"] nova_api -> ext_weather [label="HTTP" color="#00c853"] nova_api -> ext_faa [label="HTTP" color="#00c853"] nova_api -> ext_bedrock [label="LLM calls" style=dashed] // Dev path user -> unt_ui [label="localhost:8040" color="#0066ff"] unt_ui -> unt_api unt_api -> ext_weather [style=dashed color="#00c853"] unt_api -> ext_faa [style=dashed color="#00c853"] unt_api -> ext_bedrock [style=dashed] // Observability (shared by both dev and prod API) unt_api -> lf_web [label="OTLP traces" style=dotted color="#00c853"] nova_api -> lf_web [label="OTLP traces" style=dotted color="#00c853"] lf_web -> lf_redis lf_worker -> lf_redis lf_worker -> lf_ch lf_web -> lf_pg lf_web -> lf_minio }