跳到正文
GitHub·· 7 天前AI 评分15

OptaHire:AI 招聘筛选与招聘流程平台(PERN 全栈毕业设计项目)

itxSaaad/opta-hire-ai-recruitment-fyp-app-pern

AI 导读

旁遮普大学古吉兰瓦拉校区计算机专业学生开源了毕业设计项目 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

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