A modern, AI-powered candidate-job matching system built with Next.js 15, TypeScript, and Tailwind CSS. This project implements intelligent matching algorithms that go beyond simple text comparison to address skill equivalence, experience depth, and potential fit using advanced AI integration.
- AI-Augmented Matching - OpenAI GPT-3.5-turbo integration for intelligent skill analysis
- Multi-factor Scoring - Comprehensive scoring algorithm considering skill match, experience, transferable skills, and potential
- Skill Normalization - Identifies equivalent skills (e.g., "React" vs "ReactJS") with fuzzy matching
- Knowledge Graph - In-memory representation of skills, aliases, and relationships
- Explainable AI - Detailed breakdowns, recommendations, and confidence levels
- Interactive Dashboard - Modern, responsive UI with real-time matching results
- Progress Indicators - Visual feedback during matching process
- Knowledge Graph Visualization - Interactive skill relationship explorer
- Score Breakdown - Detailed analysis with visual charts and metrics
- Mobile-Responsive Design - Optimized for all device sizes
- Global Error Boundaries - Graceful error handling with recovery options
- Loading States - Skeleton loaders and progress indicators
- Rate Limiting - 1-second delay between AI API calls
- Retry Logic - Exponential backoff for resilience
- Mock Mode - Graceful fallback when API key not available
- Framework: Next.js 15 (App Router)
- Language: TypeScript
- Styling: Tailwind CSS v4
- AI Integration: OpenAI GPT-3.5-turbo
- State Management: React hooks
- Testing: Jest with TypeScript support
- Package Manager: npm/pnpm
- Development: Turbopack for faster builds
advanced-candidate-matching-system/
βββ app/ # Next.js App Router
β βββ layout.tsx # Root layout with metadata
β βββ page.tsx # Main dashboard page
β βββ globals.css # Global styles
β βββ favicon.ico # Site favicon
β βββ api/ # API routes
β β βββ matching/ # Matching endpoint
β β βββ skills/ # Skills endpoint
β β βββ knowledge/ # Knowledge graph endpoint
β β βββ ai-status/ # AI service status
β βββ components/ # React components
β β βββ JobInput.tsx # Job selection component
β β βββ CandidateInput.tsx # Candidate selection component
β β βββ MatchingResults.tsx # Results display
β β βββ ScoreBreakdown.tsx # Score analysis
β β βββ KnowledgeGraph.tsx # Skill graph visualization
β β βββ LoadingSpinner.tsx # Loading component
β β βββ StatusIndicator.tsx # Status display
β β βββ MatchingProgress.tsx # Progress indicator
β β βββ WelcomeGuide.tsx # Onboarding guide
β β βββ Tooltip.tsx # Tooltip component
β βββ data/ # Sample data
β β βββ sampleCandidates.ts # Candidate data
β β βββ sampleJobs.ts # Job data
β β βββ skills.ts # Skills knowledge graph
β βββ lib/ # Core business logic
β β βββ matchingService.ts # Main matching orchestration
β β βββ scoringEngine.ts # Multi-factor scoring algorithm
β β βββ aiService.ts # AI integration service
β β βββ skillNormalizer.ts # Skill normalization
β β βββ config.ts # Configuration
β β βββ performanceOptimizer.ts # Performance optimization
β βββ types/ # TypeScript types
β βββ matching.ts # Core type definitions
βββ public/ # Static assets
βββ package.json # Dependencies and scripts
βββ tsconfig.json # TypeScript configuration
βββ next.config.ts # Next.js configuration
βββ jest.config.js # Jest configuration
βββ eslint.config.mjs # ESLint configuration
βββ env.template # Environment variables template
- Node.js 18+
- npm or pnpm
- OpenAI API key (optional, mock mode available)
-
Clone the repository
git clone https://github.com/dchobarkar/advanced-candidate-matching-system.git cd advanced-candidate-matching-system -
Install dependencies
npm install # or pnpm install -
Set up environment variables
cp env.template .env.local
Edit
.env.localand add your OpenAI API key (optional):OPENAI_API_KEY=your_openai_api_key_here
-
Run the development server
npm run dev # or pnpm dev -
Open your browser Navigate to http://localhost:3000
- TypeScript for type safety
- ESLint for code linting
- Jest for unit testing
- Component-based architecture
- Next.js Image optimization
- Code splitting with dynamic imports
- Optimized bundle sizes
- In-memory caching for AI responses
- Turbopack for faster development
# Run tests
npm test
# Run tests with coverage
npm test -- --coverage
# Run tests in watch mode
npm test -- --watchMatches a candidate to a job.
Request Body:
{
"jobId": "senior-react-developer",
"candidateId": "candidate-1"
}Response:
{
"result": {
"candidate": {
/* candidate object */
},
"job": {
/* job object */
},
"score": {
"overallScore": 85.5,
"skillMatchScore": 90.0,
"experienceScore": 80.0,
"transferableSkillsScore": 85.0,
"potentialScore": 75.0,
"breakdown": {
/* detailed breakdown */
}
},
"explanation": "Detailed explanation of the match...",
"recommendations": ["Recommendation 1", "Recommendation 2"],
"confidence": 0.85
},
"processingTime": 1250,
"confidence": 0.85
}Returns all available skills from the knowledge graph.
Returns the complete knowledge graph data.
Returns the status of the AI service and available functions.
- Job: Senior React Developer
- Candidate: Experienced React developer with 5+ years
- Expected: High score (85-95%) with strong skill alignment
- Job: Vue.js Developer
- Candidate: React developer with no Vue experience
- Expected: Medium score (60-75%) with transferability analysis
- Job: Machine Learning Engineer
- Candidate: Software engineer with strong math background
- Expected: Medium-high score (70-80%) with learning recommendations
- Job: Startup environment, fast-paced
- Candidate: Enterprise background, methodical approach
- Expected: Lower score with cultural fit considerations
- Matching Service - Orchestrates the matching process with AI integration
- Scoring Engine - Multi-factor scoring algorithm (skill match 40%, experience 30%, transferable skills 20%, potential 10%)
- Skill Normalizer - Handles skill equivalence and extraction with fuzzy matching
- AI Service - Centralized LLM integration with error handling and mock mode
- Job/Candidate Selection - User selects from sample data
- Matching Process - AI-enhanced analysis with multiple scoring factors
- Result Generation - Detailed breakdown with explanations and recommendations
- Visualization - Interactive knowledge graph and score breakdown
- In-memory storage: Suitable for demo and small-scale use
- Serverless API routes: Auto-scaling with Next.js
- Caching: Reduces API calls and improves performance
- Database Integration: Replace in-memory storage with PostgreSQL/MongoDB
- Redis Caching: Distributed caching for high-traffic scenarios
- Microservices: Split into separate services for different domains
- Queue System: Background processing for heavy AI operations
- CDN: Static asset delivery optimization
# Development
npm run dev # Start development server with Turbopack
npm run build # Build for production
npm run start # Start production server
npm run lint # Run ESLint
npm test # Run Jest tests
npm test -- --coverage # Run tests with coverage- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
Made with β€οΈ by Darshan Jitendra Chobarkar
Built by Darshan Chobarkar
LinkedIn: https://www.linkedin.com/in/dchobarkar/
Note: This system can run in mock mode without an OpenAI API key for demonstration purposes.