# ivonnedpa/sprint-mind-hackathon architecture

> Architecture diagram of the GitHub repository ivonnedpa/sprint-mind-hackathon, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-06-17). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/ivonnedpa/sprint-mind-hackathon
- Repository: https://github.com/ivonnedpa/sprint-mind-hackathon

## Overview

1. **Top-level shape**
   - This is a **monorepo** with two independently runnable applications:
     - `backend/sprintmind`: Spring Boot service
     - `frontend/sprintmindapp`: Angular SPA
   - The architecture is split cleanly into a **browser UI**, a **REST backend**, and at least one **external Atlassian/Jira integration**.

2. **Backend runtime and entrypoints**
   - The backend is a **Java 17 + Maven** Spring Boot application.
   - `SprintmindApplication` is the main bootstrapping class.
   - `ServletInitializer` suggests the backend is also prepared for traditional servlet-container deployment, not just local `spring-boot:run`.

3. **Backend API layer**
   - `controller/HelloController` is the simplest demo endpoint, likely serving the `/api/hello` flow described in the README.
   - `controller/TicketController` is the domain-facing API for ticket-related operations, probably the main functional endpoint set of the hackathon app.
   - This controller layer is the boundary between HTTP requests and internal business logic.

4. **Backend business/integration layer**
   - `jira/JiraService` is the key integration service and likely encapsulates all communication with Atlassian/Jira.
   - `jira/TicketRequest` is the request DTO used to carry ticket creation or ticket action data from the controller layer into the service layer.
   - `TestAtlassian` appears to be a helper or experiment class for validating Atlassian connectivity or API behavior.

5. **External system boundary**
   - The most important external dependency beyond the browser is **Jira / Atlassian APIs**.
   - The probable backend flow is: **HTTP request → controller → JiraService → Jira API → response back to controller**.
   - This is the main place where the repo crosses from application code into a third-party service.

6. **Backend configuration and static assets**
   - `src/main/resources/application.properties` holds runtime configuration for the Spring app.
   - `src/main/resources/static/index.html` means the backend also contains a small static web entrypoint or fallback page, separate from the Angular app.
   - This static content is not the primary UI; it is secondary to the frontend app.

7. **Backend tests**
   - `SprintmindApplicationTests` provides the backend test harness and confirms the Spring context starts correctly.
   - The backend test boundary is focused on application startup rather than deep integration coverage, based on the file layout.

8. **Frontend runtime and structure**
   - The frontend is an **Angular** application under `frontend/sprintmindapp`.
   - `src/main.ts`, `app.ts`, `app.html`, `app.css` define the root application shell.
   - `src/app/sprint-mind/*` is the main feature component, indicating the UI is organized around a single primary screen/feature module.

9. **Frontend-to-backend communication**
   - The README states the Angular app calls `/api/hello`.
   - `proxy.conf.json` forwards local API traffic to the Spring Boot server on `http://localhost:8080`, which keeps the browser-facing origin simple during development.
   - This means the frontend talks to the backend through a **dev proxy**, not by hardcoding backend URLs in the UI.

10. **Frontend deployment boundary**
   - The frontend runs separately on `http://localhost:4200`.
   - The backend runs on `http://localhost:8080`.
   - In local development, the proxy bridges those two processes; in architecture terms, the browser never directly talks to Jira or other services.

11. **Tooling and build system**
   - Backend: Maven Wrapper (`mvnw`) keeps the Java build reproducible.
   - Frontend: Angular CLI / npm with `package-lock.json` for deterministic dependency installs.
   - The repo is set up to be run as two distinct dev processes rather than one combined build artifact.

12. **What to draw in an architecture diagram**
   - Draw three main nodes:
     - **Browser / Angular UI**
     - **Spring Boot backend**
     - **External Jira/Atlassian service**
   - Show two local flows:
     - Angular UI → Spring Boot API via proxy during development
     - Spring controllers → JiraService → Jira API
   - Keep the backend split into **controller layer** and **service/integration layer**, since that is the main internal architectural boundary.

