Introduce the Kotlin/Compose Android companion app and extend the TMDB
proxy into a combo server that synchronizes the whole library as an
encrypted snapshot, with all three components (Go server, Android,
desktop) sharing one zero-knowledge crypto envelope and JSON schema.
- server: add PostgreSQL-backed /sync/library (GET/PUT) with optimistic
concurrency (revision + 409 on conflict); sync stays disabled unless
DATABASE_URL is set. Add docker-compose with Postgres.
- desktop: add libsodium CryptoEnvelope, LibrarySerializer and SyncClient;
storage-mode and passphrase settings; a "Sync now" toolbar action with
conflict resolution.
- android: Room-backed library with local/cloud storage modes, encrypted
sync client, and settings UI. The proxy server (URL + token) can be
configured as a TMDB proxy even in local-only mode.
Crypto is identical across platforms: Argon2id (libsodium crypto_pwhash,
INTERACTIVE) + XChaCha20-Poly1305 in a versioned "UMTS" envelope, so a
snapshot encrypted on one client decrypts on the other.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The bundling loop ran under set -euo pipefail; once no new /mingw64 deps
remained, grep exited 1 and aborted the script before makensis ran, so no
Setup.exe was produced. Disable strict mode in that subshell and collect
deps before copying. Anchor all installer source paths to the script dir
via ${__FILEDIR__} and switch the File glob to "\*" so extensionless files
and plugin subfolders are included.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
build-linux.sh configures and builds via CMake. build-windows.sh builds
in MSYS2/MINGW64, bundles Qt and transitive MinGW DLLs via windeployqt
plus an ldd pass, and produces an NSIS installer (installer.nsi). Ignore
the dist/ output and generated Setup.exe.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Block saving a new item when one already exists, so no duplicate is
created and existing progress is never overwritten. Matches by provider
id (external_source/external_id) when available, otherwise by media
type, year and title.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>