# adityamittha/auto-apply architecture

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

- Interactive diagram: https://gitdiagram.com/adityamittha/auto-apply
- Repository: https://github.com/adityamittha/auto-apply

## Overview

This repository automates a job-search lifecycle: find and filter roles, tailor application materials, submit applications, then track outcomes and contact recruiters. The documented six-portal runner coordinates portal-specific automation; sampled handlers show shared analysis, AI assistance, and application records. Separate scheduled capabilities refresh a Naukri profile, verify status, send outreach and daily reports, sync files to S3, and expose a dashboard. Some coordinator, tracker, mailer, and server wiring is documented but not sampled, so uncertain internal call edges are omitted.

Main entry points: [`apply-all.js`](https://github.com/adityamittha/auto-apply/blob/main/apply-all.js) (Portal Coordinator), [`naukri-auto-apply.js`](https://github.com/adityamittha/auto-apply/blob/main/naukri-auto-apply.js) (Naukri Applications), [`linkedin-apply.js`](https://github.com/adityamittha/auto-apply/blob/main/linkedin-apply.js) (LinkedIn Applications), [`internshala-apply.js`](https://github.com/adityamittha/auto-apply/blob/main/internshala-apply.js) (Internshala Applications)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_application["Job Applications"]
  node_apply_all["Portal Coordinator<br/>[apply-all.js]"]
  node_naukri_apply["Naukri Applications"]
  node_linkedin_apply["LinkedIn Applications<br/>[linkedin-apply.js]"]
  node_internshala_apply["Internshala Applications"]
  node_indeed_apply["Indeed Applications<br/>[indeed-apply.js]"]
  node_other_apply["Other Portal Applications<br/>[apply-all.js]"]
  node_career_engine["Career Portal Engine"]
end

subgraph group_tailoring["Resume Tailoring"]
  node_tailor_engine["Job Analysis<br/>[tailor-engine.js]"]
  node_gemini_module["Gemini AI<br/>[gemini-ai.js]"]
  node_resume_compiler["Resume Compiler<br/>[resume-compiler.js]"]
  node_resume_templates["Resume Templates"]
end

subgraph group_followup["Tracking And Outreach"]
  node_applied_db[("Application Records<br/>[applied-jobs.json]")]
  node_status_tracker["Status Tracker<br/>[status-tracker.js]"]
  node_verifier["Application Verifier"]
  node_profile_refresh["Naukri Profile Refresh"]
  node_cold_mailer["Recruiter Outreach<br/>[cold-mailer.js]"]
  node_daily_mailer["Daily Digest<br/>[mailer.js]"]
end

subgraph group_operations["Dashboard And Storage"]
  node_dashboard_server["Dashboard API"]
  node_dashboard_ui["Dashboard UI<br/>[dashboard.js]"]
  node_s3_storage["S3 Storage Module<br/>[s3-storage.js]"]
end

node_scheduler(("Scheduled Runs"))
node_job_portals{{"Job Portals"}}
node_gemini_service{{"Gemini API"}}
node_smtp{{"Email Service"}}
node_amazon_s3[("Amazon S3")]
node_candidate(("Job Seeker"))

node_scheduler -->|"triggers"| node_apply_all
node_scheduler -->|"triggers"| node_status_tracker
node_scheduler -->|"triggers"| node_cold_mailer
node_scheduler -->|"triggers"| node_daily_mailer
node_scheduler -->|"triggers"| node_profile_refresh
node_apply_all -->|"dispatches"| node_naukri_apply
node_apply_all -->|"dispatches"| node_linkedin_apply
node_apply_all -->|"dispatches"| node_internshala_apply
node_apply_all -->|"dispatches"| node_indeed_apply
node_apply_all -->|"dispatches"| node_other_apply
node_naukri_apply -->|"searches and applies"| node_job_portals
node_linkedin_apply -->|"searches and applies"| node_job_portals
node_internshala_apply -->|"searches and applies"| node_job_portals
node_indeed_apply -->|"searches and applies"| node_job_portals
node_naukri_apply -->|"analyzes roles"| node_tailor_engine
node_linkedin_apply -->|"analyzes roles"| node_tailor_engine
node_internshala_apply -->|"analyzes roles"| node_tailor_engine
node_indeed_apply -->|"analyzes roles"| node_tailor_engine
node_tailor_engine -.->|"requests AI analysis"| node_gemini_module
node_gemini_module -->|"calls"| node_gemini_service
node_naukri_apply -->|"compiles resume"| node_resume_compiler
node_linkedin_apply -->|"compiles resume"| node_resume_compiler
node_internshala_apply -->|"compiles resume"| node_resume_compiler
node_indeed_apply -->|"compiles resume"| node_resume_compiler
node_resume_compiler -->|"uses templates"| node_resume_templates
node_naukri_apply -->|"records applications"| node_applied_db
node_linkedin_apply -->|"records applications"| node_applied_db
node_internshala_apply -->|"records applications"| node_applied_db
node_indeed_apply -->|"records applications"| node_applied_db
node_status_tracker -->|"checks status"| node_job_portals
node_verifier -->|"verifies submissions"| node_job_portals
node_candidate -->|"views and acts"| node_dashboard_ui
node_dashboard_ui -->|"requests data"| node_dashboard_server
node_dashboard_ui -->|"sends outreach action"| node_dashboard_server
node_dashboard_server -->|"serves records"| node_applied_db
node_cold_mailer -->|"sends outreach"| node_smtp
node_daily_mailer -->|"sends digest"| node_smtp
node_s3_storage -->|"uploads and signs links"| node_amazon_s3
node_daily_mailer -->|"gets resume links"| node_s3_storage
node_candidate -->|"maintains profile"| node_job_portals
node_profile_refresh -->|"refreshes profile"| node_job_portals

click node_apply_all "https://github.com/adityamittha/auto-apply/blob/main/apply-all.js"
click node_naukri_apply "https://github.com/adityamittha/auto-apply/blob/main/naukri-auto-apply.js"
click node_linkedin_apply "https://github.com/adityamittha/auto-apply/blob/main/linkedin-apply.js"
click node_internshala_apply "https://github.com/adityamittha/auto-apply/blob/main/internshala-apply.js"
click node_indeed_apply "https://github.com/adityamittha/auto-apply/blob/main/indeed-apply.js"
click node_other_apply "https://github.com/adityamittha/auto-apply/blob/main/apply-all.js"
click node_career_engine "https://github.com/adityamittha/auto-apply/blob/main/career-page-engine.js"
click node_tailor_engine "https://github.com/adityamittha/auto-apply/blob/main/tailor-engine.js"
click node_gemini_module "https://github.com/adityamittha/auto-apply/blob/main/gemini-ai.js"
click node_resume_compiler "https://github.com/adityamittha/auto-apply/blob/main/resume-compiler.js"
click node_resume_templates "https://github.com/adityamittha/auto-apply/tree/main/resume"
click node_applied_db "https://github.com/adityamittha/auto-apply/blob/main/applied-jobs.json"
click node_status_tracker "https://github.com/adityamittha/auto-apply/blob/main/status-tracker.js"
click node_verifier "https://github.com/adityamittha/auto-apply/blob/main/verify-applied-jobs.js"
click node_profile_refresh "https://github.com/adityamittha/auto-apply/blob/main/naukri-profile-refresh.js"
click node_cold_mailer "https://github.com/adityamittha/auto-apply/blob/main/cold-mailer.js"
click node_daily_mailer "https://github.com/adityamittha/auto-apply/blob/main/mailer.js"
click node_dashboard_server "https://github.com/adityamittha/auto-apply/blob/main/dashboard-server.js"
click node_dashboard_ui "https://github.com/adityamittha/auto-apply/blob/main/public/js/dashboard.js"
click node_s3_storage "https://github.com/adityamittha/auto-apply/blob/main/s3-storage.js"

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_apply_all,node_naukri_apply,node_linkedin_apply,node_internshala_apply,node_indeed_apply,node_other_apply,node_career_engine toneBlue
class node_tailor_engine,node_gemini_module,node_resume_compiler,node_resume_templates,node_amazon_s3 toneAmber
class node_applied_db,node_status_tracker,node_verifier,node_profile_refresh,node_cold_mailer,node_daily_mailer,node_gemini_service toneMint
class node_dashboard_server,node_dashboard_ui,node_s3_storage toneRose
class node_scheduler,node_job_portals,node_smtp,node_candidate toneIndigo
```

## Components

### Job Applications

- [Portal Coordinator](https://github.com/adityamittha/auto-apply/blob/main/apply-all.js): `apply-all.js`
- [Naukri Applications](https://github.com/adityamittha/auto-apply/blob/main/naukri-auto-apply.js): `naukri-auto-apply.js`
- [LinkedIn Applications](https://github.com/adityamittha/auto-apply/blob/main/linkedin-apply.js): `linkedin-apply.js`
- [Internshala Applications](https://github.com/adityamittha/auto-apply/blob/main/internshala-apply.js): `internshala-apply.js`
- [Indeed Applications](https://github.com/adityamittha/auto-apply/blob/main/indeed-apply.js): `indeed-apply.js`
- [Other Portal Applications](https://github.com/adityamittha/auto-apply/blob/main/apply-all.js): `apply-all.js`
- [Career Portal Engine](https://github.com/adityamittha/auto-apply/blob/main/career-page-engine.js): `career-page-engine.js`

### Resume Tailoring

- [Job Analysis](https://github.com/adityamittha/auto-apply/blob/main/tailor-engine.js): `tailor-engine.js`
- [Gemini AI](https://github.com/adityamittha/auto-apply/blob/main/gemini-ai.js): `gemini-ai.js`
- [Resume Compiler](https://github.com/adityamittha/auto-apply/blob/main/resume-compiler.js): `resume-compiler.js`
- [Resume Templates](https://github.com/adityamittha/auto-apply/tree/main/resume): `resume`

### Tracking And Outreach

- [Application Records](https://github.com/adityamittha/auto-apply/blob/main/applied-jobs.json): `applied-jobs.json`
- [Status Tracker](https://github.com/adityamittha/auto-apply/blob/main/status-tracker.js): `status-tracker.js`
- [Application Verifier](https://github.com/adityamittha/auto-apply/blob/main/verify-applied-jobs.js): `verify-applied-jobs.js`
- [Naukri Profile Refresh](https://github.com/adityamittha/auto-apply/blob/main/naukri-profile-refresh.js): `naukri-profile-refresh.js`
- [Recruiter Outreach](https://github.com/adityamittha/auto-apply/blob/main/cold-mailer.js): `cold-mailer.js`
- [Daily Digest](https://github.com/adityamittha/auto-apply/blob/main/mailer.js): `mailer.js`

### Dashboard And Storage

- [Dashboard API](https://github.com/adityamittha/auto-apply/blob/main/dashboard-server.js): `dashboard-server.js`
- [Dashboard UI](https://github.com/adityamittha/auto-apply/blob/main/public/js/dashboard.js): `public/js/dashboard.js`
- [S3 Storage Module](https://github.com/adityamittha/auto-apply/blob/main/s3-storage.js): `s3-storage.js`

### Other components

- **Scheduled Runs**
- **Job Portals**
- **Gemini API**
- **Email Service**
- **Amazon S3**
- **Job Seeker**

## Connections

- Scheduled Runs → Portal Coordinator: triggers
- Scheduled Runs → Status Tracker: triggers
- Scheduled Runs → Recruiter Outreach: triggers
- Scheduled Runs → Daily Digest: triggers
- Scheduled Runs → Naukri Profile Refresh: triggers
- Portal Coordinator → Naukri Applications: dispatches
- Portal Coordinator → LinkedIn Applications: dispatches
- Portal Coordinator → Internshala Applications: dispatches
- Portal Coordinator → Indeed Applications: dispatches
- Portal Coordinator → Other Portal Applications: dispatches
- Naukri Applications → Job Portals: searches and applies
- LinkedIn Applications → Job Portals: searches and applies
- Internshala Applications → Job Portals: searches and applies
- Indeed Applications → Job Portals: searches and applies
- Naukri Applications → Job Analysis: analyzes roles
- LinkedIn Applications → Job Analysis: analyzes roles
- Internshala Applications → Job Analysis: analyzes roles
- Indeed Applications → Job Analysis: analyzes roles
- Job Analysis → Gemini AI: requests AI analysis
- Gemini AI → Gemini API: calls
- Naukri Applications → Resume Compiler: compiles resume
- LinkedIn Applications → Resume Compiler: compiles resume
- Internshala Applications → Resume Compiler: compiles resume
- Indeed Applications → Resume Compiler: compiles resume
- Resume Compiler → Resume Templates: uses templates
- Naukri Applications → Application Records: records applications
- LinkedIn Applications → Application Records: records applications
- Internshala Applications → Application Records: records applications
- Indeed Applications → Application Records: records applications
- Status Tracker → Job Portals: checks status
- Application Verifier → Job Portals: verifies submissions
- Job Seeker → Dashboard UI: views and acts
- Dashboard UI → Dashboard API: requests data
- Dashboard UI → Dashboard API: sends outreach action
- Dashboard API → Application Records: serves records
- Recruiter Outreach → Email Service: sends outreach
- Daily Digest → Email Service: sends digest
- S3 Storage Module → Amazon S3: uploads and signs links
- Daily Digest → S3 Storage Module: gets resume links
- Job Seeker → Job Portals: maintains profile
- Naukri Profile Refresh → Job Portals: refreshes profile
