Skip to content

Containers · VPS topology · how they connect

flowchart TD
  NOTE["Every box = one Docker container on the canary VPS · compose project steelmoth_private unless noted · grouped by role.<br/>Docker networks tie them together — edge = public-facing · internal = service mesh · egress = outbound internet · x11 = browser display.<br/>Solid arrow = request / data flow · dotted = supporting / async · CloudBeaver DB-UI excluded."]
  PUBLIC(["Public entry · host nginx + Tailscale · app.steelmoth.ai · canary.sole-augmented.ts.net"])

  subgraph CH["Channels · edge network — public-facing"]
    direction TB
    DASHAPP["stm-dashboard-app · PUBLIC dashboard :3012 · the container Mark's browser hits"]
    DASHPRIV["stm-dashboard-private · private dashboard :3011"]
    TGD["stm-telegram-dispatcher · Telegram channel transport"]
  end

  subgraph CORE["The one brain + data — internal network"]
    direction TB
    API["stm-runtime-api · THE BRAIN · runtime · planner · tools"]
    PG[("stm-data-postgres · pgvector pg16 · ALL schemas · world · steelmoth · core · operator_authority")]
    RD[("stm-data-redis · SSE stream · cache · queues")]
    ML["stm-memory-memlink · Memlink memory service"]
  end

  subgraph WK["Workers — internal + egress"]
    direction TB
    MOR["stm-morpheus-dreaming · Morpheus drain + Luna consolidation"]
    MWS["stm-morpheus-workspace-sync · git fetch loop · workspace volume"]
    NOT["stm-worker-notifications · web push · channel delivery"]
    REM["stm-worker-reminders · reminder daemon"]
    SIDE["stm-worker-sidecars · sidecar jobs · stopped"]
    INIT["stm-attachments-init · one-shot init at boot"]
  end

  subgraph BR["Browser automation — internal + x11"]
    direction TB
    ORCH["stm-browser-orchestrator · browser pool · healthy"]
    BPROX["stm-browser-docker-proxy · scoped docker API proxy"]
    NOVNC1["steelmoth_private-novnc-1 · pool display · x11"]
    NOVNCB["stm-novnc-browser · visual-testing display · host net :7900"]
  end

  subgraph PROV["Provisioning / control — internal + egress"]
    direction TB
    CP["stm-control-plane · tenant admin · access requests · approvals"]
    PRV["stm-provisioner · new client: workspace + vault slot + dashboard"]
    TB2["stm-terminal-bridge · terminal runs"]
  end

  subgraph OBS["Observability — internal + egress"]
    direction TB
    LLMP["stm-observability-llm-proxy · LLM call proxy · metering · healthy"]
  end

  subgraph SITES["Separate compose projects — own networks"]
    direction TB
    WMARK["stm-website-marketing · marketing site · project steelmoth_website"]
    WAPI["stm-website-api · marketing API · project steelmoth_website"]
    ARCH["stm-architecture · THIS wiki · nginx:alpine · project stm-architecture"]
  end

  subgraph PRONT["Prontera — separate VPS · Mark's identity / secret / blob host · NOT on canary · over the tailnet (live: ssh-verified)"]
    direction TB
    PNX["host nginx · TLS front · /secrets/v1 · agent-vault.prontera · auth.steelmoth.ai · blob store"]
    VAULT[("agent-vault · Infisical · DOCKER container · THE secret store · staging · client-mark · client-mark-postgres · future client vaults")]
    PSB["agent-vault-secret-broker · systemd service · alias → credential proxy · validates Agent Vault session"]
    PTB["agent-vault-telegram-broker · systemd service · Telegram token broker"]
    POX["google-oauth-exchanger · systemd service · OAuth code → token · writes to vault"]
    AKS["authentik-server · DOCKER container · SSO / identity provider · auth.steelmoth.ai"]
    AKW["authentik-worker · DOCKER container"]
    AKP[("authentik-postgresql · DOCKER container")]
    AKR[("authentik-redis · DOCKER container")]
    MINIO[("prn-browser-blob-store-minio · DOCKER container · MinIO browser blob store · :9100 / :9101")]
    PNX --> PSB
    PNX --> AKS
    PNX --> VAULT
    PNX --> MINIO
    PSB --> VAULT
    PTB --> VAULT
    POX --> VAULT
    AKS --> AKP
    AKW --> AKR
    AKS --- AKW
  end

  subgraph EXT["External — off this VPS · reached via egress"]
    direction TB
    LLMX["LLM providers · DeepSeek · Anthropic · OpenAI · Google"]
    GH["GitHub"]
    TGAPI["Telegram API"]
    GOOG["Google · Gmail / Calendar / Drive / Tasks"]
  end

  PUBLIC --> DASHAPP
  PUBLIC --> DASHPRIV
  PUBLIC --> TGD
  PUBLIC --> WMARK
  PUBLIC --> ARCH
  PUBLIC --> NOVNCB
  DASHAPP --> API
  DASHPRIV --> API
  TGD --> API
  TGD <-->|webhook in / send out| TGAPI
  WMARK --> WAPI
  API --> PG
  API --> RD
  API --> ML
  ML --> PG
  API --> LLMP
  ML -.embeddings.-> LLMP
  MOR -.LLM.-> LLMP
  LLMP --> LLMX
  API --> ORCH
  ORCH --> BPROX
  ORCH -.display.-> NOVNC1
  API -.tools.-> GOOG
  MOR --> PG
  MOR --> ML
  MOR -->|opens PRs| GH
  MWS -.git fetch.-> GH
  MWS -.repo.-> MOR
  NOT --> PG
  NOT -.web push.-> PUBLIC
  REM --> PG
  REM -.due reminders.-> NOT
  CP --> PG
  PRV --> PG
  CP -.provisions.-> PRV
  TB2 --> API
  INIT -.seeds.-> PG
  API -.session + alias.-> PNX
  ML -.session + alias.-> PNX
  MOR -.session + alias.-> PNX
  PRV -.client vault slot.-> VAULT
  DASHAPP -.SSO login.-> AKS
  ORCH -.browser blobs.-> MINIO
  POX -.code exchange.-> GOOG

  style CH fill:#eff6ff,stroke:#2563eb,stroke-width:2px,color:#2563eb
  style CORE fill:#ecfeff,stroke:#0c8ea4,stroke-width:3px,color:#0c8ea4
  style WK fill:#fdf2f8,stroke:#be185d,stroke-width:2px,color:#be185d
  style BR fill:#fff7ed,stroke:#c2570c,stroke-width:2px,color:#c2570c
  style PROV fill:#ecfdf3,stroke:#1f9d63,stroke-width:2px,color:#1f9d63
  style OBS fill:#ecfdf3,stroke:#1f9d63,stroke-width:2px,color:#1f9d63
  style SITES fill:#f1f5f9,stroke:#475569,stroke-width:2px,color:#475569
  style PRONT fill:#f4f1ff,stroke:#7c5cff,stroke-width:3px,color:#7c5cff
  style EXT fill:#f1f5f9,stroke:#475569,stroke-width:2px,color:#475569
  classDef skyN fill:#ffffff,stroke:#2563eb,color:#27272a,stroke-width:1px
  classDef tlN fill:#ffffff,stroke:#0c8ea4,color:#27272a,stroke-width:1px
  classDef puN fill:#ffffff,stroke:#7c5cff,color:#27272a,stroke-width:1px
  classDef pkN fill:#ffffff,stroke:#be185d,color:#27272a,stroke-width:1px
  classDef amN fill:#ffffff,stroke:#c2570c,color:#27272a,stroke-width:1px
  classDef gnN fill:#ffffff,stroke:#1f9d63,color:#27272a,stroke-width:1px
  classDef slN fill:#ffffff,stroke:#475569,color:#27272a,stroke-width:1px
  classDef exN fill:#ffffff,stroke:#475569,color:#27272a,stroke-width:1px,stroke-dasharray:5 4
  classDef vN fill:#ffffff,stroke:#7c5cff,color:#27272a,stroke-width:1px
  classDef vsysN fill:#ffffff,stroke:#7c5cff,color:#27272a,stroke-width:1px,stroke-dasharray:4 3
  class PUBLIC,DASHAPP,DASHPRIV,TGD skyN
  class API,ML tlN
  class PG,RD puN
  class MOR,MWS,NOT,REM,SIDE,INIT pkN
  class ORCH,BPROX,NOVNC1,NOVNCB amN
  class CP,PRV,TB2,LLMP gnN
  class WMARK,WAPI,ARCH slN
  class LLMX,GH,TGAPI,GOOG exN
  class PNX,VAULT,AKS,AKW,AKP,AKR,MINIO vN
  class PSB,PTB,POX vsysN
  class NOTE slN