build.sh runs npm run build on macOS, so only the host's sharp binary
(darwin-arm64) got traced into the standalone output. The container
runs node:20-alpine (Linux, musl libc), which cannot load that binary
- the server crashed at runtime, causing a 502 even though the docker
build itself succeeded.
npm pack can fetch another platform's prebuilt sharp/libvips tarballs
without an install-time OS check, so build.sh now pulls the
linux-musl x64 and arm64 builds directly into build/node_modules and
drops the now-unused host binary.