digraph system_architecture { rankdir=TB bgcolor="#0a0e17" fontname="Helvetica" node [fontname="Helvetica" fontsize=11 style=filled color="#1e2a4a" fontcolor="#e8eaf0"] edge [fontname="Helvetica" fontsize=9 fontcolor="#8892a8" color="#4a5568"] label="System Architecture" labelloc=t fontsize=16 fontcolor="#0066ff" subgraph cluster_external { label="External" style=dashed color="#1e2a4a" fontcolor="#8892a8" kong [label="Kong Konnect\n(API Gateway)" fillcolor="#243056" shape=octagon] bedrock [label="AWS Bedrock\n(Claude Sonnet)" fillcolor="#243056" shape=octagon] openmeteo [label="OpenMeteo\n(Live Weather)" fillcolor="#1a3a1a" shape=octagon fontcolor="#00c853"] faa [label="FAA NASSTATUS\n(Live Airport Status)" fillcolor="#1a3a1a" shape=octagon fontcolor="#00c853"] } subgraph cluster_app { label="Application (EC2 / Kind Cluster)" style=dashed color="#1e2a4a" fontcolor="#8892a8" subgraph cluster_frontend { label="Frontend" color="#1e2a4a" fontcolor="#4a5568" ui [label="Vue 3 SPA\n(NOVA UI)\nPort 8040" fillcolor="#121829" shape=box] } subgraph cluster_api { label="API Layer" color="#1e2a4a" fontcolor="#4a5568" fastapi [label="FastAPI\n+ WebSocket\nPort 8000" fillcolor="#121829" shape=box] } subgraph cluster_agents { label="Agent Clients" color="#1e2a4a" fontcolor="#4a5568" efhas [label="FCE Agent\n(Passenger)" fillcolor="#1a1a3a" shape=box] handover [label="Handover Agent\n(Ops)" fillcolor="#1a1a3a" shape=box] } subgraph cluster_mcp { label="MCP Servers (stdio)" color="#0066ff" fontcolor="#0066ff" shared [label="shared\nflights · weather · airport\nmaintenance" fillcolor="#0d1a33" shape=component] ops [label="ops\ncrew · rebookings\nnarrative" fillcolor="#0d1a33" shape=component] passenger [label="passenger\nnotification" fillcolor="#0d1a33" shape=component] } subgraph cluster_data { label="Data Layer" color="#1e2a4a" fontcolor="#4a5568" scenarios [label="Scenario Manager\n4 scenarios" fillcolor="#121829" shape=cylinder] mock [label="Mock Data\n(Pydantic models)" fillcolor="#121829" shape=cylinder] } subgraph cluster_obs { label="Observability" color="#1e2a4a" fontcolor="#4a5568" langfuse [label="Langfuse\nPort 3000" fillcolor="#121829" shape=box] postgres [label="PostgreSQL" fillcolor="#121829" shape=cylinder] } } // Connections ui -> kong [label="HTTP" style=dashed] kong -> fastapi [label="proxy"] ui -> fastapi [label="WebSocket" color="#0066ff"] fastapi -> efhas [label="trigger"] fastapi -> handover [label="trigger"] efhas -> shared [label="MCP" color="#0066ff"] efhas -> passenger [label="MCP" color="#0066ff"] handover -> shared [label="MCP" color="#0066ff"] handover -> ops [label="MCP" color="#0066ff"] shared -> openmeteo [label="HTTP" color="#00c853"] shared -> faa [label="HTTP" color="#00c853"] shared -> scenarios shared -> mock ops -> mock ops -> scenarios ops -> bedrock [label="Converse API" style=dashed] passenger -> bedrock [label="Converse API" style=dashed] langfuse -> postgres fastapi -> langfuse [label="traces" style=dotted color="#8892a8"] }