Skip to content

A modern Applicant Tracking System (ATS) platform connecting candidates with companies

Notifications You must be signed in to change notification settings

Mehdirben/JobConnect

Repository files navigation

JobConnect Logo

JobConnect

A modern Applicant Tracking System (ATS) platform connecting candidates with companies

.NET 9.0 Angular 21 PostgreSQL 16 Docker


πŸ“š Documentation

Document Description
πŸ“˜ Technical Report Complete technical documentation including architecture, data models, and API reference
πŸš€ Coolify Deployment Guide Step-by-step guide for deploying JobConnect on Coolify

πŸ“Έ Screenshots

Landing Page

Modern landing page with glassmorphism design

Jobs Listing

Job listing with advanced filtering

CV Builder

Dynamic CV builder with real-time preview

Application Tracker

Visual application status tracker

Company Dashboard

Company dashboard with job management

Kanban Board

Drag-and-drop Kanban board for hiring pipeline

Admin User Management

Admin panel for managing all users

Admin Job Management

Admin panel for managing all job postings

Company Availability Calendar

Company availability calendar for interview scheduling

Candidate Interview Booking

Candidate view for booking interview slots


✨ Features

πŸ‘€ For Candidates

Feature Description
CV Builder Dynamic profile builder with real-time preview. Add experience, education, certifications, and skills with instant autosave.
Job Search Browse and filter jobs by title, location, job type, and required skills.
One-Click Apply Apply to jobs with your saved profile. Your matching score is calculated automatically.
Application Tracker Visual pipeline showing your application status: Submitted β†’ Screening β†’ Interview β†’ Offer β†’ Hired
Skill Management Add skills with proficiency levels (1-5) and years of experience for better job matching.

🏒 For Companies

Feature Description
Dashboard Overview of all job postings with status indicators and applicant counts.
Job Management Create, edit, publish, and archive job postings with rich descriptions.
Kanban Board Drag-and-drop candidates between hiring stages. Update multiple candidates at once.
Candidate Profiles View detailed candidate profiles with experience, education, and skill match scores.
AI-Powered Matching Algorithm calculates compatibility score based on required/optional skills and proficiency.

πŸ”§ For Administrators

Feature Description
User Management View, create, edit, and manage all user accounts (Candidates and Companies).
Job Management Oversee all job postings across the platform with full CRUD capabilities.
Platform Oversight Complete visibility into all platform activity and data.

πŸŽ₯ Video Interviews (100ms)

Feature Description
Interview Scheduling Candidates view company availability calendar and book 90-minute interview slots.
HD Video Room Powered by 100ms with real-time chat during the interview.
Reschedule/Cancel Full support for rescheduling to new slots and cancellation with reasons.
Status Tracking Interview states: Scheduled β†’ InProgress β†’ Completed/Cancelled

οΏ½ Real-Time Notifications

Type Trigger Recipient
interview_scheduled Candidate schedules interview Company
interview_cancelled Interview cancelled Other party
application_received Candidate applies Company
application_status Status changes in Kanban Candidate

οΏ½πŸ” Authentication & Security

  • JWT-based authentication with secure token refresh
  • BCrypt password hashing
  • Role-based access control (Candidate/Company/Admin)
  • Protected API endpoints with authorization guards
  • CORS configuration for secure cross-origin requests

πŸ“Š Matching Score Algorithm

The platform uses a sophisticated scoring algorithm to match candidates with job requirements:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                     MATCHING SCORE BREAKDOWN                        β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                     β”‚
β”‚   Base Score (70%)      =  Matched Required Skills                  β”‚
β”‚                            ─────────────────────── Γ— 70             β”‚
β”‚                            Total Required Skills                    β”‚
β”‚                                                                     β”‚
β”‚   Optional Bonus (20%)  =  Matched Optional Skills                  β”‚
β”‚                            ──────────────────────── Γ— 20            β”‚
β”‚                            Total Optional Skills                    β”‚
β”‚                                                                     β”‚
β”‚   Proficiency Bonus     =  (Candidate Level - Required Level) Γ— 2   β”‚
β”‚   (Max 10%)                per matched skill                        β”‚
β”‚                                                                     β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                     TOTAL SCORE: Max 100%                           β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Example: A job requires 4 skills (3 required, 1 optional). A candidate has 3 of the required skills with higher proficiency than minimum:

  • Base Score: 3/3 Γ— 70 = 70 points
  • Optional Bonus: 0/1 Γ— 20 = 0 points
  • Proficiency Bonus: +6 points (exceeds requirements)
  • Total: 76%

πŸš€ Quick Start

Prerequisites

Option 1: Run with Docker (Recommended)

# Clone the repository
git clone https://github.com/yourusername/JobConnect.git
cd JobConnect

# Copy environment variables
cp .env.example .env

# Start all services
docker-compose up --build

Services will be available at:

Service URL Description
🌐 Frontend http://localhost:4201 Angular application
πŸ”Œ API http://localhost:5001 .NET REST API
🐘 Database localhost:5433 PostgreSQL
πŸ“Š pgAdmin http://localhost:5052 Database management

Option 2: Local Development

Backend (.NET API):

cd JobConnect.API

# Restore dependencies
dotnet restore

# Run in development mode
dotnet run

Frontend (Angular):

cd jobconnect-frontend

# Install dependencies
npm install

# Start development server
npm start

πŸ—οΈ Architecture

JobConnect/
β”œβ”€β”€ πŸ“ JobConnect.API/                 # .NET 9 Web API
β”‚   β”œβ”€β”€ Controllers/
β”‚   β”‚   β”œβ”€β”€ AuthController.cs          # Registration, login, password management
β”‚   β”‚   β”œβ”€β”€ JobsController.cs          # Job CRUD operations
β”‚   β”‚   β”œβ”€β”€ CandidatesController.cs    # Candidate profile management
β”‚   β”‚   β”œβ”€β”€ CompaniesController.cs     # Company dashboard, kanban
β”‚   β”‚   β”œβ”€β”€ ApplicationsController.cs  # Job applications
β”‚   β”‚   β”œβ”€β”€ InterviewsController.cs    # Video interview scheduling
β”‚   β”‚   β”œβ”€β”€ NotificationsController.cs # Real-time notifications
β”‚   β”‚   └── SkillsController.cs        # Skills catalog
β”‚   β”œβ”€β”€ Models/
β”‚   β”‚   β”œβ”€β”€ User.cs                    # User entity with roles
β”‚   β”‚   β”œβ”€β”€ CandidateProfile.cs        # CV data (JSON columns)
β”‚   β”‚   β”œβ”€β”€ Company.cs                 # Company profile
β”‚   β”‚   β”œβ”€β”€ JobPosting.cs              # Job with status lifecycle
β”‚   β”‚   β”œβ”€β”€ Application.cs             # Application with kanban order
β”‚   β”‚   β”œβ”€β”€ Interview.cs               # Scheduled video interviews
β”‚   β”‚   β”œβ”€β”€ Notification.cs            # Persistent notifications
β”‚   β”‚   └── Skill.cs                   # Skills with proficiency
β”‚   β”œβ”€β”€ Services/
β”‚   β”‚   β”œβ”€β”€ AuthService.cs             # JWT token generation
β”‚   β”‚   β”œβ”€β”€ MatchingScoreService.cs    # Score calculation algorithm
β”‚   β”‚   └── InterviewSchedulingService.cs # 100ms integration
β”‚   β”œβ”€β”€ Data/
β”‚   β”‚   └── ApplicationDbContext.cs    # EF Core context
β”‚   └── DTOs/                          # Data transfer objects
β”‚
β”œβ”€β”€ πŸ“ jobconnect-frontend/            # Angular 21 SPA
β”‚   └── src/app/
β”‚       β”œβ”€β”€ core/
β”‚       β”‚   β”œβ”€β”€ guards/                # Route protection
β”‚       β”‚   β”œβ”€β”€ interceptors/          # HTTP interceptors
β”‚       β”‚   β”œβ”€β”€ models/                # TypeScript interfaces
β”‚       β”‚   └── services/              # API service layer
β”‚       β”œβ”€β”€ features/
β”‚       β”‚   β”œβ”€β”€ auth/                  # Login, register
β”‚       β”‚   β”œβ”€β”€ landing/               # Home page
β”‚       β”‚   β”œβ”€β”€ jobs/                  # Job list, details
β”‚       β”‚   β”œβ”€β”€ candidate/
β”‚       β”‚   β”‚   β”œβ”€β”€ cv-builder/        # Profile editor
β”‚       β”‚   β”‚   └── application-tracker/
β”‚       β”‚   β”œβ”€β”€ company/
β”‚       β”‚   β”‚   β”œβ”€β”€ dashboard/         # Company overview
β”‚       β”‚   β”‚   β”œβ”€β”€ job-create/        # Job posting form
β”‚       β”‚   β”‚   β”œβ”€β”€ job-edit/          # Edit existing jobs
β”‚       β”‚   β”‚   β”œβ”€β”€ candidates/        # Kanban board
β”‚       β”‚   β”‚   └── candidate-profile-modal/
β”‚       β”‚   └── interview/             # Video room, scheduling
β”‚       └── shared/                    # Reusable components
β”‚
β”œβ”€β”€ πŸ“„ docker-compose.yml              # Container orchestration
β”œβ”€β”€ πŸ“„ .env.example                    # Environment template
└── πŸ“„ README.md

Tech Stack

Layer Technology Purpose
Frontend Angular 21, Angular CDK Modern SPA with drag-drop
Styling SCSS, Glassmorphism Premium liquid glass design
Backend .NET 9, ASP.NET Core RESTful API
ORM Entity Framework Core Database operations
Database PostgreSQL 16 Data persistence with JSONB
Auth JWT + BCrypt Secure authentication
Video 100ms HD video conferencing
Container Docker Compose Development environment

