A web-based project monitoring platform built with React, Spring Boot, MySQL, and JWT security.
ProjectMonitor helps users manage projects, tasks, assignments, deadlines, priorities, and project progress through a centralized web application.
- User registration and login
- JWT-based authentication
- Role-based users
- Admin, Manager, and Member roles
- Project management
- Task management
- Task assignment
- Project dashboard
- Task priorities
- Task status tracking
- Project status tracking
- MySQL database integration
- REST APIs
- Secure password hashing
- React-based frontend
- Spring Boot backend
- React.js
- Vite
- JavaScript
- Axios
- HTML
- CSS
- Java
- Spring Boot
- Spring Security
- Spring Data JPA
- Hibernate
- JWT
- MySQL
- IntelliJ IDEA / VS Code
- Git
- GitHub
- Postman
Install the following software before running the project:
- Java 21+
- Maven 3.9+
- MySQL 8+
- Node.js 20+
- npm
Check the installed versions:
java -version
mvn -version
mysql --version
node -version
npm -versionprojectmonitor/
│
├── backend/
│ ├── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── projectmonitor/
│ │ └── resources/
│ │
│ ├── pom.xml
│ └── ...
│
├── frontend/
│ ├── src/
│ ├── package.json
│ ├── package-lock.json
│ ├── vite.config.js
│ └── ...
│
├── database.sql
├── postman_collection.json
└── README.md
Start your MySQL server.
The application uses the following database:
project_monitor
If the database does not already exist, create it manually:
CREATE DATABASE project_monitor;The default MySQL port is:
3306
Configure your database username and password in the Spring Boot configuration.
Do not upload real database passwords, JWT secrets, or other sensitive credentials to a public GitHub repository.
Open a terminal in the backend directory:
cd backendBuild the project:
mvn clean installRun the Spring Boot application:
mvn spring-boot:runThe backend runs at:
http://localhost:8080
Health check:
http://localhost:8080/api/health
Spring Boot uses JPA/Hibernate to create and update database tables according to the configured entities.
Open another terminal.
Go to the frontend directory:
cd frontendInstall the required dependencies:
npm installStart the React development server:
npm run devVite normally runs the frontend at:
http://localhost:5173
Open the URL shown in the terminal in your browser.
ProjectMonitor uses JWT authentication.
The login process is:
User
↓
React Frontend
↓
Login API
↓
Spring Boot
↓
Spring Security
↓
JWT Token
↓
Authenticated Requests
After successful login, the backend returns a JWT token.
The frontend sends the token with protected API requests:
Authorization: Bearer <token>Passwords are stored using secure password hashing rather than plain text.
The application supports three user roles:
ADMIN
MANAGER
MEMBER
The roles are used to control access to application functionality and APIs.
POST /api/auth/loginExample:
{
"email": "admin@projectmonitor.com",
"password": "admin123"
}POST /api/auth/registerGET /api/healthGET /api/dashboardRequires JWT authentication.
Get all projects:
GET /api/projectsCreate a project:
POST /api/projectsGet a project:
GET /api/projects/{id}Update a project:
PUT /api/projects/{id}Delete a project:
DELETE /api/projects/{id}Get all tasks:
GET /api/tasksCreate a task:
POST /api/tasksGet tasks for a project:
GET /api/tasks/project/{projectId}Update a task:
PUT /api/tasks/{id}Delete a task:
DELETE /api/tasks/{id}Get users:
GET /api/usersYou can test the backend APIs using Postman.
Send:
POST http://localhost:8080/api/auth/loginRequest body:
{
"email": "admin@projectmonitor.com",
"password": "admin123"
}The response contains a JWT token.
Copy the token returned by the login API.
In Postman:
Authorization
→ Bearer Token
→ Paste Token
Send:
POST http://localhost:8080/api/projectsExample request:
{
"name": "Digital India Portal",
"description": "Demo project",
"startDate": "2026-09-03",
"endDate": "2026-12-31",
"budget": 5000000,
"status": "IN_PROGRESS"
}Send:
POST http://localhost:8080/api/tasksExample request:
{
"title": "Build authentication module",
"description": "Implement secure login",
"deadline": "2026-09-15",
"priority": "HIGH",
"status": "PENDING",
"projectId": 1,
"assignedToId": 1
}Send:
GET http://localhost:8080/api/dashboardMake sure the JWT token is included.
The complete application works approximately as follows:
ProjectMonitor
│
┌────────────┴────────────┐
│ │
React Frontend Spring Boot
│ │
│ REST APIs
│ │
└─────────────┬───────────┘
│
Spring Security
│
JWT Token
│
Service Layer
│
JPA / Hibernate
│
MySQL
The application uses:
- Spring Security
- JWT authentication
- BCrypt password hashing
- Stateless authentication
- Protected REST APIs
- Role-based authorization
For production deployment, sensitive configuration should be moved to environment variables or a secure secrets-management system.
Sensitive information includes:
Database password
JWT secret
API keys
Other private credentials
Possible future improvements include:
- Refresh token support
- Advanced role permissions
- Audit logging
- Pagination
- Search and filtering
- Project progress charts
- Notifications
- Email notifications
- File/document management
- Advanced reports
- Production deployment
- Environment-specific configuration
- Improved validation
- Automated testing
This project is intended for learning, development, and demonstration purposes.