Open Task Hub is a long-term Java/Spring Boot portfolio project: an issue tracker inspired by Jira, Bugzilla, MantisBT and GitHub Issues.
It is intentionally not a React application. The first frontend is server-side rendered with Spring MVC + Thymeleaf + plain CSS. Later, small dynamic pieces can be added with HTMX without introducing a Node/React build pipeline.
This project is designed to demonstrate a strong modern Java backend profile:
- Java 25
- Spring Boot 4
- PostgreSQL
- Flyway migrations
- JPA/Hibernate
- Spring Security form login
- REST API
- server-side UI with Thymeleaf
- Gradle
- Docker Compose
- validation
- audit log foundation
- project/issue/comment domain model
The long-term plan is intentionally large: this can become a 1,000-10,000 hour learning and portfolio project.
The generated code already supports:
- login with Spring Security
- bootstrap users
- dashboard
- project list
- project creation
- project detail
- issue list per project
- issue creation
- issue detail
- status change
- comments
- basic REST endpoints
- PostgreSQL schema via Flyway
- audit event records for key actions
Use Thymeleaf first.
Reasons:
- no React learning burden
- no Node/npm/Vite toolchain
- normal Java controller + HTML templates
- easy to change by one developer
- suitable for internal tools, admin panels and issue trackers
- can later use HTMX for inline updates, filters and partial refreshes
Recommended future frontend stack:
- Phase 1: Thymeleaf + plain CSS
- Phase 2: Thymeleaf fragments + HTMX
- Phase 3: optional Alpine.js for tiny local interactions
- Avoid React unless the project later needs a public SPA-style frontend.
Do not use Axon Framework in the first years of this project.
Axon is useful for CQRS/Event Sourcing systems, but it will make the learning path harder and less generally transferable. Most Java/Spring backend jobs will value clean Spring Boot, JPA, PostgreSQL, REST, security, tests and Docker more than Axon-specific knowledge.
A better path:
- Start with classic modular monolith.
- Add domain events using Spring events.
- Add an outbox table.
- Add Kafka/RabbitMQ integration.
- Only then consider CQRS/Event Sourcing in one isolated module.
- Docker and Docker Compose for the easiest run path
- Or Java 25 + Gradle 8.14+/9.x + local PostgreSQL
Spring Boot 4.0.x supports Java 17 through Java 26 and Gradle 8.14+ or 9.x according to the official Spring Boot system requirements.
docker compose up --buildOpen:
http://localhost:8080
Demo users:
admin / admin123
robert / robert123
The application creates a demo CNA project with initial issues.
List projects:
curl -u admin:admin123 http://localhost:8080/api/projectsCreate project:
curl -u admin:admin123 -H 'Content-Type: application/json' -d '{"key":"NOVA","name":"Nova-3D","description":"Nova-3D engine tasks","visibility":"PRIVATE"}' http://localhost:8080/api/projectsCreate issue:
curl -u admin:admin123 -H 'Content-Type: application/json' -d '{"title":"Implement workflow editor","description":"Project-specific workflow configuration.","type":"FEATURE","priority":"HIGH"}' http://localhost:8080/api/projects/CNA/issuesCreate PostgreSQL database:
create database open_task_hub;
create user forge with password 'forge';
grant all privileges on database open_task_hub to forge;Run:
gradle bootRuncom.openeggbert.opentaskhub
├── api REST DTOs and REST controllers
├── config security and bootstrap data
├── domain JPA entities and enums
├── repository Spring Data JPA repositories
├── service transactional application services
└── web Thymeleaf MVC controllers and forms
- Better validation and error pages.
- Issue edit screen.
- Assignee selection.
- Labels UI.
- Full-text search.
- Real permission checks per project.
- Tests with Testcontainers.
- OpenAPI/Swagger.
- LDAP/OIDC integration.
- Webhooks and companion services.
See docs/ROADMAP-10000H.md and docs/FUTURE-DATA-MODEL.md.