A smart job matching system for software engineers, data scientists, and DevOps folks. Enter your skills and preferences, get personalized job recommendations with clear explanations of why each job fits you.
| Component | URL |
|---|---|
| Frontend (Dashboard) | jobmatch-tech.streamlit.app |
| Backend (API) | jobmatch-production-0420.up.railway.app |
| API Docs | jobmatch-production-0420.up.railway.app/docs |
- Matches your skills against 2,600+ real tech jobs from LinkedIn
- Shows you exactly why each job is a good (or not so good) fit
- Lets you adjust what matters most: skills, salary, remote work, experience level
- Gives you skill gap analysis so you know what to learn next
- Frontend: Streamlit, Plotly
- Backend: FastAPI, SQLite
- ML: Sentence-Transformers, Qdrant
- LLM: Groq (Llama 3)
git clone https://github.com/your-repo/job-recommender.git
cd job-recommender
pip install -r requirements.txtYou need a free Groq API key for the LLM features. Get one at console.groq.com.
cp .env.example .env
# Edit .env and add your GROQ_API_KEY# Set up Kaggle credentials first (see below)
python -m scripts.download_kaggle_data --dataset linkedin
python -m scripts.ingest_data --kaggle data/kaggle/linkedin/postings.csv --limit 50000python -m scripts.generate_embeddings
python -m scripts.index_embeddings# Start the dashboard
streamlit run streamlit_app/app.pyOpen http://localhost:8501 in your browser.
Your Profile → Ranking Engine → Recommendations
↓ ↓ ↓
Skills Weighted Scoring Explanations
Experience Skill Matching Skill Gaps
Salary Location Match Match Scores
The system uses:
- Sentence Transformers for understanding job descriptions
- Qdrant for fast similarity search
- Groq/Llama for extracting requirements from job posts
- Weighted scoring across 5 dimensions: skills, experience, seniority, location, salary
Pick a preset that matches your job search priorities:
| Preset | Focus |
|---|---|
| Skill-Focused | Best skill match (50% weight on skills) |
| Career Growth | Experience alignment (35% on experience) |
| Compensation First | Salary fit (35% on salary) |
| Remote Priority | Location/remote (30% on location) |
| Balanced | Equal consideration of everything |
Or set your own custom weights.
├── src/ # Core logic
│ ├── ranking.py # Job scoring and ranking
│ ├── recommendation.py # Explanation generation
│ ├── embedding.py # Text embeddings
│ ├── database.py # SQLite storage
│ └── vector_store.py # Qdrant integration
├── streamlit_app/ # Web dashboard
├── scripts/ # Data pipeline
└── tests/ # Unit and property tests
If you want to use the REST API directly:
# Start the API server
uvicorn src.api.main:app --port 8000| Endpoint | Description |
|---|---|
POST /api/candidates |
Create a candidate profile |
GET /api/recommendations/{id} |
Get job recommendations |
GET /api/jobs |
List all jobs |
PUT /api/weights/{id} |
Update ranking weights |
POST /api/feedback |
Submit like/dislike feedback |
API docs at http://localhost:8000/docs
To download the LinkedIn job dataset:
- Create account at kaggle.com
- Go to Settings → API → Create New Token
- Save
kaggle.jsonto~/.kaggle/(Linux/Mac) or%USERPROFILE%\.kaggle\(Windows) - Run
python -m scripts.download_kaggle_data --check
- Frontend: Streamlit, Plotly
- Backend: FastAPI, SQLite
- ML: Sentence-Transformers, Qdrant
- LLM: Groq (Llama 3)
This project uses a split deployment:
- Backend (API): Railway - jobmatch-production-0420.up.railway.app
- Frontend (Dashboard): Streamlit Cloud - jobmatch-tech.streamlit.app
-
Push your code to GitHub
-
Go to railway.app and sign in with GitHub
-
Click "New Project" → "Deploy from GitHub repo"
-
Select your repository
-
Add environment variable:
GROQ_API_KEY -
Railway will build using the Dockerfile and deploy
-
Copy your Railway URL (e.g.,
https://your-app.railway.app)
-
Go to share.streamlit.io
-
Sign in with GitHub
-
Click "New app" and select your repository
-
Set these options:
- Main file path:
streamlit_app/app.py - Python version: 3.11
- Main file path:
-
Add secret in "Advanced settings" → "Secrets":
API_BASE_URL = "https://your-app.railway.app"
-
Click "Deploy"
Your frontend will be live at https://your-app.streamlit.app