This repository contains a full-stack job board web application built for team development.
It includes a frontend (React + Vite), a backend (Node.js + Express), authentication system, and a MySQL database.
A modern job board platform that allows users to browse jobs, apply for positions, manage their profiles, and view company information. The project features user authentication, protected routes, and a complete CRUD system for jobs, users, applications, and companies.
T-WEB-501-LYO_15/
β
βββ backend/
β βββ src/
β β βββ config/
β β β βββ connection.js # MySQL database connection
β β βββ controllers/
β β β βββ application.controller.js
β β β βββ company.controller.js
β β β βββ job.controller.js
β β β βββ user.controller.js
β β βββ middleware/
β β β βββ auth.middleware.js # JWT authentication
β β βββ models/
β β β βββ Application.js
β β β βββ Company.js
β β β βββ Job.js
β β β βββ User.js
β β βββ routes/
β β βββ application.routes.js
β β βββ company.routes.js
β β βββ job.routes.js
β β βββ user.routes.js
β βββ scripts/
β β βββ reset-db.js # Database reset utility
β βββ public/
β β βββ logos/ # Company logos storage
β βββ server.js # Main server file
β βββ schema.sql # Database schema
β βββ package.json
β βββ .env.sample
β
βββ frontend/
β βββ public/
β β βββ 12jobLogo.png
β βββ src/
β β βββ components/
β β β βββ application/
β β β β βββ ApplicationForm.jsx
β β β β βββ ApplicationsList.jsx
β β β βββ auth/
β β β β βββ AuthProvider.jsx
β β β β βββ ProtectedRoute.jsx
β β β βββ company/
β β β β βββ FirstSection.jsx
β β β βββ home/
β β β β βββ HeroSection.jsx
β β β β βββ TitleSection.jsx
β β β βββ job/
β β β β βββ JobSection.jsx
β β β βββ layout/
β β β β βββ Header.jsx
β β β βββ profile/
β β β βββ DetailProfil.jsx
β β β βββ EditProfile.jsx
β β β βββ FirstSection.jsx
β β β βββ SecondSection.jsx
β β βββ config/
β β β βββ axiosConfig.js # Axios configuration
β β βββ hooks/
β β β βββ useAuth.js # Authentication hook
β β βββ pages/
β β β βββ private/
β β β β βββ ApplyJobPage.jsx
β β β β βββ CompanyPage.jsx
β β β β βββ EditProfilePage.jsx
β β β β βββ HomePage.jsx
β β β β βββ MyApplicationsPage.jsx
β β β β βββ ProfilePage.jsx
β β β βββ public/
β β β βββ AuthenticationPage.jsx
β β β βββ LandingPage.jsx
β β βββ App.jsx
β β βββ index.css
β β βββ main.jsx # Router configuration
β βββ .env.sample
β βββ .prettierrc
β βββ eslint.config.js
β βββ index.html
β βββ tailwind.config.js
β βββ vite.config.js
β βββ package.json
β
βββ .gitignore
βββ README.md
βββ package.json # Root package for concurrent scripts
- React 18 with React Router DOM
- Vite for fast development and building
- Tailwind CSS for styling
- Axios for API requests
- ESLint + Prettier for code quality
- Node.js with Express 5
- MySQL 2 for database operations
- JWT for authentication
- bcryptjs for password hashing
- CORS for cross-origin requests
- dotenv for environment variables
| Method | Endpoint | Description | Auth Required |
|---|---|---|---|
GET |
/api/jobs |
Retrieve all job listings | No |
GET |
/api/jobs/:id |
Retrieve a single job by ID | No |
POST |
/api/jobs |
Create a new job entry | Yes |
PATCH |
/api/jobs/:id |
Update an existing job | Yes |
DELETE |
/api/jobs/:id |
Delete a job | Yes |
| Method | Endpoint | Description | Auth Required |
|---|---|---|---|
POST |
/api/users/login |
User authentication | No |
POST |
/api/users |
Create a new user account | No |
GET |
/api/users |
Retrieve all users | Yes |
GET |
/api/users/:id |
Retrieve user by ID | Yes |
PATCH |
/api/users/:id |
Update user information | Yes |
DELETE |
/api/users/:id |
Delete user account | Yes |
| Method | Endpoint | Description | Auth Required |
|---|---|---|---|
GET |
/api/applications/user/:id |
Get applications for a specific user | Yes |
POST |
/api/applications |
Submit a new job application | Yes |
DELETE |
/api/applications/:id |
Delete an application | Yes |
| Method | Endpoint | Description | Auth Required |
|---|---|---|---|
GET |
/api/companies |
Retrieve all companies | No |
GET |
/api/companies/:id |
Retrieve company by ID | No |
POST |
/api/companies |
Create a new company | No |
PATCH |
/api/companies/:id |
Update company information | No |
DELETE |
/api/companies/:id |
Delete a company | No |
/- Landing page with job listings/authentication- Login/Register page
/home- User dashboard/jobs/:jobId/apply- Job application form/my-applications- User's job applications/companies/:companyId?- Company details/profile- User profile view/profile/edit- Edit user profile
git clone [email protected]:EpitechMscProPromo2028/T-WEB-501-LYO_15.git
cd T-WEB-501-LYO_15npm installcd frontend
npm installcd backend
npm installCreate a .env file in the frontend/ directory:
cd frontend
cp .env.sample .envUpdate the values:
VITE_API_URL=http://localhost:4000
VITE_PORT=3000Create a .env file in the backend/ directory:
cd backend
cp .env.sample .envUpdate the values with your database credentials:
PORT=4000
DB_HOST=localhost
DB_USER=your_db_user
DB_PASSWORD=your_db_password
DB_NAME=ntwJob
JWT_SECRET=your_jwt_secret_key- Create your MySQL database:
CREATE DATABASE ntwJob;- Run the SQL schema:
mysql -u <user> -p ntwJob < backend/schema.sqlOr use the reset script:
node backend/scripts/reset-db.jsStart both frontend and backend concurrently from the root:
npm run devThis will start:
- Backend server on http://localhost:4000
- Frontend development server on http://localhost:3000
Then open http://localhost:3000 to access the application.
The application uses JWT (JSON Web Tokens) for authentication:
- Registration: Users can create accounts with email/password
- Login: Authentication returns a JWT token
- Protected Routes: Frontend routes are protected using
ProtectedRoutecomponent - API Protection: Backend routes use
authenticateTokenmiddleware - Auto-redirect: Unauthenticated users are redirected to
/authentication
- Use feature branches derived from
dev - Create Pull Requests to merge into
main - Follow the Conventional Commits format:
<type>(<scope>): <description>
Examples:
feat(auth): add JWT authentication system
fix(jobs): resolve job listing pagination issue
chore(deps): update dependencies to latest versions
The application uses MySQL with the following main tables:
- users - User accounts and profiles
- companies - Company information and logos
- jobs - Job listings linked to companies
- applications - User job applications with resumes
This project is part of an Epitech Master of Science coursework and is intended for educational and collaborative use.
- Warith DIMIA
- Nadir AMMI SAID
- Toni SAGE
Epitech Master of Science β Lyon 2028 Cohort