AI-powered resume ranking and shortlisting platform for early-stage startups.
HireRank helps startup founders and small teams efficiently process large volumes of resumes using AI-powered scoring and ranking. Instead of keyword matching, it uses semantic understanding to provide consistent, explainable candidate evaluations.
- AI Scoring Engine: Weighted combination of semantic match, skill relevance, and experience alignment
- Structured Explanations: Clear strengths, gaps, and recommendations for each candidate
- Consistent Ranking: Same evaluation logic applied to all candidates
- Bulk Upload: Process up to 50 resumes per job posting
- CSV Export: Export shortlists for further processing
- Python 3.11+
- FastAPI
- PostgreSQL
- SQLAlchemy + Alembic
- OpenAI (embeddings + completions)
- AWS S3 / MinIO (file storage)
- React 18 + Vite
- TypeScript
- Tailwind CSS
- React Router
├── backend/ # FastAPI backend
│ ├── app/
│ │ ├── api/ # REST endpoints
│ │ ├── core/ # Security, exceptions
│ │ ├── models/ # SQLAlchemy models
│ │ ├── schemas/ # Pydantic schemas
│ │ └── services/ # Business logic + AI
│ └── requirements.txt
│
├── frontend/ # React frontend
│ ├── src/
│ │ ├── api/ # API client
│ │ ├── components/ # UI components
│ │ ├── context/ # React context
│ │ └── pages/ # Page views
│ └── package.json
│
└── README.md
- Python 3.11+
- Node.js 18+
- PostgreSQL 14+
- MinIO (for local development) or AWS S3
cd backend
# Create virtual environment
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
# Copy environment file
cp .env.example .env
# Edit .env with your configuration
# Run database (assuming PostgreSQL is running)
# Create database: createdb hirerank
# Start server
uvicorn app.main:app --reloadcd frontend
# Install dependencies
npm install
# Copy environment file
cp .env.example .env
# Start development server
npm run dev# Using Docker
docker run -d \
-p 9000:9000 \
-p 9001:9001 \
-e MINIO_ROOT_USER=minioadmin \
-e MINIO_ROOT_PASSWORD=minioadmin \
minio/minio server /data --console-address ":9001"
# Create bucket: hirerank-resumes via MinIO console at http://localhost:9001DATABASE_URL=postgresql://postgres:postgres@localhost:5432/hirerank
SECRET_KEY=your-secret-key
OPENAI_API_KEY=sk-...
AWS_ACCESS_KEY_ID=minioadmin
AWS_SECRET_ACCESS_KEY=minioadmin
AWS_S3_BUCKET=hirerank-resumes
AWS_S3_ENDPOINT_URL=http://localhost:9000
VITE_API_URL= # Leave empty for development proxy
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/v1/auth/signup |
Create account |
| POST | /api/v1/auth/login |
Login |
| GET | /api/v1/auth/me |
Get current user |
| GET | /api/v1/jobs |
List jobs |
| POST | /api/v1/jobs |
Create job |
| GET | /api/v1/jobs/{id} |
Get job details |
| POST | /api/v1/jobs/{id}/candidates/upload |
Upload resumes |
| GET | /api/v1/jobs/{id}/candidates |
List ranked candidates |
| GET | /api/v1/jobs/{id}/candidates/{cid} |
Get candidate details |
| GET | /api/v1/jobs/{id}/export |
Export CSV |
Overall Score = 40% × Semantic + 35% × Skills + 25% × Experience
- Semantic (40%): Cosine similarity between JD and resume embeddings
- Skills (35%): LLM-evaluated match of required vs. present skills
- Experience (25%): Years and domain relevance alignment
- Synchronous processing (30-50 resumes per upload max)
- Single user per company account
- No real-time notifications
- No resume parsing for structured data (text extraction only)
MIT