SkillSync - AI Resume & Job Match Hub
SkillSync is an AI-powered backend API that helps job seekers match their resumes with job descriptions, provides skill gap analysis, resume improvement suggestions, and generates personalized cover letters. It also includes a recruiter dashboard for candidate ranking and management.
Features
Core Features
- Resume Upload & Parsing: Upload PDF, DOCX, or TXT resume files with AI-powered text extraction
- Job Description Analysis: AI analysis of job postings to extract required skills and requirements
- AI Matching & Scoring: Intelligent matching between resumes and jobs with detailed scoring
- Skill Gap Analysis: Identify missing skills and get suggestions for improvement
- Resume Suggestions: AI-powered recommendations to improve resume content
- Cover Letter Generation: Personalized cover letter creation based on resume and job match
- Recruiter Dashboard: Advanced candidate ranking and job management for recruiters
- Analytics & Tracking: User improvement tracking and engagement analytics
Technical Features
- FastAPI Framework: Modern, fast web framework for building APIs
- SQLite Database: Lightweight, serverless database with SQLAlchemy ORM
- JWT Authentication: Secure user authentication with role-based access control
- OpenAI Integration: Powered by GPT models for intelligent text analysis
- File Upload Support: Secure file handling with validation
- CORS Enabled: Cross-origin resource sharing for frontend integration
- Comprehensive API Documentation: Auto-generated OpenAPI/Swagger docs
Tech Stack
- Backend: Python 3.9+ with FastAPI
- Database: SQLite with SQLAlchemy ORM
- AI/ML: OpenAI GPT-3.5/4 for text analysis and generation
- Authentication: JWT tokens with bcrypt password hashing
- File Processing: PyPDF2, python-docx for document parsing
- API Documentation: Automatic OpenAPI/Swagger documentation
Installation & Setup
Prerequisites
- Python 3.9 or higher
- pip package manager
Local Development Setup
-
Clone the repository
git clone <repository-url> cd airesumejobmatchingapi-5g56kf
-
Install dependencies
pip install -r requirements.txt
-
Set up environment variables Create a
.env
file in the root directory:SECRET_KEY=your-super-secret-key-change-in-production OPENAI_API_KEY=your-openai-api-key
-
Run database migrations
alembic upgrade head
-
Start the development server
uvicorn main:app --reload --host 0.0.0.0 --port 8000
Production Deployment
For production deployment, ensure you set the following environment variables:
SECRET_KEY
: A strong secret key for JWT token signingOPENAI_API_KEY
: Your OpenAI API key for AI functionality
API Documentation
Once the server is running, you can access:
- Interactive API Documentation: http://localhost:8000/docs
- Alternative API Documentation: http://localhost:8000/redoc
- OpenAPI Schema: http://localhost:8000/openapi.json
- Health Check: http://localhost:8000/health
API Endpoints
Authentication
POST /api/v1/auth/register
- User registrationPOST /api/v1/auth/login
- User login
Resume Management
POST /api/v1/resumes/upload
- Upload and parse resumeGET /api/v1/resumes/
- Get user's resumesGET /api/v1/resumes/{resume_id}
- Get specific resumePUT /api/v1/resumes/{resume_id}
- Update resumeDELETE /api/v1/resumes/{resume_id}
- Delete resume
Job Management
POST /api/v1/jobs/
- Create job posting (recruiters only)GET /api/v1/jobs/
- Get all active jobs with filtersGET /api/v1/jobs/my-jobs
- Get recruiter's jobsGET /api/v1/jobs/{job_id}
- Get specific jobPUT /api/v1/jobs/{job_id}
- Update job postingDELETE /api/v1/jobs/{job_id}
- Delete job posting
AI Matching
POST /api/v1/matching/analyze
- Analyze resume-job matchGET /api/v1/matching/
- Get user's matchesGET /api/v1/matching/{match_id}
- Get specific matchPOST /api/v1/matching/{match_id}/cover-letter
- Generate cover letter
Recruiter Dashboard
GET /api/v1/dashboard/candidates/{job_id}
- Get ranked candidates for jobGET /api/v1/dashboard/jobs/stats
- Get job statisticsGET /api/v1/dashboard/overview
- Get dashboard overview
Analytics
GET /api/v1/analytics/user-stats
- Get user analyticsGET /api/v1/analytics/skill-gaps
- Get skill gap analysisGET /api/v1/analytics/improvement-suggestions
- Get improvement suggestionsPOST /api/v1/analytics/track-event
- Track custom events
User Roles
Applicant (Default)
- Upload and manage resumes
- Search and view job postings
- Get AI-powered job matching and scoring
- Receive skill gap analysis and resume suggestions
- Generate personalized cover letters
- Track improvement analytics
Recruiter
- All applicant features
- Create and manage job postings
- Access recruiter dashboard
- View ranked candidates for jobs
- Get job performance statistics
Admin
- All recruiter and applicant features
- System administration capabilities
Database Schema
The application uses SQLite with the following main tables:
users
- User accounts and authenticationresumes
- Resume data and metadatajobs
- Job postings and requirementsmatches
- Resume-job matches with AI scoringskill_gaps
- Identified skill gaps from matchesanalytics
- User activity and improvement tracking
Environment Variables
Required Variables
OPENAI_API_KEY
: Your OpenAI API key for AI functionality
Optional Variables (with defaults)
SECRET_KEY
: JWT secret key (default: change in production)ACCESS_TOKEN_EXPIRE_MINUTES
: Token expiration time (default: 30)MAX_FILE_SIZE
: Maximum upload file size in bytes (default: 10MB)
File Storage
The application stores uploaded files in /app/storage/
with the following structure:
/app/storage/db/
- SQLite database file/app/storage/uploads/
- Uploaded resume files
Development
Code Style
The project uses Ruff for linting and code formatting:
ruff check .
ruff format .
Testing
Run tests with pytest:
pytest
Database Migrations
Create new migrations:
alembic revision --autogenerate -m "Description"
Apply migrations:
alembic upgrade head
Contributing
- Fork the repository
- Create a feature branch
- Make your changes
- Run tests and linting
- Submit a pull request
License
This project is licensed under the MIT License.
Support
For support and questions, please create an issue in the repository.