Skip to content

Commit 8d830dc

Browse files
authored
Update README.md
1 parent 26f15fc commit 8d830dc

File tree

1 file changed

+125
-159
lines changed

1 file changed

+125
-159
lines changed

β€ŽREADME.mdβ€Ž

Lines changed: 125 additions & 159 deletions
Original file line numberDiff line numberDiff line change
@@ -1,83 +1,67 @@
1-
JobMatch AI – AI-Powered Job Tracker with Smart Matching
1+
# JobMatch AI – AI-Powered Job Tracker with Smart Matching
22

33
This project was built as part of an internship assignment and demonstrates end-to-end full-stack development, clean UI/UX design, and practical AI integration.
44

5-
An intelligent job tracking system that fetches jobs from external APIs, matches them with a user’s resume using AI, provides smart application tracking, and includes a conversational AI assistant to help users navigate their job search efficiently.
5+
An intelligent job tracking system that fetches jobs from external APIs, matches them with a user's resume using AI, provides smart application tracking, and includes a conversational AI assistant to help users navigate their job search efficiently.
66

7-
πŸ”— Live Demo
7+
---
88

9-
Frontend: https://smart-job-tracker-ochre.vercel.app
9+
## πŸ”— Live Demo
1010

11-
Backend API: https://smart-job-tracker-backend-r5wd.onrender.com
11+
- **Frontend**: https://smart-job-tracker-ochre.vercel.app
12+
- **Backend API**: https://smart-job-tracker-backend-r5wd.onrender.com
13+
- **GitHub Repository**: https://github.com/Sarfarazsfz/smart-job-tracker
1214

13-
GitHub Repository: https://github.com/Sarfarazsfz/smart-job-tracker
15+
**Demo Note**: Upload a resume to enable AI-based job matching and personalized match scores.
1416

15-
Demo Note: Upload a resume to enable AI-based job matching and personalized match scores.
17+
---
1618

17-
✨ Key Features
18-
Core Functionality
19+
## ✨ Key Features
1920

20-
Job feed powered by an external job API (India-focused listings)
21+
### Core Functionality
22+
- Job feed powered by an external job API (India-focused listings)
23+
- Resume upload (PDF/TXT) with automatic text extraction
24+
- AI-based job–resume matching with percentage scores
25+
- **Best Matches for You** section highlighting top matches
26+
- Smart application tracking with confirmation popup
27+
- Conversational AI assistant for job discovery and guidance
28+
- Fully responsive UI (mobile, tablet, desktop)
2129

22-
Resume upload (PDF/TXT) with automatic text extraction
30+
### Filters (Assignment Requirement)
31+
- **Role / Job Title** search
32+
- **Skills** (multi-select: React, Node.js, Python, etc.)
33+
- **Date Posted** (Last 24 hours, Last week, Last month, Any time)
34+
- **Job Type** (Full-time, Part-time, Contract, Internship)
35+
- **Work Mode** (Remote, Hybrid, On-site)
36+
- **Location** (City / Region)
37+
- **Match Score** (High >70%, Medium 40–70%, All)
2338

24-
AI-based job–resume matching with percentage scores
39+
---
2540

26-
Best Matches for You section highlighting top matches
27-
28-
Smart application tracking with confirmation popup
29-
30-
Conversational AI assistant for job discovery and guidance
31-
32-
Fully responsive UI (mobile, tablet, desktop)
33-
34-
Filters (Assignment Requirement)
35-
36-
Role / Job Title search
37-
38-
Skills (multi-select: React, Node.js, Python, etc.)
39-
40-
Date Posted (Last 24 hours, Last week, Last month, Any time)
41-
42-
Job Type (Full-time, Part-time, Contract, Internship)
43-
44-
Work Mode (Remote, Hybrid, On-site)
45-
46-
Location (City / Region)
47-
48-
Match Score (High >70%, Medium 40–70%, All)
49-
50-
πŸ—οΈ Project Architecture
41+
## πŸ—οΈ Project Architecture
5142

5243
The application follows a clean three-tier architecture:
5344

54-
1. Presentation Layer (Frontend)
55-
56-
React + Vite
57-
58-
Client-side filtering and ranking for instant UX
59-
60-
State managed with React hooks
45+
### 1. Presentation Layer (Frontend)
46+
- React + Vite
47+
- Client-side filtering and ranking for instant UX
48+
- State managed with React hooks
49+
- Dark-mode focused, professional UI
6150

