A clickable MVP prototype demonstrating an AI-powered recruitment workflow with resume screening and automated interview assessment.
├── frontend/ # React + Vite → deploy to Vercel
├── backend/ # Express API → deploy to Render
├── render.yaml # Render Blueprint (optional)
└── package.json # Local dev scripts only
- HR Login — Mock authentication ([email protected] / hr123)
- Dashboard — Stats cards, charts, recent candidates
- Create Job — Define job title, department, skills, and description
- Resume Upload — Upload PDF/DOCX resumes with AI-powered screening
- Candidate Ranking — Scored and ranked by AI with skills match analysis
- Interview Links — Generate unique interview URLs for shortlisted candidates
- AI Interview — 5–8 role-specific questions with progress tracking
- AI Evaluation — Technical, communication, and overall scores with recommendations
- HR Review — Select, reject, or hold candidates with full reports
| Layer | Technology |
|---|---|
| Frontend | React, TypeScript, Tailwind CSS, shadcn/ui, Recharts |
| Backend | Node.js, Express |
| Database | PostgreSQL (Neon) |
| AI | Groq API (Llama 3.3, with mock fallback) |
npm run install:allCopy backend/.env.example to backend/.env:
DATABASE_URL=postgresql://user:password@host/neondb?sslmode=require
GROQ_API_KEY=gsk-your-key-here
GROQ_MODEL=llama-3.3-70b-versatile
USE_MOCK_AI=false
Terminal 1 — Backend:
npm run dev:backendTerminal 2 — Frontend:
npm run dev:frontendOpen http://localhost:5173. The Vite dev server proxies /api and /uploads to the backend on port 3001.
- Push this repo to GitHub.
- In Render, create a Web Service from the repo.
- Set Root Directory to
backend. - Build Command:
npm install - Start Command:
npm start - Add environment variables:
DATABASE_URL— your Neon PostgreSQL connection stringGROQ_API_KEY— your Groq API keyGROQ_MODEL—llama-3.3-70b-versatileUSE_MOCK_AI—falseFRONTEND_URL— your Vercel frontend URL (e.g.https://your-app.vercel.app)
Alternatively, use the included render.yaml Blueprint for one-click setup.
Note: Render's filesystem is ephemeral — uploaded resumes are lost on redeploy. For production, swap file storage for S3 or similar.
- In Vercel, import the same GitHub repo.
- Set Root Directory to
frontend. - Framework preset: Vite (auto-detected).
- Add environment variables (Production):
VITE_API_URL—https://your-backend.onrender.com/apiVITE_BACKEND_URL—https://your-backend.onrender.com
- Deploy.
The frontend calls the Render backend directly via these env vars. CORS is configured on the backend using FRONTEND_URL.
- Login with
[email protected]/hr123 - Create a Job — e.g. "Senior Frontend Developer" with skills like React, TypeScript, Node.js
- Upload Resumes — Select the job, upload PDF/DOCX files, click "Analyze with AI"
- Review Results — Candidates ranked by score with matched/missing skills
- Shortlist — Click "Shortlist & Copy Link" to generate an interview URL
- Interview — Open the link in a new tab/browser as the candidate
- Submit — Answer all questions and submit for AI evaluation
- HR Review — Go to Candidates → Review to see scores and make a decision
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/health | Health check |
| POST | /api/auth/login | HR login |
| GET | /api/dashboard/stats | Dashboard statistics |
| GET/POST | /api/jobs | List/create jobs |
| POST | /api/candidates/upload/:jobId | Upload & analyze resumes |
| GET | /api/candidates | List candidates |
| PATCH | /api/candidates/:id/status | Update candidate status |
| POST | /api/candidates/:id/shortlist | Generate interview link |
| GET | /api/interview/:token | Get interview session |
| POST | /api/interview/:token/submit | Submit & evaluate interview |
This is a prototype/MVP — mock authentication, mock AI fallback, and simplified parsing are intentional.