This implementation includes:
- Backend (NestJS): Core API and business logic
- AI Service (FastAPI): CV parsing and ranking using LangChain + Ollama
- Frontend (Next.js 14): Modern UI with React, TypeScript, TailwindCSS, and ShadCN UI
- Databases: PostgreSQL (main data), Weaviate (vector search)
- Infrastructure: Docker Compose for local development
- Node.js 18+
- Python 3.11+
- Docker & Docker Compose
- Ollama (for local LLM)
- Install Ollama and pull the required models:
# Install Ollama from https://ollama.ai
ollama pull qwen2.5:7b
ollama pull nomic-embed-text- Start infrastructure services:
docker-compose up -d- Setup Backend (NestJS):
cd backend
npm install
npm run start:dev- Setup AI Service (FastAPI):
cd ai-service
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install -r requirements.txt
uvicorn main:app --reload --port 8001- Setup Frontend (Next.js):
cd frontend
npm install
npm run dev- Frontend: http://localhost:3000
- Backend API: http://localhost:3001
- AI Service: http://localhost:8001
- API Docs (FastAPI): http://localhost:8001/docs
- Supports PDF and DOCX formats
- Extracts: personal info, skills, experience, education
- Structured data mapping
- Semantic similarity matching with job requirements
- Scoring based on:
- Skills match (40%)
- Experience relevance (30%)
- Education fit (20%)
- Additional factors (10%)
- Weaviate integration for semantic CV search
- Fast candidate retrieval based on job descriptions
- Drag & drop CV upload
- Real-time parsing status
- Candidate ranking dashboard
- Detailed candidate profiles
- Backend: NestJS, TypeScript, TypeORM, PostgreSQL
- AI Service: FastAPI, LangChain, Ollama, Weaviate
- Frontend: Next.js 14, React, TypeScript, TailwindCSS, ShadCN UI
- Databases: PostgreSQL, Redis, Weaviate
- Infrastructure: Docker, Docker Compose
POST /api/candidates/upload- Upload CVGET /api/candidates- List all candidatesGET /api/candidates/:id- Get candidate detailsPOST /api/candidates/rank- Rank candidates for a job
POST /parse-cv- Parse CV filePOST /rank-candidates- Rank candidates against job descriptionPOST /extract-skills- Extract skills from text
Create .env files in each service directory:
DATABASE_HOST=localhost
DATABASE_PORT=5432
DATABASE_USER=postgres
DATABASE_PASSWORD=postgres
DATABASE_NAME=recruitment_db
REDIS_HOST=localhost
REDIS_PORT=6379
AI_SERVICE_URL=http://localhost:8001
JWT_SECRET=your-secret-keyOLLAMA_BASE_URL=http://localhost:11434
MODEL_NAME=qwen2.5:7b
EMBEDDING_MODEL=nomic-embed-text
WEAVIATE_URL=http://localhost:8080NEXT_PUBLIC_API_URL=http://localhost:3001- id: UUID (primary key)
- email: string (unique)
- full_name: string
- phone: string
- skills: json
- experience: json
- education: json
- cv_file_path: string
- parsed_data: json
- score: float
- created_at: timestamp
- updated_at: timestamp# Backend
cd backend && npm run test
# AI Service
cd ai-service && pytest
# Frontend
cd frontend && npm run test# Backend
npm run lint
npm run format
# AI Service
black .
flake8
# Frontend
npm run lint
npm run formatThis project is licensed under the Apache License 2.0 - see the LICENSE file for details.
Copyright 2025 Agentic AI Recruitment System Contributors
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.