NexHR: AI-Powered HRMS with RAG Case Study
- project
- AI-Powered HRMS
- context
- Our own HR product. The Bitlogs team handled all of it: product design, frontend, backend, AI and integrations.
- scope
- AI / ML
- SaaS Platform
- Face Recognition
- RAG Chatbot
- Payroll Automation
- Recruitment (ATS)
- service
- Built with our AI Solutions service.
HR DashboardLanding Page


The short version.
NexHR is an HR system we designed and built from scratch, and one install can serve several companies. It follows an employee from the job post all the way to their monthly payslip. AI ranks applicants and writes up candidate summaries. Staff check in with their face, but only from the office. Payroll pulls in attendance, leave, loans and expenses on its own. And there's an assistant that answers questions from company policy and can file a leave request for you. Under the hood it's React and Django, with PostgreSQL and pgvector holding both the normal data and the embeddings, and Celery running the background jobs.
- AI/ML models in production paths
- 4
- Face-verified check-in
- <1.5s
- Third-party integrations
- 5
Inside the product.

01 / 06Dashboard Overview
What was broken, risky, or missing.
- 01
Most hiring still means keyword filters and reading CVs one at a time. Good candidates who word their skills differently from the job post get dropped, and shortlisting for one role can eat days.
- 02
Button-click and punch-clock attendance is easy to cheat. A friend can clock you in, or you can check in from home, and nobody notices. The records also rarely make it into payroll cleanly.
- 03
Every month someone rebuilds payroll by hand, checking attendance sheets against approved leave, loan instalments and expense claims. Each of those steps is a place for a mistake to creep in.
- 04
Zoho People, Workday, Gusto and Rippling cover the basics well. We couldn't find one that also did AI candidate screening, automatic interview scheduling, face check-in and an HR assistant in the same product.
The decisions, and the trade-off.
Screening HR can explain. We turn job descriptions and candidate profiles into embeddings with BAAI/bge-base-en-v1.5 (768 dimensions) and keep them in pgvector. JobBERT reads the CV and pulls out skills. The ranking formula is visible to HR, and a person always makes the final call.
Face recognition that runs on a normal CPU. OpenCV finds the face, MobileFaceNet on ONNX Runtime recognises it, and a 100-metre geofence checks the person is at the office. No special hardware is needed, and if the lighting or camera is poor, employees can check in manually.
Payroll built from the data it depends on. Before it calculates anything, NexHR collects attendance, approved leave, loan instalments and approved expense claims, then works out gross-to-net pay with fixed rules. AI never touches the numbers. Salaries go out in bulk through Stripe, and you can see the status of each payment.
An assistant that can do things for you. We split policy documents into chunks, embed them and store them in pgvector. Google Gemini answers from the closest matches and shows its sources. It can also look up employees and submit leave requests, but only when the user has permission, and it only ever searches that user's own company.
No separate vector database. Candidate, job and policy embeddings sit in PostgreSQL right next to the rest of the data. That's one database to run and back up, and a vector search limited to one company is a single SQL query.
Permissions checked by the API. Every company's data is kept apart. Each company sets up its own roles (Admin, HR Manager, Finance Manager and Employee to start with) from 30 screen-level permissions. Login is JWT or Google Sign-In, and every endpoint checks permissions, including the ones the assistant calls.
Running the embedding and face models ourselves means we deal with loading them, memory use and CPU time, instead of paying someone else's API to do it. We decided that was worth it. CVs, check-ins and policy chunks are the high-volume work, and doing them in-house costs nothing per request and keeps sensitive HR data on our own servers. We only call a hosted LLM where we need written text: candidate summaries and the assistant's answers.
What it runs on.
- React
- Django
- Celery
- PostgreSQL
- pgvector
- ONNX
- Gemini
- TypeScript
- Redis
- OpenCV
- Stripe
- Docker
Concrete, shipped, documented.
01AI / ML Modules
- AI Recruitment: resume screening, JobBERT skill extraction, AI-written candidate summaries, LinkedIn job posting and Google Calendar interview scheduling
- Face Attendance: OpenCV and ONNX face recognition, a 100 m geofence, manual check-in as a backup, and attendance that feeds straight into payroll
- HR Assistant: Google Gemini answering from company policies, with sources, and able to file leave requests for users who are allowed to
02Platform
- Payroll: pulls in attendance, leave, loans and expenses, works out gross-to-net pay and pays salaries in bulk through Stripe
- Hiring: interviews over several rounds with written feedback, PDF offer letters with e-signature, onboarding, and bulk employee import from CSV
- Dashboards: separate views for HR, Finance and Employees, custom roles, and login with JWT or Google
- Leave, Expenses and Reports: approvals for leave and expenses, PDF payslips emailed to staff, and a monthly PDF finance report
AI Scoring Formula
0.50 · 0.30 · 0.20
Final Score = (0.50 × Semantic Similarity) + (0.30 × Skills Coverage) + (0.20 × Experience Match). Similarity compares the job and candidate embeddings. Experience is scored on a curve, so someone a little short on years isn't thrown out, and HR can shift the balance between skills and experience for each role. Anyone scoring 0.65 or higher is flagged for the shortlist.
Before and after, honestly.
- Shortlisting used to mean reading CVs one by one. Now every applicant is scored, ranked and summarised as soon as applications close.
- Interviews used to be set up over email. Now calendar invites are created, moved and cancelled for every round without anyone chasing them.
- Check-in used to be a button anyone could press. Now it confirms your face and your location in under 1.5 seconds, down from over 3 seconds in early builds.
- Payroll used to be rebuilt from spreadsheets. Now attendance, leave, loans and expenses go straight into the pay calculation, and finance just reviews and approves.
- Payslips used to be put together by hand. Now they're generated as PDFs and emailed out.
- HR used to answer the same policy questions over and over. Now the assistant answers from company documents and can file leave requests too.
NexHR is a good picture of how we build AI products. Each AI feature is kept separate, each one has a manual way around it, scores can be explained, and money is handled by plain rules. The parts we built here, like ONNX models, RAG search over documents, pgvector and background job queues, are the same ones we use on client projects.
Want results like NexHR?
Building an AI-powered internal tool or SaaS product? Let's scope it together. We’ll tell you how long it takes and what it costs, for free, in plain English.
No agency jargon. No surprise invoices. Just engineers who give you a straight answer.
