df5b0563c9
Post-process adapter-node output into a single self-contained build/bundle.mjs (614 KB) via esbuild, then ship it on a fresh alpine:3.21 base with just the node binary copied in. Drops the node_modules + package manager baggage that comes with node:25-alpine. - Add esbuild devDep + `bundle` script (scripts/bundle.mjs) - Dockerfile: drop `deps` stage; final stage is alpine + node binary + bundle + static client assets - Uncompressed image: 177 MB -> 149 MB (-16%) - Verified: /, /healthz, static assets all respond identically; outbound TLS to api.marktvogt.de works via node's built-in CA bundle