FR

Harouna's homelab · October 2026

Two planets,
one tunnel,
twenty-three agents.

What Harouna built at home, how, and how every piece connects to the others. Spin the map, click a star.

The 3D view needs WebGL. The rest of the page works without it.

Technical write-up · Harouna Soumare's homelab

A data centre at home, run like a company, with twenty-three AI agents

Two machines linked by an encrypted tunnel carry everything: a small rented server that faces the Internet, and a virtual machine in the home PC that does the work. Git describes every piece, a passwordless identity guards every door, and a European vault receives an encrypted copy of everything, every night. On top of it, an assistant and twenty-two agents, organised in three teams, work for the family without ever holding the keys.

01Why build this

The idea: a real small data centre at home, as serious as a professional service, for the family, for work and for AI agents, without paying for enterprise infrastructure or handing personal data to third parties.

What it is not

It is not a cloud: if the home PC goes down, the applications stop. An external probe then warns the phone within minutes, and no data is lost.

02Two machines

A lightweight two-node Kubernetes cluster (k3s), linked by a WireGuard tunnel.

MachineWhereRole
jijirented server in FrancePublic entrance, private network control plane, mail, alerts, cluster brain
totoroVM in the home PCMachine room: databases, applications, agents

03What runs

About twenty services. A few are reachable from the Internet behind the identity gate; the rest only exist in the private network. Click a card.

Part I

Network paths

04The path of a visit

When a family member opens an application, the request crosses four zones. The key point: the public entrance decrypts nothing. It only reads the requested name and pushes the encrypted stream to the machine room, which alone holds the certificate.

TLS NEVER DECRYPTED HERE name → IP HTTPS · port 443 SNI → NetBird tunnel (wt0) Host → gate session OK no session token + groups VISITORBrowserphone, PC, tablet DNSDNS providername → public entrance PUBLIC ENTRANCE · 443jiji's TraefikSNI passthrough CLUSTER ENTRANCEtotoro's TraefikLet's Encrypt certificate OAUTH2-PROXYSign-in gatecookie, groups APPLICATIONPages, Budget…served to the family IDENTITY PROVIDERPocket IDpasskey NATIVE OIDC, NO GATE: photos, Git forge, metrics, cluster administration 01 / INTERNET02 / JIJI · RENTED SERVER03 / TOTORO · VM IN THE HOME PC04 / IDENTITY · NO WAY AROUND IT
A public visit. Solid lines show the path of every request; pink dashes show the detour through Pocket ID when the gate does not recognise a session. The glowing dot follows a packet. Click a block for details.
people and identity platform AI and agents data and backups network and external services normal path human input, detour

Tip: hover a block to light up its links, click for details.

An allowlist on the public entrance names the only applications reachable from the Internet. A name that is not on the list never reaches the house.

05The private network

NetBird builds a WireGuard mesh. Its control plane hands out keys and the list of allowed peers; traffic itself flows directly between devices, encrypted. Administration consoles only have an address inside this network.

NO PUBLIC PORT PRIVATE SERVICES ONLY HAVE AN ADDRESS INSIDE THE ENCRYPTED TUNNEL enrolment SSO sign-in peer-to-peer WireGuard · wt0 if peer-to-peer fails relayed, still encrypted name → service NETBIRD CLIENTYour devicesPC, phone MANAGEMENTNetBird serverpeers, groups, rules RELAY · STUNNetBird relayif direct fails ONCE PER DEVICESSO sign-inin the browser WILDCARD CERTIFICATEtotoro's Traefikprivate names PRIVATE SERVICEGrafana, Forgejo…metrics, status, consoles 01 / YOUR DEVICES02 / JIJI · NETWORK CONTROL PLANE03 / IDENTITY04 / TOTORO
Private access. jiji's control plane never sees the data: it hands out keys and the list of peers. Grey dashes show the fallback relay, used only when two devices cannot reach each other directly.

A classic trap, avoided

When cluster traffic runs inside a VPN tunnel, the marks the VPN puts on packets can be read by Kubernetes' firewall as "already allowed". A rule on each node clears that mark, so the walls between applications really hold.

06Passwordless identity

Pocket ID is the household's identity provider. It has no password: you sign in with a passkey tied to your phone or PC. Each application is an OpenID Connect client, restricted to groups. Applications that do not speak OpenID Connect sit behind a gate (oauth2-proxy). Even cluster administration goes through this identity: no administrator certificate lies around on a workstation.

07GitOps: Git is the only door

Nobody changes the cluster by hand. An idea becomes a branch, then a pull request in the Git forge. A check looks for forgotten secrets and verifies that every secret is encrypted. The human reviews and merges. Flux sees the new version and applies it.

GIT IS THE ONLY DOOR branch push review merge read by Flux manifests applies image pushed to the registry Flux writes the new tag to main AGENT · OR HAROUNAGimlibranch + pull request ONLY ONE WHO MERGESHarounareviews, approves PULL REQUESTForgejoleak check PROTECTED BRANCHmainthe cluster's truth FORGEJO ACTIONSRunnerbuilds the images SOURCE-CONTROLLERFluxwatches main continuously KUSTOMIZE-CONTROLLERkustomize + SOPSdecrypts with age RESULTCluster up to datereal state = Git 01 / WHO PROPOSES, WHO DECIDES02 / FORGEJO · GIT FORGE03 / FLUX AND PIPELINE04 / CLUSTER k3s
A change, end to end. Green shows an agent's proposal; pink dashes show the human decision, which no account can bypass (the rule also applies to administrators, except for a deliberate forced merge); grey dashes show the automatic image loop.
RuleEffect
No secret in clear textevery secret is encrypted (SOPS + age) before it enters Git
Removing deletes nothinga database never disappears because a file moved
Nothing without proofevery change is checked on the real service