πŸ“‘ API Reference

Authentication

Method Endpoint Description Auth
POST /api/auth/register Create new account No
POST /api/auth/login Authenticate user No
PUT /api/auth/change-email Update email Yes
PUT /api/auth/change-password Update password Yes

Jobs

Method Endpoint Description Auth
GET /api/jobs List published jobs (with filters) No
GET /api/jobs/:id Get job details No
POST /api/jobs Create job posting Company
PUT /api/jobs/:id Update job Company
DELETE /api/jobs/:id Delete job Company

Candidates

Method Endpoint Description Auth
GET /api/candidates/profile Get own profile Candidate
PUT /api/candidates/profile Update CV/profile Candidate
PUT /api/candidates/profile/skills Update skills Candidate
GET /api/candidates/applications List applications Candidate

Companies

Method Endpoint Description Auth
GET /api/companies/profile Get company profile Company
PUT /api/companies/profile Update company Company
GET /api/companies/jobs List company's jobs Company
GET /api/companies/jobs/:id/applications Get applicants Company
PUT /api/companies/jobs/:id/applications/:appId/status Update status Company
POST /api/companies/jobs/:id/kanban/reorder Reorder kanban Company

Applications

Method Endpoint Description Auth
POST /api/applications Apply to job Candidate
GET /api/applications/:id Get application details Auth

Interviews

Method Endpoint Description Auth
POST /api/interviews Schedule interview Candidate
GET /api/interviews List interviews Auth
GET /api/interviews/:id Get interview details Auth
GET /api/interviews/:id/join Get 100ms meeting room code Auth
PUT /api/interviews/:id/cancel Cancel with reason Auth
PUT /api/interviews/:id/reschedule Reschedule interview Auth
POST /api/interviews/:id/messages Send chat message Auth

Notifications

Method Endpoint Description Auth
GET /api/notifications List notifications Yes
GET /api/notifications/count Unread count Yes
PUT /api/notifications/:id/read Mark as read Yes
PUT /api/notifications/read-all Mark all as read Yes
DELETE /api/notifications/:id Delete notification Yes
DELETE /api/notifications Delete all Yes

Skills

Method Endpoint Description Auth
GET /api/skills List all skills No

βš™οΈ Environment Variables

Create a .env file based on .env.example:

# Database Configuration
POSTGRES_DB=jobconnect
POSTGRES_USER=jobconnect
POSTGRES_PASSWORD=your_secure_password

# JWT Configuration
JWT_SECRET=YourSuperSecretKeyThatIsAtLeast32CharactersLong!

# CORS Configuration
CORS_ORIGINS=http://localhost:4200,http://localhost:4201

# 100ms Video Conferencing
HMS_ACCESS_KEY=your_100ms_access_key
HMS_SECRET=your_100ms_secret
HMS_TEMPLATE_ID=your_100ms_template_id

# pgAdmin (optional)
PGADMIN_EMAIL=admin@admin.com
PGADMIN_PASSWORD=admin123

οΏ½ Data Models

Job Status Lifecycle

Status Description
Draft Job created but not visible to candidates
Published Active and searchable
Closed No longer accepting applications
Archived Historical record

Application Status (Kanban)

Status Color Description
Submitted πŸ”΅ Blue New applications
Screening 🟑 Yellow Under review
Interview 🟣 Purple Interview scheduled
Offer 🟒 Green Offer sent
Hired βœ… Dark Green Candidate hired
Rejected πŸ”΄ Red Application rejected

Proficiency Levels

Level Description
1 Beginner - Basic understanding
2 Elementary - Limited experience
3 Intermediate - Practical application
4 Advanced - Deep knowledge
5 Expert - Industry leader

πŸ§ͺ Development

Database Migrations

cd JobConnect.API

# Add a new migration
dotnet ef migrations add MigrationName

# Apply migrations
dotnet ef database update

Database Seeding

The project includes a comprehensive data seeder that creates sample companies, job postings, candidates, and applications for testing and demonstration purposes.

Seed only if database is empty:

cd JobConnect.API
SEED_DATABASE=true dotnet run

Force seed (add data even if database has existing data):

cd JobConnect.API
SEED_DATABASE=true FORCE_SEED=true dotnet run

The seeder creates:

  • 10 companies with full profiles
  • 50+ job postings across various roles and types
  • 32 candidates with experience, education, and skills
  • 100+ applications across all statuses

Note: Remove or set SEED_DATABASE=false after seeding to prevent the seeder from running on every startup.

Running Tests

Frontend:

cd jobconnect-frontend
npm test

Backend:

cd JobConnect.API
dotnet test

🀝 Contributing

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

Made with ❀️

About

A modern Applicant Tracking System (ATS) platform connecting candidates with companies

Resources

Stars

Watchers

Forks

Contributors 2

  •  
  •