Michel Media — Failover Playbook
Versie 1 · 2026-05-07
Dit document beschrijft hoe je tussen werkomgevingen schakelt, wat te doen bij verschillende uitval-scenario's, en hoe je parity tussen MacBook en Mac mini bijhoudt.
Filosofie
- Eén actieve werkomgeving tegelijk. MacBook is primary, Mac mini is hot standby. We werken niet tegelijk vanaf beide.
- Bewuste wissel. Schakelen gebeurt expliciet, niet stilzwijgend. Sync vóór wissel afronden.
- Documenten als levende bron. Dit playbook is niet eenmalig. Bij elke significante stack-verandering bijwerken.
- Test recoveries vóór ze nodig zijn. Eens per kwartaal failover oefenen.
Wat staat waar
MacBook Pro M4 — primary werkomgeving
- macOS 26.4.1, M4
~/.claude/— Claude Code config (skills, plugins, agents, projects)~/.claude-mem/claude-mem.db— claude-mem werkgeheugen (SQLite, single-writer)~/.zshrc,~/.zsh_history— shell~/.ssh/— keys~/Documents/...— actieve projecten- macOS Keychain — Vaultwarden master password, Google Ads tokens, etc.
- Time Machine → externe SSD (nightly)
- Time Machine → Mac mini SMB share (na Wave 8)
Mac mini M4 Pro — hot standby + 24/7 services
- macOS 26.4 arm64, M4 Pro, 24 GB RAM, 12 cores
- 192.168.2.214, SSH alias
macmini ~/.claude/— gesynced via Syncthing (two-way)~/.claude-mem/claude-mem.db— gesynced via Syncthing MBP→mini one-way~/Documents/...— gesynced via Syncthing (selectief)~/.zshrc— gesynced~/.ssh/— handmatig gekopieerd (encrypted)- macOS Keychain — handmatig opnieuw ingericht (zie bootstrap-script)
- Docker services (na Wave 3+): Vaultwarden, Paperless, eventueel n8n
- Cloudflare Tunnel container met routes voor zijn services
Cloudflare R2 — off-site cold storage
- Bucket
michelmedia-backups(regio EU) - restic encrypted snapshots:
~/.claude/(dagelijks)~/.claude-mem/(dagelijks)~/.ssh/(dagelijks)- dotfiles (dagelijks)
- Vaultwarden encrypted-export (maandelijks)
- Paperless Docker volume (dagelijks na Wave 4)
NUC Proxmox — lokale hosting
- 192.168.2.100, PVE 9.1.1
- LXC 102 cams (CamViewer)
- LXC 103 topview-backup
- VM 100 Home Assistant
- LXC 101 cloudflared tunnel
- (Toekomstig) LXC 104+ als Mac mini als hot standby niet voldoet
Plex VPS — werk-eigendom, na Wave 7
- Immich (foto's), Jellyfin (media), Uptime Kuma, monitoring tooling
- Niet bedrijfskritiek — uitval = verlies van foto's/film, geen werk-stop
Vaultwarden offline kluis-papier
- Master password
- Restic R2 passphrase
- USB-stick met
vaultwarden/encrypted-export-YYYYMMDD.json - Bootstrap-credentials: SSH key naar plex/macmini, CF Global API Key fingerprint
claude-mem strategie
Het probleem
claude-mem.db is SQLite op MacBook (~/.claude-mem/claude-mem.db, ~512 MB en groeiend). De claude-mem worker op poort 37777 schrijft real-time tijdens Claude Code sessies. Twee machines die tegelijk schrijven naar dezelfde SQLite via Syncthing = corruption-risico.
De gekozen aanpak: Active-Passive
- MacBook = primary (worker actief, lees + schrijf)
- Mac mini = passive replica (worker niet actief, ontvangt alleen DB-snapshot via Syncthing)
- Syncthing folder mode = "Send Only" op MacBook, "Receive Only" op Mac mini
Wisseldiscipline
Van MacBook naar Mac mini overschakelen:
- Sluit alle Claude Code sessies op MacBook
- Stop claude-mem worker:
pkill -f claude-mem(of via plugin-status) - Wacht tot Syncthing "Up to date" toont voor
~/.claude-mem/ - Op Mac mini: schakel Syncthing-folder van Receive Only naar Send Only
- Op MacBook: schakel Syncthing-folder van Send Only naar Receive Only
- Op Mac mini: start Claude Code, claude-mem worker start automatisch
Van Mac mini terug naar MacBook:
Stappen 1-6 in omgekeerde richting.
Waarom geen netwerk-shared worker
Optie C (centrale worker op Mac mini, beide machines praten via netwerk) zou single-writer probleem oplossen, maar:
- Vereist netwerk-bereikbaarheid Mac mini vanaf MacBook (alleen op thuisnetwerk of via Tailscale)
- Werkt niet als Mac mini down is of MacBook offline werkt (cafe, trein)
- claude-mem architectuur is lokale localhost:37777 en niet zonder aanpassing remote-bereikbaar
Active-Passive past beter bij realiteit dat één machine tegelijk gebruikt wordt.
Failover-scenario's
Scenario A — MacBook stuk, ben thuis
Recovery-tijd: 5-10 min.
- Loop naar Mac mini (of open via SSH/VNC vanaf andere device)
- Schakel Syncthing-folders Mac mini → Send Only mode
- Open Claude Code op Mac mini — alle skills, plugins, projects beschikbaar
- Open shell — zsh history en aliases werken
- Start werk waar je was. claude-mem heeft gisteren-niveau context.
Wat ontbreekt: wat MacBook tussen laatste sync en uitval deed (afhankelijk van sync-frequentie, max paar minuten werk).
Scenario B — MacBook gestolen, op pad
Recovery-tijd: 30-60 min.
- Vanaf elke device: log in op iCloud → "Find my Mac" → wipe op afstand
- Vanaf elke device: log in op vault.helsdingen.com via web (of telefoon Bitwarden app)
- Als telefoon ook weg: gebruik USB-stick uit kluis met vault-export, importeer in nieuwe Bitwarden-instance op telefoon
- Loop later thuis naar Mac mini, switch naar primary (Scenario A)
Wat ontbreekt: zelfde als A, plus laatste git-commits die niet gepusht waren (verlies). Daarom: discipline om vaak te pushen.
Scenario C — Plex VPS uit (werk koppelt af, hosting incident)
Recovery-tijd: afhankelijk van wanneer Wave 3+ uitgevoerd.
Voor Wave 3 (huidige staat): Vaultwarden en Paperless niet bereikbaar. - Voor Vaultwarden: gebruik USB-stick export + lokale Bitwarden instance (paniek-fallback) - Voor Paperless: documenten niet inkomen tot VPS terug. Mail-fetcher staat stil.
Na Wave 3+: Vaultwarden + Paperless draaien op Mac mini. plex VPS uit = alleen Immich/Jellyfin/Coolify niet bereikbaar. Geen werk-stop.
Scenario D — Brand thuis, ben elders
Recovery-tijd: 1-2 dagen (nieuwe Mac kopen + restoren).
- Koop nieuwe Mac
- Run bootstrap-script vanaf GitHub (private dotfiles repo)
- Vaultwarden via USB-stick uit externe kluis
- restic restore vanuit R2 voor
~/.claude/+~/.claude-mem/ - Plex VPS draait nog (andere fysieke locatie) → werk hervat
Wat ontbreekt: alles op MacBook + Mac mini lokaal dat niet in R2/GitHub stond. Surveillance-beelden zijn weg (Synology weg).
Scenario E — Cloudflare account compromise
Recovery-tijd: dagen tot weken.
Catastrofaal scenario want CF is "het zenuwstelsel". Mitigatie: - 2FA op CF account verplicht (al ingericht?) - API keys minimaal verspreid (Global API Key alleen voor Claude scripts, Bearer tokens voor andere tools) - Backup van R2 niet via R2 zelf maar ook lokaal op Mac mini disk
Volledige preventie + recovery: vereist apart Identity Recovery Plan doc, niet hier.
Maandelijkse parity-check
Ritueel op de eerste maandag van de maand. ~15 min.
# 1. Versie-vergelijk Claude Code op beide machines
ssh macmini "claude --version"
claude --version
# 2. Versie-vergelijk claude-mem
ssh macmini "ls ~/.claude/plugins/marketplaces/thedotmack/claude-mem"
ls ~/.claude/plugins/marketplaces/thedotmack/claude-mem
# 3. Sync-status beide machines
syncthing cli show system
ssh macmini "syncthing cli show system"
# 4. Restic snapshot recent?
restic -r s3:... snapshots --last 5
# 5. Vault-export laatste maand aanwezig in R2?
rclone ls r2:michelmedia-backups/vaultwarden/
# 6. Test failover discipline (op Mac mini):
# open Claude Code, doe dummy task, check claude-mem schreef.
# sluit, switch terug naar MBP-primary mode.
Output noteren in ~/Documents/michelmedia/infra/parity-checks/YYYY-MM.md. Zo zie je over tijd of er drift ontstaat.
Bootstrap een verse Mac
~/Documents/michelmedia/infra/bootstrap-mac.sh (zie Wave 0). Volgorde:
- Install Homebrew
brew bundlemet Brewfile (apps + CLI tools)- Restore SSH keys vanuit Vaultwarden of veilige bron
- Restore
~/.claude/vanuit Syncthing-pair óf restic-restore vanuit R2 - Login Claude Code (
claude login) - Install claude-mem plugin
- Restore
~/.claude-mem/claude-mem.db(zelfde bron) - Vaultwarden CLI:
bw login, master password vanuit kluis-papier - Hardlink/sync
~/Documents/michelmedia/ - Test: open Claude Code, run "claim hello", check claude-mem schreef
Document onderhoud
Bij elke wave-uitvoering update je deze documenten:
- DISCOVERY.md als infra significant wijzigt
- MIGRATION-PLAN.md waves afkruisen + aanpassingen noteren
- FAILOVER-PLAYBOOK.md scenario's bijwerken als nieuwe risk-laag erbij komt
- infra-overview.html redeploy
Aan het eind van de complete migratie (alle waves doorlopen) overweeg een v2 van deze documenten met afgekruiste items en herziene "wat staat waar" tabel.