## 1. Dockerfile - [x] 1.1 Write multi-stage Dockerfile: builder stage (node:18-alpine, npm ci, npm run build) - [x] 1.2 Write production stage: node:18-alpine, npm ci --omit=dev, copy dist/, USER node - [x] 1.3 Set EXPOSE 3000, CMD ["node", "dist/server.js"] ## 2. .dockerignore - [x] 2.1 Write .dockerignore excluding: node_modules, dist, coverage, tests, .env, *.pem, vj_notes, .cto-workspace, .claude, next_steps.md ## 3. QA - [x] 3.1 Verify Dockerfile build stages are correct and complete - [x] 3.2 Verify .dockerignore covers all sensitive/unnecessary files