62-
Dark-mode focused, professional UI
51+
### 2. Application Layer (Backend)
52+
- Node.js + Fastify
53+
- REST APIs
54+
- Job fetching, resume processing, AI orchestration
55+
- Cache-first design for performance
6356

64-
2. Application Layer (Backend)
57+
### 3. Data & External Services
58+
- Adzuna API for job listings
59+
- Google Gemini for AI matching (with fallback logic)
60+
- Upstash Redis (or in-memory fallback) for caching
6561

66-
Node.js + Fastify REST APIs
62+
### Architecture Diagram
6763

68-
Job fetching, resume processing, AI orchestration
69-
70-
Cache-first design for performance
71-
72-
3. Data & External Services
73-
74-
Adzuna API for job listings
75-
76-
Google Gemini for AI matching (with fallback logic)
77-
78-
Upstash Redis (or in-memory fallback) for caching
79-
80-
Architecture Diagram
64+
```mermaid
8165
graph TB
8266
subgraph Frontend
8367
UI[Job Feed]
@@ -86,140 +70,123 @@ graph TB
8670
Chat[AI Assistant]
8771
Tracker[Application Tracker]
8872
end
89-
73+
9074
subgraph Backend
9175
API[Fastify API]
9276
JobService[Job Service]
9377
AIService[AI Matching]
9478
ResumeService[Resume Service]
9579
end
96-
80+
9781
subgraph External
9882
JobAPI[Adzuna API]
9983
AI[Google Gemini]
10084
Cache[(Redis / Memory)]
10185
end
102-
86+
10387
UI --> API
10488
Filters --> API
10589
Resume --> API
10690
Chat --> API
10791
Tracker --> API
108-
92+
10993
API --> JobService
11094
API --> AIService
11195
API --> ResumeService
112-
96+
11397
JobService --> JobAPI
11498
JobService --> Cache
11599
AIService --> AI
100+
```
116101

117-
πŸ€– AI Matching Logic
118-
Overview
119-
120-
The system calculates a job–resume match score (0–100%) using a weighted approach:
121-
122-
Skill Match: 45%
102+
---
123103

124-
Experience Level: 30%
104+
## πŸ€– AI Matching Logic
125105

126-
Title Relevance: 25%
127-
128-
How It Works
129-
130-
Extract skills and keywords from resume and job description
131-
132-
Calculate skill overlap
133-
134-
Detect experience level alignment
135-
136-
Match job title relevance
137-
138-
Combine weighted scores into a final percentage
139-
140-
Match Categories
141-
142-
High (70–100%) – Strong match
143-
144-
Medium (40–69%) – Moderate match
145-
146-
Low (<40%) – Weak match
106+
### Overview
107+
The system calculates a job–resume match score (0–100%) using a weighted approach:
108+
- **Skill Match**: 45%
109+
- **Experience Level**: 30%
110+
- **Title Relevance**: 25%
111+
112+
### How It Works
113+
1. Extract skills and keywords from resume and job description
114+
2. Calculate skill overlap
115+
3. Detect experience level alignment
116+
4. Match job title relevance
117+
5. Combine weighted scores into a final percentage
118+
119+
### Match Categories
120+
- **High (70–100%)** – Strong match
121+
- **Medium (40–69%)** – Moderate match
122+
- **Low (<40%)** – Weak match
147123

148124
Match scores are calculated once after resume upload and reused across filters.
149125

150-
🎯 Smart Application Popup (Critical Thinking)
126+
---
151127

152-
Problem: Applications happen on external job portals (LinkedIn, company sites).
153-
Constraint: Browser security prevents tracking actions on external websites.
128+
## 🎯 Smart Application Popup (Critical Thinking)
154129

155-
Solution:
156-
When a user returns to the app tab after clicking Apply, a popup asks:
130+
**Problem**: Applications happen on external job portals (LinkedIn, company sites).
157131

158-
Yes, Applied
132+
**Constraint**: Browser security prevents tracking actions on external websites.
159133

160-
Applied Earlier
161-
162-
No, Just Browsing
134+
**Solution**: When a user returns to the app tab after clicking Apply, a popup asks:
135+
- Yes, Applied
136+
- Applied Earlier
137+
- No, Just Browsing
163138

