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
workspaces
array in the rootpackage.json
- Create the new application's
package.json
- Add new scripts to the root
package.json
for 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.