Skip to content

Latest commit

Β 

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

SkillBridge AI ⚑

Python 3.11 FastAPI React 18 Docker License: MIT

"From Day One to Done Right β€” Personalized Onboarding, Powered by AI"


🎯 The Problem

Corporate onboarding is broken. Most organizations rely on static, one-size-fits-all training curricula that push every new hire through the same sequence of modules β€” regardless of their experience level, existing skills, or target role. The result? Experienced hires waste days sitting through material they already know, while junior employees are overwhelmed by advanced concepts they have no foundation for.

The cost is staggering β€” companies spend an average of 40+ hours per employee on generic onboarding, yet studies show that up to 30% of that time is wasted on redundant content. This isn't just an inconvenience; it translates to lost productivity, slower time-to-competency, higher early-stage attrition, and frustrated employees who feel their time isn't valued from day one.

πŸ’‘ Our Solution

SkillBridge AI is an AI-driven adaptive learning engine that transforms onboarding from a static checklist into a personalized, skill-gap-aware learning pathway. By analyzing a new hire's resume against a target job description, SkillBridge identifies exactly what each employee needs to learn β€” and builds a prerequisite-ordered, time-optimized training plan grounded in a curated course catalog.

  • πŸ” Resume & JD Parsing β€” Extracts and normalizes skills with proficiency levels via Gemini 2.5 Flash
  • πŸ“Š Embedding-Based Skill Gap Analysis β€” Computes precise gap scores using semantic similarity
  • πŸ—ΊοΈ Adaptive Pathway Generation β€” Builds prerequisite-aware learning paths using graph algorithms
  • 🧠 Full Reasoning Trace β€” Explains every recommendation with step-by-step transparency
  • πŸ“ˆ Time-Saved Metrics β€” Quantifies efficiency gains vs. standard onboarding
  • πŸ”’ Zero Hallucinations β€” All recommendations grounded in a local course catalog via RAG

✨ Key Features

  • ⚑ AI-Powered Skill Extraction β€” Gemini 2.5 Flash parses resumes and job descriptions into structured skill profiles with proficiency levels
  • πŸ”¬ Semantic Gap Detection β€” MiniLM-L6-v2 embeddings + cosine similarity produce precise gap scores per skill
  • πŸ—ΊοΈ AdaptPathβ„’ Algorithm β€” Graph-based, topologically sorted learning pathways with prerequisite validation
  • 🧠 Reasoning Trace Viewer β€” Step-by-step AI decision log showing why each course was selected, with confidence scores
  • πŸ“ Diagnostic Quiz Mode β€” Assess skills interactively without uploading a resume
  • 🌐 Cross-Domain Support β€” Handles both Technical (Python, ML, Cloud) and Operational (Logistics, Safety, Leadership) roles
  • ⏱️ Time-Saved Dashboard β€” Visual metrics comparing personalized vs. standard onboarding hours
  • 🎭 Demo Mode β€” Pre-loaded personas (Junior Dev, Senior Analyst, Operations Manager) for instant evaluation
  • πŸ“„ PDF Export β€” Download the complete personalized learning plan as a formatted PDF
  • πŸ“Š Interactive Node Graph β€” React Flow-powered DAG visualization of course dependencies and pathway flow
  • 🎨 Dark-Theme UI β€” Premium glassmorphism design with smooth Framer Motion animations

