Overview
Talent Board is a four-role hiring platform: guests browse approved roles, candidates manage a profile and apply, employers post listings and decide on applicants, and admins moderate every listing before it becomes publicly visible. Nothing reaches the public board without passing through the moderation queue, which is the constraint the whole data model is built around.
Built as a team project on a four-sprint MVP plan, with the codebase split into a Laravel API and a Vue SPA inside one monorepo.
What it does
Moderated listings — employer-owned job CRUD with a pending / approved / rejected state machine; public pages only ever serve approved, non-expired roles.
Search and filtering — keyword search across title and description, plus location, category, experience level, salary range, date posted, and work type (remote / on-site / hybrid), all paginated.
Candidate lifecycle — profile and skills management, multiple resume uploads with a default selection, application submission, history, and cancellation of eligible applications.
Employer operations — dashboard over owned listings, application review, accept/reject decisions, and company branding with logo upload.
Admin moderation — pending-jobs queue, approve/reject actions, and platform activity summaries across jobs, users, and applications.
Real-time status — application status changes are persisted and broadcast to authorised clients over Laravel Reverb, so candidates see decisions without refreshing.
Architecture
The API is layered deliberately thin at the edges: controllers handle HTTP only, FormRequests validate only, business rules live in Services, and persistence sits behind Repositories. Every route is namespaced under /api/v1, paginated collections use JSON:API-style envelopes, and single resources go through Laravel JsonResource.
Sanctum guards authenticated routes and Laravel policies enforce per-role authorisation. Resume and logo uploads land in S3-compatible object storage, with queue workers handling the file-processing and notification side effects so requests stay fast.
On the frontend, the Vue 3 SPA uses Pinia setup stores, typed routes via vue-router/vite, and Vite for the build. Core workflows target WCAG 2.1 AA.
My contribution
One of four developers on the build, working across the Laravel API and the Vue SPA.