Current system — dashboard + API layering strategy.
graph TB
subgraph Upstream["Upstream APIs (30+)"]
OM["Open-Meteo
Weather"]
USGS["USGS
Earthquakes"]
NASA["NASA
Fires, Solar"]
MORE["+ 27 more"]
end
subgraph Server["Hetzner / Coolify"]
subgraph Flask["Flask + SocketIO (:5050)"]
Fetch["Fetch Layer
utils/sources/*.py"]
Cache["Redis Cache
82 streams"]
Dashboard["Dashboard Routes
/api/sources, /api/fetch"]
V1["API v1 Routes
/api/v1/world (NEW)"]
MCP["MCP Server
get_world_state() (NEW)"]
end
Admin["Admin Panel
/admin"]
User["User Dashboard
index.html"]
end
subgraph Clients["Consumers"]
Browser["Browser
Students, Public"]
GH["Grasshopper
UDP/SocketIO"]
Agent["AI Agents
MCP / REST"]
end
OM --> Fetch
USGS --> Fetch
NASA --> Fetch
MORE --> Fetch
Fetch --> Cache
Cache --> Dashboard
Cache --> V1
Cache --> MCP
Dashboard --> User
Dashboard --> Admin
V1 --> Agent
MCP --> Agent
User --> Browser
Dashboard --> GH
style Cache fill:#1a1a24,stroke:#0d6e4e,color:#e8ecf2
style V1 fill:#1a1a24,stroke:#34d399,color:#e8ecf2
style MCP fill:#1a1a24,stroke:#34d399,color:#e8ecf2
style Admin fill:#1a1a24,stroke:#fbbf24,color:#e8ecf2
style User fill:#1a1a24,stroke:#0d6e4e,color:#e8ecf2