# Docker's ignore-pattern matching is NOT recursive-by-default the way
# .gitignore's is - a bare `node_modules/` only matches a top-level
# directory of that name, not apps/web/node_modules. Every pattern below
# is prefixed with **/ so it matches at any depth (confirmed by testing:
# without **/, `apps/web/node_modules` alone still uploaded ~600MB of
# build context that was never actually needed by any Dockerfile).

**/.git/
**/.env
**/.env.local
**/*.pem
**/*.key

**/__pycache__/
**/*.py[cod]
**/*.egg-info/
**/.venv/
**/venv/
**/.pytest_cache/
**/.ruff_cache/
**/.mypy_cache/
**/htmlcov/
**/.coverage
**/*.db
**/*.sqlite3

**/node_modules/
**/.next/
**/out/
**/dist/
**/build/
**/.turbo/
**/coverage/
**/*.tsbuildinfo
**/.eslintcache

**/test-results/
**/playwright-report/
**/playwright/.cache/

**/.claude/
**/.vscode/
**/.idea/
**/*.log
**/logs/
