## 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