πŸ—οΈ Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                        FRONTEND (React 18 + Vite)               β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚  Upload   β”‚ β”‚ Gap View β”‚ β”‚  Pathway  β”‚ β”‚  Metrics Dash    β”‚  β”‚
β”‚  β”‚  Widget   β”‚ β”‚  Table   β”‚ β”‚ DAG Graph β”‚ β”‚  (Recharts)      β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β”‚        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜            β”‚
β”‚                       β”‚    Axios HTTP                            β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                 BACKEND (FastAPI + Uvicorn)                      β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚  /api/parse β”‚ β”‚ /api/analyzeβ”‚ β”‚ /api/pathwayβ”‚ β”‚  /health  β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β”‚        β”‚               β”‚               β”‚                        β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”                β”‚
β”‚  β”‚  Parser    β”‚ β”‚  Analyzer   β”‚ β”‚  Pathway    β”‚                β”‚
β”‚  β”‚ (Gemini 2.5 Flash +  β”‚ β”‚ (MiniLM +   β”‚ β”‚ (NetworkX + β”‚                β”‚
β”‚  β”‚  PyMuPDF)  β”‚ β”‚  Sklearn)   β”‚ β”‚  ChromaDB)  β”‚                β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                β”‚
β”‚                                                                 β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚              ChromaDB Vector Store                       β”‚   β”‚
β”‚  β”‚         (course_catalog.json β†’ 40 modules)               β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Frontend Layer β€” React 18 SPA with React Flow (DAG visualization), Recharts (metrics), and Framer Motion (animations). Communicates via Axios HTTP to the backend.

API Layer β€” FastAPI with three core endpoints (/api/parse, /api/analyze, /api/pathway) plus health check. Pydantic models enforce request/response validation.

Core Engine β€” Parser (Gemini 2.5 Flash + PyMuPDF), Analyzer (sentence-transformers + scikit-learn), and Pathway Builder (NetworkX graph + ChromaDB RAG retrieval).

Data Layer β€” ChromaDB vector store indexes 40 course modules with embeddings for semantic retrieval. The catalog spans 8 domains from Python Programming to Safety & Compliance.

πŸ”„ User Journey

  1. Land on Dashboard β†’ User arrives at the SkillBridge home page (or selects a Demo Mode persona)
  2. Upload Documents β†’ Drag-and-drop a PDF resume + paste the target job description
  3. AI Parsing β†’ Gemini extracts structured skill profiles with proficiency levels from both documents
  4. Gap Analysis β†’ System computes semantic similarity between resume skills and JD requirements, producing gap scores and priority classifications
  5. Pathway Generation β†’ AdaptPathβ„’ algorithm builds a prerequisite-ordered, topologically-sorted course sequence from the catalog
  6. Review Results β†’ Interactive dashboard shows skill gap table, DAG-based pathway graph, reasoning trace, and time-saved metrics
  7. Export & Go β†’ Download the personalized learning plan as a PDF and begin onboarding

πŸ› οΈ Tech Stack

Backend

Technology Purpose Version
Python Core runtime 3.11+
FastAPI REST API framework 0.111.0
Google Generative AI Gemini 2.5 Flash integration 0.8.3
sentence-transformers Embedding generation (MiniLM-L6-v2) 2.7.0
ChromaDB Vector store for course catalog 0.5.0
NetworkX Graph algorithms (DAG, topological sort) 3.3
PyMuPDF PDF text extraction 1.24.3
scikit-learn Cosine similarity computation 1.4.2
Pydantic Data validation & schemas 2.7.0
Uvicorn ASGI server 0.29.0

Frontend

Technology Purpose Version
React UI framework 18.3
Vite Build tool & dev server Latest
React Flow Interactive DAG pathway graph 12.10
Recharts Metrics dashboard charts 2.15
Framer Motion Animations & transitions 11.18
Axios HTTP client 1.13
Tailwind CSS Utility-first styling 3.4
Lucide React Icon library 0.383

πŸš€ Quick Start

Prerequisites

Option A: Docker (Recommended)

# Clone the repository
git clone https://github.com/parth-shinge/skillbrigde-ai.git
cd skillbridge-ai

# Create backend environment file
cp .env.example backend/.env
# Edit backend/.env and set your GEMINI_API_KEY

# Build and run all services
docker-compose up --build

The frontend will be available at http://localhost:5173 and the backend at http://localhost:8000.

Option B: Manual Setup

Backend:

cd backend
python -m venv venv
venv\Scripts\activate        # Windows
# source venv/bin/activate   # macOS/Linux

pip install -r requirements.txt

# Create .env file
cp ../.env.example .env
# Edit .env and set your GEMINI_API_KEY

uvicorn main:app --reload --host 0.0.0.0 --port 8000

Frontend:

cd frontend
npm install
npm run dev

Open http://localhost:5173 in your browser.

Environment Variables

