<?xml version='1.0' encoding='utf-8'?>
<mxfile host="drawio">
  <diagram id="topo" name="Topology (public)">
    <mxGraphModel grid="1" gridSize="10" pageWidth="720" pageHeight="1280" background="#000001">
      <root>
        <mxCell id="0" />
        <mxCell id="1" parent="0" />
        <mxCell id="page-extent" value="" vertex="1" parent="1" style="html=0;fillColor=#000001;strokeColor=none;">
          <mxGeometry as="geometry" x="0" y="0" width="719" height="1280" />
        </mxCell>
        <mxCell id="internet" value="Internet" style="whiteSpace=wrap;html=0;fillColor=#16191D;strokeColor=#E8C24A;rounded=1;absoluteArcSize=1;arcSize=6;fontColor=#F2F1EC;fontFamily=IBM Plex Sans;fontSize=14;align=center;verticalAlign=middle;spacing=10;strokeWidth=1.5;" vertex="1" parent="1">
          <mxGeometry x="260" y="30" width="200" height="60" as="geometry" />
        </mxCell>
        <mxCell id="ingress" value="Ingress&#10;TLS reverse proxy · selected&#10;public routes" style="whiteSpace=wrap;html=0;fillColor=#16191D;strokeColor=#8FC2A0;rounded=1;absoluteArcSize=1;arcSize=6;fontColor=#F2F1EC;fontFamily=IBM Plex Sans;fontSize=14;align=center;verticalAlign=middle;spacing=10;strokeWidth=1.5;" vertex="1" parent="1">
          <mxGeometry x="35" y="160" width="290" height="100" as="geometry" />
        </mxCell>
        <mxCell id="vpn" value="VPN&#10;only way in for admin and private&#10;apps" style="whiteSpace=wrap;html=0;fillColor=#16191D;strokeColor=#7FA7D9;rounded=1;absoluteArcSize=1;arcSize=6;fontColor=#F2F1EC;fontFamily=IBM Plex Sans;fontSize=14;align=center;verticalAlign=middle;spacing=10;strokeWidth=1.5;" vertex="1" parent="1">
          <mxGeometry x="395" y="160" width="290" height="100" as="geometry" />
        </mxCell>
        <mxCell id="host" value="One physical hypervisor · four guests" style="whiteSpace=wrap;html=0;fillColor=#111316;strokeColor=#3A4048;rounded=1;absoluteArcSize=1;arcSize=6;fontColor=#F2F1EC;fontFamily=IBM Plex Sans;fontSize=14;align=center;verticalAlign=top;spacing=10;strokeWidth=1.5;spacingTop=20;" vertex="1" parent="1">
          <mxGeometry x="20" y="320" width="680" height="860" as="geometry" />
        </mxCell>
        <mxCell id="svc" value="Service enclave&#10;ingress · shared database + cache&#10;documents · media · DNS filtering&#10;credential vault · research&#10;crawler&#10;monitoring + dashboards" style="whiteSpace=wrap;html=0;fillColor=#16191D;strokeColor=#8FC2A0;rounded=1;absoluteArcSize=1;arcSize=6;fontColor=#F2F1EC;fontFamily=IBM Plex Sans;fontSize=14;align=center;verticalAlign=middle;spacing=10;strokeWidth=1.5;" vertex="1" parent="1">
          <mxGeometry x="40" y="400" width="290" height="160" as="geometry" />
        </mxCell>
        <mxCell id="prod" value="Productivity enclave&#10;workflow engine · diagram editor&#10;dashboards · research crawler&#10;update monitor (notify-only)" style="whiteSpace=wrap;html=0;fillColor=#16191D;strokeColor=#7FA7D9;rounded=1;absoluteArcSize=1;arcSize=6;fontColor=#F2F1EC;fontFamily=IBM Plex Sans;fontSize=14;align=center;verticalAlign=middle;spacing=10;strokeWidth=1.5;" vertex="1" parent="1">
          <mxGeometry x="390" y="400" width="290" height="160" as="geometry" />
        </mxCell>
        <mxCell id="iso" value="Egress-isolated enclave&#10;all traffic through a VPN tunnel&#10;with a kill-switch" style="whiteSpace=wrap;html=0;fillColor=#16191D;strokeColor=#D98F7F;rounded=1;absoluteArcSize=1;arcSize=6;fontColor=#F2F1EC;fontFamily=IBM Plex Sans;fontSize=14;align=center;verticalAlign=middle;spacing=10;strokeWidth=1.5;" vertex="1" parent="1">
          <mxGeometry x="40" y="620" width="290" height="120" as="geometry" />
        </mxCell>
        <mxCell id="stor" value="Storage appliance&#10;ZFS mirror, ~11 TB&#10;shared to every enclave" style="whiteSpace=wrap;html=0;fillColor=#16191D;strokeColor=#E8C24A;rounded=1;absoluteArcSize=1;arcSize=6;fontColor=#F2F1EC;fontFamily=IBM Plex Sans;fontSize=14;align=center;verticalAlign=middle;spacing=10;strokeWidth=1.5;" vertex="1" parent="1">
          <mxGeometry x="390" y="620" width="290" height="120" as="geometry" />
        </mxCell>
        <mxCell id="obs" value="Observability · metrics&#10;from every enclave → dashboards" style="whiteSpace=wrap;html=0;fillColor=#16191D;strokeColor=#3A4048;rounded=1;absoluteArcSize=1;arcSize=6;fontColor=#F2F1EC;fontFamily=IBM Plex Sans;fontSize=14;align=center;verticalAlign=middle;spacing=10;strokeWidth=1.5;" vertex="1" parent="1">
          <mxGeometry x="40" y="800" width="290" height="100" as="geometry" />
        </mxCell>
        <mxCell id="phone" value="Alert rail · failures → phone" style="whiteSpace=wrap;html=0;fillColor=#16191D;strokeColor=#D98F7F;rounded=1;absoluteArcSize=1;arcSize=6;fontColor=#F2F1EC;fontFamily=IBM Plex Sans;fontSize=14;align=center;verticalAlign=middle;spacing=10;strokeWidth=1.5;" vertex="1" parent="1">
          <mxGeometry x="390" y="800" width="290" height="100" as="geometry" />
        </mxCell>
        <mxCell id="bak" value="Backups · daily snapshots,&#10;7 / 4 / 3 kept" style="whiteSpace=wrap;html=0;fillColor=#16191D;strokeColor=#8FC2A0;rounded=1;absoluteArcSize=1;arcSize=6;fontColor=#F2F1EC;fontFamily=IBM Plex Sans;fontSize=14;align=center;verticalAlign=middle;spacing=10;strokeWidth=1.5;" vertex="1" parent="1">
          <mxGeometry x="390" y="950" width="290" height="100" as="geometry" />
        </mxCell>
        <mxCell id="mgmt" value="Management plane · every service&#10;is a managed stack; admin UI&#10;reachable over VPN only" style="whiteSpace=wrap;html=0;fillColor=#16191D;strokeColor=#3A4048;rounded=1;absoluteArcSize=1;arcSize=6;fontColor=#F2F1EC;fontFamily=IBM Plex Sans;fontSize=14;align=center;verticalAlign=middle;spacing=10;strokeWidth=1.5;" vertex="1" parent="1">
          <mxGeometry x="40" y="1070" width="640" height="80" as="geometry" />
        </mxCell>
        <mxCell id="note" value="Roles only: no addresses, hostnames or versions. Counts as of 25 Oct 2026." style="text=;whiteSpace=wrap;html=0;fillColor=none;strokeColor=none;fontColor=#858B94;fontFamily=IBM Plex Sans;fontSize=12;align=left;verticalAlign=middle;spacing=4;" vertex="1" parent="1">
          <mxGeometry x="30" y="1200" width="660" height="60" as="geometry" />
        </mxCell>
        <mxCell id="e1" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=0;endArrow=block;endSize=8;strokeColor=#858B94;strokeWidth=1.5;fontColor=#858B94;fontFamily=IBM Plex Sans;fontSize=13;exitX=0.2;exitY=1;entryX=0.5;entryY=0;" edge="1" parent="1" source="internet" target="ingress">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e2" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=0;endArrow=block;endSize=8;strokeColor=#858B94;strokeWidth=1.5;fontColor=#858B94;fontFamily=IBM Plex Sans;fontSize=13;exitX=0.8;exitY=1;entryX=0.5;entryY=0;" edge="1" parent="1" source="internet" target="vpn">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e3" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=0;endArrow=block;endSize=8;strokeColor=#8FC2A0;strokeWidth=1.5;fontColor=#858B94;fontFamily=IBM Plex Sans;fontSize=13;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" edge="1" parent="1" source="ingress" target="svc">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e4" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=0;endArrow=block;endSize=8;strokeColor=#7FA7D9;strokeWidth=1.5;fontColor=#858B94;fontFamily=IBM Plex Sans;fontSize=13;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" edge="1" parent="1" source="vpn" target="prod">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e5" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=0;endArrow=block;endSize=8;strokeColor=#8FC2A0;strokeWidth=1.5;fontColor=#858B94;fontFamily=IBM Plex Sans;fontSize=13;exitX=1;exitY=0.5;entryX=1;entryY=0.5;" edge="1" parent="1" source="bak" target="stor">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="690" y="1000" />
              <mxPoint x="690" y="680" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="e6" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=0;endArrow=block;endSize=8;strokeColor=#D98F7F;strokeWidth=1.5;fontColor=#858B94;fontFamily=IBM Plex Sans;fontSize=13;dashed=1;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="obs" target="phone">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e7" value="own VPN tunnel out" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=0;endArrow=block;endSize=8;strokeWidth=1.5;fontColor=#858B94;fontFamily=IBM Plex Sans;fontSize=12;labelBackgroundColor=#111316;strokeColor=#D98F7F;dashed=1;exitX=0;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="iso" target="internet">
          <mxGeometry x="0.82" y="-10" relative="1" as="geometry"><Array as="points"><mxPoint x="12" y="680" /><mxPoint x="12" y="60" /></Array></mxGeometry>
        </mxCell>
        <mxCell id="e8" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=0;endArrow=block;endSize=8;strokeWidth=1.5;fontColor=#858B94;fontFamily=IBM Plex Sans;fontSize=12;labelBackgroundColor=#111316;strokeColor=#E8C24A;exitX=0;exitY=0.5;entryX=1;entryY=0.5;" edge="1" parent="1" source="stor" target="iso">
          <mxGeometry relative="1" as="geometry"></mxGeometry>
        </mxCell>
        <mxCell id="e9" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=0;endArrow=block;endSize=8;strokeWidth=1.5;fontColor=#858B94;fontFamily=IBM Plex Sans;fontSize=12;labelBackgroundColor=#111316;strokeColor=#E8C24A;exitX=0.5;exitY=0;entryX=0.5;entryY=1;" edge="1" parent="1" source="stor" target="prod">
          <mxGeometry relative="1" as="geometry"></mxGeometry>
        </mxCell>
        <mxCell id="e10" value="shared storage" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=0;endArrow=block;endSize=8;strokeWidth=1.5;fontColor=#858B94;fontFamily=IBM Plex Sans;fontSize=12;labelBackgroundColor=#111316;strokeColor=#E8C24A;exitX=0.15;exitY=0;entryX=0.8;entryY=1;" edge="1" parent="1" source="stor" target="svc">
          <mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="433.5" y="590" /><mxPoint x="272" y="590" /></Array></mxGeometry>
        </mxCell>
        <mxCell id="e11" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=0;endArrow=block;endSize=8;strokeWidth=1.5;fontColor=#858B94;fontFamily=IBM Plex Sans;fontSize=12;labelBackgroundColor=#111316;strokeColor=#858B94;dashed=1;exitX=0;exitY=0.8;entryX=0;entryY=0.5;" edge="1" parent="1" source="svc" target="obs">
          <mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="30" y="528" /><mxPoint x="30" y="850" /></Array></mxGeometry>
        </mxCell>
        <mxCell id="e12" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=0;endArrow=block;endSize=8;strokeWidth=1.5;fontColor=#858B94;fontFamily=IBM Plex Sans;fontSize=12;labelBackgroundColor=#111316;strokeColor=#7FA7D9;dashed=1;exitX=1;exitY=0.5;entryX=1;entryY=0.5;" edge="1" parent="1" source="vpn" target="mgmt">
          <mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="705" y="210" /><mxPoint x="705" y="1110" /></Array></mxGeometry>
        </mxCell>
      </root>
    </mxGraphModel>
  </diagram>
</mxfile>