ARTPARK CodeForge Hackathon Submission
An AI-driven system that analyzes a candidate's resume against a job description, identifies precise skill gaps, and generates a personalized, prioritized learning roadmap.
Corporate onboarding suffers from a one-size-fits-all problem:
- Experienced hires waste time on concepts they already know
- Beginners get overwhelmed by advanced modules
- No one measures the actual gap between hire capabilities and role requirements
SkillBridge solves this by generating a personalized learning pathway in under 100 seconds using AI.
Upload a resume (PDF/DOCX) + job description (PDF/TXT) β get a fully personalized roadmap with reasoning traces.
| Feature | Description |
|---|---|
| π€ Intelligent Parsing | Hybrid LLM + NER + alias extraction from resume & JD |
| π Skill Gap Analysis | 3-layer comparison: exact match β skill family β cosine similarity |
| πΊοΈ Adaptive Pathway | Original WGT (Weighted Graph Traversal) algorithm |
| π Reasoning Traces | Every recommendation explained with evidence from your resume |
| π¨ Interactive Roadmap | react-flow DAG with color-coded nodes and filter controls |
| π« Zero Hallucinations | All course recommendations from curated closed catalog only |
| β‘ Real-time Progress | Live 6-stage processing pipeline with WebSocket-style polling |
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β FRONTEND (React 18 + Vite) β
β Upload β Processing β Dashboard β Roadmap (DAG) β
ββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββ
β REST API
ββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββ
β BACKEND (FastAPI + Python 3.11) β
β /analyze /status /results /trace /health β
ββββββββ¬βββββββββββββββββββββββββββββββββββββββββββββββββββ
β
ββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββ
β AI / ML LAYER β
β Parser (LLM + spaCy) β Gap Analyzer (FAISS) β
β WGT Algorithm (NetworkX) β Trace Generator (LLM) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
For each JD skill requirement:
Layer 1 β Exact ID Match
Resume has exact skill? β compute level coverage score
coverage β₯ 0.85 β fully covered (skip)
coverage < 0.85 β weak gap
Layer 2 β Skill Family Match
e.g. Resume has PostgreSQL + MySQL β covers SQL requirement (0.84 coverage)
e.g. Resume has React β partial credit for Next.js
Prevents false gaps from skill variant naming
Layer 3 β Semantic Similarity (cosine)
Embed all skill names with all-MiniLM-L6-v2 (384-dim)
FAISS IndexFlatIP similarity search
score β₯ 0.62 β weak gap
score < 0.62 β missing gap
P(skill) = 0.40 Γ gap_severity
+ 0.30 Γ requirement_weight
+ 0.20 Γ dependency_urgency
+ 0.10 Γ experience_penalty
Where:
gap_severity = 1.0 - coverage_score
requirement_weight = 1.5 (required) or 1.0 (preferred), normalized
dependency_urgency = blocked_gap_skills / total_gap_skills
experience_penalty = reduced for trivial skills on senior hires
Skills are then ordered via Kahn's topological sort with P-score tie-breaking, ensuring prerequisites always appear before dependent skills.
| Library | Version | Purpose |
|---|---|---|
| React | 18.3 | UI framework |
| Vite | 5.x | Build tool |
| @xyflow/react | 11.x | DAG roadmap visualization |
| recharts | 2.x | Skill gap charts |
| react-dropzone | 14.x | File uploads |
| zustand | 4.x | State management |
| Library | Version | Purpose |
|---|---|---|
| FastAPI | 0.111 | REST API framework |
| SQLAlchemy | 2.0 | ORM + SQLite storage |
| pdfplumber | 0.11 | PDF text extraction |
| python-docx | 1.1 | DOCX text extraction |
| Model / Library | Purpose |
|---|---|
| Mistral-7B-Instruct (Ollama) or GPT-4o-mini | Skill extraction + reasoning traces |
| all-MiniLM-L6-v2 (sentence-transformers) | 384-dim skill embeddings |
| FAISS (faiss-cpu) | Vector similarity search |
| spaCy en_core_web_lg | NER validation |
| NetworkX | Skill dependency DAG |
| Dataset | Source | Rows Processed | Usage |
|---|---|---|---|
| Kaggle Resume Dataset | snehaanbhawal | 2,484 resumes | Enriched 11 skill aliases in taxonomy |
| Kaggle JD Dataset | kshitizregmi | 2,277 JDs | Computed demand weights for WGT P-Score |
| O*NET Database 28.1 | onetcenter.org | Full database | Canonical skill IDs + prerequisite graph |
# 1. Clone the repository
git clone https://github.com/your-team/skillbridge.git
cd skillbridge
# 2. Add your OpenAI API key
# Edit skillbridge/backend/.env.docker
# Set: OPENAI_API_KEY=sk-your-key-here
# 3. Start everything
docker compose up --build
# 4. Open the app
# Frontend: http://localhost:3000
# API Docs: http://localhost:8000/docs- Python 3.11+
- Node.js 18+
- Ollama (for local LLM) OR OpenAI API key
cd skillbridge/backend
# Create virtual environment
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
# Download spaCy model
python -m spacy download en_core_web_lg
# Configure environment
cp .env.example .env
# Edit .env β set LLM_PROVIDER and API key
# Start server
uvicorn app.main:app --reload --port 8000cd skillbridge/frontend
# Install dependencies
npm install
# Configure environment
# Edit .env β set VITE_API_URL=http://localhost:8000
# Start dev server
npm run dev
# Opens at http://localhost:5173# Install Ollama from https://ollama.ai
ollama pull mistral
# Update backend/.env:
# LLM_PROVIDER=ollama
# OLLAMA_BASE_URL=http://localhost:11434
# OLLAMA_MODEL=mistralskillbridge/
βββ backend/
β βββ app/
β β βββ api/
β β β βββ routes.py # All API endpoints
β β βββ core/
β β β βββ config.py # Settings management
β β β βββ database.py # SQLite/PostgreSQL setup
β β β βββ llm.py # Unified LLM caller
β β βββ data/
β β β βββ skill_taxonomy.json # 71 skills + prerequisites
β β β βββ course_catalog.json # 58 curated modules
β β βββ models/
β β β βββ db_models.py # SQLAlchemy ORM models
β β β βββ schemas.py # Pydantic schemas
β β βββ services/
β β β βββ parser.py # Resume + JD extraction
β β β βββ embeddings.py # Sentence transformer service
β β β βββ gap_analyzer.py # 3-layer gap analysis
β β β βββ wgt_engine.py # Adaptive pathing algorithm
β β β βββ trace_generator.py # LLM reasoning traces
β β β βββ data_loader.py # Taxonomy + catalog loader
β β βββ main.py # FastAPI app entrypoint
β βββ requirements.txt
β βββ Dockerfile
βββ frontend/
β βββ src/
β β βββ components/
β β β βββ UploadScreen.jsx
β β β βββ ProcessingScreen.jsx
β β β βββ ResultsDashboard.jsx
β β β βββ RoadmapView.jsx
β β βββ store/
β β β βββ useAppStore.js # Zustand + localStorage persist
β β βββ api/
β β βββ client.js # Axios API client
β βββ Dockerfile
βββ docker-compose.yml
βββ README.md
| Endpoint | Method | Description |
|---|---|---|
POST /api/v1/analyze |
POST | Upload resume + JD, returns job_id |
GET /api/v1/status/{job_id} |
GET | Poll job progress (0-100%) |
GET /api/v1/results/{job_id} |
GET | Get full pathway + gap report |
GET /api/v1/trace/{job_id}/{skill_id} |
GET | Get reasoning trace for a skill |
GET /api/v1/stats |
GET | System stats |
GET /health |
GET | Health check |
GET /docs |
GET | Interactive Swagger UI |
| Metric | Target | Approach |
|---|---|---|
| Skill Extraction F1 | > 0.82 | Hybrid LLM + alias + NER |
| Gap Detection Recall | > 85% | 3-layer matching pipeline |
| Pathway Validity | 100% | Topological sort guarantee |
| Hallucination Rate | < 1% | Closed course catalog |
| E2E Latency (p95) | < 30s | Async background tasks |
AI Apex - ARTPARK CodeForge Hackathon β 2024
MIT License β built for ARTPARK CodeForge Hackathon