NFS Mobile Edition save sync (saves.vlad.yt) Keeps each game's save folder in step across the Mac, iPad and iPhone. One small python server (saves_server.py, stdlib only). API (HTTP Basic auth on everything except / and /healthz; user = device name, password = that device's) GET / this page GET /healthz 200 ok GET /v1// JSON {name: {size, mtime, sha256}} GET /v1// the file (X-Mtime header = its write time) PUT /v1// store a copy; header X-Mtime = the device's write time (Unix seconds). 409 = the server's copy is newer, pull it. The copy replaced goes to history/ first. POST /v1/switch/sync run the Switch emulator save sync now (Ryubing on the PC/Deck, MeloNX on the iPad); returns its report. is a folder id (mw = Most Wanted, carbon = Carbon, switch = Switch emulator saves as .tar, written by ~/dev/switch2/savesync/switch-saves.py); <name> a plain file name, no folders. Body limit 64 MB. Devices Each device has its own password; the server keeps only a hash (the .devices file). Passwords are made on the Mac with python3 saves_server.py --add-device <name> (printed once). Use https only. Where it runs, and failover Primary: the Mac (127.0.0.1:8805, data ~/Saves/NFS/<game>/ with history/). Fallback: the Oracle VPS (data /srv/saves). saves.vlad.yt points at Oracle, whose Caddy sends each request to the Mac first and to its own copy when the Mac's /healthz fails. The Mac copies both ways with Oracle every 5 minutes (newest file wins). If Oracle itself is down, devices on Tailscale use https://saves-mac.vlad.yt (the Mac alone). More: https://docs.vlad.yt/gaming/save-sync.md