production image drops build-stage devDependencies
- production stage installs its own dependencies (bun install --production --frozen-lockfile --ignore-scripts --omit=peer) instead of copying node_modules from the build stage, dropping typescript, vitest, depcheck, tsc-alias, and the biome/rolldown/esbuild platform binaries from the runtime image (#9)
- build stage drops the unused python3/make/g++ apt layer — nothing in the tree compiles from source
- --omit=peer added to the production install and the OTel bun add, so the framework's optional peer tiers are not pulled in by default
Runtime image: 900MB -> 558MB.