Real-time interview proctoring built for modern hiring workflows. This platform combines live video streaming, computer vision, and role-based dashboards to help teams monitor interviews, detect suspicious behavior, and generate actionable reports without slowing the experience down.
Note: open the live demo in one browser as a candidate and in another browser as an interviewer, then create a session and test the full flow.
- Real-time candidate monitoring with WebRTC and Socket.IO
- Computer vision powered by MediaPipe, TensorFlow.js, and BlazeFace
- Smart alerts for face loss, gaze shifts, and unauthorized objects
- Separate candidate and interviewer experiences with role-based access
- Reports that summarize session integrity with timelines and scores
- Cloudinary support for scalable video and report storage
- Start an interview session and share a session ID instantly
- Join as a candidate and stream video in real time
- Track attention and suspicious activity as the interview happens
- Review alerts, session history, and post-interview reports
- Export results for record keeping and follow-up
Frontend: React 18, TypeScript, Vite, Tailwind CSS, Shadcn UI
Backend: Node.js, Express, TypeScript, Socket.IO
Database: MongoDB with Mongoose ODM
Computer Vision: MediaPipe, TensorFlow.js, BlazeFace
Auth: JWT with role-based access control
Realtime: WebSocket streaming for live updates
Storage: Cloudinary for media uploads and delivery
- Node.js v18 or higher
- MongoDB local or cloud instance
- npm or yarn
- Cloudinary account if you want cloud storage enabled
git clone https://github.com/arcc-hitt/Video_Interviews_Proctoring_System.git
cd Video_Interviews_Proctoring_System
npm run install:allCreate the backend env file:
# Windows
copy backend\.env.example backend\.env
# macOS/Linux
cp backend/.env.example backend/.envExample backend values:
PORT=5000
NODE_ENV=development
MONGODB_URI=mongodb://localhost:27017/video-proctoring
JWT_SECRET=your-super-secret-jwt-key-here
JWT_EXPIRES_IN=24h
CORS_ORIGIN=http://localhost:5173
CLOUDINARY_CLOUD_NAME=your-cloudinary-cloud-name
CLOUDINARY_API_KEY=your-cloudinary-api-key
CLOUDINARY_API_SECRET=your-cloudinary-api-secretCreate the frontend env file:
# Windows
copy frontend\.env.example frontend\.env
# macOS/Linux
cp frontend/.env.example frontend/.envExample frontend values:
VITE_API_BASE_URL=http://localhost:5000
VITE_WS_URL=ws://localhost:5000Start both apps:
npm run devOr run them separately:
npm run dev:backend
npm run dev:frontend- Start MongoDB or connect to your cloud database.
- Launch the app with
npm run dev. - Sign up or sign in as an interviewer.
- Sign up or sign in as a candidate.
- Create a session from the interviewer dashboard.
- Join the session from the candidate side using the session ID.
- Watch live alerts, detection signals, and session metrics appear in real time.
- Generate reports after the interview finishes.
Audio tip: if you test with two tabs on the same browser, mute one side or use two browsers/devices to avoid feedback noise.
If you enable Cloudinary, video recordings and reports can be stored remotely instead of locally.
- Create a free Cloudinary account
- Copy the Cloud Name, API Key, and API Secret from your dashboard
- Add them to
backend/.env - Restart the backend to enable cloud storage
Root
npm run install:allinstalls dependencies for all packagesnpm run devstarts frontend and backend togethernpm run buildcreates production buildsnpm run lintruns linting across the workspace
Backend
npm run devstarts the API server with hot reloadnpm run buildcompiles TypeScriptnpm run testruns backend testsnpm run seedseeds sample data
Frontend
npm run devstarts the Vite appnpm run buildbuilds the client for productionnpm run previewpreviews the production buildnpm run testruns component tests
frontend/ React + TypeScript UI
backend/ Express + TypeScript API
shared/ Shared TypeScript types
- Frontend: Vercel
- Backend: Railway
- Database: MongoDB Atlas
- Fork the repository.
- Create a branch for your work.
- Commit your changes.
- Push the branch and open a pull request.