Skip to content

siiiidddexe/candsync

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

8 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🎯 CandSync

A modern, self-hosted Applicant Tracking System (ATS) with AI-powered resume extraction.

Node.js React SQLite License: MIT


✨ 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

1. Clone & Install

git clone https://github.com/siiiidddexe/candsync.git
cd candsync

# Install all dependencies (backend + frontend)
npm run install:all

2. Configure Environment

cd backend
copy .env.example .env   # Windows
# cp .env.example .env   # macOS/Linux

Edit backend/.env and set at minimum:

JWT_SECRET=your-long-random-secret-here

To enable AI resume extraction, add at least one API key:

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):

# 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 Β© 2024 CandSync

About

A modern self-hosted Applicant Tracking System (ATS) with AI-powered resume extraction. Built with Node.js, SQLite, React, and Vite.

Topics

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors