Infrastructure I run myself, on both sides of the Atlantic.

Homelab

A two-site infrastructure platform I designed and operate, with one site in the US and one in Europe. Everything on this site runs on it.

Simulated topology failover every 18 s

2 Proxmox VE clusters, 4 nodes, 50 cores, and about 50 VMs and containers.

01

Storage and recovery

Each site runs hyperconverged Ceph storage and its own Proxmox Backup Server. Backups replicate across sites daily, so either site can be fully rebuilt from the other.

Two-site layout The US and Europe sites each have a public edge, a Proxmox VE cluster with Ceph storage, and a Proxmox Backup Server. The two edges fail over to each other. The two backup servers replicate to each other daily. Public edge US Public edge Europe failover US site Proxmox VE cluster Ceph hyperconverged storage Proxmox Backup Server this site's own Europe site Proxmox VE cluster Ceph hyperconverged storage Proxmox Backup Server this site's own backups daily Two-site layout The US and Europe sites each have a public edge, a Proxmox VE cluster with Ceph storage, and a Proxmox Backup Server. The two edges fail over to each other. The two backup servers replicate to each other daily. Public edge US Public edge Europe failover US site Proxmox VE cluster Ceph hyperconverged storage Proxmox Backup Server this site's own backups daily Europe site Proxmox Backup Server this site's own Proxmox VE cluster Ceph hyperconverged storage
02

Public edge

The public edge is duplicated across both sites. If one side fails, traffic, TLS certificates and DNS fail over automatically. Traffic returns only after health checks confirm the recovered site is healthy.

The diagram at the top of this page loops through this failover.

03

TERRA

TERRA is the infrastructure-as-code system I wrote for this platform. It builds containers from version-controlled blueprints and verifies them, so a rebuild comes out the same every time. Each container comes up with monitoring already in place.

blueprintversion-controlled buildcontainer verifysame every time

An Active Directory domain spans both sites, with single sign-on through authentik for every self-hosted app. Grafana, Loki and Prometheus collect logs, metrics and alerts from every host. Git and CI run on a self-hosted Forgejo, and each CI build runs in its own throwaway Firecracker microVM.

04

cohub

cohub (coordination hub) is the system I built so that AI agents can operate this infrastructure without having unchecked control over it.

So far: about 9,000 messages between the agents and me, 17 agents on 16 machines, 85 releases, over 2,800 automated tests, and about 1,600 checks that make sure one agent's text can never pass for mine.

agent proposes an action
safety gate every action, every time
runs allowed
me when the gate refuses: I see the exact command and its reason, and approve it once

Chain of command

Each machine runs its own agent, and that agent owns its machine: services, incidents and upgrades. Agents coordinate through a central hub.

Roles are deliberately split. One agent does nothing but information security: it advises the others and responds to security incidents.

A request from another agent is information, not authority. Only I can authorize anything beyond an agent's own remit.

Safety gate

Every action passes a safety gate before it runs. When the gate refuses something, the agent can bring me the exact command and its reason. My approval covers that one command, once.

Agents get secrets only as opaque handles, and the real values are filled in at execution time, so the model never sees them. Every prompt, tool call and result is recorded on the hub and stays searchable.

Shared knowledge

Agents share a knowledge base, so something one agent has figured out doesn't need to be figured out again. I approve every entry. Search matches by meaning as well as keywords.

A contacts directory lists which agent covers which hosts and services, so agents know who to ask.

Under the hood: a Node.js/TypeScript hub on SQLite, a per-machine daemon built on the Claude Agent SDK and shipped as a single compiled binary, and a SvelteKit console with live streaming, phone notifications and approval forms. The hub also serves releases, and daemons update themselves when idle.