OptaHire:AI 招聘筛选与招聘流程平台(PERN 全栈毕业设计项目)
itxSaaad/opta-hire-ai-recruitment-fyp-app-pern
旁遮普大学古吉兰瓦拉校区计算机专业学生开源了毕业设计项目 OptaHire,一个基于 PERN 全栈的 AI 招聘筛选与流程平台,将候选人、招聘官和面试官纳入同一工作流。
OptaHire
AI candidate screening and recruitment workflow platform, built as a final-year project. OptaHire brings candidates, recruiters, and interviewers into one workflow: candidates discover jobs and apply with a resume; recruiters review applicants and shortlist matches; teams schedule interviews, communicate in real time, and manage hiring contracts and payments.
The FYP contribution is an end-to-end AI recruitment workflow: candidate profiles and resumes feed a transparent candidate-job matching pipeline, and recruiter decisions continue through applications, interviews, contracts, and payments. The Python service ranks candidates with a weighted scoring model: direct skill matches plus TF-IDF vector cosine similarity, experience relevance, education alignment, industry rules, and overall text similarity. This is explainable decision support for human recruiters, not an automated hiring decision. The PERN stack, scikit-learn NLP features, Stripe Connect, Socket.IO, and peer-to-peer WebRTC bring the full hiring workflow into one system.
Built by Computer Science students at the University of the Punjab, Gujranwala Campus. Contributions, issue reports, and stars help us improve and share the project.
Live app · Contribute · Issues · Star on GitHub
How the system works
flowchart LR
Candidate[Candidate: profile, resume, search, apply] --> Web
Recruiter[Recruiter: jobs, applicants, shortlist, contracts] --> Web
Interviewer[Interviewer: schedule, interview, feedback, payouts] --> Web
Admin[Admin: platform management and reports] --> Web
subgraph Vercel[One Vercel project: client, API, and ML services]
Web[React 18 + Vite client<br/>Redux Toolkit Query, Axios, Stripe Elements, Socket.IO client]
Router[Vercel routing<br/>page routes → client<br/>/api and /socket.io → API]
API[Node.js 24 + Express API<br/>sessions, roles, REST, validation, rate limits]
Realtime[Socket.IO signaling<br/>chat and interview events]
ML[Python Flask service<br/>resume/job features, weighted match scoring, shortlist]
Web --> Router --> API
API --> Realtime
API -->|private service binding| ML
end
Web -->|same-origin HTTPS /api/v1, cookies| Router
Web <-->|Socket.IO chat, offer/answer/ICE| Realtime
Web <-->|WebRTC media stream| Peer[Other interview participant browser]
API -->|Sequelize over verified TLS| DB[(Supabase PostgreSQL)]
API -->|transaction and webhook APIs| Stripe[Stripe Connect]
Stripe -->|signed payment events| API
API -->|verification and notification email| SMTP[Configured SMTP provider]
ML -->|loads bundled model and scoring settings| Model[scikit-learn model]
Loading
Candidates use the browser to build profiles, upload resumes, find openings, apply, and join interviews. Recruiters publish jobs, review applicants and score explanations, shortlist, communicate, and manage contracts and payments. Interviewers manage interview participation, submit ratings, and configure Stripe Connect onboarding; administrators manage users and reporting. REST requests and Socket.IO signaling pass through Express, while interview media travels peer-to-peer over WebRTC. For exact scoring inputs, weights, missing-data fallbacks, and ranking behavior, see candidate matching.
Services
| Service | Code | Responsibility |
|---|---|---|
| Web client | client/ |
Role-based React experience, API calls, realtime UI, interview browser and Stripe UI |
| API | server/ |
Express endpoints, authentication, PostgreSQL persistence, email, Stripe, Socket.IO and ML proxy |
| Matching service | ml-services/ |
Flask health/model endpoints and candidate-job scoring/shortlisting |
The root vercel.json configures all three services in one Vercel project. Vercel uses generic Production and Preview environment scopes; a Preview deployment is selected by its deployment context, not by branch-specific secrets. Production and Preview share database/payment/email integrations, so preview effects are real. The app uses in-process rate limiting and no external cache service. Heroku and Render remain available until the final data sync and hosted workflow checks pass.
Get started
Install the client and API dependencies in their respective folders, configure local service settings from the tracked examples, then start the API (npm run dev in server/), client (npm run dev in client/), and Flask app (uv sync --frozen then uv run --frozen python app.py in ml-services/). Set the local ML service URL to http://localhost:5001/ for the API proxy. See local setup for prerequisites, commands, ports, and configuration.
Documentation
- Architecture and user journeys
- Feature workflows
- API and realtime flows
- Data model and migration runbook
- Deployment and environment scopes
- Local development and conventions
- Client guide · API guide · ML guide
- All documentation
Contributing
We welcome improvements to accessibility, candidate matching, interview workflows, security, documentation, and deployment. Start with an issue or open a pull request describing the user problem, the implementation, and how you verified it. Please do not commit credentials, real candidate data, or generated environment files.
This project is licensed under the MIT License; see LICENSE.
来源:GitHub · github.com