# likhithapuli06/finora-expense-tracker architecture

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

- Interactive diagram: https://gitdiagram.com/likhithapuli06/finora-expense-tracker
- Repository: https://github.com/likhithapuli06/finora-expense-tracker

## Overview

Finora is a personal expense tracker: users manage transactions and review spending in a responsive dashboard. The principal workflow runs from the browser interface through the REST API and layered Spring backend to persistent storage; documented capabilities also include budgets and profile management. Frontend excerpts show expense loading and submission, while several backend implementations were not sampled, so their internal calls are represented only where the README documents the layer sequence.

Main entry points: [`frontend/script.js`](https://github.com/likhithapuli06/finora-expense-tracker/blob/main/frontend/script.js) (Expense interface), [`backend/src/main/java/com/example/expensetracker/service/ExpenseService.java`](https://github.com/likhithapuli06/finora-expense-tracker/blob/main/backend/src/main/java/com/example/expensetracker/service/ExpenseService.java) (Expense service), [`backend/src/main/java/com/example/expensetracker/controller/ExpenseController.java`](https://github.com/likhithapuli06/finora-expense-tracker/blob/main/backend/src/main/java/com/example/expensetracker/controller/ExpenseController.java) (Expense endpoints), [`backend/src/main/java/com/example/expensetracker/controller/BudgetController.java`](https://github.com/likhithapuli06/finora-expense-tracker/blob/main/backend/src/main/java/com/example/expensetracker/controller/BudgetController.java) (Budget endpoints)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Web experience"]
  node_expense_ui["Expense interface<br/>[script.js]"]
  node_dashboard["Dashboard analytics<br/>[script.js]"]
  node_transaction_filters["Search and filters<br/>[script.js]"]
  node_csv_export["CSV export<br/>[script.js]"]
end

subgraph group_api["REST API"]
  node_expense_api["Expense endpoints"]
  node_budget_api["Budget endpoints"]
  node_profile_api["Profile endpoints"]
end

subgraph group_domain["Expense domain"]
  node_expense_service["Expense service"]
  node_expense_model["Expense records<br/>[Expense.java]"]
  node_budget_model["Budget records<br/>[Budget.java]"]
  node_profile_model["Profile records<br/>[Profile.java]"]
end

subgraph group_persistence["Persistence"]
  node_expense_repository["Expense repository"]
  node_budget_repository["Budget repository"]
  node_profile_repository["Profile repository"]
  node_mysql[("MySQL database")]
end

node_user(("User"))

node_user -->|"uses"| node_expense_ui
node_expense_ui -->|"requests expenses"| node_expense_api
node_expense_ui -->|"loads budget"| node_budget_api
node_expense_ui -->|"updates profile"| node_profile_api
node_expense_ui -->|"renders summaries"| node_dashboard
node_expense_ui -->|"filters transactions"| node_transaction_filters
node_user -->|"exports transactions"| node_csv_export
node_expense_api -->|"delegates to"| node_expense_service
node_budget_api -.->|"delegates to"| node_expense_service
node_profile_api -.->|"delegates to"| node_expense_service
node_expense_service -->|"uses repository"| node_expense_repository
node_expense_repository -->|"persists records"| node_mysql
node_budget_repository -.->|"persists budgets"| node_mysql
node_profile_repository -.->|"persists profiles"| node_mysql

click node_expense_ui "https://github.com/likhithapuli06/finora-expense-tracker/blob/main/frontend/script.js"
click node_dashboard "https://github.com/likhithapuli06/finora-expense-tracker/blob/main/frontend/script.js"
click node_transaction_filters "https://github.com/likhithapuli06/finora-expense-tracker/blob/main/frontend/script.js"
click node_csv_export "https://github.com/likhithapuli06/finora-expense-tracker/blob/main/script.js"
click node_expense_api "https://github.com/likhithapuli06/finora-expense-tracker/blob/main/backend/src/main/java/com/example/expensetracker/controller/ExpenseController.java"
click node_budget_api "https://github.com/likhithapuli06/finora-expense-tracker/blob/main/backend/src/main/java/com/example/expensetracker/controller/BudgetController.java"
click node_profile_api "https://github.com/likhithapuli06/finora-expense-tracker/blob/main/backend/src/main/java/com/example/expensetracker/controller/ProfileController.java"
click node_expense_service "https://github.com/likhithapuli06/finora-expense-tracker/blob/main/backend/src/main/java/com/example/expensetracker/service/ExpenseService.java"
click node_expense_model "https://github.com/likhithapuli06/finora-expense-tracker/blob/main/backend/src/main/java/com/example/expensetracker/model/Expense.java"
click node_budget_model "https://github.com/likhithapuli06/finora-expense-tracker/blob/main/backend/src/main/java/com/example/expensetracker/model/Budget.java"
click node_profile_model "https://github.com/likhithapuli06/finora-expense-tracker/blob/main/backend/src/main/java/com/example/expensetracker/model/Profile.java"
click node_expense_repository "https://github.com/likhithapuli06/finora-expense-tracker/blob/main/backend/src/main/java/com/example/expensetracker/repository/ExpenseRepository.java"
click node_budget_repository "https://github.com/likhithapuli06/finora-expense-tracker/blob/main/backend/src/main/java/com/example/expensetracker/repository/BudgetRepository.java"
click node_profile_repository "https://github.com/likhithapuli06/finora-expense-tracker/blob/main/backend/src/main/java/com/example/expensetracker/repository/ProfileRepository.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_expense_ui,node_dashboard,node_transaction_filters,node_csv_export,node_user toneBlue
class node_expense_api,node_budget_api,node_profile_api toneAmber
class node_expense_service,node_expense_model,node_budget_model,node_profile_model toneMint
class node_expense_repository,node_budget_repository,node_profile_repository,node_mysql toneRose
```

## Components

### Web experience

- [Expense interface](https://github.com/likhithapuli06/finora-expense-tracker/blob/main/frontend/script.js): `frontend/script.js`
- [Dashboard analytics](https://github.com/likhithapuli06/finora-expense-tracker/blob/main/frontend/script.js): `frontend/script.js`
- [Search and filters](https://github.com/likhithapuli06/finora-expense-tracker/blob/main/frontend/script.js): `frontend/script.js`
- [CSV export](https://github.com/likhithapuli06/finora-expense-tracker/blob/main/script.js): `script.js`

### REST API

- [Expense endpoints](https://github.com/likhithapuli06/finora-expense-tracker/blob/main/backend/src/main/java/com/example/expensetracker/controller/ExpenseController.java): `backend/src/main/java/com/example/expensetracker/controller/ExpenseController.java`
- [Budget endpoints](https://github.com/likhithapuli06/finora-expense-tracker/blob/main/backend/src/main/java/com/example/expensetracker/controller/BudgetController.java): `backend/src/main/java/com/example/expensetracker/controller/BudgetController.java`
- [Profile endpoints](https://github.com/likhithapuli06/finora-expense-tracker/blob/main/backend/src/main/java/com/example/expensetracker/controller/ProfileController.java): `backend/src/main/java/com/example/expensetracker/controller/ProfileController.java`

### Expense domain

- [Expense service](https://github.com/likhithapuli06/finora-expense-tracker/blob/main/backend/src/main/java/com/example/expensetracker/service/ExpenseService.java): `backend/src/main/java/com/example/expensetracker/service/ExpenseService.java`
- [Expense records](https://github.com/likhithapuli06/finora-expense-tracker/blob/main/backend/src/main/java/com/example/expensetracker/model/Expense.java): `backend/src/main/java/com/example/expensetracker/model/Expense.java`
- [Budget records](https://github.com/likhithapuli06/finora-expense-tracker/blob/main/backend/src/main/java/com/example/expensetracker/model/Budget.java): `backend/src/main/java/com/example/expensetracker/model/Budget.java`
- [Profile records](https://github.com/likhithapuli06/finora-expense-tracker/blob/main/backend/src/main/java/com/example/expensetracker/model/Profile.java): `backend/src/main/java/com/example/expensetracker/model/Profile.java`

### Persistence

- [Expense repository](https://github.com/likhithapuli06/finora-expense-tracker/blob/main/backend/src/main/java/com/example/expensetracker/repository/ExpenseRepository.java): `backend/src/main/java/com/example/expensetracker/repository/ExpenseRepository.java`
- [Budget repository](https://github.com/likhithapuli06/finora-expense-tracker/blob/main/backend/src/main/java/com/example/expensetracker/repository/BudgetRepository.java): `backend/src/main/java/com/example/expensetracker/repository/BudgetRepository.java`
- [Profile repository](https://github.com/likhithapuli06/finora-expense-tracker/blob/main/backend/src/main/java/com/example/expensetracker/repository/ProfileRepository.java): `backend/src/main/java/com/example/expensetracker/repository/ProfileRepository.java`
- **MySQL database**

### Other components

- **User**

## Connections

- User → Expense interface: uses (evidence: `README.md`)
- Expense interface → Expense endpoints: requests expenses (evidence: `frontend/script.js`)
- Expense interface → Budget endpoints: loads budget (evidence: `frontend/script.js`)
- Expense interface → Profile endpoints: updates profile
- Expense interface → Dashboard analytics: renders summaries (evidence: `frontend/script.js`)
- Expense interface → Search and filters: filters transactions (evidence: `frontend/script.js`)
- User → CSV export: exports transactions (evidence: `script.js`)
- Expense endpoints → Expense service: delegates to (evidence: `README.md`)
- Budget endpoints → Expense service: delegates to
- Profile endpoints → Expense service: delegates to
- Expense service → Expense repository: uses repository (evidence: `README.md`)
- Expense repository → MySQL database: persists records (evidence: `README.md`)
- Budget repository → MySQL database: persists budgets
- Profile repository → MySQL database: persists profiles
