# Build context for backend/Dockerfile and app/Dockerfile is the repo root, so this # file decides what is even eligible to be copied into those images. .git/ .gitignore .gitignore.local .claude/ .cursor/ .vscode/ .idea/ # Secrets are passed at runtime via compose `env_file` — never baked into a layer. **/.env **/.env.* !**/.env.example backend/credentials/*.json **/__pycache__/ **/*.py[cod] **/*.egg-info/ .venv/ venv/ env/ .mypy_cache/ .pytest_cache/ .ruff_cache/ # Frontend has its own context (./frontend) and its own .dockerignore; nothing of it # belongs in a Python image, and node_modules would dominate the context transfer. frontend/ # Candidate CVs live on the bind mount, not inside an image. backend/inbox/decoded_attachments/ # Ship revision scripts so `DB_AUTO_MIGRATE=true` can `upgrade head` in Docker. # Fileless ORM drift (DB_AUTOGENERATE) still covers leftover model gaps. docs/ tests/ scripts/ tools/ *.md *.log tmp/ temp/ tests/** /backend/tests/** migrations/** */ .DS_Store .AppleDouble .LSOverride Icon ? ._* dist/** dist/**/* # Editor / IDE .idea/ .vscode/ *.swp *.swo *~ **pycache__/ **pycache** # Claude / local AI tooling .claude/ .audit.js # Local macOS launcher (not shared — machine-specific) Start.command start.command # Backups .backup-prebrand/ *.bak *.backup */node_modules/* # Python __pycache__/ *.py[cod] *$py.class *.egg-info/ .venv/ venv/ env/ # Environment / secrets — NEVER commit real .env files .env **/.env .env.* **/.env.* !.env.example !**/.env.example !frontend/.env.development !frontend/.env.production # Postman/Insomnia environments holding real API keys *.postman_environment.local.json # Logs & temp *.log tmp/ temp/ .cache/ # Frontend build node_modules/ frontend/dist/ # Uploaded content — user data, never in git backend/uploads/ # Google OAuth ADC / Desktop client secrets — never commit backend/credentials/*.json **.pdf # Per-machine alembic autogen revisions only — the old bare `**_**_**.py` # also swallowed any module with two underscores (e.g. test_talent_plugins.py). backend/migrations/versions/**_**_**.py Utopia-ai-hr-ats-portal 1.pem # Local-only Compose overrides (never deployed) docker.local.env **/.env** # Paper form source documents (Annexure A/E/J) — reference material, not code. # Root-anchored: backend/candidate_forms/ is the forms domain package and IS tracked. /candidate_forms/ frontend/dist/** */ docker.local.frontend/dist/** */ frontend/dist/index.html frontend/dist/index.html # `tests/**` and `/backend/tests/**` used to sit here. Both test suites are # tracked and both are run by scripts/ci-checks.sh, so the rules were inert for # the files that already existed and did nothing but silently swallow NEW ones: # a test added to either suite never showed up in `git status`, and CI ran a # suite that did not include it. Removed rather than negated, because there is # nothing under either path that should be ignored. frontend/dist/** nginx.conf smoke.test.mjs