Part II

The agents

08The agent constellation

Eleonore is Harouna's only contact. Under her, three isolated teams (household, work, business), each with its own task board, model access, knowledge collection and publishing space. Each team has a reviewer who checks deliverables before they reach the human.

Twenty-three agents, three skies. Links run from Eleonore to each team; rings mark the reviewers. Click an agent to see its mission.

What the agents cannot do

No agent holds an administration key. Those that read the infrastructure cannot see secrets. The platform engineer proposes changes; only the human merges them. The market analyst never places an order. The work OSINT researcher only looks at public, professional information.

09The path of a request

A message to Eleonore goes through five levels before coming back as a published page and a notification.

a message delegates assigned model call model picked answer deliverable stamp WORK, BUSINESS: NEVER GEMINI router guard + OmniRoute keys MATRIX · ENCRYPTEDHarounawrites to Eleonore TEAM LEADEleonoreunderstands, delegates TASKMulticaHousehold, Work, Business AGENTTeam agentYoda, Sam, Gimli… GUARDRouterintent, quotas GATEWAYOmniRouteyour subscriptions REVIEWERObi-Wan, L…approves or returns DELIVEREDPublished pageand a Matrix notice 01 / HAROUNA · MATRIX02 / ELEONORE · HERMES + HONCHO MEMORY03 / TEAMS · MULTICA04 / MODELS · ROUTER → OMNIROUTE05 / REVIEW AND DELIVERY
One request, five levels. Green shows the agents' work; blue shows the model call and its answer (grey dashes); pink shows what belongs to a human or a reviewer. A rejected deliverable goes back to the agent with precise corrections.

10Models and confidentiality

Agents never call a model directly. They talk to a purpose-built router, then to a gateway that carries Harouna's subscriptions: Claude first, ChatGPT second, Gemini as a last resort. The router guesses the intent (code, summary, analysis, conversation), checks the remaining quotas and picks the model.

The guard cannot be switched off

Before anything is sent, the router checks that confidential content only goes to a model covered by a contracted subscription. The work and business spaces are always treated as confidential.

11Memory and knowledge

Two kinds of memory. A long-term memory keeps what Eleonore learns over conversations. A knowledge base stores by meaning the documents dropped into the Library: in under two minutes, a new document is split, embedded at home and becomes searchable by the relevant team. The reviewers' lessons live there too, and every agent rereads them before working.

Part III

Lasting

12Back up, then prove it

Everything leaves encrypted for a single European vault: databases continuously, files every night, the cluster state several times a day. Above all, drills regularly restore those copies to check that they work.

ENCRYPTED BEFORE LEAVING WAL files continuous logs, full copy every night encrypted files cluster state, network, mail restores, compares, verifies DATABASES AND FILES: monthly drill NETWORK AND MAIL: weekly drill weekly integrity check 2 INSTANCES EACH5 databasesforge, tasks, knowledge… PLUGIN CNPGBarman CloudWAL + full PERSISTENT VOLUMESVolumesMatrix, Pages, Immich… k8up · RESTICNightly backupevery night ON JIJIetcd · NetBird · mailcluster, network, mail k3s · RESTICSnapshotsseveral times a day SINGLE VAULT · EUEncrypted vaultstorage in Europe AUTOMATICDrillsrestore for real 01 / POSTGRESQL DATABASES · CLOUDNATIVEPG02 / VOLUMES · k8up03 / JIJI · OUTSIDE THE CLUSTER04 / RESTORE DRILLS
One vault, three paths. Orange shows the copies leaving every night; grey dashes show the drills that take them back to check they really restore.

Why the drills

A restore test showed that a backup tool running as the wrong user silently skipped unreadable files, then reported success. A backup you have never restored is only a hypothesis.

13Security principles

A security agent audits the estate every day; a second one sorts the findings and prepares fixes, which the human accepts or not.

14What outages taught

OutageLesson
The VM loses its networkA default virtual network can change addresses without warning: the VM now has its own fixed-address network.
Large files rejectedA relay that reads everything into memory falls over on a big file: it now streams in small chunks.
Fake quota at zeroA measurement you cannot read is not a zero: it is discarded.
"Successful" but incomplete backupYou only trust a backup after restoring it.

15The toolbox

AreaTools
Clusterk3s, Traefik, cert-manager, CloudNativePG
GitOpsForgejo, Forgejo Actions, Flux, SOPS + age, gitleaks
Network and identityNetBird (WireGuard), Pocket ID (passkeys), oauth2-proxy
ApplicationsMatrix, Multica, Immich, a home-made budget app, a publishing portal
AIHermes, Claude Code, a home-made model router, OmniRoute, Honcho, pgvector, Text Embeddings Inference
LastingBarman Cloud, k8up + restic, Prometheus, Grafana, Gatus, ntfy