Variable Description Example
GEMINI_API_KEY API key for Gemini 2.5 Flash access AIzaSy...
CHROMA_PERSIST_DIR ChromaDB persistence directory ./chroma_db
STANDARD_ONBOARDING_HOURS Baseline hours for time-saved calculation 40

πŸ“‘ API Reference

GET /health

Health check endpoint.

Response: 200 OK

{ "status": "ok", "version": "1.0.0" }

POST /api/parse

Parse a resume PDF and job description to extract structured skill profiles.

Request: multipart/form-data

Field Type Description
resume_file File (PDF) Candidate's resume
job_description string Target job description text
Response Example
{
  "resume_skills": [
    { "name": "python", "proficiency": "advanced", "years": 5 },
    { "name": "sql", "proficiency": "intermediate", "years": 3 },
    { "name": "machine-learning", "proficiency": "beginner", "years": 1 }
  ],
  "jd_skills": [
    { "name": "python", "proficiency": "expert", "years": null },
    { "name": "deep-learning", "proficiency": "advanced", "years": null },
    { "name": "kubernetes", "proficiency": "intermediate", "years": null }
  ],
  "parse_time_ms": 1842
}

POST /api/analyze

Compute skill gaps between resume and job description skill profiles.

Request Body:

{
  "resume_skills": [{ "name": "python", "proficiency": "advanced", "years": 5 }],
  "jd_skills": [{ "name": "deep-learning", "proficiency": "advanced", "years": null }]
}
Response Example
{
  "skill_gaps": [
    {
      "skill": "deep-learning",
      "required_level": "advanced",
      "current_level": null,
      "gap_score": 0.92,
      "priority": "critical"
    }
  ],
  "overall_readiness_score": 0.45,
  "matched_skills": ["python"],
  "missing_skills": ["deep-learning", "kubernetes"]
}

POST /api/pathway

Generate a personalized, prerequisite-ordered learning pathway.

Request Body:

{
  "skill_gaps": [
    { "skill": "deep-learning", "required_level": "advanced", "current_level": null, "gap_score": 0.92, "priority": "critical" }
  ],
  "role_title": "ML Engineer",
  "job_category": "technical"
}
Response Example
{
  "pathway": [
    {
      "position": 1,
      "course_id": "ML-001",
      "title": "Introduction to Machine Learning",
      "domain": "Machine Learning",
      "duration_hours": 6,
      "level": "intermediate",
      "priority": "critical",
      "skills_taught": ["machine-learning", "data-analysis", "statistical-analysis"]
    }
  ],
  "reasoning_trace": [
    {
      "step": 1,
      "skill_addressed": "deep-learning",
      "gap_score": 0.92,
      "course_selected": "ML-001",
      "reason": "Foundation course required before deep learning modules; covers core ML concepts and scikit-learn workflow.",
      "confidence": 0.95
    }
  ],
  "metrics": {
    "total_hours": 22,
    "standard_hours": 40,
    "time_saved_hours": 18,
    "readiness_improvement": 0.47,
    "modules_count": 4
  }
}

🧠 Skill-Gap Analysis Logic

The analyzer uses a multi-stage pipeline to compute precise skill gaps:

  1. Skill Extraction β€” Gemini 2.5 Flash parses raw text into structured {name, proficiency, years} objects, normalizing synonyms (e.g., "ML" β†’ "machine-learning")
  2. Embedding Generation β€” Each skill name is encoded into a 384-dimensional vector using all-MiniLM-L6-v2
  3. Cosine Similarity Matching β€” Resume skills are matched to JD skills via pairwise cosine similarity; matches above threshold 0.7 are linked
  4. Proficiency Delta Scoring β€” Gap score = (required_level - current_level) / max_level, using ordinal encoding: beginner=1, intermediate=2, advanced=3, expert=4
  5. Priority Classification β€” Skills are classified based on gap score: Critical (β‰₯ 0.7), Recommended (0.4–0.69), Optional (< 0.4)
