# tania-macheieva/jira-like architecture

> Architecture diagram of the GitHub repository tania-macheieva/jira-like, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/tania-macheieva/jira-like
- Repository: https://github.com/tania-macheieva/jira-like

## Overview

Jira-like is a multi-tenant issue tracker: users authenticate, select or create a workspace, then manage epics, issues, comments, and sprints through a React UI backed by a Rails API. The API authorizes workspace and record operations, filters issue lists, and persists domain records; issue status changes go through a dedicated transition service and workflow engine. The README documents frontend planning views and API capabilities; unsampled controllers and UI modules are represented by their tree paths, with only documented or source-supported connections shown.

Main entry points: [`api/config/routes.rb`](https://github.com/tania-macheieva/jira-like/blob/main/api/config/routes.rb) (API routes), [`api/app/models`](https://github.com/tania-macheieva/jira-like/tree/main/api/app/models) (Workspace and issue records), [`web/src/App.jsx`](https://github.com/tania-macheieva/jira-like/blob/main/web/src/App.jsx) (App entry), [`api/app/controllers/api/v1/issues_controller.rb`](https://github.com/tania-macheieva/jira-like/blob/main/api/app/controllers/api/v1/issues_controller.rb) (Issue endpoints)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Web interface"]
  node_app["App entry<br/>[App.jsx]"]
  node_workspace_hook["Workspace state<br/>[useWorkspace.js]"]
  node_shell["Workspace shell<br/>[WorkspaceShell.jsx]"]
  node_auth_page["Authentication view<br/>[AuthPage.jsx]"]
  node_planning_views["Planning views"]
  node_api_client["HTTP client<br/>[apiClient.js]"]
end

subgraph group_api["Rails API"]
  node_routes["API routes<br/>[routes.rb]"]
  node_auth_controller["Session auth"]
  node_workspace_controller["Workspace endpoints"]
  node_issue_controller["Issue endpoints"]
  node_epic_controller["Epic endpoints"]
  node_sprint_controller["Sprint endpoints"]
  node_comment_controller["Comment endpoints"]
  node_authorization["Authentication and policies<br/>[authentication.rb]"]
end

subgraph group_domain["Issue domain"]
  node_issue_query["Issue filtering<br/>[issue_query.rb]"]
  node_domain_models["Workspace and issue records"]
  node_database[("Application database<br/>[schema.rb]")]
end

subgraph group_workflow["Status workflow"]
  node_move_service["Move issue service"]
  node_engine["Transition rules<br/>[workflow_engine.rb]"]
end

node_user(("Workspace user"))

node_user -->|"uses"| node_app
node_app -->|"renders"| node_auth_page
node_app -->|"loads state"| node_workspace_hook
node_app -->|"renders"| node_shell
node_shell -->|"shows views"| node_planning_views
node_workspace_hook -->|"requests"| node_api_client
node_app -->|"requests auth"| node_api_client
node_api_client -->|"sends HTTP"| node_routes
node_routes -->|"dispatches"| node_auth_controller
node_routes -->|"dispatches"| node_workspace_controller
node_routes -->|"dispatches"| node_issue_controller
node_routes -->|"dispatches"| node_epic_controller
node_routes -->|"dispatches"| node_sprint_controller
node_routes -->|"dispatches"| node_comment_controller
node_auth_controller -->|"authenticates"| node_authorization
node_workspace_controller -->|"authorizes"| node_authorization
node_issue_controller -->|"authorizes"| node_authorization
node_comment_controller -->|"authorizes"| node_authorization
node_issue_controller -->|"filters issues"| node_issue_query
node_issue_controller -->|"moves issue"| node_move_service
node_move_service -->|"checks transition"| node_engine
node_workspace_controller -->|"reads and writes"| node_domain_models
node_issue_controller -->|"reads and writes"| node_domain_models
node_epic_controller -->|"reads and writes"| node_domain_models
node_sprint_controller -->|"reads and writes"| node_domain_models
node_comment_controller -->|"reads and writes"| node_domain_models
node_issue_query -->|"queries scope"| node_domain_models
node_move_service -->|"updates issue"| node_domain_models
node_domain_models -->|"persists records"| node_database

click node_app "https://github.com/tania-macheieva/jira-like/blob/main/web/src/App.jsx"
click node_workspace_hook "https://github.com/tania-macheieva/jira-like/blob/main/web/src/hooks/useWorkspace.js"
click node_shell "https://github.com/tania-macheieva/jira-like/blob/main/web/src/components/WorkspaceShell.jsx"
click node_auth_page "https://github.com/tania-macheieva/jira-like/blob/main/web/src/pages/AuthPage.jsx"
click node_planning_views "https://github.com/tania-macheieva/jira-like/tree/main/web/src/pages"
click node_api_client "https://github.com/tania-macheieva/jira-like/blob/main/web/src/lib/apiClient.js"
click node_routes "https://github.com/tania-macheieva/jira-like/blob/main/api/config/routes.rb"
click node_auth_controller "https://github.com/tania-macheieva/jira-like/tree/main/api/app/controllers/api/v1/auth"
click node_workspace_controller "https://github.com/tania-macheieva/jira-like/blob/main/api/app/controllers/api/v1/workspaces_controller.rb"
click node_issue_controller "https://github.com/tania-macheieva/jira-like/blob/main/api/app/controllers/api/v1/issues_controller.rb"
click node_epic_controller "https://github.com/tania-macheieva/jira-like/blob/main/api/app/controllers/api/v1/epics_controller.rb"
click node_sprint_controller "https://github.com/tania-macheieva/jira-like/blob/main/api/app/controllers/api/v1/sprints_controller.rb"
click node_comment_controller "https://github.com/tania-macheieva/jira-like/blob/main/api/app/controllers/api/v1/comments_controller.rb"
click node_authorization "https://github.com/tania-macheieva/jira-like/blob/main/api/app/controllers/concerns/authentication.rb"
click node_issue_query "https://github.com/tania-macheieva/jira-like/blob/main/api/app/queries/issue_query.rb"
click node_domain_models "https://github.com/tania-macheieva/jira-like/tree/main/api/app/models"
click node_database "https://github.com/tania-macheieva/jira-like/blob/main/api/db/schema.rb"
click node_move_service "https://github.com/tania-macheieva/jira-like/blob/main/api/app/services/move_issue_service.rb"
click node_engine "https://github.com/tania-macheieva/jira-like/blob/main/workflow_engine/lib/workflow_engine.rb"

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_app,node_workspace_hook,node_shell,node_auth_page,node_planning_views,node_api_client,node_user toneBlue
class node_routes,node_auth_controller,node_workspace_controller,node_issue_controller,node_epic_controller,node_sprint_controller,node_comment_controller,node_authorization toneAmber
class node_issue_query,node_domain_models,node_database toneMint
class node_move_service,node_engine toneRose
```

## Components

### Web interface

- [App entry](https://github.com/tania-macheieva/jira-like/blob/main/web/src/App.jsx): `web/src/App.jsx`
- [Workspace state](https://github.com/tania-macheieva/jira-like/blob/main/web/src/hooks/useWorkspace.js): `web/src/hooks/useWorkspace.js`
- [Workspace shell](https://github.com/tania-macheieva/jira-like/blob/main/web/src/components/WorkspaceShell.jsx): `web/src/components/WorkspaceShell.jsx`
- [Authentication view](https://github.com/tania-macheieva/jira-like/blob/main/web/src/pages/AuthPage.jsx): `web/src/pages/AuthPage.jsx`
- [Planning views](https://github.com/tania-macheieva/jira-like/tree/main/web/src/pages): `web/src/pages`
- [HTTP client](https://github.com/tania-macheieva/jira-like/blob/main/web/src/lib/apiClient.js): `web/src/lib/apiClient.js`

### Rails API

- [API routes](https://github.com/tania-macheieva/jira-like/blob/main/api/config/routes.rb): `api/config/routes.rb`
- [Session auth](https://github.com/tania-macheieva/jira-like/tree/main/api/app/controllers/api/v1/auth): `api/app/controllers/api/v1/auth`
- [Workspace endpoints](https://github.com/tania-macheieva/jira-like/blob/main/api/app/controllers/api/v1/workspaces_controller.rb): `api/app/controllers/api/v1/workspaces_controller.rb`
- [Issue endpoints](https://github.com/tania-macheieva/jira-like/blob/main/api/app/controllers/api/v1/issues_controller.rb): `api/app/controllers/api/v1/issues_controller.rb`
- [Epic endpoints](https://github.com/tania-macheieva/jira-like/blob/main/api/app/controllers/api/v1/epics_controller.rb): `api/app/controllers/api/v1/epics_controller.rb`
- [Sprint endpoints](https://github.com/tania-macheieva/jira-like/blob/main/api/app/controllers/api/v1/sprints_controller.rb): `api/app/controllers/api/v1/sprints_controller.rb`
- [Comment endpoints](https://github.com/tania-macheieva/jira-like/blob/main/api/app/controllers/api/v1/comments_controller.rb): `api/app/controllers/api/v1/comments_controller.rb`
- [Authentication and policies](https://github.com/tania-macheieva/jira-like/blob/main/api/app/controllers/concerns/authentication.rb): `api/app/controllers/concerns/authentication.rb`

### Issue domain

- [Issue filtering](https://github.com/tania-macheieva/jira-like/blob/main/api/app/queries/issue_query.rb): `api/app/queries/issue_query.rb`
- [Workspace and issue records](https://github.com/tania-macheieva/jira-like/tree/main/api/app/models): `api/app/models`
- [Application database](https://github.com/tania-macheieva/jira-like/blob/main/api/db/schema.rb): `api/db/schema.rb`

### Status workflow

- [Move issue service](https://github.com/tania-macheieva/jira-like/blob/main/api/app/services/move_issue_service.rb): `api/app/services/move_issue_service.rb`
- [Transition rules](https://github.com/tania-macheieva/jira-like/blob/main/workflow_engine/lib/workflow_engine.rb): `workflow_engine/lib/workflow_engine.rb`

### Other components

- **Workspace user**

## Connections

- Workspace user → App entry: uses
- App entry → Authentication view: renders
- App entry → Workspace state: loads state
- App entry → Workspace shell: renders
- Workspace shell → Planning views: shows views
- Workspace state → HTTP client: requests
- App entry → HTTP client: requests auth
- HTTP client → API routes: sends HTTP
- API routes → Session auth: dispatches
- API routes → Workspace endpoints: dispatches
- API routes → Issue endpoints: dispatches
- API routes → Epic endpoints: dispatches
- API routes → Sprint endpoints: dispatches
- API routes → Comment endpoints: dispatches
- Session auth → Authentication and policies: authenticates
- Workspace endpoints → Authentication and policies: authorizes
- Issue endpoints → Authentication and policies: authorizes
- Comment endpoints → Authentication and policies: authorizes
- Issue endpoints → Issue filtering: filters issues
- Issue endpoints → Move issue service: moves issue
- Move issue service → Transition rules: checks transition
- Workspace endpoints → Workspace and issue records: reads and writes
- Issue endpoints → Workspace and issue records: reads and writes
- Epic endpoints → Workspace and issue records: reads and writes
- Sprint endpoints → Workspace and issue records: reads and writes
- Comment endpoints → Workspace and issue records: reads and writes
- Issue filtering → Workspace and issue records: queries scope
- Move issue service → Workspace and issue records: updates issue
- Workspace and issue records → Application database: persists records
