{
  "docVersion": 1,
  "id": "blog-tenancy-d4",
  "name": "Compute-layer tenancy",
  "purpose": "Shared stateless fleet, namespace-per-tenant, cluster-per-tenant — the compute ladder, decided independently of data.",
  "nodes": {
    "f": {
      "type": "k8s",
      "label": "One fleet",
      "x": 60,
      "y": 120,
      "w": 150,
      "h": 90,
      "color": "blue",
      "runtime": "all tenants · stateless"
    },
    "na": {
      "type": "container",
      "label": "ns: tenant-a",
      "x": 360,
      "y": 60,
      "w": 120,
      "h": 76
    },
    "nb": {
      "type": "container",
      "label": "ns: tenant-b",
      "x": 360,
      "y": 180,
      "w": 120,
      "h": 76
    },
    "nc": {
      "type": "container",
      "label": "ns: tenant-c",
      "x": 360,
      "y": 300,
      "w": 120,
      "h": 76
    },
    "ca": {
      "type": "k8s",
      "label": "Cluster — tenant A",
      "x": 680,
      "y": 90,
      "w": 160,
      "h": 84,
      "color": "purple"
    },
    "cb": {
      "type": "k8s",
      "label": "Cluster — tenant B",
      "x": 680,
      "y": 250,
      "w": 160,
      "h": 84,
      "color": "purple"
    }
  },
  "edges": {},
  "boxes": {
    "z1": {
      "x": 20,
      "y": -30,
      "w": 240,
      "h": 430,
      "label": "shared fleet — the default",
      "color": "blue",
      "opacity": 0.04
    },
    "z2": {
      "x": 310,
      "y": -30,
      "w": 230,
      "h": 430,
      "label": "namespace-per-tenant",
      "color": "amber",
      "opacity": 0.04
    },
    "z3": {
      "x": 630,
      "y": -30,
      "w": 270,
      "h": 430,
      "label": "cluster-per-tenant",
      "color": "purple",
      "opacity": 0.04
    }
  },
  "texts": {
    "t1": {
      "x": 20,
      "y": 430,
      "text": "stateless tiers share safely — state is where isolation earns its cost.\nquotas + network policies make namespaces real walls; clusters are for the truly regulated.",
      "color": "gray",
      "size": 12
    }
  },
  "meta": {
    "createdAt": "2026-07-19T09:00:00.000Z",
    "modifiedAt": "2026-07-19T09:00:00.000Z"
  }
}