Battle-tested JVM tooling. No exotic frameworks. Every component is the
canonical choice for its role in an enterprise data centre.
| Component | Role | Notes |
| Java 17 | Runtime | LTS, modern records, sealed types, virtual threads where applicable. |
| Spring Boot 3.x | Service framework | Auto-configuration, actuator probes, JSON rolling logs, OAuth2 resource server. |
| Spring Cloud | Config / discovery | Centralised config (`tasksense-config-service`), discovery via Eureka or Kubernetes-native. |
| Hibernate / JPA | Persistence | JOINED inheritance for the SchedulerDefinition hierarchy; lazy fetch on heavy collections. |
| Quartz cron | Cron parsing | L, W, #, MONL extensions — "last weekday of month" patterns out of the box. |
| Component | Role | Notes |
| Angular 19 | SPA framework | Standalone components, signals, schema-driven schedule forms. |
| TypeScript 5.5 | Language | Strict mode, OpenAPI-generated clients per service. |
| Angular Material 19 | UI primitives | Form fields, dialogs, chip lists, button toggles, datepickers. |
| Worktile Gantt | Schedule preview | Live next-N firings rendered as a Gantt with simulated duration / jitter / drift. |
| ngx-mat-timepicker | Time picking | Clock-face HH:mm picker for execution time + anchor time. |
| Component | Role | Notes |
| Apache Kafka | Event bus | Execution dispatch, snapshot streams, audit topic. Topic-prefix per concern. |
| Solace | Alternate broker | Drop-in replacement for Kafka where Solace is the enterprise standard. |
| MQTT | Edge messaging | For IoT-style runner deployments at field locations. |
| MySQL 8 | Relational store | Schedules, events, executions, audit, userdata. UTF8MB4. |
| MinIO | Blob store | Per-execution log capture (append-only object per run). |
| Chronicle Queue | Off-heap events | Optional in-process queue for sub-millisecond runner pickup paths. |
| Chronicle Map | Off-heap cache | For runner-registry hot-path lookups. |