Monorepo for a two-plane job automation system:
- Main backend (
/backend) for users/resumes/preferences, run orchestration, and callback ingestion. - Cloud automation service (
/cloud_automation) for job discovery, match indexing, and autonomous apply workflows. - Next.js frontend (
/frontend) demo UI.
- Main backend (Render Project A)
- API + system of record (
users,resumes,preferences,job_matches,application_attempts,external_run_refs,webhook_events) - Calls cloud API with signed service JWT
- Receives signed/idempotent apply attempt callbacks
- API + system of record (
- Cloud automation (Render Project B)
- Job discovery adapters + normalized job index
- Async match runs and apply runs
- Callback emitter back to main backend
- Main API
- GraphQL operations are served from
POST /graphql;/adminremains available.
- GraphQL operations are served from
Agent guidance is scoped by AGENTS.md files:
- Repository-wide defaults:
AGENTS.md - Backend-specific rules:
backend/AGENTS.md - Cloud automation-specific rules:
cloud_automation/AGENTS.md - Frontend-specific rules:
frontend/AGENTS.md - Test policy and regression rules:
tests/AGENTS.md
Precedence follows directory specificity: the closest AGENTS.md to the file being changed takes priority, and repository-root rules apply as defaults.
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txtCopy env file:
cp .env.example .envCreate local PostgreSQL databases (one-time):
createdb agent_apply
createdb jobs_inteluvicorn backend.main:app --reload --port 8000Main backend docs: backend/README.md
uvicorn cloud_automation.main:app --reload --port 8100Cloud service docs: cloud_automation/README.md
Match/apply runs are enqueue-only at the API layer and are processed by workers
(match_worker, apply_worker) for single-consumer execution.
Token-first sourcing is also worker-driven:
seed_manifest_workerbuilds canonical JSON/CSV manifests from upstream source pages.discovery_workerconsumes async refresh kicks and periodic discovery cycles.common_crawl_workerperforms daily Method B token extraction.
cd frontend
npm install
npm run devalembic upgrade head.venv/bin/python -m pytest -qThe current refactor is being shipped in compatibility-safe slices.
Non-breaking policy:
- Keep existing HTTP/GraphQL contracts stable unless explicitly documented.
- Keep legacy compatibility endpoints (
/agent/run,/applications) as410 Gone. - Keep
/admingating behavior controlled by env + optional secret.
Slice checkpoints:
- Stability/security hardening (
/v1/agent/runasync polling, atomic callback idempotency). - Service module boundaries with compatibility shims.
- Cloud HTTP client lifecycle + callback retry/backoff + worker concurrency controls.
- UTC default cleanup + index additions + runtime cloud index ensure.
- Frontend GraphQL/frontend modularization without schema/operation breakage.
- Dependency upgrade sweep with full regression validation.
- Token-first discovery now uses:
- Seed manifest builder (
SEED_SOURCE_PAGE_URLS-> internal JSON/CSV manifests) - Method A strict-robots crawler seeded by
SEED_MANIFEST_URLS - Method B Common Crawl token extraction
- validated ATS feed ingestion for Greenhouse/Lever/SmartRecruiters
- Seed manifest builder (
- Cloud apply service includes autonomous run lifecycle, attempt statuses, signed callback wiring, and optional Playwright/LLM-driven form answering via env flags.
- For production scraping and auto-submit usage, add legal/compliance review and provider-specific hardening.