# 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-<TAG>.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.
