# vinayk2603/auto_applicator_agent architecture

> Architecture diagram of the GitHub repository vinayk2603/auto_applicator_agent, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-15). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/vinayk2603/auto_applicator_agent
- Repository: https://github.com/vinayk2603/auto_applicator_agent

## Overview

This repository automates job applications: a user starts a run in the dashboard, the runner fetches filtered job listings, optionally scores them and generates tailored answers with the RAG service, then submits applications through supported ATS forms and records outcomes. The dashboard presents run controls, application history, and analytics. The RAG service also supports resume and Q&A ingestion and summary tailoring. Edges reflect calls or data flows visible in the sampled source; the README is empty, and some subsystem internals were not sampled.

Main entry points: [`main.py`](https://github.com/vinayk2603/auto_applicator_agent/blob/main/main.py) (Job run orchestrator), [`rag_service.py`](https://github.com/vinayk2603/auto_applicator_agent/blob/main/rag_service.py) (RAG API), [`app.py`](https://github.com/vinayk2603/auto_applicator_agent/blob/main/app.py) (Dashboard API), [`scraper_service.py`](https://github.com/vinayk2603/auto_applicator_agent/blob/main/scraper_service.py) (Scraper API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_dashboard["Dashboard"]
  node_web_ui["Dashboard UI<br/>[app.js]"]
  node_dashboard_api["Dashboard API<br/>[app.py]"]
  node_run_control["Run controller<br/>[app.py]"]
end

subgraph group_workflow["Application workflow"]
  node_runner["Job run orchestrator<br/>[main.py]"]
  node_scrape_api["Scraper API<br/>[scraper_service.py]"]
  node_job_search["Job search and filtering<br/>[scraper.py]"]
end

subgraph group_rag["Resume assistance"]
  node_rag_api["RAG API<br/>[rag_service.py]"]
  node_resume_ingest["Resume and Q&amp;A ingestion<br/>[rag_service.py]"]
  node_retrieval["Resume retrieval<br/>[rag_service.py]"]
  node_answer_generation["Scoring and answer generation<br/>[rag_service.py]"]
  node_summary_tailoring["Summary tailoring<br/>[rag_service.py]"]
  node_vector_store[("Vector collections")]
end

subgraph group_apply["Application submission"]
  node_apply_api["Applicator API"]
  node_ats_automation["ATS form automation<br/>[ats_filler.py]"]
end

subgraph group_state["Configuration and records"]
  node_candidate_config["Candidate and search settings<br/>[config.py]"]
  node_application_log[("Application CSV log")]
  node_log_helpers["Application logging<br/>[logger.py]"]
end

node_user(("Job seeker"))
node_job_sources["Job listing sources"]
node_claude["Anthropic Claude"]
node_ats_sites["ATS application sites"]

node_user -->|"uses"| node_web_ui
node_web_ui -->|"requests dashboard data"| node_dashboard_api
node_web_ui -->|"starts or stops"| node_run_control
node_dashboard_api -->|"reads records"| node_application_log
node_dashboard_api -->|"checks service health"| node_scrape_api
node_dashboard_api -->|"checks service health"| node_apply_api
node_run_control -->|"launches run"| node_runner
node_run_control -->|"starts service"| node_scrape_api
node_run_control -->|"starts service"| node_apply_api
node_runner -->|"fetches jobs"| node_scrape_api
node_scrape_api -->|"calls scraper"| node_job_search
node_job_search -->|"reads search settings"| node_candidate_config
node_job_search -->|"scrapes listings"| node_job_sources
node_runner -->|"scores jobs"| node_rag_api
node_runner -->|"requests tailored answers"| node_rag_api
node_rag_api -->|"ingests resume and Q&amp;A"| node_resume_ingest
node_resume_ingest -->|"stores embeddings"| node_vector_store
node_rag_api -->|"queries context"| node_retrieval
node_retrieval -->|"retrieves chunks"| node_vector_store
node_rag_api -->|"handles score and answer requests"| node_answer_generation
node_answer_generation -->|"gets resume context"| node_retrieval
node_answer_generation -->|"requests generated output"| node_claude
node_rag_api -->|"handles summary requests"| node_summary_tailoring
node_summary_tailoring -->|"gets resume context"| node_retrieval
node_summary_tailoring -->|"requests tailored summary"| node_claude
node_runner -->|"submits job application"| node_apply_api
node_apply_api -->|"calls application handler"| node_ats_automation
node_ats_automation -->|"reads applicant details"| node_candidate_config
node_ats_automation -->|"fills and submits forms"| node_ats_sites
node_runner -->|"records outcome"| node_log_helpers
node_log_helpers -->|"appends application row"| node_application_log

click node_web_ui "https://github.com/vinayk2603/auto_applicator_agent/blob/main/frontend/app.js"
click node_dashboard_api "https://github.com/vinayk2603/auto_applicator_agent/blob/main/app.py"
click node_run_control "https://github.com/vinayk2603/auto_applicator_agent/blob/main/app.py"
click node_runner "https://github.com/vinayk2603/auto_applicator_agent/blob/main/main.py"
click node_scrape_api "https://github.com/vinayk2603/auto_applicator_agent/blob/main/scraper_service.py"
click node_job_search "https://github.com/vinayk2603/auto_applicator_agent/blob/main/src/scraper.py"
click node_rag_api "https://github.com/vinayk2603/auto_applicator_agent/blob/main/rag_service.py"
click node_resume_ingest "https://github.com/vinayk2603/auto_applicator_agent/blob/main/rag_service.py"
click node_retrieval "https://github.com/vinayk2603/auto_applicator_agent/blob/main/rag_service.py"
click node_answer_generation "https://github.com/vinayk2603/auto_applicator_agent/blob/main/rag_service.py"
click node_summary_tailoring "https://github.com/vinayk2603/auto_applicator_agent/blob/main/rag_service.py"
click node_vector_store "https://github.com/vinayk2603/auto_applicator_agent/tree/main/chroma_db"
click node_apply_api "https://github.com/vinayk2603/auto_applicator_agent/blob/main/applicator_service.py"
click node_ats_automation "https://github.com/vinayk2603/auto_applicator_agent/blob/main/src/ats_filler.py"
click node_candidate_config "https://github.com/vinayk2603/auto_applicator_agent/blob/main/src/config.py"
click node_application_log "https://github.com/vinayk2603/auto_applicator_agent/blob/main/applications_log.csv"
click node_log_helpers "https://github.com/vinayk2603/auto_applicator_agent/blob/main/src/logger.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_web_ui,node_dashboard_api,node_run_control toneBlue
class node_runner,node_scrape_api,node_job_search toneAmber
class node_rag_api,node_resume_ingest,node_retrieval,node_answer_generation,node_summary_tailoring,node_vector_store toneMint
class node_apply_api,node_ats_automation toneRose
class node_candidate_config,node_application_log,node_log_helpers,node_user,node_job_sources,node_claude,node_ats_sites toneIndigo
```

## Components

### Dashboard

- [Dashboard UI](https://github.com/vinayk2603/auto_applicator_agent/blob/main/frontend/app.js): `frontend/app.js`
- [Dashboard API](https://github.com/vinayk2603/auto_applicator_agent/blob/main/app.py): `app.py`
- [Run controller](https://github.com/vinayk2603/auto_applicator_agent/blob/main/app.py): `app.py`

### Application workflow

- [Job run orchestrator](https://github.com/vinayk2603/auto_applicator_agent/blob/main/main.py): `main.py`
- [Scraper API](https://github.com/vinayk2603/auto_applicator_agent/blob/main/scraper_service.py): `scraper_service.py`
- [Job search and filtering](https://github.com/vinayk2603/auto_applicator_agent/blob/main/src/scraper.py): `src/scraper.py`

### Resume assistance

- [RAG API](https://github.com/vinayk2603/auto_applicator_agent/blob/main/rag_service.py): `rag_service.py`
- [Resume and Q&A ingestion](https://github.com/vinayk2603/auto_applicator_agent/blob/main/rag_service.py): `rag_service.py`
- [Resume retrieval](https://github.com/vinayk2603/auto_applicator_agent/blob/main/rag_service.py): `rag_service.py`
- [Scoring and answer generation](https://github.com/vinayk2603/auto_applicator_agent/blob/main/rag_service.py): `rag_service.py`
- [Summary tailoring](https://github.com/vinayk2603/auto_applicator_agent/blob/main/rag_service.py): `rag_service.py`
- [Vector collections](https://github.com/vinayk2603/auto_applicator_agent/tree/main/chroma_db): `chroma_db`

### Application submission

- [Applicator API](https://github.com/vinayk2603/auto_applicator_agent/blob/main/applicator_service.py): `applicator_service.py`
- [ATS form automation](https://github.com/vinayk2603/auto_applicator_agent/blob/main/src/ats_filler.py): `src/ats_filler.py`

### Configuration and records

- [Candidate and search settings](https://github.com/vinayk2603/auto_applicator_agent/blob/main/src/config.py): `src/config.py`
- [Application CSV log](https://github.com/vinayk2603/auto_applicator_agent/blob/main/applications_log.csv): `applications_log.csv`
- [Application logging](https://github.com/vinayk2603/auto_applicator_agent/blob/main/src/logger.py): `src/logger.py`

### Other components

- **Job seeker**
- **Job listing sources**
- **Anthropic Claude**
- **ATS application sites**

## Connections

- Job seeker → Dashboard UI: uses (evidence: `frontend/app.js`)
- Dashboard UI → Dashboard API: requests dashboard data (evidence: `frontend/app.js`)
- Dashboard UI → Run controller: starts or stops (evidence: `frontend/app.js`)
- Dashboard API → Application CSV log: reads records (evidence: `app.py`)
- Dashboard API → Scraper API: checks service health (evidence: `app.py`)
- Dashboard API → Applicator API: checks service health (evidence: `app.py`)
- Run controller → Job run orchestrator: launches run (evidence: `app.py`)
- Run controller → Scraper API: starts service (evidence: `app.py`)
- Run controller → Applicator API: starts service (evidence: `app.py`)
- Job run orchestrator → Scraper API: fetches jobs (evidence: `main.py`)
- Scraper API → Job search and filtering: calls scraper (evidence: `scraper_service.py`)
- Job search and filtering → Candidate and search settings: reads search settings (evidence: `src/scraper.py`)
- Job search and filtering → Job listing sources: scrapes listings (evidence: `src/scraper.py`)
- Job run orchestrator → RAG API: scores jobs (evidence: `main.py`)
- Job run orchestrator → RAG API: requests tailored answers (evidence: `main.py`)
- RAG API → Resume and Q&A ingestion: ingests resume and Q&A (evidence: `rag_service.py`)
- Resume and Q&A ingestion → Vector collections: stores embeddings (evidence: `rag_service.py`)
- RAG API → Resume retrieval: queries context (evidence: `rag_service.py`)
- Resume retrieval → Vector collections: retrieves chunks (evidence: `rag_service.py`)
- RAG API → Scoring and answer generation: handles score and answer requests (evidence: `rag_service.py`)
- Scoring and answer generation → Resume retrieval: gets resume context (evidence: `rag_service.py`)
- Scoring and answer generation → Anthropic Claude: requests generated output (evidence: `rag_service.py`)
- RAG API → Summary tailoring: handles summary requests (evidence: `rag_service.py`)
- Summary tailoring → Resume retrieval: gets resume context (evidence: `rag_service.py`)
- Summary tailoring → Anthropic Claude: requests tailored summary (evidence: `rag_service.py`)
- Job run orchestrator → Applicator API: submits job application (evidence: `main.py`)
- Applicator API → ATS form automation: calls application handler (evidence: `applicator_service.py`)
- ATS form automation → Candidate and search settings: reads applicant details (evidence: `src/ats_filler.py`)
- ATS form automation → ATS application sites: fills and submits forms (evidence: `src/ats_filler.py`)
- Job run orchestrator → Application logging: records outcome (evidence: `main.py`)
- Application logging → Application CSV log: appends application row (evidence: `src/logger.py`)
