{
  "configuration" : { },
  "description" : "C4 model of the Proxmox homelab and its deployed services.",
  "documentation" : { },
  "id" : 1,
  "lastModifiedAgent" : "structurizr/1.0.0",
  "lastModifiedDate" : "2026-09-02T21:41:00Z",
  "lastModifiedUser" : "om@apps-01",
  "model" : {
    "deploymentNodes" : [ {
      "children" : [ {
        "children" : [ {
          "containerInstances" : [ {
            "containerId" : "4",
            "environment" : "Home",
            "id" : "19",
            "instanceId" : 1,
            "properties" : {
              "structurizr.dsl.identifier" : "47ac5f71-9373-4ce0-9616-537e69a7fb69"
            },
            "tags" : "Container Instance"
          }, {
            "containerId" : "5",
            "environment" : "Home",
            "id" : "20",
            "instanceId" : 1,
            "properties" : {
              "structurizr.dsl.identifier" : "2515effc-c3b1-4522-8a46-24226eca28af"
            },
            "relationships" : [ {
              "description" : "Provides private network access",
              "destinationId" : "19",
              "id" : "21",
              "linkedRelationshipId" : "10",
              "sourceId" : "20"
            } ],
            "tags" : "Container Instance"
          } ],
          "description" : "Edge services container",
          "environment" : "Home",
          "id" : "18",
          "instances" : "1",
          "name" : "LXC 101 - edge-services",
          "properties" : {
            "structurizr.dsl.identifier" : "52b14803-21e5-4e46-9ca9-62df241f44af",
            "IP Address" : "192.168.88.30",
            "vCPU" : "2",
            "Disk" : "16 GB",
            "RAM" : "2 GB"
          },
          "tags" : "Element,Deployment Node,LXC",
          "technology" : "Debian 12 LXC"
        }, {
          "containerInstances" : [ {
            "containerId" : "6",
            "environment" : "Home",
            "id" : "23",
            "instanceId" : 1,
            "properties" : {
              "structurizr.dsl.identifier" : "19953d0d-ed72-4c76-a812-f4a2b548e669"
            },
            "relationships" : [ {
              "description" : "Reverse proxies HTTPS requests",
              "destinationId" : "19",
              "id" : "24",
              "linkedRelationshipId" : "13",
              "sourceId" : "23"
            } ],
            "tags" : "Container Instance"
          } ],
          "description" : "Reverse proxy container",
          "environment" : "Home",
          "id" : "22",
          "instances" : "1",
          "name" : "LXC 102 - proxy-01",
          "properties" : {
            "structurizr.dsl.identifier" : "cb936e2d-cf4d-4df2-ad2c-49c6fb35dc29",
            "IP Address" : "192.168.88.31",
            "vCPU" : "1",
            "Disk" : "12 GB",
            "RAM" : "1 GB"
          },
          "tags" : "Element,Deployment Node,LXC",
          "technology" : "Debian 12 LXC"
        } ],
        "description" : "Virtualization host",
        "environment" : "Home",
        "id" : "17",
        "instances" : "1",
        "name" : "Proxmox pve",
        "properties" : {
          "structurizr.dsl.identifier" : "d171b758-e666-4672-985b-6e306fa201ec",
          "IP Address" : "192.168.88.20",
          "Bridge" : "vmbr0"
        },
        "tags" : "Element,Deployment Node,Proxmox",
        "technology" : "Proxmox VE"
      } ],
      "description" : "Private LAN",
      "environment" : "Home",
      "id" : "16",
      "instances" : "1",
      "name" : "Home Network",
      "properties" : {
        "structurizr.dsl.identifier" : "88a128b9-0bce-4c7a-94d6-fbb1add4fed6"
      },
      "tags" : "Element,Deployment Node",
      "technology" : "192.168.88.0/24"
    } ],
    "people" : [ {
      "description" : "Accesses homelab services remotely.",
      "id" : "1",
      "name" : "Remote User",
      "properties" : {
        "structurizr.dsl.identifier" : "user"
      },
      "relationships" : [ {
        "description" : "Connects using WARP",
        "destinationId" : "2",
        "id" : "7",
        "sourceId" : "1",
        "tags" : "Relationship"
      }, {
        "description" : "Accesses HTTPS services",
        "destinationId" : "6",
        "id" : "11",
        "sourceId" : "1",
        "tags" : "Relationship"
      }, {
        "description" : "Accesses HTTPS services",
        "destinationId" : "3",
        "id" : "12",
        "linkedRelationshipId" : "11",
        "sourceId" : "1"
      } ],
      "tags" : "Element,Person"
    } ],
    "softwareSystems" : [ {
      "description" : "Provides WARP private access, DNS, and Cloudflare Tunnel connectivity.",
      "documentation" : { },
      "id" : "2",
      "name" : "Cloudflare Zero Trust",
      "properties" : {
        "structurizr.dsl.identifier" : "cloudflare"
      },
      "relationships" : [ {
        "description" : "Connects through Cloudflare Tunnel",
        "destinationId" : "5",
        "id" : "8",
        "sourceId" : "2",
        "tags" : "Relationship"
      }, {
        "description" : "Connects through Cloudflare Tunnel",
        "destinationId" : "3",
        "id" : "9",
        "linkedRelationshipId" : "8",
        "sourceId" : "2"
      } ],
      "tags" : "Element,Software System"
    }, {
      "containers" : [ {
        "description" : "Self-hosted password manager.",
        "documentation" : { },
        "id" : "4",
        "name" : "Vaultwarden",
        "properties" : {
          "structurizr.dsl.identifier" : "vaultwarden"
        },
        "tags" : "Element,Container",
        "technology" : "Vaultwarden / Docker"
      }, {
        "description" : "Maintains the Cloudflare Tunnel between the homelab and Cloudflare.",
        "documentation" : { },
        "id" : "5",
        "name" : "cloudflared",
        "properties" : {
          "structurizr.dsl.identifier" : "cloudflared"
        },
        "relationships" : [ {
          "description" : "Provides private network access",
          "destinationId" : "4",
          "id" : "10",
          "sourceId" : "5",
          "tags" : "Relationship"
        } ],
        "tags" : "Element,Container",
        "technology" : "cloudflared / Docker"
      }, {
        "description" : "Reverse proxy and HTTPS endpoint for homelab services.",
        "documentation" : { },
        "id" : "6",
        "name" : "Caddy",
        "properties" : {
          "structurizr.dsl.identifier" : "caddy"
        },
        "relationships" : [ {
          "description" : "Reverse proxies HTTPS requests",
          "destinationId" : "4",
          "id" : "13",
          "sourceId" : "6",
          "tags" : "Relationship"
        }, {
          "description" : "Uses Cloudflare DNS API for DNS-01 certificate validation",
          "destinationId" : "2",
          "id" : "14",
          "sourceId" : "6",
          "tags" : "Relationship"
        } ],
        "tags" : "Element,Container",
        "technology" : "Caddy / Docker"
      } ],
      "description" : "Self-hosted services running in the Proxmox homelab.",
      "documentation" : { },
      "id" : "3",
      "name" : "Homelab Services",
      "properties" : {
        "structurizr.dsl.identifier" : "homelab"
      },
      "relationships" : [ {
        "description" : "Uses Cloudflare DNS API for DNS-01 certificate validation",
        "destinationId" : "2",
        "id" : "15",
        "linkedRelationshipId" : "14",
        "sourceId" : "3"
      } ],
      "tags" : "Element,Software System"
    } ]
  },
  "name" : "Homelab Infrastructure",
  "properties" : {
    "structurizr.inspection.info" : "0",
    "structurizr.inspection.ignore" : "0",
    "structurizr.inspection.error" : "15",
    "structurizr.inspection.warning" : "0",
    "structurizr.dsl" : "Ly8gSG9tZWxhYiBhcmNoaXRlY3R1cmUgLSBtYW5hZ2VkIHRocm91Z2ggR2l0IGFuZCBwdWJsaXNoZWQgYXV0b21hdGljYWxseQp3b3Jrc3BhY2UgIkhvbWVsYWIgSW5mcmFzdHJ1Y3R1cmUiICJDNCBtb2RlbCBvZiB0aGUgUHJveG1veCBob21lbGFiIGFuZCBpdHMgZGVwbG95ZWQgc2VydmljZXMuIiB7CgogICAgbW9kZWwgewogICAgICAgIHVzZXIgPSBwZXJzb24gIlJlbW90ZSBVc2VyIiAiQWNjZXNzZXMgaG9tZWxhYiBzZXJ2aWNlcyByZW1vdGVseS4iCgogICAgICAgIGNsb3VkZmxhcmUgPSBzb2Z0d2FyZVN5c3RlbSAiQ2xvdWRmbGFyZSBaZXJvIFRydXN0IiAiUHJvdmlkZXMgV0FSUCBwcml2YXRlIGFjY2VzcywgRE5TLCBhbmQgQ2xvdWRmbGFyZSBUdW5uZWwgY29ubmVjdGl2aXR5LiIKCiAgICAgICAgaG9tZWxhYiA9IHNvZnR3YXJlU3lzdGVtICJIb21lbGFiIFNlcnZpY2VzIiAiU2VsZi1ob3N0ZWQgc2VydmljZXMgcnVubmluZyBpbiB0aGUgUHJveG1veCBob21lbGFiLiIgewoKICAgICAgICAgICAgdmF1bHR3YXJkZW4gPSBjb250YWluZXIgIlZhdWx0d2FyZGVuIiAiU2VsZi1ob3N0ZWQgcGFzc3dvcmQgbWFuYWdlci4iICJWYXVsdHdhcmRlbiAvIERvY2tlciIKCiAgICAgICAgICAgIGNsb3VkZmxhcmVkID0gY29udGFpbmVyICJjbG91ZGZsYXJlZCIgIk1haW50YWlucyB0aGUgQ2xvdWRmbGFyZSBUdW5uZWwgYmV0d2VlbiB0aGUgaG9tZWxhYiBhbmQgQ2xvdWRmbGFyZS4iICJjbG91ZGZsYXJlZCAvIERvY2tlciIKCiAgICAgICAgICAgIGNhZGR5ID0gY29udGFpbmVyICJDYWRkeSIgIlJldmVyc2UgcHJveHkgYW5kIEhUVFBTIGVuZHBvaW50IGZvciBob21lbGFiIHNlcnZpY2VzLiIgIkNhZGR5IC8gRG9ja2VyIgogICAgICAgIH0KCiAgICAgICAgdXNlciAtPiBjbG91ZGZsYXJlICJDb25uZWN0cyB1c2luZyBXQVJQIgoKICAgICAgICBjbG91ZGZsYXJlIC0+IGNsb3VkZmxhcmVkICJDb25uZWN0cyB0aHJvdWdoIENsb3VkZmxhcmUgVHVubmVsIgoKICAgICAgICBjbG91ZGZsYXJlZCAtPiB2YXVsdHdhcmRlbiAiUHJvdmlkZXMgcHJpdmF0ZSBuZXR3b3JrIGFjY2VzcyIKCiAgICAgICAgdXNlciAtPiBjYWRkeSAiQWNjZXNzZXMgSFRUUFMgc2VydmljZXMiCgogICAgICAgIGNhZGR5IC0+IHZhdWx0d2FyZGVuICJSZXZlcnNlIHByb3hpZXMgSFRUUFMgcmVxdWVzdHMiCgogICAgICAgIGNhZGR5IC0+IGNsb3VkZmxhcmUgIlVzZXMgQ2xvdWRmbGFyZSBETlMgQVBJIGZvciBETlMtMDEgY2VydGlmaWNhdGUgdmFsaWRhdGlvbiIKCiAgICAgICAgZGVwbG95bWVudEVudmlyb25tZW50ICJIb21lIiB7CgogICAgICAgICAgICBkZXBsb3ltZW50Tm9kZSAiSG9tZSBOZXR3b3JrIiAiUHJpdmF0ZSBMQU4iICIxOTIuMTY4Ljg4LjAvMjQiIHsKCiAgICAgICAgICAgICAgICBkZXBsb3ltZW50Tm9kZSAiUHJveG1veCBwdmUiICJWaXJ0dWFsaXphdGlvbiBob3N0IiAiUHJveG1veCBWRSIgewogICAgICAgICAgICAgICAgICAgIHRhZ3MgIlByb3htb3giCgogICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMgewogICAgICAgICAgICAgICAgICAgICAgICAiSVAgQWRkcmVzcyIgIjE5Mi4xNjguODguMjAiCiAgICAgICAgICAgICAgICAgICAgICAgICJCcmlkZ2UiICJ2bWJyMCIKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGRlcGxveW1lbnROb2RlICJMWEMgMTAxIC0gZWRnZS1zZXJ2aWNlcyIgIkVkZ2Ugc2VydmljZXMgY29udGFpbmVyIiAiRGViaWFuIDEyIExYQyIgewogICAgICAgICAgICAgICAgICAgICAgICB0YWdzICJMWEMiCgogICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJUCBBZGRyZXNzIiAiMTkyLjE2OC44OC4zMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2Q1BVIiAiMiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSQU0iICIyIEdCIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRpc2siICIxNiBHQiIKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVySW5zdGFuY2UgdmF1bHR3YXJkZW4KICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVySW5zdGFuY2UgY2xvdWRmbGFyZWQKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGRlcGxveW1lbnROb2RlICJMWEMgMTAyIC0gcHJveHktMDEiICJSZXZlcnNlIHByb3h5IGNvbnRhaW5lciIgIkRlYmlhbiAxMiBMWEMiIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGFncyAiTFhDIgoKICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSVAgQWRkcmVzcyIgIjE5Mi4xNjguODguMzEiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAidkNQVSIgIjEiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUkFNIiAiMSBHQiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEaXNrIiAiMTIgR0IiCiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lckluc3RhbmNlIGNhZGR5CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHZpZXdzIHsKCiAgICAgICAgc3lzdGVtQ29udGV4dCBob21lbGFiICJTeXN0ZW1Db250ZXh0IiB7CiAgICAgICAgICAgIGluY2x1ZGUgKgogICAgICAgICAgICBhdXRvbGF5b3V0IHRiCiAgICAgICAgfQoKICAgICAgICBjb250YWluZXIgaG9tZWxhYiAiQ29udGFpbmVycyIgewogICAgICAgICAgICBpbmNsdWRlIHVzZXIKICAgICAgICAgICAgaW5jbHVkZSBjbG91ZGZsYXJlCiAgICAgICAgICAgIGluY2x1ZGUgdmF1bHR3YXJkZW4KICAgICAgICAgICAgaW5jbHVkZSBjbG91ZGZsYXJlZAogICAgICAgICAgICBpbmNsdWRlIGNhZGR5CiAgICAgICAgICAgIGF1dG9sYXlvdXQgdGIKICAgICAgICB9CgogICAgICAgIGRlcGxveW1lbnQgaG9tZWxhYiAiSG9tZSIgewogICAgICAgICAgICBpbmNsdWRlICoKICAgICAgICAgICAgYXV0b2xheW91dCB0YgogICAgICAgIH0KCiAgICAgICAgc3R5bGVzIHsKICAgICAgICAgICAgZWxlbWVudCAiUGVyc29uIiB7CiAgICAgICAgICAgICAgICBzaGFwZSBwZXJzb24KICAgICAgICAgICAgICAgIGJhY2tncm91bmQgIzA4NDI3YgogICAgICAgICAgICAgICAgY29sb3IgI2ZmZmZmZgogICAgICAgICAgICB9CgogICAgICAgICAgICBlbGVtZW50ICJTb2Z0d2FyZSBTeXN0ZW0iIHsKICAgICAgICAgICAgICAgIGJhY2tncm91bmQgIzExNjhiZAogICAgICAgICAgICAgICAgY29sb3IgI2ZmZmZmZgogICAgICAgICAgICB9CgogICAgICAgICAgICBlbGVtZW50ICJDb250YWluZXIiIHsKICAgICAgICAgICAgICAgIGJhY2tncm91bmQgIzQzOGRkNQogICAgICAgICAgICAgICAgY29sb3IgI2ZmZmZmZgogICAgICAgICAgICB9CgogICAgICAgICAgICBlbGVtZW50ICJEZXBsb3ltZW50IE5vZGUiIHsKICAgICAgICAgICAgICAgIGJhY2tncm91bmQgI2VlZWVlZQogICAgICAgICAgICAgICAgY29sb3IgIzExMTExMQogICAgICAgICAgICB9CgogICAgICAgICAgICBlbGVtZW50ICJQcm94bW94IiB7CiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kICM3ZTU3YzIKICAgICAgICAgICAgICAgIGNvbG9yICNmZmZmZmYKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZWxlbWVudCAiTFhDIiB7CiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kICM0Y2FmNTAKICAgICAgICAgICAgICAgIGNvbG9yICNmZmZmZmYKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQ=="
  },
  "views" : {
    "configuration" : {
      "styles" : {
        "elements" : [ {
          "background" : "#438dd5",
          "color" : "#ffffff",
          "tag" : "Container"
        }, {
          "background" : "#eeeeee",
          "color" : "#111111",
          "tag" : "Deployment Node"
        }, {
          "background" : "#4caf50",
          "color" : "#ffffff",
          "tag" : "LXC"
        }, {
          "background" : "#08427b",
          "color" : "#ffffff",
          "shape" : "Person",
          "tag" : "Person"
        }, {
          "background" : "#7e57c2",
          "color" : "#ffffff",
          "tag" : "Proxmox"
        }, {
          "background" : "#1168bd",
          "color" : "#ffffff",
          "tag" : "Software System"
        } ]
      },
      "terminology" : { }
    },
    "containerViews" : [ {
      "automaticLayout" : {
        "edgeSeparation" : 50,
        "nodeSeparation" : 50,
        "rankDirection" : "TopBottom",
        "rankSeparation" : 100,
        "vertices" : true
      },
      "elements" : [ {
        "id" : "1",
        "x" : 0,
        "y" : 0
      }, {
        "id" : "2",
        "x" : 0,
        "y" : 0
      }, {
        "id" : "4",
        "x" : 0,
        "y" : 0
      }, {
        "id" : "5",
        "x" : 0,
        "y" : 0
      }, {
        "id" : "6",
        "x" : 0,
        "y" : 0
      } ],
      "externalSoftwareSystemBoundariesVisible" : false,
      "key" : "Containers",
      "name" : "Container View: Homelab Services",
      "order" : 2,
      "relationships" : [ {
        "id" : "10"
      }, {
        "id" : "11"
      }, {
        "id" : "13"
      }, {
        "id" : "14"
      }, {
        "id" : "7"
      }, {
        "id" : "8"
      } ],
      "softwareSystemId" : "3"
    } ],
    "deploymentViews" : [ {
      "automaticLayout" : {
        "edgeSeparation" : 50,
        "nodeSeparation" : 50,
        "rankDirection" : "TopBottom",
        "rankSeparation" : 100,
        "vertices" : true
      },
      "elements" : [ {
        "id" : "16",
        "x" : 0,
        "y" : 0
      }, {
        "id" : "17",
        "x" : 0,
        "y" : 0
      }, {
        "id" : "18",
        "x" : 0,
        "y" : 0
      }, {
        "id" : "19",
        "x" : 0,
        "y" : 0
      }, {
        "id" : "20",
        "x" : 0,
        "y" : 0
      }, {
        "id" : "22",
        "x" : 0,
        "y" : 0
      }, {
        "id" : "23",
        "x" : 0,
        "y" : 0
      } ],
      "environment" : "Home",
      "generatedKey" : true,
      "key" : "Deployment-001",
      "name" : "Deployment View: Homelab Services - Home",
      "order" : 3,
      "relationships" : [ {
        "id" : "21"
      }, {
        "id" : "24"
      } ],
      "softwareSystemId" : "3"
    } ],
    "systemContextViews" : [ {
      "automaticLayout" : {
        "edgeSeparation" : 50,
        "nodeSeparation" : 50,
        "rankDirection" : "TopBottom",
        "rankSeparation" : 100,
        "vertices" : true
      },
      "elements" : [ {
        "id" : "1",
        "x" : 0,
        "y" : 0
      }, {
        "id" : "2",
        "x" : 0,
        "y" : 0
      }, {
        "id" : "3",
        "x" : 0,
        "y" : 0
      } ],
      "enterpriseBoundaryVisible" : true,
      "key" : "SystemContext",
      "name" : "System Context View: Homelab Services",
      "order" : 1,
      "relationships" : [ {
        "id" : "12"
      }, {
        "id" : "15"
      }, {
        "id" : "7"
      }, {
        "id" : "9"
      } ],
      "softwareSystemId" : "3"
    } ]
  }
}