This project is officially registered under nexus spring of code 2026.
SkillSphere AI is an AI-powered full-stack platform that connects learning, skill evaluation, and career readiness in one ecosystem.
It helps:
- Students learn, practice, and become job-ready
- Tutors run live, interactive classes
- Recruiters discover skilled and better-matched candidates
The platform combines live classroom experiences with AI/ML-driven career tools such as resume analysis, job matching, interview practice, and performance tracking.
SkillSphere AI aims to simplify the path from learning to hiring by giving users practical, actionable insights at every stage:
- Learn skills in real-time
- Measure progress through dashboards
- Improve career assets (resume and interview performance)
- Connect capabilities to hiring needs
-
Live Interactive Classrooms
Real-time learning sessions with video, chat, and collaboration. -
AI Resume Analyzer
Resume scoring with improvement suggestions. (Route:/resume-analyzer)- Drag & Drop / clipboard paste upload
- ATS score with detailed analysis dashboard
- Missing keyword identification
- Industry Benchmarking Mode — Analyzes your resume against market standards even without a specific Job Description (BM badge).
- Live PDF document preview
-
Resume vs Job Description Matcher
ML-assisted comparison between candidate profile and role requirements.- Semantic Resume vs Job Description Matching — Embedding-based semantic similarity scoring using Hugging Face Inference API (all-MiniLM-L6-v2, free tier)
- Complements keyword overlap with contextual alignment detection
- Cosine similarity comparison for conceptually related phrases (e.g., "workflow orchestration" vs "pipeline automation")
-
AI Mock Interview System
Adaptive interview practice with real-time AI evaluation. (Route:/mock-interview)- Topic selection (React, Node.js, DSA) with difficulty levels
- 5-question sessions with randomized, non-repeating questions
- AI-powered scoring: technical accuracy, communication quality, and concept relevance
- Live score feedback after each answer
- Results dashboard with overall score ring, per-question breakdown, and weak concepts
- Interview history with paginated session tracking
- Python AI microservice for NLP evaluation (spaCy + sentence-transformers)
- Fail-soft mode: falls back to mock scores when AI service is unavailable
-
Interactive Learning Roadmaps
Personalized skill-trees generated from AI analysis. (Route:/roadmap)- Visual vertical progression path with interactive milestones
- Real-time "Job-Readiness" percentage tracking
- Direct integration with Dashboard for "Next Step" guidance
- Automatic sync with latest Resume Analysis feedback
-
Skill Tracking Dashboard
Performance insights and "Next Learning Milestone" guidance to help students track growth. -
Secure Authentication & Email Verification
OTP-based registration and password recovery system.- 6-digit email OTP verification
- Secure Password Reset (Forgot Password) flow
- Protection against user enumeration
- OTP attempt limiting for security
- Students: build skills, improve resumes, and prepare for jobs
- Tutors: teach and manage live learning experiences
- Recruiters: identify skilled candidates more efficiently
- Simplify the journey from learning to getting hired
- Provide AI-powered guidance for career growth
- Enable meaningful collaboration between learners and educators
- Keep the platform modular, scalable, and open-source friendly
- Frontend: React.js
- Backend: Node.js + Express.js
- Database: MongoDB
- Intelligence Layer: AI/ML for resume analysis, matching, and recommendations
- Interview AI Service: Python + FastAPI + spaCy + sentence-transformers
To simplify setup, you can now run the entire project using root-level scripts.
npm run install-allThis installs:
- Root dependencies
- Client dependencies
- Server dependencies
- Python microservice dependencies (creates
interview-ai-service/venvand downloads spaCy model)
npm run devThis will start:
- Frontend (client)
- Backend (server)
- Interview AI Service (Python microservice on port 8000)
npm run quickstartnpm run dev:web
⚠️ Backend requires environment variables to run properly. Refer to the Environment Setup section below.
The following structure keeps the project modular and easy to scale for new contributors:
SkillSphere-AI/
├── client/ # React frontend (Vite)
│ ├── src/
│ │ ├── modules/ # Feature-based modules (Auth, Resumes, etc.)
│ │ ├── shared/ # Reusable UI components
│ │ └── services/ # API service layer
├── server/ # Express backend
│ ├── src/
│ │ ├── modules/ # Backend business logic (Auth, Resumes, Jobs, Roadmap)
│ │ ├── database/ # Mongoose models (User, Resume, JobApplication, LearningProgress)
│ │ └── middleware/ # Auth, RBAC, and Upload handlers
├── ai-ml/ # AI/ML intelligence layer
│ ├── evaluators/ # Skill, Keyword, and Experience matchers
│ └── pipeline/ # Unified analysis pipeline
├── interview-ai-service/ # Python AI microservice (FastAPI)
│ ├── routers/ # API route handlers
│ ├── services/ # Whisper STT, NLP, Semantic scoring
│ └── requirements.txt # Python dependencies
├── docs/ # Project documentation
└── ... # Configuration and root files
-
GET /health -
POST /api/auth/register(v2: now includes OTP verification) -
POST /api/auth/verify-email -
POST /api/auth/resend-otp -
POST /api/auth/forgot-password -
POST /api/auth/reset-password -
POST /api/auth/login -
POST /api/auth/logout -
GET /api/auth/me -
POST /api/resume/upload -
POST /api/resume/analyze(v2: uses latest-only upsert flow) -
GET /api/resume/me/latest: fetch user's latest parsed resume (no raw resumeText) -
GET /api/resume/result/:id -
GET /api/roadmap/me: fetch user's learning roadmap and progress -
POST /api/roadmap/sync: sync roadmap with latest analysis suggestions -
PATCH /api/roadmap/update-topic: update status of a specific roadmap milestone -
GET /uploads/:filename -
POST /api/jobs: create a new job (Recruiter only) -
GET /api/jobs: list all published jobs (supportsdesignation,minSalary,maxSalary,postedWithinfilters) -
GET /api/jobs/recruiter: list jobs posted by the authenticated recruiter -
GET /api/jobs/:id: get job details -
GET /api/interviews/topics: list interview topics with question counts -
POST /api/interviews/start: start a new interview session -
GET /api/interviews/:id: get session details -
POST /api/interviews/:id/answer: submit an answer for evaluation -
POST /api/interviews/:id/complete: end interview and calculate scores -
GET /api/interviews/:id/results: get detailed results -
GET /api/interviews/history: paginated interview history -
GET /api/interviews/ai-status: check Python AI service health
- Feature-first design: Easier to assign and scale work across teams
- Clear boundaries: Frontend, backend, and AI/ML concerns are separated
- Contributor-friendly: New developers can quickly find where to work
- Future-ready: Supports adding new learning/career modules without major rewrites
If you want to contribute, start by understanding:
- Which user group your change helps (student, tutor, recruiter)
- Which module it belongs to (classrooms, resumes, matching, interviews, dashboard)
- Whether the change impacts frontend, backend, AI/ML, or multiple layers
This approach keeps contributions focused, reviewable, and scalable.
- Contribution Guide:
CONTRIBUTING.md - Code of Conduct:
CODE_OF_CONDUCT.md - Security Policy:
SECURITY.md - PR Template:
.github/PULL_REQUEST_TEMPLATE.md - Issue Templates:
.github/ISSUE_TEMPLATE/ - Detailed Structure Notes:
docs/PROJECT_STRUCTURE.md - PR Quality Gates:
docs/QUALITY_GATES.md
Automated checks run on pull requests to main through:
.github/workflows/pr-quality-checks.yml
These checks validate docs/workflows and, once app code is added, automatically run lint/test/build for client, server, and ai-ml when their dependency manifests exist.
cd client
npm install
npm run devcd server
npm install
npm run devThis service powers speech-to-text transcription and answer evaluation for the Mock Interview module. The Node backend can run without it (it falls back to mock scores), but for real AI evaluation you should start it locally.
Requirements: Python 3.10+
cd interview-ai-service
# Create virtual environment
python -m venv venv
# Activate
# Linux/Mac:
# source venv/bin/activate
# Windows:
# venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
# Download spaCy English model
python -m spacy download en_core_web_sm
# Run the API (default port 8000)
python -m uvicorn main:app --reload --port 8000Health check: http://localhost:8000/health
Optional env var (defaults to base): WHISPER_MODEL_SIZE=tiny|base|small|medium|large-v3
⚠️ The backend will not start without configuring the required environment variables.
- Copy example file:
cd server
cp .env.example .env- Update required values in
server/.env:
MONGO_URIJWT_SECRETGOOGLE_CLIENT_IDGOOGLE_CLIENT_SECRET
# AI/ML Configuration (Required for semantic matching — free tier)
HF_API_TOKEN=your_hugging_face_token
# Email Setup (if using console/smtp directly in server)
EMAIL_SERVICE_MODE=console
EMAIL_HOST=smtp.gmail.com
EMAIL_PORT=587
EMAIL_USER=your-email@gmail.com
EMAIL_PASS=your-app-password
EMAIL_FROM="SkillsSphere AI" <your-email@gmail.com>
# Evaluator toggles and weights (optional)
EVALUATOR_SKILL_MATCH_ENABLED=true
EVALUATOR_KEYWORD_MATCH_ENABLED=true
EVALUATOR_EXPERIENCE_MATCH_ENABLED=true
EVALUATOR_SKILL_MATCH_WEIGHT=1
EVALUATOR_KEYWORD_MATCH_WEIGHT=0.2
EVALUATOR_EXPERIENCE_MATCH_WEIGHT=0.2
# Interview AI Service (Python microservice for answer evaluation)
INTERVIEW_AI_URL=http://localhost:8000
INTERVIEW_AI_TIMEOUT=10000
INTERVIEW_AI_TRANSCRIBE_TIMEOUT=30000- Copy example file:
cd client
cp .env.example .env- For local development, keep:
MONGO_URIorMONGODB_URIPORT(backend default:5000)JWT_SECRET(required for JWT registration)JWT_EXPIRES_IN(optional, default is7d)HF_API_TOKEN(free — required for semantic resume-to-job-description matching, get at https://huggingface.co/settings/tokens)VITE_API_URL=http://localhost:5000
JWT_SECRET=skillsphere_dev_jwt_secret_1234567890abcdefJWT_EXPIRES_IN=7dEMAIL_SERVICE_MODE=console(Use "smtp" for real emails)EMAIL_HOST=smtp.mailtrap.ioEMAIL_PORT=2525EMAIL_USER=your_smtp_usernameEMAIL_PASS=your_smtp_passwordHF_API_TOKEN=hf_...(Free — required for semantic resume matching)
- Open Google Cloud Console.
- Create/select your project.
- Configure OAuth consent screen.
- Go to Credentials and create OAuth 2.0 Client ID (Web application).
- Add Authorized redirect URI exactly as:
http://localhost:5000/api/auth/google/callback
- Copy Client ID and Client Secret into
server/.env:
GOOGLE_CLIENT_ID=your_google_client_id
GOOGLE_CLIENT_SECRET=your_google_client_secret
GOOGLE_CALLBACK_URL=http://localhost:5000/api/auth/google/callback
FRONTEND_URL=http://localhost:5174- Restart both backend and frontend after updating env files.
OAuth flow summary:
- Frontend starts OAuth from
/api/auth/google. - Google redirects to backend callback (
GOOGLE_CALLBACK_URL). - Backend creates JWT and redirects to frontend callback (
FRONTEND_URL/auth/callback).
To use real email notifications (OTP verification, password reset) via Gmail, follow these steps:
-
Enable 2-Step Verification: Go to your Google Account Security and ensure 2-Step Verification is ON.
-
Generate App Password:
- Search for "App Passwords" in your Google Account search bar.
- Enter a name (e.g., "SkillsSphere AI").
- Click Create.
- Copy the 16-character code (e.g.,
abcd efgh ijkl mnop).
-
Update
server/.env:EMAIL_SERVICE_MODE=smtp EMAIL_HOST=smtp.gmail.com EMAIL_PORT=587 EMAIL_USER=your-email@gmail.com EMAIL_PASS=abcd efgh ijkl mnop EMAIL_FROM="SkillsSphere AI" <your-email@gmail.com>
-
Restart the server to apply changes.
