A modern project management application inspired by Linear and Jira, built with Spring Boot and Angular.
- Project Management: Create and manage multiple projects with unique keys
- Ticket/Issue Tracking: Full ticket lifecycle management with customizable statuses
- Kanban Board: Visual board with drag-and-drop columns (To Do, In Progress, Ready for Review, Done)
- Priority Levels: Five priority levels (Lowest, Low, Medium, High, Highest)
- User Management: Assign tickets to team members
- Tags/Labels: Organize tickets with colored tags
- Comments: Add remarks and discussions to tickets
- Issue Linking: Link related tickets together
- Due Dates: Set and track ticket deadlines
- RESTful API: Complete REST API for all operations
- Modern UI: Clean, responsive interface similar to Linear and Jira
- Spring Boot 3.2.0 - Java framework
- Spring Data JPA - Database access
- H2 Database - In-memory database (development)
- PostgreSQL - Production database support
- Lombok - Reduce boilerplate code
- Maven - Build tool
- Angular 17 - Frontend framework
- TypeScript - Type-safe JavaScript
- RxJS - Reactive programming
- Standalone Components - Modern Angular architecture
.
├── backend/ # Spring Boot backend
│ ├── src/
│ │ ├── main/
│ │ │ ├── java/com/projectmanager/app/
│ │ │ │ ├── controller/ # REST controllers
│ │ │ │ ├── service/ # Business logic
│ │ │ │ ├── repository/ # Data access
│ │ │ │ ├── model/ # Domain entities
│ │ │ │ ├── dto/ # Data transfer objects
│ │ │ │ ├── config/ # Configuration
│ │ │ │ └── exception/ # Exception handling
│ │ │ └── resources/
│ │ │ └── application.properties
│ │ └── test/
│ └── pom.xml
│
└── frontend/ # Angular frontend
├── src/
│ ├── app/
│ │ ├── components/ # UI components
│ │ │ ├── project-list/
│ │ │ ├── project-detail/
│ │ │ ├── ticket-board/
│ │ │ └── ticket-detail/
│ │ ├── services/ # API services
│ │ ├── models/ # TypeScript interfaces
│ │ ├── app.component.ts
│ │ ├── app.routes.ts
│ │ └── app.config.ts
│ ├── index.html
│ ├── main.ts
│ └── styles.css
├── angular.json
├── package.json
└── tsconfig.json
- Java 17 or higher
- Node.js 18 or higher
- npm or yarn
- Maven 3.6+
-
Navigate to the backend directory:
cd backend -
Build the project:
mvn clean install
-
Run the Spring Boot application:
mvn spring-boot:run
Or run the JAR directly:
java -jar target/project-manager-backend-1.0.0.jar
-
The backend will start on
http://localhost:8080 -
Access the H2 Console (development):
http://localhost:8080/h2-console- JDBC URL:
jdbc:h2:mem:projectmanagerdb - Username:
sa - Password: (leave empty)
- JDBC URL:
-
Navigate to the frontend directory:
cd frontend -
Install dependencies:
npm install
-
Start the development server:
npm start
-
The frontend will start on
http://localhost:4200 -
Open your browser and navigate to
http://localhost:4200
http://localhost:8080/api
GET /api/users- Get all usersGET /api/users/{id}- Get user by IDGET /api/users/username/{username}- Get user by usernamePOST /api/users- Create new userPUT /api/users/{id}- Update userDELETE /api/users/{id}- Delete user
GET /api/projects- Get all projectsGET /api/projects/{id}- Get project by IDGET /api/projects/key/{key}- Get project by keyPOST /api/projects- Create new projectPUT /api/projects/{id}- Update projectDELETE /api/projects/{id}- Delete project
GET /api/tickets- Get all ticketsGET /api/tickets/{id}- Get ticket by IDGET /api/tickets/number/{ticketNumber}- Get ticket by numberGET /api/tickets/project/{projectId}- Get tickets by projectGET /api/tickets/assignee/{assigneeId}- Get tickets by assigneePOST /api/tickets- Create new ticketPUT /api/tickets/{id}- Update ticketDELETE /api/tickets/{id}- Delete ticket
GET /api/tags- Get all tagsGET /api/tags/{id}- Get tag by IDPOST /api/tags- Create new tagPUT /api/tags/{id}- Update tagDELETE /api/tags/{id}- Delete tag
GET /api/comments/ticket/{ticketId}- Get comments by ticketPOST /api/comments- Create new commentPUT /api/comments/{id}- Update commentDELETE /api/comments/{id}- Delete comment
GET /api/ticket-links/source/{sourceTicketId}- Get links by source ticketGET /api/ticket-links/target/{targetTicketId}- Get links by target ticketPOST /api/ticket-links- Create new ticket linkDELETE /api/ticket-links/{id}- Delete ticket link
The application comes with pre-loaded sample data:
- John Doe (john_doe)
- Jane Smith (jane_smith)
- Bob Wilson (bob_wilson)
- WEB - Web Application
- MOB - Mobile App
Various sample tickets across different statuses and priorities
# Server Configuration
server.port=8080
# Database Configuration
spring.datasource.url=jdbc:h2:mem:projectmanagerdb
spring.datasource.username=sa
spring.datasource.password=
# JPA Configuration
spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.show-sql=trueThe API base URL is configured in src/app/services/api.service.ts:
private baseUrl = 'http://localhost:8080/api';-
Update
application.propertiesfor PostgreSQL:spring.datasource.url=jdbc:postgresql://localhost:5432/projectmanager spring.datasource.username=your_username spring.datasource.password=your_password spring.jpa.hibernate.ddl-auto=update
-
Build production JAR:
mvn clean package -DskipTests
-
Run the application:
java -jar target/project-manager-backend-1.0.0.jar
-
Build for production:
npm run build
-
The build artifacts will be stored in
dist/ -
Deploy the contents to your web server (nginx, Apache, etc.)
- Backend: Add entities → repositories → services → controllers
- Frontend: Add models → services → components
- Backend: Follow Java naming conventions and Spring Boot best practices
- Frontend: Follow Angular style guide and TypeScript best practices
cd backend
mvn testcd frontend
npm test- Port already in use: Change
server.portinapplication.properties - Database connection issues: Check H2 console or PostgreSQL connection
- API connection issues: Verify backend is running and API URL is correct
- CORS errors: CORS is configured in controllers with
@CrossOrigin(origins = "*")
- User authentication and authorization
- Real-time updates with WebSockets
- File attachments for tickets
- Email notifications
- Sprint planning
- Burndown charts
- Export functionality
- Mobile app
- Dark mode theme
This project is open source and available under the MIT License.
Contributions are welcome! Please feel free to submit a Pull Request.
For issues and questions, please open an issue on the repository.