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.
- π 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
| Layer | Technology |
|---|---|
| Frontend | React.js |
| Backend | FastAPI (Python) |
| AI / LLM | Groq API (Llama 3.3 70B) |
| Embeddings | HuggingFace Sentence Transformers |
| Vector Store | FAISS |
| Gmail API (OAuth2) |
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
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β 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 β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
- Python 3.10+
- Node.js 16+
- A Gmail account
- Groq API key (free at console.groq.com)
git clone https://github.com/mmanikandan281/Job-agent.git
cd job-agentcd 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-multipartCreate 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- Go to Google Cloud Console
- Create a new project
- Enable Gmail API
- Create OAuth 2.0 credentials (Desktop App)
- Download the JSON file
- Rename it to
credentials.json - Place it inside the
backend/folder
Place your resume PDFs inside backend/resumes/:
backend/resumes/
βββ resume_fullstack.pdf
βββ resume_python.pdf
βββ resume_backend.pdf
βββ resume_general.pdf
cd ../frontend
npm install
npm install axiosStart Backend:
cd backend
venv\Scripts\activate
uvicorn main:app --reloadStart Frontend (new terminal):
cd frontend
npm startOr use the one-click startup bat file (Windows):
# Double click start.bat in the root folder- Open
http://localhost:3000in your browser - Paste a job description or upload a JD PDF
- Click "Analyse JD" β AI extracts HR email, company and role
- View resume match scores β AI ranks your resumes
- Select the best resume (or override AI suggestion)
- Click "Generate Email" β AI writes a tailored email
- Review the email and edit if needed
- Click "Send Email" β email sent with resume attached!
| 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 |
| 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 |
- 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/- Application tracker (log sent emails)
- Email reply detection
- Job board API integration
- Mobile app (Capacitor)
- Cloud deployment
Manikandan M | MCA Student | Software Developer