Main entry points: [`backend/sprintmind/src/main/java/com/hackathon/poc/sprintmind/SprintmindApplication.java`](https://github.com/ivonnedpa/sprint-mind-hackathon/blob/master/backend/sprintmind/src/main/java/com/hackathon/poc/sprintmind/SprintmindApplication.java) (Spring Boot app), [`backend/sprintmind/src/main/java/com/hackathon/poc/sprintmind/controller/TicketController.java`](https://github.com/ivonnedpa/sprint-mind-hackathon/blob/master/backend/sprintmind/src/main/java/com/hackathon/poc/sprintmind/controller/TicketController.java) (Ticket API), [`frontend/sprintmindapp/src/main.ts`](https://github.com/ivonnedpa/sprint-mind-hackathon/blob/master/frontend/sprintmindapp/src/main.ts) (Angular shell), [`frontend/sprintmindapp/proxy.conf.json`](https://github.com/ivonnedpa/sprint-mind-hackathon/blob/master/frontend/sprintmindapp/proxy.conf.json) (Dev proxy)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Frontend"]
  node_browser(("Browser<br/>client"))
  node_angular_shell["Angular shell<br/>spa entry<br/>[main.ts]"]
  node_sprint_mind_ui["Sprint Mind UI<br/>feature component<br/>[sprint-mind.ts]"]
  node_dev_proxy["Dev proxy<br/>proxy config<br/>[proxy.conf.json]"]
end

subgraph group_backend["Backend"]
  node_spring_boot["Spring Boot app<br/>runtime"]
  node_servlet_init["Servlet init<br/>container hook"]
  node_hello_controller["Hello API<br/>controller"]
  node_ticket_controller["Ticket API<br/>controller"]
  node_jira_service["Jira service<br/>integration service<br/>[JiraService.java]"]
  node_ticket_request["Ticket request<br/>dto<br/>[TicketRequest.java]"]
  node_atlassian_probe["Atlassian probe<br/>helper<br/>[TestAtlassian.java]"]
  node_app_props["App config<br/>properties"]
  node_static_index["Static index<br/>static asset<br/>[index.html]"]
  node_backend_tests["Backend tests<br/>test harness"]
end

subgraph group_external["External"]
  node_jira_api[("Jira API<br/>external service")]
end

node_browser -->|"loads"| node_angular_shell
node_angular_shell -->|"renders"| node_sprint_mind_ui
node_angular_shell -.->|"api via proxy"| node_dev_proxy
node_dev_proxy -.->|"/api/hello"| node_hello_controller
node_dev_proxy -.->|"ticket API"| node_ticket_controller
node_spring_boot -->|"hosts"| node_hello_controller
node_spring_boot -->|"hosts"| node_ticket_controller
node_ticket_controller -->|"binds"| node_ticket_request
node_ticket_controller -->|"delegates"| node_jira_service
node_hello_controller -->|"part of"| node_spring_boot
node_jira_service -->|"calls"| node_jira_api
node_atlassian_probe -.->|"checks"| node_jira_api
node_spring_boot -->|"deploys via"| node_servlet_init
node_spring_boot -->|"configured by"| node_app_props
node_spring_boot -->|"serves"| node_static_index
node_spring_boot -.->|"verified by"| node_backend_tests

click node_angular_shell "https://github.com/ivonnedpa/sprint-mind-hackathon/blob/master/frontend/sprintmindapp/src/main.ts"
click node_sprint_mind_ui "https://github.com/ivonnedpa/sprint-mind-hackathon/blob/master/frontend/sprintmindapp/src/app/sprint-mind/sprint-mind.ts"
click node_dev_proxy "https://github.com/ivonnedpa/sprint-mind-hackathon/blob/master/frontend/sprintmindapp/proxy.conf.json"
click node_spring_boot "https://github.com/ivonnedpa/sprint-mind-hackathon/blob/master/backend/sprintmind/src/main/java/com/hackathon/poc/sprintmind/SprintmindApplication.java"
click node_servlet_init "https://github.com/ivonnedpa/sprint-mind-hackathon/blob/master/backend/sprintmind/src/main/java/com/hackathon/poc/sprintmind/ServletInitializer.java"
click node_hello_controller "https://github.com/ivonnedpa/sprint-mind-hackathon/blob/master/backend/sprintmind/src/main/java/com/hackathon/poc/sprintmind/controller/HelloController.java"
click node_ticket_controller "https://github.com/ivonnedpa/sprint-mind-hackathon/blob/master/backend/sprintmind/src/main/java/com/hackathon/poc/sprintmind/controller/TicketController.java"
click node_jira_service "https://github.com/ivonnedpa/sprint-mind-hackathon/blob/master/backend/sprintmind/src/main/java/com/hackathon/poc/sprintmind/jira/JiraService.java"
click node_ticket_request "https://github.com/ivonnedpa/sprint-mind-hackathon/blob/master/backend/sprintmind/src/main/java/com/hackathon/poc/sprintmind/jira/TicketRequest.java"
click node_atlassian_probe "https://github.com/ivonnedpa/sprint-mind-hackathon/blob/master/backend/sprintmind/src/main/java/com/hackathon/poc/sprintmind/TestAtlassian.java"
click node_app_props "https://github.com/ivonnedpa/sprint-mind-hackathon/blob/master/backend/sprintmind/src/main/resources/application.properties"
click node_static_index "https://github.com/ivonnedpa/sprint-mind-hackathon/blob/master/backend/sprintmind/src/main/resources/static/index.html"
click node_backend_tests "https://github.com/ivonnedpa/sprint-mind-hackathon/blob/master/backend/sprintmind/src/test/java/com/hackathon/poc/sprintmind/SprintmindApplicationTests.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_browser,node_angular_shell,node_sprint_mind_ui,node_dev_proxy toneBlue
class node_spring_boot,node_servlet_init,node_hello_controller,node_ticket_controller,node_jira_service,node_ticket_request,node_atlassian_probe,node_app_props,node_static_index,node_backend_tests toneAmber
class node_jira_api toneMint
```

## Components

### Frontend

Angular browser app and local dev proxy

- **Browser**: client · User-facing runtime for the Angular SPA
- [Angular shell](https://github.com/ivonnedpa/sprint-mind-hackathon/blob/master/frontend/sprintmindapp/src/main.ts): spa entry · Root Angular application bootstrap and layout · `frontend/sprintmindapp/src/main.ts`
- [Sprint Mind UI](https://github.com/ivonnedpa/sprint-mind-hackathon/blob/master/frontend/sprintmindapp/src/app/sprint-mind/sprint-mind.ts): feature component · Primary frontend screen/feature area · `frontend/sprintmindapp/src/app/sprint-mind/sprint-mind.ts`
- [Dev proxy](https://github.com/ivonnedpa/sprint-mind-hackathon/blob/master/frontend/sprintmindapp/proxy.conf.json): proxy config · Forwards browser API calls to the backend during local development · `frontend/sprintmindapp/proxy.conf.json`

### Backend

Spring Boot service and its API/integration layers

- [Spring Boot app](https://github.com/ivonnedpa/sprint-mind-hackathon/blob/master/backend/sprintmind/src/main/java/com/hackathon/poc/sprintmind/SprintmindApplication.java): runtime · Main Java backend runtime and application entrypoint · `backend/sprintmind/src/main/java/com/hackathon/poc/sprintmind/SprintmindApplication.java`
- [Servlet init](https://github.com/ivonnedpa/sprint-mind-hackathon/blob/master/backend/sprintmind/src/main/java/com/hackathon/poc/sprintmind/ServletInitializer.java): container hook · Servlet-container deployment entrypoint · `backend/sprintmind/src/main/java/com/hackathon/poc/sprintmind/ServletInitializer.java`
- [Hello API](https://github.com/ivonnedpa/sprint-mind-hackathon/blob/master/backend/sprintmind/src/main/java/com/hackathon/poc/sprintmind/controller/HelloController.java): controller · Simple demo HTTP endpoint · `backend/sprintmind/src/main/java/com/hackathon/poc/sprintmind/controller/HelloController.java`
- [Ticket API](https://github.com/ivonnedpa/sprint-mind-hackathon/blob/master/backend/sprintmind/src/main/java/com/hackathon/poc/sprintmind/controller/TicketController.java): controller · Domain HTTP API for ticket operations · `backend/sprintmind/src/main/java/com/hackathon/poc/sprintmind/controller/TicketController.java`
- [Jira service](https://github.com/ivonnedpa/sprint-mind-hackathon/blob/master/backend/sprintmind/src/main/java/com/hackathon/poc/sprintmind/jira/JiraService.java): integration service · Encapsulates Jira/Atlassian communication · `backend/sprintmind/src/main/java/com/hackathon/poc/sprintmind/jira/JiraService.java`
- [Ticket request](https://github.com/ivonnedpa/sprint-mind-hackathon/blob/master/backend/sprintmind/src/main/java/com/hackathon/poc/sprintmind/jira/TicketRequest.java): dto · Request payload for ticket actions · `backend/sprintmind/src/main/java/com/hackathon/poc/sprintmind/jira/TicketRequest.java`
- [Atlassian probe](https://github.com/ivonnedpa/sprint-mind-hackathon/blob/master/backend/sprintmind/src/main/java/com/hackathon/poc/sprintmind/TestAtlassian.java): helper · Connectivity or API experiment for Atlassian integration · `backend/sprintmind/src/main/java/com/hackathon/poc/sprintmind/TestAtlassian.java`
- [App config](https://github.com/ivonnedpa/sprint-mind-hackathon/blob/master/backend/sprintmind/src/main/resources/application.properties): properties · Spring runtime configuration · `backend/sprintmind/src/main/resources/application.properties`
- [Static index](https://github.com/ivonnedpa/sprint-mind-hackathon/blob/master/backend/sprintmind/src/main/resources/static/index.html): static asset · Secondary backend-served HTML entrypoint · `backend/sprintmind/src/main/resources/static/index.html`
- [Backend tests](https://github.com/ivonnedpa/sprint-mind-hackathon/blob/master/backend/sprintmind/src/test/java/com/hackathon/poc/sprintmind/SprintmindApplicationTests.java): test harness · Spring context startup verification · `backend/sprintmind/src/test/java/com/hackathon/poc/sprintmind/SprintmindApplicationTests.java`

### External

Third-party Atlassian/Jira boundary

- **Jira API**: external service · Atlassian/Jira third-party system

## Connections

- Browser → Angular shell: loads · User interacts with the Angular app in the browser
- Angular shell → Sprint Mind UI: renders · The app shell hosts the main feature component
- Angular shell → Dev proxy: api via proxy · Local browser API calls are forwarded through the dev proxy
- Dev proxy → Hello API: /api/hello · Development-time routing to the backend hello endpoint
- Dev proxy → Ticket API: ticket API · Development-time routing to the ticket API
- Spring Boot app → Hello API: hosts · Spring Boot wires the hello controller into the HTTP stack
- Spring Boot app → Ticket API: hosts · Spring Boot wires the ticket controller into the HTTP stack
- Ticket API → Ticket request: binds · Ticket actions are mapped from request payloads
- Ticket API → Jira service: delegates · Controller hands domain work to the Jira integration service
- Hello API → Spring Boot app: part of · Demo endpoint is part of the Spring application
- Jira service → Jira API: calls · Service crosses the application boundary into Jira/Atlassian APIs
- Atlassian probe → Jira API: checks · Helper class appears used to validate Atlassian connectivity
- Spring Boot app → Servlet init: deploys via · Servlet initializer supports container deployment
- Spring Boot app → App config: configured by · Runtime settings are loaded from application properties
- Spring Boot app → Static index: serves · Backend also contains a small static HTML entrypoint
- Spring Boot app → Backend tests: verified by · Application startup is covered by backend tests
