Het zenuwstelsel. DNS, TLS, edge-routing, WAF, tunnels, Pages, Workers, R2, D1, Custom Hostnames. Alles tussen klant en service loopt hier doorheen.
Alles wat draait, waar het draait, en waar het wringt. Bedoeld als single source of truth voor cross-asset besluitvorming, recovery-planning en migratie-prioriteiten.
Hoe de drie lagen samenhangen. Cloudflare orchestreert al het verkeer; tunnels exposen lokale services veilig publiek; werk-VPS is dik maar afhankelijk.
graph TB
classDef cloud fill:#1a1530,stroke:#a78bfa,stroke-width:2px,color:#e9d5ff
classDef vps fill:#2a1a10,stroke:#f59e0b,stroke-width:2px,color:#fde68a
classDef home fill:#0f1f1a,stroke:#10b981,stroke-width:2px,color:#a7f3d0
classDef warn fill:#2a1010,stroke:#ef4444,stroke-width:2px,color:#fecaca
classDef neutral fill:#161620,stroke:#6b6b76,stroke-width:1px,color:#a1a1aa
subgraph CLOUD["☁️ Cloud · Managed"]
CF["Cloudflare
23 zones · 8 Pages · 11 R2 · D1 · Workers"]
M365["Microsoft 365
info@ · scan@"]
MB["Moneybird"]
GH["GitHub"]
APPLE["Apple Developer"]
end
subgraph VPS["🖥 VPS · werk-eigendom"]
PLEX["plex.helsdingen.com
37.97.202.216
47 containers"]
DJEFF["djeffrey
37.97.148.97
Plesk · padelclippy.nl"]
end
subgraph HOME["🏠 Thuis-netwerk · 192.168.2.0/24"]
MBP["MacBook Pro M4
primary · 26.4.1"]
MINI["Mac mini
.214 · 26.4 arm64"]
NUC["NUC Proxmox
.100 · PVE 9.1.1"]
NAS["TeRRoR Synology
DS916+ · DSM 7.2"]
RTX["Dikke3090
.142 · RTX 3090"]
HOMEY["Homey Pro 2023
.176"]
end
subgraph PROX["⚙️ Proxmox subgrid"]
CAMS["LXC 102 · cams
.228 · CamViewer"]
TOPV["LXC 103 · topview-backup
.145"]
CFLT["LXC 101 · cloudflared
.148"]
HAOS["VM 100 · Home Assistant
4 GB RAM"]
end
CF -.->|tunnel b88e…| PLEX
CF -.->|tunnel 1931…| CFLT
CFLT --> HAOS
CFLT --> NAS
NUC --> CAMS
NUC --> TOPV
NUC --> CFLT
NUC --> HAOS
GH -->|code| MBP
GH -->|code| MINI
CF -->|DNS edge| MBP
M365 -.- MBP
MBP <==>|"Syncthing two-way
~/.claude only"| MINI
MBP ==>|"restic nightly 03:30
SFTP encrypted · 16.7 GB"| MINI
MBP ==>|"restic weekly zo 04:00
S3 R2 · 5.4 GB stored"| CF
PLEX -. "❌ Vaultwarden SPOF
Wave 3" .-> MINI
class CF,M365,MB,GH,APPLE cloud
class PLEX,DJEFF vps
class MBP,MINI,NUC,NAS,RTX,HOMEY home
class CAMS,TOPV,CFLT,HAOS neutral
Externe SaaS waar Michel betaalt of gratis-tier op leunt. Vendor zorgt voor redundancy. Risico = vendor-lockin + accountverlies.
Het zenuwstelsel. DNS, TLS, edge-routing, WAF, tunnels, Pages, Workers, R2, D1, Custom Hostnames. Alles tussen klant en service loopt hier doorheen.
Zakelijke e-mail. info@ + scan@ shared mailbox. scan@ voert Paperless via mail-fetcher v2.
Single source of truth voor administratie per 1-7-2026. Trial actief, eerste live factuur 1 juni. KOR-modus tot 30-6.
Code SSOT. Alle klant-projecten en eigen tools. Migratie zou triviaal zijn (clone + push elders), dus laag risico.
Voor PadelClippy + CashSpot iOS. App Store Connect, push keys, signing certs.
Crash reporting (Sentry), usage analytics (TelemetryDeck), Llama-Nemotron API (gratis). Niet bedrijfskritiek — observability/experimenten.
LTC Event Planner + LTC Padel Planning. Free-tier — pauzeert na 7d inactiviteit, keep-alive cron via launch-agent.
Twee TransIP VPSen, beide via werkgever (Gemeente Oost Gelre) gratis beschikbaar. Je betaalt niets, maar je bezit ze ook niet — strategisch belangrijke nuance.
De monoliet. 47 containers, 6 TB media, 700 GB Docker volume, 96 GB root. Coolify orchestreert alles. Draait 59 dagen. Te zwaar geladen voor één host die je niet bezit.
Bron-of-truth voor alle credentials, klanten, recovery. Als deze container of de host eronder uitvalt: lock-out van eigen leven én bedrijf.
Alle Belastingdienst-relevante documenten. 5 containers (web, redis, gotenberg, tika, mail-fetcher). Lokaal cron-backup, NAS-sync nog niet ingericht.
PadelClippy.nl/.com hosting + SMTP relay. Ubuntu 24.04, Plesk-managed. Onafhankelijk van plex, eigen Cloudflare Origin Cert tot 2041.
Wat hier draait, bezit je. Stroom kost iets, verder niets. Onderbenutting is hier de hoofdkans, niet capaciteit.
Dagelijks werkstation. Mobiel. Alle klantwerk, deploys, schrijven. ~/.claude (7.4 GB) + claude-mem.db (5.3 GB) = jouw werkgeheugen. Backup-strategie sinds 2026-05-10: nightly restic naar Mac mini (SFTP, lokaal) + weekly restic naar Cloudflare R2 (offsite, EU). Realtime sync van Documents is bewust geschrapt — Syncthing alleen voor ~/.claude.
M4 Pro 24 GB, 12 cores. Primary backup target. Host van restic SFTP-repo voor nightly encrypted backups van MBP. Ontvangt ook Syncthing-sync van ~/.claude (claude-config). Bij MBP-uitval: open Mac mini, restic-restore vanaf SFTP-repo, ga door binnen 10 min. Documents-sync was geschrapt 2026-05-10 (case-conflicts, restic dekt het af).
Hosting platform thuis. Draait CamViewer, TopView/QuickSlide zinker en Home Assistant. Veel ruimte voor extra LXCs (Vaultwarden mirror, Paperless mirror, Lurvink staging).
11 TB volume, 6.4 TB ongebruikt. Doet nu vooral Surveillance Station camerabeelden. Heeft ContainerManager, Node.js v16/18/20, CloudSync, Replication. Klaar om backup-target voor alles te worden.
ComfyUI op poort 8188. Lokale GPU-zware workflows: image gen, eventueel lokale LLMs. ~120 custom nodes geïnstalleerd.
Doet nu niets. Voorgestelde rol: clean reference machine met maandelijkse image refresh, of cold standby met bootstrap-script. Geen sync nodig — alleen restorable basis.
Smart home hub. Eigen Tuya Local app v0.6.2 draait. Niet bedrijfskritiek maar wel persoonlijk waardevol.
Camera PC voor kantoor-monitoring. Beperkte rechten, alleen view. Niet voor zakelijke compute-taken.
Per service: huidige host, welke kolom moet veranderen in de eindsituatie. Sweet-spot voorstel.
| Service | Nu | Sweet spot | Waarom |
|---|---|---|---|
| Vaultwarden | plex.helsdingen.com | NUC LXC + R2 export → | SPOF wegnemen — credentials moeten op eigen hardware |
| Paperless-ngx | plex (docs.helsdingen.com) | Synology Docker + R2 → | Belastingdienst-relevant. NAS heeft 6.4 TB vrij + ContainerManager |
| Supabase self-host | plex (Coolify) | blijven of CF D1 → | Alleen verhuizen als klantcode hier op gaat draaien |
| Immich · Jellyfin | plex | blijven | Niet bedrijfskritiek, perfect daar |
| Coolify · Portainer | plex | blijven | Eigen experimenteer-omgeving |
| Uptime Kuma · Glances | plex | blijven | Monitoring zelf is niet kritiek |
| CamViewer · cams-lxc | NUC LXC 102 | blijven | Lokaal = laag latency, klant Lurvink-pad ook hier |
| TopView zinker | NUC LXC 103 | blijven | Lokaal = onafhankelijk van werk-VPS |
| Home Assistant | NUC VM 100 | blijven | Smart home, niet zakelijk |
| Surveillance Station | Synology | blijven | NAS native |
| ComfyUI | Dikke3090 | blijven | GPU-bound |
| claude-mem.db | MacBook lokaal | + Mac mini sync + R2 nightly → | Werkgeheugen — onvervangbaar |
| ~/.claude config | MacBook lokaal | + private GitHub dotfiles repo → | Bootstrap nieuwe machine in 30 min |
| Time Machine | externe SSD | + Synology AFP/SMB → | SSD = lokaal verlies bij brand. NAS = thuis off-laptop |
| Klant-portalen (Pages) | CF Pages | blijven | Locatie-onafhankelijk, edge, gratis |
| PadelClippy web | djeffrey (Plesk) | CF Pages + Workers → | Op termijn migreren weg van Plesk |
Als ik geen Claude heb om mij te helpen — alle backup-info, restore-commando's en escape-procedures op één plek. Live sinds 2026-05-10.
flowchart LR
subgraph SRC["📂 Bron · MacBook Pro"]
HOME["~/.claude · 7.4 GB
~/.claude-mem · 5.3 GB
~/.ssh · keys
~/.config · settings
~/Documents/michelmedia"]
end
subgraph PRIM["🏠 Primary backup · Mac mini"]
SFTP["SFTP repo
~/restic-backups/main
5 snapshots
16.7 GB raw → 6 GB"]
end
subgraph SEC["☁️ Secondary backup · Cloudflare R2"]
R2["S3 bucket
noaber-restic-mbp · EU
1 snapshot
5.4 GB stored
~$0.08/mnd"]
end
HOME ==>|"NIGHTLY 03:30
LaunchAgent
com.michelmedia.restic-backup"| SFTP
HOME ==>|"WEEKLY zo 04:00
LaunchAgent
com.michelmedia.restic-backup-r2"| R2
SFTP -.->|"Telegram notify
na elke run"| TG[("📱")]
R2 -.->|"Telegram notify"| TG
classDef bron fill:#1d1d28,stroke:#a78bfa,color:#f5f5f7
classDef prim fill:#0d2818,stroke:#10b981,color:#f5f5f7
classDef sec fill:#0d1f28,stroke:#06b6d4,color:#f5f5f7
class HOME bron
class SFTP prim
class R2 sec
| Encryption passphrase | Vaultwarden item restic backup passphrase (folder Noaber.ai)Lokaal: ~/.cache/restic-passphrase.txt (chmod 600) |
|---|---|
| R2 S3 keys | Vaultwarden item R2 restic-mbp-noaber S3 keys (folder Noaber.ai)Lokaal: ~/.config/restic/r2-env (chmod 600) |
| SSH naar Mac mini | ~/.ssh/config alias macmini (192.168.2.214)SSH-key in ~/.ssh/id_rsa |
| Backup scripts | ~/.local/bin/restic-backup.sh (Mini SFTP)~/.local/bin/restic-backup-r2.sh (R2 offsite) |
| LaunchAgents | ~/Library/LaunchAgents/com.michelmedia.restic-backup.plist (nightly 03:30)~/Library/LaunchAgents/com.michelmedia.restic-backup-r2.plist (zondag 04:00) |
| Logs | ~/.local/share/restic-backup.log · ~/.local/share/restic-r2-backup.log |
| Vaultwarden master | macOS Keychain account bw-vaultUnlock: eval $(~/.local/bin/bw-unlock) |
bw login michel@helsdingen.com
bw unlock --raw # geeft session
export BW_SESSION="..."
bw get item "restic backup passphrase"
~/.cache/restic-passphrase.txt (chmod 600)export RESTIC_REPOSITORY=/Users/michelhelsdingen/restic-backups/main
export RESTIC_PASSWORD_FILE=~/.cache/restic-passphrase.txt
restic snapshots --compact
restic restore latest --target ~ --include /Users/michelhelsdingen/.claude
restic restore latest --target ~ --include /Users/michelhelsdingen/.claude-mem
brew install restic)restic-mbp-noaber token is gebonden aan keys die alleen wij hebben (in BW). Als BW-vault offline is: nieuwe token genereren met je Cloudflare-login.export AWS_ACCESS_KEY_ID="..."
export AWS_SECRET_ACCESS_KEY="..."
export RESTIC_REPOSITORY="s3:https://91a07c8e79b284d2ec64e001fa28fdda.r2.cloudflarestorage.com/noaber-restic-mbp"
export RESTIC_PASSWORD_FILE=~/.cache/restic-passphrase.txt
restic snapshots
restic restore latest --target ~/restored
Onbewezen restore = geen backup. Elk kwartaal: pak random snapshot, restore naar /tmp/restore-test/, verify SHA256 match origineel.
# Vanaf Mini SFTP repo
source ~/.zshrc
export RESTIC_REPOSITORY=sftp:macmini:/Users/michelhelsdingen/restic-backups/main
export RESTIC_PASSWORD_FILE=~/.cache/restic-passphrase.txt
restic restore latest --target /tmp/drill --include /Users/michelhelsdingen/.zshrc
shasum ~/.zshrc /tmp/drill/Users/michelhelsdingen/.zshrc
# Vanaf R2 offsite repo
source ~/.config/restic/r2-env
restic restore latest --target /tmp/drill-r2 --include /Users/michelhelsdingen/.zshrc
# Integrity check (5% sample, snel)
restic check --read-data-subset=5%
Drill-log: schrijf datum + resultaat in infra/RESTORE-PLAYBOOK.md.
| Mini SFTP backup | Elke nacht 03:30 (LaunchAgent) · ~5-70 sec per run · Telegram notify |
|---|---|
| R2 offsite backup | Elke zondag 04:00 (LaunchAgent) · ~70 sec voor delta · Telegram notify |
| Retention Mini | 7 daily · 4 weekly · 6 monthly (forget --prune automatisch) |
| Retention R2 | 4 weekly · 6 monthly · 2 yearly (lange-termijn focus) |
| Health check | Wekelijks: restic check --read-data-subset=5% beide repos |
| Manual run | Mini: bash ~/.local/bin/restic-backup.shR2: bash ~/.local/bin/restic-backup-r2.sh |
_archive/ = oude projecten, niet meer relevant.Filosofie: backup alleen wat onvervangbaar is. Voor de rest: GitHub voor code, package managers voor deps, vendor-cloud voor managed data.
Volgorde van impact-per-uur. Niet alles tegelijk — eerst de SPOFs dichten, dan de hot standby, dan migraties.