SkillMatch is a modern full-stack web application designed to help users browse remote job listings and view potential matches based on their personal skill set using a percentage-based score. The project aims to enhance efficiency for both job seekers and administrators.

-
Job Listing: Clean, card-based interface for displaying remote job openings.
-
Intelligent Matching: The "% Matched" score is calculated instantly on each listing, comparing the user's profile skills against the job's required skills.
-
Profile and Skill Management: Users can easily add and remove skills from their profile, which powers the matching scores.
-
Job Application: Simple application form available directly from the job details card.
-
Data Integration: The Spring Boot
DataInitializerclass automatically fetches and saves current remote job listings from the Remotive API upon startup. -
Skill Extraction: Required technical skills are automatically detected and tagged from job description texts using the backend's
SkillExtractorUtil. -
JWT Security: Secure authentication using JWT (JSON Web Token) via Spring Security and an Angular Interceptor.
-
Role-Based Authorization:
-
Users with the Admin role have CRUD (Create, Read, Update, Delete) privileges for job listings.
-
Admins can also list and review all submitted job applications (
/admin/applications).
-
-
Backend Data Store: Skills are efficiently stored in the database using a custom converter to handle
List<String>as a JSON field.
SkillMatch is built using a robust selection of modern technologies for both the client and server sides.
| Category | Technology | Notes |
|---|---|---|
| Language/Framework | Java / Spring Boot 3 | Secure and scalable RESTful API. |
| Database | MySQL | Relational data store. |
| Security | Spring Security & JWT | Token-based Admin/User authorization. |
| Data Integration | Remotive API, RestTemplate |
External API connectivity for job listings. |
| Persistence | JPA & StringListConverter |
Stores skill lists as JSON strings in the DB. |
| Category | Technology | Notes |
|---|---|---|
| Framework | Angular (Standalone Components) | Modern, component-based Single Page Application (SPA) structure. |
| State Management | RxJS (BehaviorSubject) |
Reactive state management for session (Admin status) and user skills. |
| Security | Auth Guard & Interceptor | Protects routes and automatically attaches JWT to authorized requests. |
| Styling | Custom CSS & Google Fonts | Clean, modern, and responsive design. |
-
Java 17+
-
Maven
-
MySQL Server
-
Node.js (LTS)
-
Angular CLI
-
Database Creation: Create a database named
skillMatchon your MySQL server:CREATE DATABASE skillMatch; -
Configuration: Update the database connection details in
backend/src/main/resources/application.propertiesto match your environment:spring.datasource.url=jdbc:mysql://localhost:3306/skillMatch spring.datasource.username=root spring.datasource.password=1234 # ... (other settings) -
Start Backend: Navigate to the backend directory and run the application:
./mvnw spring-boot:run(The application will start on
http://localhost:8080. Job listings and the Admin user will be created automatically.)
-
Dependencies: Navigate to the frontend directory and install packages:
cd frontend npm install -
Start Frontend: Start the Angular development server:
ng serve --open(The application will open in your browser at
http://localhost:4200.)
To fully test the application's features, use the following default account created by the DataInitializer:
| Role | Password | |
|---|---|---|
| Admin | admin@skillmatch.com |
admin123 |
-
Profile Management: Log into the application and go to the "My Profile" page. Add your technical skills here (e.g.,
Java,Spring Boot,Angular). -
Matching: Navigate back to the home page (
/). You will see the % Matched scores on job cards, calculated based on the skills you added. -
Admin Operations: Log in with the Admin account. The Update/Delete buttons will appear on the job cards on the home page. You can also access the "Applications" page via the navigation menu to review all job submissions.
Bug reports, suggestions, or contributions for new features are always welcome. Please feel free to open an "Issue" or submit a "Pull Request."



