Interview Scheduler is a full-stack hiring operations project built as a monorepo. It combines a public application intake flow with an internal admin workspace for reviewing candidates, scheduling interviews, and tracking hiring activity.
The project has two main parts:
backend/contains the ASP.NET Core API, database access, authentication, ATS-style scoring logic, and automatic interview creation.frontend/contains the React application used by both public applicants and authenticated admins.
The system supports two parallel hiring flows:
- Public application flow
Applicants open
/google-form, fill in their details, upload a CV, and the form auto-submits once valid. - Internal admin flow Recruiters or admins log in, review candidates and interviews, inspect ATS-scored applications, and monitor activity from the dashboard.
- A candidate submits an application with a CV.
- The backend stores the file in
backend/Uploads/Applications. - The ATS scoring logic validates the submission and scores it out of 100.
- If the application passes the acceptance threshold, the backend:
- creates or updates the candidate record
- assigns an interviewer based on the applied role
- creates an interview automatically
- The frontend admin area shows the resulting records in:
- Dashboard
- Candidates
- Interviews
- Applications / ATS review
InterviewScheduler/
|-- backend/ ASP.NET Core API, EF Core, SQL Server, JWT auth
|-- frontend/ React + Vite client application
`-- README.md
- JWT-based admin authentication
- Candidate CRUD management
- Interview CRUD management
- Public application submission with CV upload
- ATS-style scoring for submitted applications
- Automatic candidate and interview creation for accepted applications
- Admin application review with score breakdown and interview preview
- Dashboard with candidate and interview summary data
- Light/dark theme toggle with persisted preference
- Global API exception handling
- Login and public submission rate limiting
- Backend: ASP.NET Core
net9.0, Entity Framework Core, SQL Server, JWT, Swagger - Frontend: React, Vite, React Router, Axios
cd backend
dotnet restore
dotnet ef database update
dotnet run --urls http://localhost:5000The API will be available at http://localhost:5000, and Swagger at http://localhost:5000/swagger.
cd frontend
npm install
npm run devThe frontend runs at http://localhost:5173 by default and expects the API at http://localhost:5000/api.
- Email:
admin@interviewscheduler.local - Password:
Admin@12345!
- Public application form:
http://localhost:5173/google-form - Application status page:
http://localhost:5173/application-status/:trackingCode - Admin login:
http://localhost:5173/login - Admin dashboard:
http://localhost:5173/dashboard - Candidates:
http://localhost:5173/candidates - Interviews:
http://localhost:5173/interviews - Applications:
http://localhost:5173/applications
- Backend details: backend/README.md
- Frontend details: frontend/README.md