Two-stage build (node:22-slim builder + nginxinc/nginx-unprivileged:alpine runtime) with SPA fallback routing, long-lived cache headers for fingerprinted assets, non-root user (UID 101), and no Node.js toolchain in runtime image (82 MB vs 329 MB+ single-stage). Verified by ui/tests/build/verify_production_image.sh covering build, health, SPA routing, non-root, stdout logging, cache-control headers, SIGTERM exit 0, Node.js absent, secret-free layers, and dep-layer cache hit. 102 integration tests still pass; shellcheck clean. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
46 lines
389 B
Plaintext
46 lines
389 B
Plaintext
# Developer notes
|
|
notes/
|
|
|
|
# Environment
|
|
.env
|
|
.env.*
|
|
!.env.example
|
|
!.env.test.example
|
|
|
|
# Python
|
|
__pycache__/
|
|
*.pyc
|
|
*.pyo
|
|
.venv/
|
|
venv/
|
|
*.egg-info/
|
|
dist/
|
|
build/
|
|
!api/tests/build/
|
|
!ui/tests/build/
|
|
.pytest_cache/
|
|
.ruff_cache/
|
|
.coverage
|
|
htmlcov/
|
|
|
|
# Node / Angular
|
|
node_modules/
|
|
dist/
|
|
.angular/
|
|
|
|
# Docker
|
|
*.log
|
|
|
|
# IDE
|
|
.idea/
|
|
.vscode/
|
|
*.swp
|
|
*.swo
|
|
|
|
# OS
|
|
.DS_Store
|
|
Thumbs.db
|
|
|
|
# Claude Code
|
|
.claude/
|