Pseudocode:
for each jd_skill in jd_skills:
    best_match = max(cosine_sim(embed(jd_skill), embed(r)) for r in resume_skills)
    if best_match.score >= THRESHOLD:
        gap = proficiency_delta(jd_skill.level, best_match.skill.level)
    else:
        gap = 1.0  # completely missing skill
    priority = classify(gap)  # critical | recommended | optional
    skill_gaps.append({skill, gap, priority})

πŸ—ΊοΈ AdaptPathβ„’ Algorithm

The pathway builder constructs an optimized learning sequence using graph-based pathfinding:

  1. DAG Construction β€” Each course in the catalog becomes a node; prerequisite relationships form directed edges
  2. RAG Retrieval β€” ChromaDB semantic search retrieves the top-K courses matching each identified skill gap
  3. Subgraph Extraction β€” Selected courses + all transitive prerequisites are extracted into a subgraph
  4. Topological Sort β€” NetworkX topological_sort() orders courses so prerequisites always come first
  5. Cycle Detection β€” nx.is_directed_acyclic_graph() validates the DAG; any cycles are resolved by edge removal
Course DAG Example:

  PY-001 ──► PY-002 ──► PY-003 ──► ML-001
                                      β”‚
  DA-001 ──► DA-002 β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Ίβ”€β”˜
                                      β”‚
                                  ML-002 ──► ML-003

In this example, a learner needing Deep Learning (ML-003) would receive the full chain: PY-001 β†’ PY-002 β†’ PY-003 β†’ DA-001 β†’ DA-002 β†’ ML-001 β†’ ML-002 β†’ ML-003, ensuring no knowledge gaps.

πŸ” Reasoning Trace

Every pathway recommendation includes a transparent reasoning trace β€” a step-by-step decision log explaining why each course was selected:

{
  "step": 1,
  "skill_addressed": "deep-learning",
  "gap_score": 0.92,
  "course_selected": "ML-003: Deep Learning Fundamentals",
  "reason": "Directly addresses the critical deep-learning gap. Covers neural network architectures (feedforward, CNN, RNN) using PyTorch, matching the JD requirement for hands-on DL experience.",
  "confidence": 0.95
}

Each trace entry includes the skill being addressed, the gap score that triggered it, the selected course with rationale, and a confidence score (0–1) reflecting match quality. This enables full auditability of AI decisions.

🌐 Cross-Domain Scalability

SkillBridge supports both technical and operational roles through a unified course catalog spanning 8 domains. The job_category field routes recommendations to the appropriate course pool:

Aspect Technical Role Operational Role
Example Role ML Engineer Operations Manager
Skill Domains Python, ML, Cloud & DevOps, Data & SQL Logistics, Safety & Compliance, Leadership
Sample Courses Deep Learning Fundamentals, Kubernetes & Orchestration Lean Operations, Regulatory Compliance
Assessment Types Coding projects, Capstone projects Case studies, Practical exams
Catalog Coverage 17 technical modules 23 operational/cross-functional modules

πŸ“Š Datasets Used

Dataset Source Usage License
O*NET Database onetonline.org Occupational skill taxonomies & proficiency benchmarks Public Domain
Kaggle Resume Dataset kaggle.com/datasets Resume parsing model validation CC0
Kaggle Job Descriptions kaggle.com/datasets JD parsing model validation CC0
Custom Course Catalog Internal (40 modules) Core knowledge base indexed in ChromaDB MIT

πŸ“ˆ Evaluation Metrics

Metric Description Target
Path Coverage Score % of identified skill gaps addressed by the generated pathway β‰₯ 95%
Hallucination Rate % of recommended courses not found in the catalog 0%
Readiness Delta Improvement in readiness score after completing the pathway β‰₯ 0.40
Time Efficiency % Hours saved vs. standard onboarding Γ· standard hours Γ— 100 β‰₯ 30%
Prerequisite Validity % of pathway orderings that satisfy all prerequisite constraints 100%

πŸ“œ License

This project is licensed under the MIT License β€” see the LICENSE file for details.


Built with ❀️ for smarter onboarding

About

AI-powered adaptive onboarding engine that parses resumes & job descriptions, computes skill gaps using embeddings, and generates personalized learning pathways via graph-based AI.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages