Loading repository data…
Loading repository data…
sameh-bakleh / repository
Production-inspired recruitment-marketplace backend in Laravel & PHP 8.x — GraphQL API, authentication & RBAC, queued workflows on Redis, automated tests (Pest/PHPUnit), and Docker/CI. Portfolio project; paired with a Swift 6 iOS client.
A modular Laravel / PHP 8.x backend for a recruitment marketplace — GraphQL API, authentication & RBAC, queued workflows on Redis, automated tests, and Docker/CI.
Consumed by a paired Swift 6 iOS client: https://github.com/sameh-bakleh/talentbridge-ios
Production-inspired portfolio project — no real users or production traffic.
PHP 8.4 · Laravel 12 · Lighthouse GraphQL · Sanctum · Horizon · Redis · MySQL · Sentry · PHPUnit · Laravel Pint · GitHub Actions
DDD-inspired modular layers with thin GraphQL resolvers delegating to application services:
app/
├── Domain/ # Enums, value objects, domain events
├── Application/ # Use cases (auth, jobs, applications, admin)
├── Infrastructure/ # Eloquent repositories, queues, audit log
└── Interfaces/ # GraphQL resolvers, HTTP controllers
| Module | Responsibility |
|---|---|
| Identity | Users, roles, Sanctum bearer auth |
| Jobs | List, filter, publish / unpublish |
| Candidates | Saved jobs, applications |
| Companies | Job posts, application review |
| Notifications | Queued jobs on apply & status change |
| Admin | Approve / reject pending jobs |
Queued workflows: domain events → Redis queue → Horizon workers (application submitted, status changed notifications).
cp .env.example .env
composer install
php artisan key:generate
touch database/database.sqlite
php artisan migrate --seed
php artisan serve
GraphQL endpoint: http://127.0.0.1:8000/graphql
Demo users (password: password): candidate@talentbridge.demo, company@talentbridge.demo, admin@talentbridge.demo
docker compose up --build
| Service | Port |
|---|---|
| API | 8000 |
| MySQL | 3307 |
| Redis | 6380 |
php artisan horizon # requires Redis, QUEUE_CONNECTION=redis
composer install
cp .env.example .env && php artisan key:generate --force
php artisan test # PHPUnit feature suite
./vendor/bin/pint --test # code style
php artisan lighthouse:validate-schema
CI runs the same checks on every push.
Single GraphQL schema: graphql/schema.graphql. Full examples: docs/API.md.
Queries: me, jobs, job, savedJobs, myApplications, companyApplications, pendingJobs
Mutations: login, logout, createJob, publishJob, saveJob, unsaveJob, applyToJob, updateApplicationStatus, approveJob, rejectJob
mutation {
login(email: "candidate@talentbridge.demo", password: "password") {
token
user { id name email role }
}
}
Auth: Authorization: Bearer <sanctum-token>
MIT — see LICENSE.
Sameh Bakleh — GitHub