# legacycylafamille/kanban-app architecture

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

- Interactive diagram: https://gitdiagram.com/legacycylafamille/kanban-app
- Repository: https://github.com/legacycylafamille/kanban-app

## Overview

Kanban project management is the product: users register or sign in, manage projects, and work with project boards and tasks. The frontend routes authenticated users to project and Kanban views; REST requests enter the Express backend, where controllers delegate to services and repositories for persistence. The legacy TodoList remains mounted alongside the newer API. The README describes RabbitMQ as part of the target event-driven direction, but no implementation appears in the supplied tree, so it is shown as a documented optional integration rather than active flow.

Main entry points: [`backend/src/main.ts`](https://github.com/legacycylafamille/kanban-app/blob/main/backend/src/main.ts) (Express app), [`backend/src/shared/database/prisma.ts`](https://github.com/legacycylafamille/kanban-app/blob/main/backend/src/shared/database/prisma.ts) (Prisma client), [`frontend/src/app/router.tsx`](https://github.com/legacycylafamille/kanban-app/blob/main/frontend/src/app/router.tsx) (App routes), [`frontend/src/shared/api/httpClient.ts`](https://github.com/legacycylafamille/kanban-app/blob/main/frontend/src/shared/api/httpClient.ts) (HTTP client)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web application"]
  node_frontend["React entry<br/>[main.tsx]"]
  node_router["App routes<br/>[router.tsx]"]
  node_auth_ui["Auth views<br/>[LoginPage.tsx]"]
  node_auth_context["Auth context<br/>[AuthProvider.tsx]"]
  node_project_ui["Project views<br/>[ProjectsPage.tsx]"]
  node_kanban_ui["Kanban view<br/>[KanbanPage.tsx]"]
  node_http["HTTP client<br/>[httpClient.ts]"]
end

subgraph group_api["REST backend"]
  node_backend["Express app<br/>[main.ts]"]
  node_auth_routes["Auth routes<br/>[auth.routes.ts]"]
  node_project_routes["Project routes<br/>[project.routes.ts]"]
  node_task_routes["Task routes<br/>[task.routes.ts]"]
  node_board_routes["Board routes<br/>[board.routes.ts]"]
  node_legacy["Legacy Todo API<br/>[index.js]"]
end

subgraph group_domain["Domain services"]
  node_auth_controller["Auth controller<br/>[AuthController.ts]"]
  node_auth_service["Auth service<br/>[AuthService.ts]"]
  node_project_controller["Project controller"]
  node_project_service["Project service<br/>[ProjectService.ts]"]
  node_task_controller["Task controller<br/>[TaskController.ts]"]
  node_task_service["Task service<br/>[TaskService.ts]"]
  node_board_controller["Board controller<br/>[BoardController.ts]"]
  node_board_service["Board service<br/>[BoardService.ts]"]
end

subgraph group_storage["Persistence"]
  node_user_repo["User repository"]
  node_project_repo["Project repository"]
  node_task_repo["Task repository"]
  node_board_repo["Board repository"]
  node_prisma["Prisma client<br/>[prisma.ts]"]
end

node_user(("User"))
node_postgres[("PostgreSQL")]
node_rabbitmq["RabbitMQ"]

node_user -->|"uses"| node_frontend
node_frontend -->|"renders"| node_router
node_router -->|"routes"| node_auth_ui
node_router -->|"routes"| node_project_ui
node_router -->|"routes"| node_kanban_ui
node_auth_ui -->|"uses"| node_auth_context
node_auth_context -->|"requests"| node_http
node_project_ui -->|"requests"| node_http
node_kanban_ui -->|"requests"| node_http
node_http -->|"REST/JSON"| node_backend
node_backend -->|"mounts"| node_auth_routes
node_backend -->|"mounts"| node_project_routes
node_backend -->|"mounts"| node_task_routes
node_backend -->|"mounts"| node_board_routes
node_backend -->|"mounts"| node_legacy
node_auth_routes -->|"dispatches"| node_auth_controller
node_project_routes -->|"dispatches"| node_project_controller
node_task_routes -->|"dispatches"| node_task_controller
node_board_routes -->|"dispatches"| node_board_controller
node_auth_controller -->|"calls"| node_auth_service
node_project_controller -->|"calls"| node_project_service
node_task_controller -->|"calls"| node_task_service
node_board_controller -->|"calls"| node_board_service
node_auth_service -->|"reads/writes"| node_user_repo
node_project_service -->|"reads/writes"| node_project_repo
node_task_service -->|"reads/writes"| node_task_repo
node_task_service -->|"checks access"| node_project_repo
node_board_service -->|"reads/writes"| node_board_repo
node_board_service -->|"checks access"| node_project_repo
node_user_repo -->|"queries"| node_prisma
node_project_repo -->|"queries"| node_prisma
node_task_repo -->|"queries"| node_prisma
node_board_repo -->|"queries"| node_prisma
node_backend -->|"connects"| node_prisma
node_prisma -->|"persists"| node_postgres
node_backend -.->|"event workflow"| node_rabbitmq

click node_frontend "https://github.com/legacycylafamille/kanban-app/blob/main/frontend/src/main.tsx"
click node_router "https://github.com/legacycylafamille/kanban-app/blob/main/frontend/src/app/router.tsx"
click node_auth_ui "https://github.com/legacycylafamille/kanban-app/blob/main/frontend/src/features/auth/pages/LoginPage.tsx"
click node_auth_context "https://github.com/legacycylafamille/kanban-app/blob/main/frontend/src/features/auth/context/AuthProvider.tsx"
click node_project_ui "https://github.com/legacycylafamille/kanban-app/blob/main/frontend/src/features/projects/pages/ProjectsPage.tsx"
click node_kanban_ui "https://github.com/legacycylafamille/kanban-app/blob/main/frontend/src/features/kanban/pages/KanbanPage.tsx"
click node_http "https://github.com/legacycylafamille/kanban-app/blob/main/frontend/src/shared/api/httpClient.ts"
click node_backend "https://github.com/legacycylafamille/kanban-app/blob/main/backend/src/main.ts"
click node_auth_routes "https://github.com/legacycylafamille/kanban-app/blob/main/backend/src/modules/auth/auth.routes.ts"
click node_project_routes "https://github.com/legacycylafamille/kanban-app/blob/main/backend/src/modules/projects/project.routes.ts"
click node_task_routes "https://github.com/legacycylafamille/kanban-app/blob/main/backend/src/modules/tasks/task.routes.ts"
click node_board_routes "https://github.com/legacycylafamille/kanban-app/blob/main/backend/src/modules/boards/board.routes.ts"
click node_legacy "https://github.com/legacycylafamille/kanban-app/blob/main/backend/src/legacy/index.js"
click node_auth_controller "https://github.com/legacycylafamille/kanban-app/blob/main/backend/src/modules/auth/AuthController.ts"
click node_auth_service "https://github.com/legacycylafamille/kanban-app/blob/main/backend/src/modules/auth/AuthService.ts"
click node_project_controller "https://github.com/legacycylafamille/kanban-app/blob/main/backend/src/modules/projects/ProjectController.ts"
click node_project_service "https://github.com/legacycylafamille/kanban-app/blob/main/backend/src/modules/projects/ProjectService.ts"
click node_task_controller "https://github.com/legacycylafamille/kanban-app/blob/main/backend/src/modules/tasks/TaskController.ts"
click node_task_service "https://github.com/legacycylafamille/kanban-app/blob/main/backend/src/modules/tasks/TaskService.ts"
click node_board_controller "https://github.com/legacycylafamille/kanban-app/blob/main/backend/src/modules/boards/BoardController.ts"
click node_board_service "https://github.com/legacycylafamille/kanban-app/blob/main/backend/src/modules/boards/BoardService.ts"
click node_user_repo "https://github.com/legacycylafamille/kanban-app/blob/main/backend/src/modules/users/PrismaUserRepository.ts"
click node_project_repo "https://github.com/legacycylafamille/kanban-app/blob/main/backend/src/modules/projects/PrismaProjectRepository.ts"
click node_task_repo "https://github.com/legacycylafamille/kanban-app/blob/main/backend/src/modules/tasks/PrismaTaskRepository.ts"
click node_board_repo "https://github.com/legacycylafamille/kanban-app/blob/main/backend/src/modules/boards/PrismaBoardRepository.ts"
click node_prisma "https://github.com/legacycylafamille/kanban-app/blob/main/backend/src/shared/database/prisma.ts"

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_frontend,node_router,node_auth_ui,node_auth_context,node_project_ui,node_kanban_ui,node_http,node_user toneBlue
class node_backend,node_auth_routes,node_project_routes,node_task_routes,node_board_routes,node_legacy,node_postgres toneAmber
class node_auth_controller,node_auth_service,node_project_controller,node_project_service,node_task_controller,node_task_service,node_board_controller,node_board_service toneMint
class node_user_repo,node_project_repo,node_task_repo,node_board_repo,node_prisma toneRose
class node_rabbitmq toneIndigo
```

## Components

### Web application

- [React entry](https://github.com/legacycylafamille/kanban-app/blob/main/frontend/src/main.tsx): `frontend/src/main.tsx`
- [App routes](https://github.com/legacycylafamille/kanban-app/blob/main/frontend/src/app/router.tsx): `frontend/src/app/router.tsx`
- [Auth views](https://github.com/legacycylafamille/kanban-app/blob/main/frontend/src/features/auth/pages/LoginPage.tsx): `frontend/src/features/auth/pages/LoginPage.tsx`
- [Auth context](https://github.com/legacycylafamille/kanban-app/blob/main/frontend/src/features/auth/context/AuthProvider.tsx): `frontend/src/features/auth/context/AuthProvider.tsx`
- [Project views](https://github.com/legacycylafamille/kanban-app/blob/main/frontend/src/features/projects/pages/ProjectsPage.tsx): `frontend/src/features/projects/pages/ProjectsPage.tsx`
- [Kanban view](https://github.com/legacycylafamille/kanban-app/blob/main/frontend/src/features/kanban/pages/KanbanPage.tsx): `frontend/src/features/kanban/pages/KanbanPage.tsx`
- [HTTP client](https://github.com/legacycylafamille/kanban-app/blob/main/frontend/src/shared/api/httpClient.ts): `frontend/src/shared/api/httpClient.ts`

### REST backend

- [Express app](https://github.com/legacycylafamille/kanban-app/blob/main/backend/src/main.ts): `backend/src/main.ts`
- [Auth routes](https://github.com/legacycylafamille/kanban-app/blob/main/backend/src/modules/auth/auth.routes.ts): `backend/src/modules/auth/auth.routes.ts`
- [Project routes](https://github.com/legacycylafamille/kanban-app/blob/main/backend/src/modules/projects/project.routes.ts): `backend/src/modules/projects/project.routes.ts`
- [Task routes](https://github.com/legacycylafamille/kanban-app/blob/main/backend/src/modules/tasks/task.routes.ts): `backend/src/modules/tasks/task.routes.ts`
- [Board routes](https://github.com/legacycylafamille/kanban-app/blob/main/backend/src/modules/boards/board.routes.ts): `backend/src/modules/boards/board.routes.ts`
- [Legacy Todo API](https://github.com/legacycylafamille/kanban-app/blob/main/backend/src/legacy/index.js): `backend/src/legacy/index.js`

### Domain services

- [Auth controller](https://github.com/legacycylafamille/kanban-app/blob/main/backend/src/modules/auth/AuthController.ts): `backend/src/modules/auth/AuthController.ts`
- [Auth service](https://github.com/legacycylafamille/kanban-app/blob/main/backend/src/modules/auth/AuthService.ts): `backend/src/modules/auth/AuthService.ts`
- [Project controller](https://github.com/legacycylafamille/kanban-app/blob/main/backend/src/modules/projects/ProjectController.ts): `backend/src/modules/projects/ProjectController.ts`
- [Project service](https://github.com/legacycylafamille/kanban-app/blob/main/backend/src/modules/projects/ProjectService.ts): `backend/src/modules/projects/ProjectService.ts`
- [Task controller](https://github.com/legacycylafamille/kanban-app/blob/main/backend/src/modules/tasks/TaskController.ts): `backend/src/modules/tasks/TaskController.ts`
- [Task service](https://github.com/legacycylafamille/kanban-app/blob/main/backend/src/modules/tasks/TaskService.ts): `backend/src/modules/tasks/TaskService.ts`
- [Board controller](https://github.com/legacycylafamille/kanban-app/blob/main/backend/src/modules/boards/BoardController.ts): `backend/src/modules/boards/BoardController.ts`
- [Board service](https://github.com/legacycylafamille/kanban-app/blob/main/backend/src/modules/boards/BoardService.ts): `backend/src/modules/boards/BoardService.ts`

### Persistence

- [User repository](https://github.com/legacycylafamille/kanban-app/blob/main/backend/src/modules/users/PrismaUserRepository.ts): `backend/src/modules/users/PrismaUserRepository.ts`
- [Project repository](https://github.com/legacycylafamille/kanban-app/blob/main/backend/src/modules/projects/PrismaProjectRepository.ts): `backend/src/modules/projects/PrismaProjectRepository.ts`
- [Task repository](https://github.com/legacycylafamille/kanban-app/blob/main/backend/src/modules/tasks/PrismaTaskRepository.ts): `backend/src/modules/tasks/PrismaTaskRepository.ts`
- [Board repository](https://github.com/legacycylafamille/kanban-app/blob/main/backend/src/modules/boards/PrismaBoardRepository.ts): `backend/src/modules/boards/PrismaBoardRepository.ts`
- [Prisma client](https://github.com/legacycylafamille/kanban-app/blob/main/backend/src/shared/database/prisma.ts): `backend/src/shared/database/prisma.ts`

### Other components

- **User**
- **PostgreSQL**
- **RabbitMQ**

## Connections

- User → React entry: uses
- React entry → App routes: renders
- App routes → Auth views: routes
- App routes → Project views: routes
- App routes → Kanban view: routes
- Auth views → Auth context: uses
- Auth context → HTTP client: requests
- Project views → HTTP client: requests
- Kanban view → HTTP client: requests
- HTTP client → Express app: REST/JSON
- Express app → Auth routes: mounts
- Express app → Project routes: mounts
- Express app → Task routes: mounts
- Express app → Board routes: mounts
- Express app → Legacy Todo API: mounts
- Auth routes → Auth controller: dispatches
- Project routes → Project controller: dispatches
- Task routes → Task controller: dispatches
- Board routes → Board controller: dispatches
- Auth controller → Auth service: calls
- Project controller → Project service: calls
- Task controller → Task service: calls
- Board controller → Board service: calls
- Auth service → User repository: reads/writes
- Project service → Project repository: reads/writes
- Task service → Task repository: reads/writes
- Task service → Project repository: checks access
- Board service → Board repository: reads/writes
- Board service → Project repository: checks access
- User repository → Prisma client: queries
- Project repository → Prisma client: queries
- Task repository → Prisma client: queries
- Board repository → Prisma client: queries
- Express app → Prisma client: connects
- Prisma client → PostgreSQL: persists
- Express app → RabbitMQ: event workflow
