A content-based recommendation engine that matches a person's skills to the engineering roles they align with most closely — the same core idea behind "users who liked X also liked Y" engines, applied to careers instead of products.
Enter your skills, and the engine ranks the top 5 engineering roles that best match them — using TF-IDF vectorization and cosine similarity, the same techniques behind real-world recommendation systems.
- Ingestion — each role in
data/roles.jsonis described as a set of skill tags (e.g.Backend Developer→java, python, sql, rest apis...) - Vectorization — role descriptions are converted into weighted vectors with TF-IDF, so a specific skill like
kubernetescounts more than a generic one - Scoring — cosine similarity measures the angle between the user's vector and every role vector — smaller angle = closer match
- Ranking — top 5 roles are returned with a match percentage and overlapping skills
| Layer | Technology |
|---|---|
| Backend | Python, Flask, scikit-learn (TfidfVectorizer, cosine_similarity) |
| Frontend | Vanilla HTML/CSS/JS — no build step, no frameworks |
| Data | Hand-curated role/skill dataset (data/roles.json) |
- All skill input validated server-side (length, character whitelist, max count per request)
- Vectorizer fit once at startup on the fixed role vocabulary — never refit on user input
- Request bodies size-capped; responses set
X-Content-Type-Options,X-Frame-Options, and a restrictive CSP - Frontend builds DOM nodes with
textContent, notinnerHTML— user input can never be interpreted as markup
git clone https://github.com/areebaathar-dev/tech-stack-recommender.git
cd tech-stack-recommender
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
python app.pytech-stack-recommender/ ├── app.py # Flask app, TF-IDF + cosine similarity logic ├── data/ │ └── roles.json # Role definitions and skill tags ├── static/ │ ├── css/style.css │ └── js/app.js ├── templates/ │ └── index.html └── requirements.txt
- Add more roles/skills directly in
data/roles.json— no code changes needed - Swap TF-IDF for word embeddings for fuzzy matches between related terms (e.g. "web design" vs. "frontend development")
- Add an onboarding flow with pre-filled common skill sets for new users
MIT — see LICENSE.