A modern, full-stack project management application built with Spring Boot and Next.js. This application provides comprehensive project and task management capabilities with a beautiful, responsive UI and robust backend API.
- Project Management: Create, update, and manage projects with different statuses (Planned, In Progress, Completed, On Hold, Cancelled)
- Task Management: Comprehensive task tracking with priorities, due dates, and status management
- User Authentication: Secure JWT-based authentication with registration and login
- Statistics Dashboard: Real-time insights into projects and tasks with visual analytics
- Role-based Access: User and admin role support
- RESTful API: Well-documented API with Swagger/OpenAPI integration
- Database Management: H2 in-memory database with JPA/Hibernate
- Security: Spring Security with JWT tokens and CORS configuration
- Validation: Comprehensive input validation with custom error handling
- Modern UI: Responsive design with Tailwind CSS and smooth animations
- Java 23 - Latest Java LTS features
- Spring Boot 3.2.3 - Main framework
- Spring Security - Authentication and authorization
- Spring Data JPA - Database abstraction layer
- H2 Database - In-memory database for development
- JWT (JSON Web Tokens) - Stateless authentication
- MapStruct - Object mapping
- Lombok - Boilerplate code reduction
- SpringDoc OpenAPI - API documentation
- Next.js 15 - React framework with App Router
- React 19 - Latest React features
- TypeScript - Type safety
- Tailwind CSS - Utility-first CSS framework
- Framer Motion - Smooth animations
- Lucide React - Beautiful icons
- Axios - HTTP client
- Tremor - Data visualization components
Before running this application, make sure you have:
- Java 23 or later
- Node.js 18 or later
- npm or yarn
- Maven 3.6+
git clone <repository-url>
cd project-management-app# Run the Spring Boot application
./mvnw spring-boot:run
# Or with Maven wrapper on Windows
mvnw.cmd spring-boot:run
# The backend will start on http://localhost:8080# Navigate to frontend directory
cd frontend
# Install dependencies
npm install
# Run the development server
npm run dev
# The frontend will start on http://localhost:3000- Frontend: http://localhost:3000
- Backend API: http://localhost:8080
- API Documentation: http://localhost:8080/swagger-ui/index.html
- H2 Console: http://localhost:8080/h2-console
The API is fully documented using OpenAPI/Swagger. Once the backend is running, visit:
- Swagger UI: http://localhost:8080/swagger-ui/index.html
- OpenAPI JSON: http://localhost:8080/v3/api-docs
POST /api/auth/register- User registrationPOST /api/auth/login- User loginGET /api/auth/validate- Token validation
GET /api/projects- List all projects (with pagination)POST /api/projects- Create new projectGET /api/projects/{id}- Get project by IDPUT /api/projects/{id}- Update projectDELETE /api/projects/{id}- Delete project
GET /api/tasks- List all tasks (with pagination)POST /api/tasks- Create new taskGET /api/tasks/{id}- Get task by IDPUT /api/tasks/{id}- Update taskDELETE /api/tasks/{id}- Delete task
GET /api/stats- Get dashboard statistics
The application uses H2 in-memory database for development. The database schema includes:
- Users: User accounts with authentication
- Projects: Project management with status and priority
- Tasks: Task tracking with relationships to projects
- URL:
jdbc:h2:mem:testdb - Username:
sa - Password: (empty)
- JWT-based authentication with 1-hour token expiration
- Password encryption using BCrypt
- CORS configuration for frontend integration
- Role-based access control (USER, ADMIN)
project-management-app/
βββ src/main/java/com/project/projectmanagementapp/
β βββ config/ # Configuration classes
β βββ controller/ # REST controllers
β βββ dto/ # Data Transfer Objects
β βββ entity/ # JPA entities
β βββ exception/ # Exception handling
β βββ mapper/ # MapStruct mappers
β βββ repository/ # Data repositories
β βββ security/ # Security configuration
β βββ service/ # Business logic
βββ src/main/resources/
β βββ application.properties
β βββ db/migration/ # Database migrations
βββ frontend/
β βββ src/
β β βββ app/ # Next.js App Router pages
β β βββ components/ # Reusable UI components
β β βββ lib/ # Utilities and services
β βββ public/ # Static assets
βββ pom.xml # Maven configuration
# Run all tests
./mvnw test
# Run with coverage
./mvnw test jacoco:reportcd frontend
npm test# Create executable JAR
./mvnw clean package
# Run the JAR
java -jar target/project-management-app-0.0.1-SNAPSHOT.jarcd frontend
# Build for production
npm run build
# Start production server
npm start# Build Docker image
docker build -t project-management-app .
# Run container
docker run -p 8080:8080 project-management-appFor production deployment, configure these environment variables:
JWT_SECRET: Strong secret key for JWT signingJWT_EXPIRATION: Token expiration time in millisecondsDATABASE_URL: Production database URLDATABASE_USERNAME: Database usernameDATABASE_PASSWORD: Database password
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
Happy Project Managing! π―