164139
This approach ensures accurate application tracking without violating user privacy.
165140

166-
⚑ Caching & Performance
167-
168-
Jobs fetched in batches of 50
169-
170-
Cache-first strategy with 1-hour TTL
141+
---
171142

172-
Jobs fetched only when cache expires
143+
## ⚑ Caching & Performance
173144

174-
Filters and search applied client-side
145+
- Jobs fetched in batches of 50
146+
- Cache-first strategy with 1-hour TTL
147+
- Jobs fetched only when cache expires
148+
- Filters and search applied client-side
149+
- Reduces API usage while keeping listings fresh
175150

176-
Reduces API usage while keeping listings fresh
151+
---
177152

178-
πŸ“ˆ Scalability Considerations
153+
## πŸ“ˆ Scalability Considerations
179154

180-
Handles 100 jobs efficiently using parallel processing
155+
- Handles 100 jobs efficiently using parallel processing
156+
- Architecture supports scaling to 10,000 users
157+
- Stateless backend design
158+
- Redis used for fast access and caching
159+
- Clear migration path to PostgreSQL + background job queues
181160

182-
Architecture supports scaling to 10,000 users
161+
---
183162

184-
Stateless backend design
163+
## βš–οΈ Tradeoffs & Limitations
185164

186-
Redis used for fast access and caching
165+
### Current Limitations
166+
- No authentication (single-user demo model)
167+
- Redis / in-memory storage (not a permanent database)
168+
- AI scoring latency depends on external APIs
169+
- Single job data source
187170

188-
Clear migration path to PostgreSQL + background job queues
171+
### Future Improvements
172+
- User authentication (OAuth)
173+
- Persistent database (PostgreSQL)
174+
- Background job queue for AI scoring
175+
- Multi-source job aggregation
176+
- Email alerts and saved searches
189177

190-
βš–οΈ Tradeoffs & Limitations
191-
Current Limitations
178+
---
192179

193-
No authentication (single-user demo model)
180+
## πŸ› οΈ Setup Instructions
194181

195-
Redis / in-memory storage (not a permanent database)
182+
### Prerequisites
183+
- Node.js 18+
184+
- npm or yarn
185+
- Optional API keys (Adzuna, Gemini, Redis)
196186

197-
AI scoring latency depends on external APIs
187+
### Run Locally
198188

199-
Single job data source
200-
201-
Future Improvements
202-
203-
User authentication (OAuth)
204-
205-
Persistent database (PostgreSQL)
206-
207-
Background job queue for AI scoring
208-
209-
Multi-source job aggregation
210-
211-
Email alerts and saved searches
212-
213-
πŸ› οΈ Setup Instructions
214-
Prerequisites
215-
216-
Node.js 18+
217-
218-
npm or yarn
219-
220-
Optional API keys (Adzuna, Gemini, Redis)
221-
222-
Run Locally
189+
```bash
223190
git clone https://github.com/Sarfarazsfz/smart-job-tracker.git
224191
cd smart-job-tracker
225192

@@ -233,28 +200,27 @@ npm run dev
233200
cd ../frontend
234201
npm install
235202
npm run dev
203+
```
236204

205+
**Open**: http://localhost:5173
237206

238-
Open: http://localhost:5173
207+
---
239208

240-
πŸ“š Documentation
209+
## πŸ“š Documentation
241210

242-
Detailed references are available in the /docs folder:
211+
Detailed references are available in the `/docs` folder:
212+
- **API.md** – API endpoints and request/response details
213+
- **DEPLOYMENT.md** – Production deployment steps
243214

244-
API.md – API endpoints and request/response details
215+
---
245216

246-
DEPLOYMENT.md – Production deployment steps
247-
248-
πŸ“ License
217+
## πŸ“ License
249218

250219
MIT License
251220

252-
πŸ“§ Contact
253-
254-
GitHub: https://github.com/Sarfarazsfz
255-
256-
LinkedIn: https://www.linkedin.com/in/faraz4237/
221+
---
257222

258-
GitHub: https://github.com/Sarfarazsfz
223+
## πŸ“§ Contact
259224

260-
LinkedIn: https://www.linkedin.com/in/sarfaraz-alam/
225+
- **GitHub**: https://github.com/Sarfarazsfz
226+
- **LinkedIn**: https://www.linkedin.com/in/faraz4237/

0 commit comments

Comments
Β (0)