# Vault1984 — Global Infrastructure Plan *Created 2026-03-01 · Updated 2026-03-02* --- ## Strategy: Ontmoedigende Voorsprong The AI agent market is exploding. OpenClaw is commonplace, Claude had 500K App Store downloads in a single day. Every developer running agents has a credential problem — and nobody is solving it with field-level AI visibility and two-tier encryption. The goal is to present Vault1984 as the global standard from day one. When a competitor evaluates the space, they should see infrastructure everywhere and think "we can't improve on that anymore." Like Google in search. The map matters more than the capacity — 16 nodes across 6 continents signals infrastructure, not a side project. Each node runs a single Go binary + SQLite. Minimal resource requirements. Nodes are independent — no replication between regions. A user's vault lives on one instance. Scale up individual nodes only when demand justifies it. Budget: $100/month. Deploy mini-nodes, upgrade individual nodes only when demand justifies. --- ## Deployment Map ### Existing Infrastructure (Hostkey) | City | Provider | Role | Cost | |------|----------|------|------| | Amsterdam | Hostkey | EU West, Benelux, Nordics | existing | | Zurich | Hostkey | SOC hub, Switzerland, DACH backup | existing | | Dubai | Hostkey | Gulf states, Middle East | ~$5-8/mo | ### New Infrastructure (Vultr) All Vultr nodes: VX1 tier — 1 vCPU, 512 MB RAM, 10 GB SSD, 0.5 TB bandwidth @ $2.50/mo. | # | City | Region | Covers | |---|------|--------|--------| | 1 | New Jersey | US East | East coast, finance, enterprise | | 2 | Silicon Valley | US West | Startups, AI companies | | 3 | Dallas | US Central | Middle US, gaming corridor | | 4 | London | UK | UK dev market | | 5 | Frankfurt | EU Central | DACH, central Europe | | 6 | Warsaw | EU East | Eastern Europe, Balkans, Turkey corridor | | 7 | Tokyo | Asia East | Japan, China-facing (southern) | | 8 | Seoul | Asia East | Korea, China-facing (northern) | | 9 | Mumbai | South Asia | India (1.4B people) | | 10 | São Paulo | LATAM | South America | | 11 | Sydney | Oceania | Australia, New Zealand | | 12 | Johannesburg | Africa | Africa (nobody else is there) | | 13 | Tel Aviv | Middle East | Eastern Mediterranean, Israel | **Note:** Hostkey covers Netherlands, Germany, Finland, Iceland, UK, Turkey, USA, Dubai, Israel — significant overlap with Vultr. Consider consolidating to Hostkey where they offer competitive mini-VPS pricing (existing relationship, single invoice). Vultr only for gaps: Tokyo, Seoul, Mumbai, São Paulo, Sydney, Johannesburg, Warsaw, Dallas, Silicon Valley. --- ## Coverage Summary - **16 nodes** across **6 continents** - Every major economic zone covered - No spot on earth more than ~100ms from a Vault1984 node ### Cost | Provider | Nodes | Monthly | |----------|-------|---------| | Hostkey (existing) | 2 | $0 (already paid) | | Hostkey (Dubai) | 1 | ~$5-8 | | Vultr | 13 | $32.50 | | **Total** | **16** | **~$40/mo** | Remaining ~$60/mo reserved for upgrading nodes that see traction. ### Upgrade Path When a node outgrows $2.50 tier: 1. **$6/mo** — 1 vCPU, 1 GB RAM, 25 GB SSD, 1 TB bandwidth 2. **$12/mo** — 2 vCPU, 2 GB RAM, 50 GB SSD, 2 TB bandwidth 3. Beyond: evaluate dedicated or move to Hostkey dedicated in that region --- ## Node Stack ### OS: NixOS No Ubuntu. No Alpine. NixOS makes every node a deterministic clone of a single config file in the repo. - **Declarative**: One `configuration.nix` defines the entire node — OS, packages, services, firewall, users, TLS. Checked into the vault1984 repo. Every node identical by definition. - **Reproducible**: No drift. The system IS the config. - **Rollback**: Atomic upgrades. `nixos-rebuild switch --rollback` instantly restores previous state. - **Agent-friendly**: OC pushes config, runs one command. Node converges or doesn't. No imperative state tracking. - **Hostile to attackers**: Read-only filesystem, no stray tooling, no package manager that works as attacker expects. Break in and find: single Go binary, encrypted SQLite file, nothing else. L2 fields cannot be decrypted — key doesn't exist on server. Footprint: ~500 MB disk, ~60 MB RAM idle. On 10 GB / 512 MB box, plenty of room. Deploy via `nixos-infect` (converts fresh Debian on Vultr to NixOS in-place). Nix store maintenance: keep 2 generations max, periodic `nix-collect-garbage`. Each rebuild barely adds to the store — it's one Go binary + minimal system packages. Non-issue on these nodes. ### No Caddy. No Cloudflare Proxy. Vault1984 is a password vault. Routing all traffic through a third-party proxy (Cloudflare) defeats the trust model. Cloudflare DNS only, no proxying. Caddy was considered for TLS termination, but Go's built-in `autocert` (`golang.org/x/crypto/acme/autocert`) handles Let's Encrypt natively — about 10 lines of code. This eliminates Caddy entirely (~40 MB binary, ~30-40 MB RAM). The Go binary terminates TLS itself. Why this works (and won't fail like at Kaseya): 16 domains all under `*.vault1984.com` — we control DNS. No customer domains, no proxy chains, no Windows cert stores. Let's Encrypt rate limit is 50 certs/week — we need 16. Renewal is automatic, in-process, at 30 days before expiry. ### Stack Per Node ``` [Vultr/Hostkey VPS — NixOS] | sshd (WireGuard only — no public port 22) | vault1984 binary (Go, ~15 MB, :80 + :443) | vault1984.db (SQLite + WAL) ``` Two processes. Nothing else installed, nothing else running. --- ## Network & Access ### WireGuard Hub-and-Spoke All management access via WireGuard mesh. No public SSH port on any node. - **Hub**: Zurich (SOC) — `10.84.0.1/24`, listens on UDP 51820 - **Spokes**: All 15 other nodes — unique `10.84.0.x` address, initiate connection to hub - SSH binds to WireGuard interface only (`10.84.0.x:22`) - Public internet sees only ports 80 and 443 Spoke NixOS config (example for Tokyo): ```nix networking.wireguard.interfaces.wg0 = { ips = [ "10.84.0.2/24" ]; privateKeyFile = "/etc/wireguard/private.key"; peers = [{ publicKey = "zurich-pub-key..."; allowedIPs = [ "10.84.0.0/24" ]; endpoint = "zurich.vault1984.com:51820"; persistentKeepalive = 25; }]; }; services.openssh = { enable = true; listenAddresses = [{ addr = "10.84.0.2"; port = 22; }]; }; ``` Overhead: WireGuard is a kernel module. Zero processes, ~0 MB RAM. Key management: 16 key pairs (one per node), generated by `wg genkey`. Add/remove node = update Zurich peer list + rebuild. Five minutes. ### Break-Glass SSH If Zurich is completely down, SOC loses WireGuard access to all nodes. Nodes keep serving customers (public 443 still works), but no management access. Break-glass: Emergency SSH key with access restricted to `jongsma.me` IP. Disabled in normal operation — enable via Vultr/Hostkey console if Zurich is unrecoverable. --- ## Telemetry & Monitoring ### Push-to-Kuma Model Nodes push status to Kuma (running in Zurich/SOC). No inbound metrics ports. No scraping. No Prometheus. No node_exporter. ``` vault1984 (every 30s) ──POST──> https://kuma.zurich/api/push/xxxxx | missing 2 posts = SEV2 missing ~5 min = SEV1 ``` Vault1984 binary reads its own `/proc/meminfo`, `/proc/loadavg`, disk stats — trivial in Go (`runtime.MemStats` + few file reads) — and pushes JSON to Kuma. No extra software on node. ### Metrics Payload ```json { "node": "tokyo", "ts": 1709312400, "ram_mb": 142, "ram_pct": 27.7, "disk_mb": 3200, "disk_pct": 31.2, "cpu_pct": 2.1, "db_size_mb": 12, "db_integrity": "ok", "active_sessions": 3, "req_1h": 847, "err_1h": 2, "cert_days_remaining": 62, "nix_gen": 2, "uptime_s": 864000 } ``` Key metric: `cert_days_remaining`. If autocert silently fails renewal, this trends toward zero — visible before expiry. --- ## SOC Operations (Zurich) Zurich is the SOC hub. Kuma runs here. WireGuard hub here. All management flows through Zurich. ### Routine (automated/scheduled) - **Kuma monitoring**: Push monitors for all 16 nodes, SEV2/SEV1 escalation on missed heartbeats - **NixOS updates**: Weekly `nixos-rebuild switch` across all nodes via WireGuard SSH - **Nix garbage collection**: Weekly, keep 2 generations max - **SQLite integrity**: Periodic `PRAGMA integrity_check` on vault DBs - **Cert monitoring**: Watch `cert_days_remaining` in Kuma payload ### Reactive (on alert) - **Node down**: Check Kuma, SSH via WireGuard, diagnose. If unrecoverable, reprovision from `configuration.nix`. - **Disk pressure**: Nix garbage collection, check DB growth, upgrade tier if needed - **Anomaly detection**: Unusual API patterns (credential stuffing, brute force) visible in `err_1h` metric - **Binary deploy**: Push new Vault1984 binary across nodes, rolling deploy, verify health after each ### Deployment - Node config is single `configuration.nix` per node (templated), checked into vault1984 repo - Go binary cross-compiled with `CGO_ENABLED=0` or musl target (for SQLite on NixOS) - Deploy: SCP binary + push config via WireGuard SSH, `nixos-rebuild switch` — atomic, rollback on failure - DNS-level failover: route away from unhealthy nodes --- ## Gaps and Future Considerations - **Istanbul/Dubai**: Vultr has no Turkey or Gulf presence. Warsaw (~30ms to Istanbul) and Tel Aviv (~40ms) cover the gap. Hostkey Dubai covers the Gulf. Hostkey also has Istanbul directly. - **China mainland**: Requires ICP license + Chinese entity. Tokyo and Seoul serve as Phase 1 proxies. Evaluate Alibaba Cloud for Phase 2 if Chinese demand materializes. - **Canada**: Toronto available on Vultr if needed. Currently served by New Jersey + Silicon Valley. - **Mexico/Central America**: Mexico City available on Vultr. Currently served by Dallas + São Paulo. - **Provider consolidation**: Hostkey covers NL, DE, FI, IS, UK, TR, US, UAE, IL — check mini-VPS pricing with account manager. Could reduce Vultr dependency to ~9 nodes (Asia, LATAM, Africa, Oceania, US interior). --- ## Node Configuration Template Minimal `configuration.nix` for a Vault1984 node: ```nix { config, pkgs, ... }: { # WireGuard — management network networking.wireguard.interfaces.wg0 = { ips = [ "10.84.0.NODE_ID/24" ]; privateKeyFile = "/etc/wireguard/private.key"; peers = [{ publicKey = "ZURICH_PUB_KEY"; allowedIPs = [ "10.84.0.0/24" ]; endpoint = "zurich.vault1984.com:51820"; persistentKeepalive = 25; }]; }; # SSH — WireGuard only services.openssh = { enable = true; listenAddresses = [{ addr = "10.84.0.NODE_ID"; port = 22; }]; settings.PasswordAuthentication = false; }; # Vault1984 systemd.services.vault1984 = { description = "Vault1984"; after = [ "network-online.target" ]; wantedBy = [ "multi-user.target" ]; serviceConfig = { ExecStart = "/opt/vault1984/vault1984"; Restart = "always"; RestartSec = 5; EnvironmentFile = "/etc/vault1984/env"; }; }; # Firewall — public: 80+443 only. WireGuard: 51820 from Zurich only. networking.firewall = { enable = true; allowedTCPPorts = [ 80 443 ]; # SSH not in allowedTCPPorts — only reachable via WireGuard }; } ``` --- *Vault1984 — the vault that knows who it's talking to.*