Skip to content

mmanikandan281/Job-agent

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

6 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ€– Job Agent β€” AI-Powered Job Application Automation

A personal AI tool that reads job descriptions, matches your best resume, writes tailored emails, and sends them directly from your Gmail β€” all in one click.


✨ Features

  • πŸ“‹ JD Parser β€” Paste text or upload PDF job descriptions
  • 🧠 Smart Resume Matching β€” AI scores and ranks your resumes against the JD
  • βœ‰οΈ AI Email Writer β€” Generates professional, tailored job application emails
  • πŸ“Ž Auto Attachment β€” Automatically attaches the best matched resume
  • πŸ“€ Gmail Integration β€” Sends directly from your Gmail account
  • πŸ“ Resume Manager β€” Upload, view and delete resumes from the UI

UI Output

Job Description Input Step

Job Agent Main Interface - Step-by-step application workflow with progress bar

Resume Matching Step

JD Input Form - Paste job description text or upload PDF

Email Preview Step

Resume Selection - AI-ranked resume matches with scores

Success Confirmation

Email Preview - Review AI-generated application email before sending

Output email

Application Sent - Success confirmation with next steps

Manage Resume Page

alt text

πŸ”§ Tech Stack

Layer Technology
Frontend React.js
Backend FastAPI (Python)
AI / LLM Groq API (Llama 3.3 70B)
Embeddings HuggingFace Sentence Transformers
Vector Store FAISS
Email Gmail API (OAuth2)

πŸ—‚οΈ Project Structure

job-agent/
β”‚
β”œβ”€β”€ backend/
β”‚   β”œβ”€β”€ main.py              # All API routes
β”‚   β”œβ”€β”€ jd_parser.py         # Extract HR email, company, role from JD
β”‚   β”œβ”€β”€ rag.py               # Resume matching with FAISS + Groq scoring
β”‚   β”œβ”€β”€ email_gen.py         # AI email generation using Groq
β”‚   β”œβ”€β”€ gmail_send.py        # Gmail API integration
β”‚   β”œβ”€β”€ requirements.txt     # Python dependencies
β”‚   β”œβ”€β”€ .env                 # API keys and personal details
β”‚   β”œβ”€β”€ credentials.json     # Gmail OAuth credentials
β”‚   β”œβ”€β”€ resumes/             # Your resume PDFs
β”‚   └── vector_store/        # Auto-generated FAISS embeddings
β”‚
└── frontend/
    β”œβ”€β”€ src/
    β”‚   β”œβ”€β”€ App.js
    β”‚   └── components/
    β”‚       β”œβ”€β”€ JDInput.js        # Step 1 - Paste or upload JD
    β”‚       β”œβ”€β”€ ResumeSelector.js # Step 2 - AI resume suggestions
    β”‚       β”œβ”€β”€ EmailPreview.js   # Step 3 - Review and send email
    β”‚       β”œβ”€β”€ Success.js        # Step 4 - Confirmation
    β”‚       └── Resumes.js        # Resume management modal
    └── package.json

πŸ”„ How It Works

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    YOUR APP (React)                 β”‚
β”‚                                                     β”‚
β”‚  Step 1: Paste JD text OR upload JD as PDF          β”‚
β”‚  Step 2: AI shows resume match scores               β”‚
β”‚  Step 3: Review AI-generated email                  β”‚
β”‚  Step 4: One click β†’ Email sent with resume!        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                       β”‚
                       β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                  FASTAPI BACKEND                    β”‚
β”‚                                                     β”‚
β”‚  /parse-jd       β†’ Extract HR email, company, role  β”‚
β”‚  /match-resumes  β†’ Score resumes against JD         β”‚
β”‚  /generate-email β†’ Write tailored email with AI     β”‚
β”‚  /send-email     β†’ Send via Gmail API               β”‚
β”‚  /resumes        β†’ List all uploaded resumes        β”‚
β”‚  /upload-resume  β†’ Upload new resume PDF            β”‚
β”‚  /resume/{name}  β†’ Delete a resume                  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
        β”‚                      β”‚
        β–Ό                      β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  GROQ API    β”‚    β”‚     GMAIL API       β”‚
β”‚              β”‚    β”‚                     β”‚
β”‚ jd_parser    β”‚    β”‚  OAuth2 token saved β”‚
β”‚ rag scoring  β”‚    β”‚  Sends from your    β”‚
β”‚ email writer β”‚    β”‚  Gmail account      β”‚
β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
       β”‚
       β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                   RAG PIPELINE                      β”‚
