Playbook · scenarios & discipline

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

Wat staat waar

MacBook Pro M4 — primary werkomgeving

Mac mini M4 Pro — hot standby + 24/7 services

Cloudflare R2 — off-site cold storage

NUC Proxmox — lokale hosting

Plex VPS — werk-eigendom, na Wave 7

Vaultwarden offline kluis-papier

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

Wisseldiscipline

Van MacBook naar Mac mini overschakelen:

  1. Sluit alle Claude Code sessies op MacBook
  2. Stop claude-mem worker: pkill -f claude-mem (of via plugin-status)
  3. Wacht tot Syncthing "Up to date" toont voor ~/.claude-mem/
  4. Op Mac mini: schakel Syncthing-folder van Receive Only naar Send Only
  5. Op MacBook: schakel Syncthing-folder van Send Only naar Receive Only
  6. 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:

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.

  1. Loop naar Mac mini (of open via SSH/VNC vanaf andere device)
  2. Schakel Syncthing-folders Mac mini → Send Only mode
  3. Open Claude Code op Mac mini — alle skills, plugins, projects beschikbaar
  4. Open shell — zsh history en aliases werken
  5. 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.

  1. Vanaf elke device: log in op iCloud → "Find my Mac" → wipe op afstand
  2. Vanaf elke device: log in op vault.helsdingen.com via web (of telefoon Bitwarden app)
  3. Als telefoon ook weg: gebruik USB-stick uit kluis met vault-export, importeer in nieuwe Bitwarden-instance op telefoon
  4. 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).

  1. Koop nieuwe Mac
  2. Run bootstrap-script vanaf GitHub (private dotfiles repo)
  3. Vaultwarden via USB-stick uit externe kluis
  4. restic restore vanuit R2 voor ~/.claude/ + ~/.claude-mem/
  5. 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:

  1. Install Homebrew
  2. brew bundle met Brewfile (apps + CLI tools)
  3. Restore SSH keys vanuit Vaultwarden of veilige bron
  4. Restore ~/.claude/ vanuit Syncthing-pair óf restic-restore vanuit R2
  5. Login Claude Code (claude login)
  6. Install claude-mem plugin
  7. Restore ~/.claude-mem/claude-mem.db (zelfde bron)
  8. Vaultwarden CLI: bw login, master password vanuit kluis-papier
  9. Hardlink/sync ~/Documents/michelmedia/
  10. Test: open Claude Code, run "claim hello", check claude-mem schreef

Document onderhoud

Bij elke wave-uitvoering update je deze documenten:

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.