Developed in collaboration with Trondheim Kommune.
Currently, two official plugins are:
- Features
- Tech Stack
- Project Structure
- Installation and Setup
- Database
- Endpoints
- AI models
- Security Considerations
- Testing
- Collaborators
- Upload and store candidate CVs (PDF format)
- Store CVs securely in PostgreSQL (BYTEA)
- Extract and process CV content
- AI-based evaluation against job descriptions
- Candidate overview dashboard
- REST API for candidate management
- File size and type validation
- Error handling and loading states in UI
- React (Vite)
- TypeScript
- Tailwind CSS
- shadcn/ui
- Node.js
- Express
- TypeScript
- Multer (file upload handling)
- Pdf-parse
- PostgreSQL
- Gemeni or
- NorLLM
- Playwright
- Vitest
CV-SCREENING-TOOL/
├── api/
├── backend/
│ ├── src/
│ │ ├── assets/
│ │ ├── controllers/
│ │ ├── db/
│ │ ├── middleware/
│ │ ├── routes/
│ │ ├── services/
│ │ ├── types/
│ │ ├── utils/
│ │ ├── app.ts
│ │ └── server.ts
│ └── .env
│
├── docs/
│
├── frontend/
│ ├── node_modules/
│ ├── public/
│ ├── src/
│ │ ├── api/
│ │ ├── assets/
│ │ ├── components/
│ │ ├── hooks/
│ │ ├── lib/
│ │ ├── pages/
│ │ ├── types/
│ │ ├── utils/
│ │ ├── validation/
│ │ └── main.tsx
│ └── index.html
git clone https://github.com/your-username/cv-screening-tool.git
cd cv-screening-toolPer now the backend is not hosted and needs to be running locally for this application. See the section on database setup for more info.
After having completed the setup, open a terminal and run:
cd backend
npm installThen add .env to the backend folder with info:
DB_HOST="localhost"
DB_PORT="5432"
DB_USER="cv_app_user"
DB_PASSWORD="your_password"
DB_NAME="cv_database"
FRONTEND_HOSTED_LINK="http://localhost:5173"
LLM="gemini or norllm"
GEMINI_API_KEY=""
NORLLM_KEY=""
These corresponds to:
| Variable | Description |
|---|---|
| DB_HOST | Database host (e.g., localhost) |
| DB_PORT | Database port (default: 5432) |
| DB_USER | Database user |
| DB_PASSWORD | Database password |
| DB_NAME | Database name |
| FRONTEND_HOSTED_LINK | URL of the frontend application (used for CORS configuration) |
| LLM | AI provider ("gemini" or "norllm"), default is "gemini" |
| GEMINI_API_KEY | API key for Gemini |
| NORLLM_API_KEY | API key for NorLLM |
To run the backend, open a terminal and run these commands.
npm run devAfter this open the link: http://localhost:3000
In another terminal run:
cd frontend
npm install
npm run devThis should open our application on: http://localhost:5173
Our database is PostgreSQL, follow their guide to download the database. Then run the sql scripts in the /assets folder in backend. This configures the tables correctly.
For more installation documents on the database see the database.md file
| Description | Endpoint | Body |
|---|---|---|
| Get all candidates | GET /api/candidates | |
| Get candidate by ID | GET /api/candidates/:id | |
| Create candidate | POST /api/candidates | Content-Type: application/json { "name": "John Doe", "email": "john@examplecom"} |
| Upload CV | POST /api/candidates/:id/cv | Content-Type: multipart/form-data FormData: cv: |
The system supports integration with:
- Gemini
- NorLLM
The active model is configured via the LLM environment variable.
- File upload size limit (10MB)
- Only PDF file types accepted
- Environment variables for sensitive keys
- CORS configuration on backend
- No production credentials committed to repository
- Designed for test data during development
- Unit testing with Vitest
- End-to-end testing with Playwright
- Helene Selvig
- Marius Brun
- Markus Watle
- Mohammad Kazem Khajeh
- Marius Fornes
- Baris Batur
- Ingvild Kirkaune Sandven