A comprehensive full-stack monorepo application for recruiters to manage candidates, conduct interviews with real-time transcription, and analyze recruiting performance with AI-powered insights.
- Dashboard: Overview of recruiting metrics and recent activity
- Candidate Management: Comprehensive candidate profiles with search and filtering
- Live Interview: Real-time transcription with AI-powered insights
- Analytics: Performance metrics and recruiting insights
- Responsive Design: Professional interface optimized for recruiting workflows
- RESTful API: Complete CRUD operations for candidates, interviews, and notes
- Real-time Features: WebSocket support for live transcription
- Database: SQLite with TypeORM for data persistence
- AI Integration: Mock AI services for candidate analysis and insights
- Analytics: Comprehensive reporting and metrics
- React 18 with TypeScript
- Vite for fast development
- Tailwind CSS for styling
- Lucide React for icons
- Socket.IO client for real-time features
- NestJS framework
- TypeORM with SQLite database
- Socket.IO for WebSocket connections
- Class-validator for input validation
- Comprehensive API documentation
- Node.js 18+
- npm or yarn
- Python 3.8+ (for Claude Code hooks)
- uv package manager (for Python dependency management)
-
Install Python 3.8+:
macOS:
# Using Homebrew brew install python # Or download from python.org
Windows:
# Download from python.org and run installer # Or using Chocolatey choco install python # Or using winget winget install Python.Python.3
-
Install uv package manager:
macOS/Linux:
curl -LsSf https://astral.sh/uv/install.sh | sh source ~/.zshrc # or ~/.bashrc for bash
Windows:
# Using PowerShell powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" # Or using pip pip install uv
-
Install Node.js dependencies:
npm install
This will automatically install dependencies for all workspaces using npm workspaces.
-
Start the development servers:
# Start both frontend and backend concurrently npm run dev # Or start them separately: # Backend only (runs on http://localhost:3001) npm run backend:dev # Frontend only (runs on http://localhost:5173) npm run client:dev
-
Access the application:
- Frontend: http://localhost:5173
- Backend API: http://localhost:3001
GET /candidates- Get all candidates with optional filtersGET /candidates/:id- Get candidate by IDPOST /candidates- Create new candidatePATCH /candidates/:id- Update candidateDELETE /candidates/:id- Delete candidatePOST /candidates/:id/generate-summary- Generate AI summary
GET /interviews- Get all interviewsGET /interviews/upcoming- Get upcoming interviewsGET /interviews/:id- Get interview by IDPOST /interviews- Create new interviewPATCH /interviews/:id- Update interviewDELETE /interviews/:id- Delete interviewPOST /interviews/:id/generate-summary- Generate AI summary
GET /notes- Get all notesPOST /notes- Create new notePATCH /notes/:id- Update noteDELETE /notes/:id- Delete note
GET /analytics/dashboard- Dashboard metricsGET /analytics/interview-trends- Interview trend dataGET /analytics/candidate-pipeline- Pipeline analysisGET /analytics/skills-analysis- Skills breakdownGET /analytics/interviewer-performance- Performance metrics
start-transcription- Start interview transcriptionstop-transcription- Stop interview transcriptionadd-bookmark- Add bookmark during interview
transcript-update- Real-time transcript updatesai-insight- AI-generated insightsbookmark-added- Bookmark confirmation
The application uses SQLite with the following main entities:
- Candidate: Core candidate information and status
- Interview: Interview records with transcripts and scores
- Note: Notes and AI insights linked to candidates
├── client-basic/ # React frontend application
│ ├── src/ # React components and services
│ │ ├── components/ # React components
│ │ ├── services/ # API and WebSocket services
│ │ └── types.ts # TypeScript type definitions
│ ├── index.html # HTML entry point
│ ├── vite.config.ts # Vite configuration
│ ├── tailwind.config.js # Tailwind CSS config
│ └── package.json # Frontend dependencies
├── backend/ # NestJS backend application
│ ├── src/
│ │ ├── candidates/ # Candidate module
│ │ ├── interviews/ # Interview module
│ │ ├── notes/ # Notes module
│ │ ├── analytics/ # Analytics module
│ │ └── transcription/ # WebSocket transcription
│ └── package.json # Backend dependencies
└── package.json # Root workspace configuration
This monorepo is structured to support multiple frontend applications. To add a new frontend:
- Create a new directory (e.g.,
client-admin,client-mobile) - Add the new directory to the
workspacesarray in the rootpackage.json - Create the new application's
package.json - Add new scripts to the root
package.jsonfor the new application
npm run dev- Start both backend and frontend in development modenpm run client:dev- Start only the frontend development servernpm run backend:dev- Start only the backend development servernpm run wait-backend- Wait for backend to be ready (used internally)
- Real-time Transcription: Mock implementation using WebSockets
- AI Insights: Simulated AI analysis with realistic responses
- Responsive Design: Mobile-first approach with Tailwind CSS
- Type Safety: Full TypeScript coverage for both frontend and backend
- Data Persistence: SQLite database with proper relationships
For production deployment:
- Build the frontend:
cd client-basic && npm run build - Build the backend:
cd backend && npm run build - Configure environment variables for database and API URLs
- Deploy both applications to your preferred hosting platform
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
This project is licensed under the MIT License.