β”‚                                                     β”‚
β”‚  resume_1.pdf  β†’  chunks  β†’  FAISS embeddings       β”‚
β”‚  resume_2.pdf  β†’  chunks  β†’  FAISS embeddings       β”‚
β”‚  resume_3.pdf  β†’  chunks  β†’  FAISS embeddings       β”‚
β”‚                                                     β”‚
β”‚  JD comes in β†’ Groq AI scores each resume           β”‚
β”‚  Returns ranked list with match percentages         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸš€ Setup & Installation

Prerequisites

  • Python 3.10+
  • Node.js 16+
  • A Gmail account
  • Groq API key (free at console.groq.com)

1. Clone the Repository

git clone https://github.com/mmanikandan281/Job-agent.git
cd job-agent

2. Backend Setup

cd backend
python -m venv venv

# Windows
venv\Scripts\activate

# Mac/Linux
source venv/bin/activate

pip install fastapi uvicorn python-dotenv langchain langchain-google-genai langchain-community faiss-cpu sentence-transformers pypdf google-auth google-auth-oauthlib google-api-python-client groq python-multipart

3. Configure Environment Variables

Create a .env file inside backend/:

GROQ_API_KEY=your_groq_api_key_here

YOUR_NAME=Your Full Name
GMAIL_ADDRESS=your@gmail.com
YOUR_PHONE=+91 XXXXXXXXXX

GITHUB_URL=https://github.com/yourusername
LINKEDIN_URL=https://linkedin.com/in/yourusername
PORTFOLIO_URL=https://yourportfolio.com

4. Gmail API Setup

  1. Go to Google Cloud Console
  2. Create a new project
  3. Enable Gmail API
  4. Create OAuth 2.0 credentials (Desktop App)
  5. Download the JSON file
  6. Rename it to credentials.json
  7. Place it inside the backend/ folder

5. Add Your Resumes

Place your resume PDFs inside backend/resumes/:

backend/resumes/
β”œβ”€β”€ resume_fullstack.pdf
β”œβ”€β”€ resume_python.pdf
β”œβ”€β”€ resume_backend.pdf
└── resume_general.pdf

6. Frontend Setup

cd ../frontend
npm install
npm install axios

7. Run the App

Start Backend:

cd backend
venv\Scripts\activate
uvicorn main:app --reload

Start Frontend (new terminal):

cd frontend
npm start

Or use the one-click startup bat file (Windows):

# Double click start.bat in the root folder

πŸ“± Usage

  1. Open http://localhost:3000 in your browser
  2. Paste a job description or upload a JD PDF
  3. Click "Analyse JD" β€” AI extracts HR email, company and role
  4. View resume match scores β€” AI ranks your resumes
  5. Select the best resume (or override AI suggestion)
  6. Click "Generate Email" β€” AI writes a tailored email
  7. Review the email and edit if needed
  8. Click "Send Email" β€” email sent with resume attached!

πŸ”‘ API Endpoints

Method Endpoint Description
POST /parse-jd Extract details from JD text
POST /parse-jd-pdf Extract details from JD PDF
POST /match-resumes Score resumes against JD
POST /generate-email Generate tailored email
POST /send-email Send email via Gmail
GET /resumes List all resumes
POST /upload-resume Upload new resume PDF
DELETE /resume/{name} Delete a resume

πŸ€– AI Models Used

Task Model Why
JD Parsing llama-3.1-8b-instant Fast, simple extraction
Resume Scoring llama-3.3-70b-versatile Smart understanding needed
Email Writing llama-3.3-70b-versatile Best quality output

⚠️ Important Notes

  • Token Limits β€” Free Groq tier allows ~100K tokens/day (~30 applications)
  • Gmail OAuth β€” First run opens browser for permission, saved after that
  • Resume Storage β€” Resumes stored locally in backend/resumes/
  • Vector Store β€” Auto-generated in backend/vector_store/ on first run

Add these to your .gitignore:

.env
credentials.json
token.pkl
venv/
vector_store/
node_modules/

πŸ›£οΈ Roadmap

  • Application tracker (log sent emails)
  • Email reply detection
  • Job board API integration
  • Mobile app (Capacitor)
  • Cloud deployment

πŸ‘¨β€πŸ’» Built By

Manikandan M | MCA Student | Software Developer

πŸ”— GitHub | LinkedIn | Portfolio

About

Job Agent is a personal AI-powered job application tool that reads job descriptions, matches your best resume, and sends tailored emails directly from your Gmail

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors