https://github.com/siiiidddexe/candsync
A modern self-hosted Applicant Tracking System (ATS) with AI-powered resume extraction. Built with Node.js, SQLite, React, and Vite.
https://github.com/siiiidddexe/candsync
ai ats candidate-tracking nodejs react recruitment resume-parser sqlite
Last synced: about 5 hours ago
JSON representation
A modern self-hosted Applicant Tracking System (ATS) with AI-powered resume extraction. Built with Node.js, SQLite, React, and Vite.
- Host: GitHub
- URL: https://github.com/siiiidddexe/candsync
- Owner: siiiidddexe
- License: mit
- Created: 2026-06-27T21:00:39.000Z (5 days ago)
- Default Branch: master
- Last Pushed: 2026-06-28T11:54:16.000Z (5 days ago)
- Last Synced: 2026-06-28T13:17:19.261Z (5 days ago)
- Topics: ai, ats, candidate-tracking, nodejs, react, recruitment, resume-parser, sqlite
- Language: JavaScript
- Size: 116 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# ๐ฏ CandSync
**A modern, self-hosted Applicant Tracking System (ATS) with AI-powered resume extraction.**
[](https://nodejs.org)
[](https://reactjs.org)
[](https://sqlite.org)
[](LICENSE)
---
## โจ Features
| Category | Details |
|---|---|
| **Jobs** | Create & manage job postings with client, location, skills, and status |
| **Candidates** | Rich candidate profiles with 17 fields per candidate |
| **AI Extraction** | Auto-fill candidate forms from PDF / image resumes (Gemini + OpenRouter) |
| **Excel Export** | Export candidate lists with or without resume links |
| **Pipeline Statuses** | Fully customizable candidate pipeline stages with color coding |
| **User Management** | Granular per-user permissions (create/read/update/delete per resource) |
| **Job Access Control** | Restrict users to specific jobs only |
| **Resume Access** | Fine-grained control over who can view uploaded resumes |
| **Auth** | JWT-based authentication with 7-day sessions |
| **Responsive UI** | Works on desktop and mobile |
---
## ๐๏ธ Tech Stack
```
candsync/
โโโ backend/ # Node.js ยท Express ยท SQLite (node:sqlite built-in)
โโโ frontend/ # React 18 ยท Vite ยท TailwindCSS ยท Heroicons
```
**Backend dependencies:** `express`, `bcryptjs`, `jsonwebtoken`, `multer`, `xlsx`, `uuid`, `node-fetch`, `dotenv`
**Frontend dependencies:** `react`, `react-router-dom`, `axios`, `react-hot-toast`, `@heroicons/react`
> **Node.js 22+ required** โ uses the built-in `node:sqlite` module (no separate sqlite3 install needed).
---
## ๐ Quick Start
### Prerequisites
- [Node.js 22+](https://nodejs.org) (check with `node --version`)
- Git
### 1. Clone & Install
```bash
git clone https://github.com/siiiidddexe/candsync.git
cd candsync
# Install all dependencies (backend + frontend)
npm run install:all
```
### 2. Configure Environment
```bash
cd backend
copy .env.example .env # Windows
# cp .env.example .env # macOS/Linux
```
Edit `backend/.env` and set at minimum:
```env
JWT_SECRET=your-long-random-secret-here
```
To enable **AI resume extraction**, add at least one API key:
```env
GEMINI_API_KEY=AIza... # Get from https://aistudio.google.com
OPENROUTER_API_KEY=sk-or-... # Get from https://openrouter.ai
```
> API keys can also be set from the **Settings** page in the UI after first login.
### 3. Start
**Option A โ One-click (Windows):**
```
Double-click start.bat
```
**Option B โ Manual (two terminals):**
```bash
# Terminal 1 โ Backend
cd backend
npm run dev # dev mode (nodemon)
# npm start # production mode
# Terminal 2 โ Frontend
cd frontend
npm run dev
```
### 4. Open
| Service | URL |
|---|---|
| Frontend | http://localhost:5173 |
| Backend API | http://localhost:5000 |
**Default credentials:**
```
Email: admin@candsync.com
Password: Admin@123
```
> โ ๏ธ Change the default password immediately after first login.
---
## ๐ Usage Guide
### Jobs
1. Navigate to **Jobs** (home page)
2. Click **New Job** โ fill title, client, location, skills, description
3. Click **N Candidates** on any job card to manage that job's pipeline
### Adding Candidates
1. Open a job โ click **Add**
2. *(Optional)* Upload a PDF/image resume and click **Auto-Fill with AI** โ fields populate automatically
3. Fill any remaining fields and set the pipeline **Status**
4. Click **Save**
### Exporting
- **Export** โ downloads an Excel file with all candidate fields
- **+ Resume** โ same but includes a resume URL column (requires `withResume` permission)
### User Management *(Superadmin only)*
Go to **Users** โ **New User** and configure:
- **Role**: `viewer` | `editor` | `admin` (purely cosmetic โ actual access is permission-based)
- **Permissions**: fine-grained CRUD per resource (Jobs, Candidates, Statuses, Exports)
- **Job Access**: all jobs, or a specific list of jobs
- **Resume Access**: toggle per user
### AI Configuration *(Settings page)*
- Set **Gemini** or **OpenRouter** as primary provider
- Both providers are used as automatic fallback for each other
- Supported resume formats: PDF, JPEG, PNG, GIF, WEBP (up to 10 MB)
---
## ๐ Security Notes
- JWT tokens expire after **7 days**
- Passwords are hashed with **bcrypt** (10 rounds)
- Resume files are served only to users with `resumeAccess` permission
- Set a strong `JWT_SECRET` in production (32+ random characters)
- Set `FRONTEND_URL` to your actual domain in production to restrict CORS
---
## ๐ Project Structure
```
candsync/
โโโ backend/
โ โโโ middleware/
โ โ โโโ auth.js # JWT verification, permission helpers
โ โโโ routes/
โ โ โโโ auth.js # Login, /me, change-password
โ โ โโโ candidates.js # CRUD, AI extract, resume serve, export
โ โ โโโ jobs.js # CRUD + candidate count
โ โ โโโ settings.js # AI keys & config
โ โ โโโ statuses.js # Pipeline stages
โ โ โโโ users.js # User management
โ โโโ uploads/ # Resume files (git-ignored)
โ โโโ db.js # SQLite schema, seed data
โ โโโ server.js # Express app entry point
โ โโโ .env.example # Environment variable template
โ โโโ package.json
โโโ frontend/
โ โโโ src/
โ โ โโโ api/client.js # Axios instance with auth interceptor
โ โ โโโ context/
โ โ โ โโโ AuthContext.jsx
โ โ โโโ components/
โ โ โ โโโ Layout.jsx # Sidebar navigation shell
โ โ โโโ pages/
โ โ โ โโโ Login.jsx
โ โ โ โโโ Jobs.jsx
โ โ โ โโโ Candidates.jsx
โ โ โ โโโ Statuses.jsx
โ โ โ โโโ Users.jsx
โ โ โ โโโ Settings.jsx
โ โ โโโ App.jsx
โ โ โโโ index.css # Tailwind + custom components
โ โโโ package.json
โโโ start.bat # Windows one-click launcher
โโโ install.bat # Windows one-click installer
โโโ package.json # Root convenience scripts
```
---
## ๐ค Contributing
Pull requests are welcome! For major changes, please open an issue first to discuss what you would like to change.
---
## ๐ License
[MIT](LICENSE) ยฉ 2024 CandSync