Ethio-Career is a modern, full-stack job portal application built with Spring Boot (Backend) and React (Frontend). This comprehensive platform enables Job Seekers to manage their CVs and apply for jobs, Employers to post jobs and manage applications, and Admins to oversee the entire platform. The application features AI-powered assistance using Google Gemini for enhanced user experience.
- β Create and manage professional profiles
- π Search and filter job listings by title, location, and category
- π Upload and manage multiple CVs
- π Track application status in real-time
- π€ AI Match Score - See how well you match each job posting
- π‘ AI Profile Analyzer - Get personalized improvement suggestions
- π Post and manage job listings
- π₯ Review and rank applicants
- π¬ Communicate with candidates
- β° Set application deadlines
- π€ AI Job Description Generator - Create professional job posts instantly
- βοΈ Approve employer registrations
- π‘οΈ Manage and moderate job postings
- π View platform analytics and statistics
- π€ Manage user accounts
-- Create the database
CREATE DATABASE job_portal_db;
The application is configured to use:
- Host:
localhost - Port:
3306 - Database:
job_portal_db - Username:
root - Password: (empty by default)
-
Navigate to:
jobsite back end/src/main/resources/application.properties -
Database Configuration (already set):
spring.datasource.url=jdbc:mysql://localhost:3306/job_portal_db?useSSL=false&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=
-
AI Features Configuration (Optional):
# Replace with your own Gemini API key gemini.api.key=YOUR_GEMINI_API_KEY_HERE
To get a Gemini API key:
- Visit Google AI Studio
- Sign in with your Google account
- Click "Create API Key"
- Copy and paste into
application.properties
The frontend is pre-configured to connect to http://localhost:8080/api. No additional configuration is needed.
If you need to change the backend URL, edit: jobsite front end/src/config/api.config.js
Windows:
mvnw.cmd spring-boot:run-
Wait for the application to start. You should see:
Started JobsiteApplication in seconds -
Backend is now running on:
http://localhost:8080/api
Note: The first run will take longer as Maven downloads dependencies and Hibernate creates database tables.
-
Open a NEW terminal/command prompt (keep backend running)
-
Navigate to frontend directory:
cd "jobsite front end"
-
Install dependencies (first time only):
npm install
-
Start the development server:
npm run dev
-
Frontend is now running on:
http://localhost:5173
| Frontend | http://localhost:5173 | Main user interface | | Backend API | http://localhost:8080/api | REST API endpoints |
After logging in, users are redirected based on their role:
| Job Seeker | http://localhost:5173/jobseeker/dashboard | Job search, applications, CV management | | Employer | http://localhost:5173/employer/dashboard | Post jobs, manage applications | | Admin | http://localhost:5173/admin/dashboard | Platform management, approvals |
The application does not have pre-seeded users. You must create accounts through the registration process.
-
Open the application: http://localhost:5173
-
Click "Sign Up" on the landing page
-
Choose your role:
- Job Seeker: For candidates looking for jobs
- Employer: For companies posting jobs
-
Fill in the registration form:
- Email address
- Password (minimum 6 characters)
- Additional profile information
-
Click "Register"
-
Login with your credentials
Admin accounts cannot be created through the UI. Follow these steps:
-
First, register a regular user account (Job Seeker or Employer)
-
Open MySQL command line:
mysql -u root -p job_portal_db
-
Find your user:
SELECT id, email, role FROM users;
-
Promote user to admin:
UPDATE users SET role = 'ADMIN' WHERE email = 'your-email@example.com';
-
Verify the change:
SELECT id, email, role FROM users WHERE email = 'your-email@example.com';
-
Exit MySQL:
EXIT;
-
Login with the same credentials and access
/admin/dashboard
The application includes several AI-powered features using Google Gemini:
-
AI Chatbot
- Click the floating chat bubble icon on any page
- Ask questions about jobs, career advice, or platform usage
- Available to all authenticated users
-
AI Job Description Generator (Employers)
- Navigate to "Post Job" page
- Click "AI Suggest" button
- Enter job title and basic requirements
- AI generates a professional job description
-
AI Profile Analyzer (Job Seekers)
- Go to your profile page
- Click "Analyze My Profile"
- Receive personalized improvement suggestions
- Get tips on skills, experience, and presentation
-
AI Match Score (Job Seekers)
- Automatically displayed on job cards
- Shows percentage match between your profile and job requirements
- Helps prioritize job applications
http://localhost:8080/api
All protected endpoints require a JWT token in the Authorization header:
Authorization: Bearer <your-jwt-token>
POST /auth/register- Register new userPOST /auth/login- Login and get JWT tokenPOST /auth/refresh- Refresh JWT tokenPOST /auth/logout- Logout userGET /auth/me- Get current user info
GET /jobs- List all jobs (with filters)GET /jobs/{id}- Get job detailsPOST /jobs- Create job (Employer only)PUT /jobs/{id}- Update job (Employer only)DELETE /jobs/{id}- Delete job (Employer/Admin)
GET /applications- List user's applicationsPOST /applications- Apply for a jobPUT /applications/{id}- Update application statusDELETE /applications/{id}- Withdraw application
GET /profile- Get user profilePUT /profile- Update profilePOST /profile/avatar- Upload profile picture
POST /ai/chat- Chat with AI assistantPOST /ai/generate-job-description- Generate job descriptionPOST /ai/analyze-profile- Analyze user profilePOST /ai/match-score- Calculate job match score
GET /admin/employers/pending- Get pending employer approvalsPUT /admin/employers/{id}/approve- Approve employerPUT /admin/employers/{id}/reject- Reject employerGET /admin/stats- Get platform statistics
If enabled, access interactive API documentation at:
http://localhost:8080/api/swagger-ui/index.html
- Spring Boot 3.5.8 - Application framework
- Spring Security - JWT authentication & authorization
- Spring Data JPA - Database access layer
- Hibernate - ORM framework
- MySQL 8.0 - Relational database
- Lombok - Reduce boilerplate code
- JJWT 0.11.5 - JWT token handling
- RestTemplate - HTTP client for Gemini API
- Commons IO 2.16.1 - File upload support
- React 19.2.0 - UI library
- React Router v6.16.0 - Client-side routing
- Axios 1.13.2 - HTTP client
- Tailwind CSS 4.1.18 - Utility-first CSS framework
- Heroicons 2.2.0 - Icon library
- React Hot Toast 2.6.0 - Toast notifications
- Vite 7.2.4 - Build tool and dev server
- Google Gemini API (v1)
- Model: gemini-2.5-flash
- Features: Text generation, content analysis, conversational AI
- Maven - Backend dependency management
- npm - Frontend package management
- ESLint - JavaScript linting
- Spring Boot DevTools - Hot reload for backend
If you encounter issues not covered here:
- Check Backend Logs: Look for error messages in the terminal running the backend
- Check Browser Console: Press F12 and look for errors in the Console tab
- Check Database: Verify tables were created:
SHOW TABLES;in MySQL - Review Configuration: Double-check
application.propertiesand database settings
This project is ready to run out of the box. Simply:
- β Install Java 17, Node.js 18, and MySQL 8.0
- β
Create the
job_portal_dbdatabase - β
Run backend:
mvnw.cmd spring-boot:run - β
Run frontend:
npm install && npm run dev - β Access: http://localhost:5173
No additional configuration required for basic functionality!
- Habtamu Befekaduβ¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦..β¦β¦β¦β¦..β¦.DBU1601222
Built with β€οΈ for Ethiopian Professionals
developed : December 2025