Laravel backend for student–vacancy matching: students, companies, and coordinators manage profiles, vacancies, and match scores via the v2 API.
- About
- Tech stack
- Data model
- Installation & deployment
- Matching system
- Edge cases
- API & documentation
- Testing
- Expanding the project
- License
This project is a Laravel API that supports student–vacancy matching: students maintain profiles and get match scores for vacancies; companies publish vacancies and manage match choices; coordinators manage companies, users, and student–coordinator assignments. Roles: student, company, coordinator.
- PHP 8.2+, Laravel 12, JWT (tymon/jwt-auth), MySQL (or configured DB). Optional: Node/npm (Vite), queue worker.
The database is described in DBML; entity groups and relationships are documented in docs/DATA-MODEL.md. You can view an ERD by importing docs/schema.dbml into dbdiagram.io. Alternatively you can view it at complete ERD in dbdiagram.io.
- Clone the repo and run
composer install. - Copy
.env.exampleto.env, runphp artisan key:generateandphp artisan jwt:secret, configure DB andAPP_URL, thenphp artisan migrate(optionallyphp artisan db:seed). - Run the app with
composer run devorphp artisan serve.
Full guide: docs/INSTALLATION.md (local setup, deployment, env, JWT, API keys, matching system).
Student–vacancy matching is rule-based and computed on demand: VacancyMatchingService scores students against vacancies using tags (must-have / nice-to-have, importance and weight 1–5). There is no external AI service; the database supports AI run metadata (e.g. criteria versions) for future batch or versioned runs. See docs/INSTALLATION.md for deployment notes.
Matching and validation edge cases (e.g. vacancy with no must-haves, score clamping, tag limits, auth errors) are listed with short explanations in docs/EDGE-CASES.md. See also docs/TESTS.md and docs/API-v2.md.
- Base URL:
https://<your-api-host>/api/v2 - Auth: API key in
X-API-KEYheader for all requests; JWT inAuthorization: Bearer <token>for protected routes. - Roles: Coordinator (register, companies, users, vacancies, match scores, assignments); Company (own company, profile, vacancies, comments); Student (profile, experiences, preferences, tags, languages, favorites, saved vacancies, vacancy matching).
If you open your APP_URL in a browser, you’ll find extensive API documentation and guidance for API key generation for local/dev usage.
Full v2 API reference: docs/API-v2.md.
composer testorphp artisan test— run the full suite.php artisan test --testsuite=Unit/--testsuite=Feature— run by suite.php artisan test --filter=test_name— run tests matching a name.php artisan test --coverage— coverage report (requires Xdebug or PCOV).
Full test catalog and coverage map: docs/TESTS.md.
Schema areas that are unused or partly used and good candidates for expansion:
- AI versioning and batch runs —
ai_prompts,ai_runs,ai_criteria_versions,match_vacancy_scores/match_vacancy_factors - Messaging —
conversations,messages(vacancy_chat, student_admin, admin_company) - Bias alerts and match overrides —
bias_alerts,match_overrides(coordinator APIs) - Manual placements —
manual_placements(coordinator API for placements outside the platform) - Match flags and student match choices — extend statuses, workflow, link to batch runs
Full recommendations and next steps: docs/EXPANDING.md.
This project is open-sourced software licensed under the MIT license.