Self-hosted Docker stack: Supabase + MinIO with a JSONB sharing bug fixed along the way
osama-ata adds a full self-hosted deployment path - docker-compose, Supabase stack, MinIO, multi-stage Dockerfiles - and catches a real correctness bug in the process: shared-project lookups silently return zero rows on any fork that hasn't patched the JSONB query format.
The Docker work covers distroless Chainguard images for MinIO (no curl, so healthchecks use mc ready local instead), condition: service_healthy chains throughout, and a forcePathStyle: true fix to the S3 client so MinIO URLs resolve correctly inside Docker's internal DNS. Kong's CORS allowlist needed expanding with PostgREST-specific headers (Accept-Profile, Content-Profile, Prefer, Range) that are absent from most example configs - their absence causes CORS rejections on PostgREST operations.
The bug worth pulling independently: access.ts and routes/projects.ts were calling .contains("shared_with", [userEmail]) against a JSONB column. PostgREST serializes a raw JS array as a Postgres array literal, which the JSONB cs. operator rejects. The fix is wrapping it in JSON.stringify(). This is a silent correctness failure - the query runs without error but returns no results, so shared projects appear invisible to anyone who doesn't own them.
The Docker scaffolding as a whole (multiple Dockerfiles, Kong config, init SQL, a Claude Code agent file) is a substantial new surface to maintain. It's well-constructed but represents a full parallel deployment path, not a small addition.
Spotted something wrong? Or know the PR text has fresher detail than the writeup above?