# Bundled client assets Holds the Android APK (`minstrel.apk` + `minstrel.apk.version`) that the server serves via `/api/client/version` and `/api/client/apk` for the in-app update flow (#397). ## Production CI populates this directory on tag releases: 1. `flutter.yml` builds `app-release.apk` and attaches it to the Gitea release as `minstrel-.apk`. 2. `release.yml` waits for that asset to appear, downloads it into this directory as `minstrel.apk`, writes the tag string to `minstrel.apk.version`, and `docker buildx build` includes both via `COPY client/ /app/client/`. ## Development Empty directory works fine — the endpoints return 404 and the Flutter update banner stays hidden ("no update channel" graceful degradation). To smoke-test the update flow locally, drop a real APK + a version file into this directory: ```sh cp /path/to/app-release.apk client/minstrel.apk echo "v0.2.0" > client/minstrel.apk.version ``` ## Why a directory and not embed.FS? The APK is 30-60 MB. Embedding bloats the Go binary and slows `go build` for everyone, even when the APK isn't being changed. File-on-disk also lets operators override at runtime via volume mount on `/app/client/` if they want to ship their own build.