An end-to-end recruitment platform: post a job, candidates apply with a resume and cover letter, an LLM screens each resume against the job description, an interview panel schedules and scores candidates, and HR issues the offer letter — with a dashboard per role (HR, Head of Department, Dean, Panel).
Laravel (PHP) · Python/Flask microservice for resume evaluation
- Job postings & applications — HR/HOD create postings; candidates apply with a resume (PDF) and cover letter.
- LLM resume screening — a separate Flask service extracts the resume text and scores it against the job description using GPT-4, returning a structured evaluation an ATS would produce.
- Personality assessment — candidates complete a Likert-scale test after applying; trait results (teamwork, leadership, stress management, etc.) are visible to HODs during review.
- Interview panels — panels are assembled per posting, panelists submit scored evaluations, and results roll up to a panel dashboard.
- Offer letters — generated once a candidate clears the pipeline.
- Role-based access — separate dashboards and permissions for HR, HOD, Dean, and interview panelists.
Laravel app (PHP) Flask service (Python)
job postings, applications, POST /evaluate_resume
panels, offer letters, ──────▶ extract PDF text (PyPDF2)
role-based dashboards score against job description
via GPT-4, return structured JSON
Requires PHP 8.1+, Composer, MySQL, and Python 3.
composer install
cp .env.example .env
php artisan key:generate
# configure DB_* and OPENAI_API_KEY in .env
php artisan migrate --seed
php artisan servecd python
python -m venv venv && source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
python app.pyThis is a snapshot of a completed final-year project, not an actively
maintained service — expect some rough edges rather than production
polish. Sample resumes and cover letters uploaded during testing are not
included in this repo (storage/app/public/{resumes,cover_letters} is
gitignored); seed the database with php artisan db:seed for placeholder
data instead.
MIT