A Laravel-based REST API for managing job applications, recruiters, and candidates.
This platform facilitates the recruitment process by managing:
- Job postings by recruiters
- Candidate applications
- Application status tracking
- Multi-stage recruitment process
-
Authentication
- Separate auth for recruiters and candidates
- Token-based authentication using Sanctum
-
Recruiters
- Create and manage job postings
- Track applications
- Update application stages
- Manage profile
-
Candidates
- Apply for jobs
- Upload resumes
- Track application status
- Manage profile
-
Application Stages
- Applied
- Phone Screen
- Interview
- Hired
- Rejected
-
Zoom Integration
This platform includes an integration with Zoom Meetings:
- Recruiters can automatically create a Zoom meeting when moving an application stage to Interview.
- Candidates receive the meeting details and can join directly.
- This feature helps streamline interview scheduling and reduces manual work.
- PHP >= 8.2
- MySQL >= 5.7
- Composer
- Laravel 12.x
- Clone the repository:
git clone https://github.com/amr-94/ATS.git
cd recruiter2- Install dependencies:
composer install- Create environment file:
cp .env.example .env- Configure your database in
.env:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=recruiter2
DB_USERNAME=your_username
DB_PASSWORD=your_password- Generate application key:
php artisan key:generate- Run migrations:
php artisan migrate- Create storage link for resumes:
php artisan storage:linkPOST /api/v1/recruiter/auth/register
POST /api/v1/recruiter/auth/login
POST /api/v1/candidate/auth/register
POST /api/v1/candidate/auth/login
# Recruiter Routes
GET /api/v1/recruiter/jobs
POST /api/v1/recruiter/jobs
PUT /api/v1/recruiter/jobs/{id}
DELETE /api/v1/recruiter/jobs/{id}
PUT /api/v1/recruiter/applications/{id}/stage
# Candidate Routes
GET /api/v1/candidate/jobs
POST /api/v1/candidate/jobs/{job}/apply
GET /api/v1/candidate/applications
The API uses Laravel Sanctum for authentication. Include the token in requests:
Authorization: Bearer {your_token}
Resumes are stored in storage/app/public/resumes. Make sure this directory is writable.
The API returns consistent error responses:
{
"status": "error",
"message": "Error description",
"code": 400
}Successful responses follow this format:
{
"status": "success",
"message": "Operation successful",
"data": {}
}- Fork the repository
- Create your feature branch
- Commit your changes
- Push to the branch
- Create a Pull Request
This project is licensed under the MIT License.