Skip to content

robertvokac/open-task-hub

Repository files navigation

Open Task Hub

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.

Why this project exists

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.

Current MVP features

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

Frontend choice

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.

Axon Framework decision

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:

  1. Start with classic modular monolith.
  2. Add domain events using Spring events.
  3. Add an outbox table.
  4. Add Kafka/RabbitMQ integration.
  5. Only then consider CQRS/Event Sourcing in one isolated module.

Requirements

  • 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.

Run with Docker Compose

docker compose up --build

Open:

http://localhost:8080

Demo users:

admin / admin123
robert / robert123

The application creates a demo CNA project with initial issues.

REST examples

List projects:

curl -u admin:admin123 http://localhost:8080/api/projects

Create 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/projects

Create 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/issues

Local development

Create 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 bootRun

Package structure

com.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

Next implementation priorities

  1. Better validation and error pages.
  2. Issue edit screen.
  3. Assignee selection.
  4. Labels UI.
  5. Full-text search.
  6. Real permission checks per project.
  7. Tests with Testcontainers.
  8. OpenAPI/Swagger.
  9. LDAP/OIDC integration.
  10. Webhooks and companion services.

See docs/ROADMAP-10000H.md and docs/FUTURE-DATA-MODEL.md.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors