# vd876733/expense_tracker-spring-boot-and-react- architecture

> Architecture diagram of the GitHub repository vd876733/expense_tracker-spring-boot-and-react-, 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/vd876733/expense_tracker-spring-boot-and-react-
- Repository: https://github.com/vd876733/expense_tracker-spring-boot-and-react-

## Overview

This is a personal-finance tracker with a React client and Spring Boot REST backend. Users enter or import transactions, then review spending, budgets, and insights; the application also supports authentication, savings goals, and shared expenses. The backend exposes domain controllers and persists financial records through Spring Data repositories. The frontend route wiring and selected backend services/controllers were sampled; several other capabilities are represented by their named modules in the tree, so their internal call paths are not asserted here.

Main entry points: [`frontend/src/services/api.js`](https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/frontend/src/services/api.js) (API client), [`src/main/java/com/financetracker/repository/TransactionRepository.java`](https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/src/main/java/com/financetracker/repository/TransactionRepository.java) (Transaction store), [`frontend/src/App.js`](https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/frontend/src/App.js) (React app), [`src/main/java/com/financetracker/controller/TransactionController.java`](https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/src/main/java/com/financetracker/controller/TransactionController.java) (Transaction API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Web client"]
  node_app["React app<br/>[App.js]"]
  node_dashboard["Dashboard<br/>[Dashboard.jsx]"]
  node_insights_ui["Insights view<br/>[InsightsPage.jsx]"]
  node_transaction_ui["Transaction entry"]
  node_import_ui["CSV import<br/>[CsvImport.jsx]"]
  node_api_client["API client<br/>[api.js]"]
end

subgraph group_access["API and identity"]
  node_auth["Authentication API"]
  node_security["JWT security"]
  node_users[("User store")]
end

subgraph group_finance["Financial tracking"]
  node_transactions["Transaction API"]
  node_transaction_service["Transaction service"]
  node_import_api["Import API"]
  node_import_service["CSV import service<br/>[ImportService.java]"]
  node_transaction_store[("Transaction store")]
end

subgraph group_planning["Planning and analysis"]
  node_budget_api["Budget API"]
  node_budget_service["Budget analysis<br/>[BudgetService.java]"]
  node_budget_store[("Budget store")]
  node_goals_api["Savings goals API"]
  node_goals_store[("Savings goals store")]
  node_ai_api["AI insights API"]
  node_ai_service["AI insights service"]
  node_gemini["Gemini service<br/>[GeminiService.java]"]
end

subgraph group_sharing["Shared expenses"]
  node_group_api["Expense groups API"]
  node_group_store[("Group expense store")]
  node_email_service["Email reminders"]
end

node_person(("User"))
node_gemini_external{{"Gemini API"}}

node_person -->|"uses"| node_app
node_app -->|"routes to"| node_dashboard
node_app -->|"routes to"| node_insights_ui
node_person -->|"enters transactions"| node_transaction_ui
node_person -->|"uploads CSV"| node_import_ui
node_transaction_ui -->|"submits data"| node_api_client
node_import_ui -->|"submits file"| node_api_client
node_dashboard -->|"requests data"| node_api_client
node_insights_ui -->|"requests insights"| node_api_client
node_api_client -->|"REST requests"| node_transactions
node_api_client -->|"REST requests"| node_import_api
node_api_client -->|"REST requests"| node_budget_api
node_api_client -->|"REST requests"| node_goals_api
node_api_client -->|"REST requests"| node_ai_api
node_api_client -->|"REST requests"| node_group_api
node_auth -->|"looks up users"| node_users
node_security -->|"protects requests"| node_auth
node_transactions -->|"queries and saves"| node_transaction_store
node_transactions -->|"delegates operations"| node_transaction_service
node_transaction_service -->|"queries totals"| node_transaction_store
node_import_api -->|"delegates import"| node_import_service
node_import_service -->|"persists transactions"| node_transaction_store
node_import_service -->|"resolves owner"| node_users
node_budget_api -->|"delegates analysis"| node_budget_service
node_budget_service -->|"reads and saves"| node_budget_store
node_budget_service -->|"reads spending"| node_transaction_store
node_goals_api -->|"reads and saves"| node_goals_store
node_ai_api -->|"requests insights"| node_ai_service
node_ai_service -->|"reads transactions"| node_transaction_store
node_ai_service -.->|"sends prompt"| node_gemini_external
node_group_api -->|"manages expenses"| node_group_store
node_group_api -->|"sends reminders"| node_email_service

click node_app "https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/frontend/src/App.js"
click node_dashboard "https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/frontend/src/components/Dashboard.jsx"
click node_insights_ui "https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/frontend/src/components/InsightsPage.jsx"
click node_transaction_ui "https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/frontend/src/components/AddTransactionModal.jsx"
click node_import_ui "https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/frontend/src/components/CsvImport.jsx"
click node_api_client "https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/frontend/src/services/api.js"
click node_auth "https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/src/main/java/com/financetracker/controller/AuthController.java"
click node_security "https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/src/main/java/com/financetracker/security/JwtAuthenticationFilter.java"
click node_users "https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/src/main/java/com/financetracker/repository/UserRepository.java"
click node_transactions "https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/src/main/java/com/financetracker/controller/TransactionController.java"
click node_transaction_service "https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/src/main/java/com/financetracker/service/TransactionService.java"
click node_import_api "https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/src/main/java/com/financetracker/controller/ImportController.java"
click node_import_service "https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/src/main/java/com/financetracker/service/ImportService.java"
click node_transaction_store "https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/src/main/java/com/financetracker/repository/TransactionRepository.java"
click node_budget_api "https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/src/main/java/com/financetracker/controller/BudgetController.java"
click node_budget_service "https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/src/main/java/com/financetracker/service/BudgetService.java"
click node_budget_store "https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/src/main/java/com/financetracker/repository/BudgetRepository.java"
click node_goals_api "https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/src/main/java/com/financetracker/controller/SavingsGoalController.java"
click node_goals_store "https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/src/main/java/com/financetracker/repository/SavingsGoalRepository.java"
click node_ai_api "https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/src/main/java/com/financetracker/controller/AIInsightsController.java"
click node_ai_service "https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/src/main/java/com/financetracker/service/AiInsightsService.java"
click node_gemini "https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/src/main/java/com/financetracker/service/GeminiService.java"
click node_group_api "https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/src/main/java/com/financetracker/controller/GroupController.java"
click node_group_store "https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/src/main/java/com/financetracker/repository/GroupExpenseRepository.java"
click node_email_service "https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/src/main/java/com/financetracker/service/EmailReminderService.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_app,node_dashboard,node_insights_ui,node_transaction_ui,node_import_ui,node_api_client,node_person toneBlue
class node_auth,node_security,node_users toneAmber
class node_transactions,node_transaction_service,node_import_api,node_import_service,node_transaction_store,node_gemini_external toneMint
class node_budget_api,node_budget_service,node_budget_store,node_goals_api,node_goals_store,node_ai_api,node_ai_service,node_gemini toneRose
class node_group_api,node_group_store,node_email_service toneIndigo
```

## Components

### Web client

- [React app](https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/frontend/src/App.js): `frontend/src/App.js`
- [Dashboard](https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/frontend/src/components/Dashboard.jsx): `frontend/src/components/Dashboard.jsx`
- [Insights view](https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/frontend/src/components/InsightsPage.jsx): `frontend/src/components/InsightsPage.jsx`
- [Transaction entry](https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/frontend/src/components/AddTransactionModal.jsx): `frontend/src/components/AddTransactionModal.jsx`
- [CSV import](https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/frontend/src/components/CsvImport.jsx): `frontend/src/components/CsvImport.jsx`
- [API client](https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/frontend/src/services/api.js): `frontend/src/services/api.js`

### API and identity

- [Authentication API](https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/src/main/java/com/financetracker/controller/AuthController.java): `src/main/java/com/financetracker/controller/AuthController.java`
- [JWT security](https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/src/main/java/com/financetracker/security/JwtAuthenticationFilter.java): `src/main/java/com/financetracker/security/JwtAuthenticationFilter.java`
- [User store](https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/src/main/java/com/financetracker/repository/UserRepository.java): `src/main/java/com/financetracker/repository/UserRepository.java`

### Financial tracking

- [Transaction API](https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/src/main/java/com/financetracker/controller/TransactionController.java): `src/main/java/com/financetracker/controller/TransactionController.java`
- [Transaction service](https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/src/main/java/com/financetracker/service/TransactionService.java): `src/main/java/com/financetracker/service/TransactionService.java`
- [Import API](https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/src/main/java/com/financetracker/controller/ImportController.java): `src/main/java/com/financetracker/controller/ImportController.java`
- [CSV import service](https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/src/main/java/com/financetracker/service/ImportService.java): `src/main/java/com/financetracker/service/ImportService.java`
- [Transaction store](https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/src/main/java/com/financetracker/repository/TransactionRepository.java): `src/main/java/com/financetracker/repository/TransactionRepository.java`

### Planning and analysis

- [Budget API](https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/src/main/java/com/financetracker/controller/BudgetController.java): `src/main/java/com/financetracker/controller/BudgetController.java`
- [Budget analysis](https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/src/main/java/com/financetracker/service/BudgetService.java): `src/main/java/com/financetracker/service/BudgetService.java`
- [Budget store](https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/src/main/java/com/financetracker/repository/BudgetRepository.java): `src/main/java/com/financetracker/repository/BudgetRepository.java`
- [Savings goals API](https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/src/main/java/com/financetracker/controller/SavingsGoalController.java): `src/main/java/com/financetracker/controller/SavingsGoalController.java`
- [Savings goals store](https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/src/main/java/com/financetracker/repository/SavingsGoalRepository.java): `src/main/java/com/financetracker/repository/SavingsGoalRepository.java`
- [AI insights API](https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/src/main/java/com/financetracker/controller/AIInsightsController.java): `src/main/java/com/financetracker/controller/AIInsightsController.java`
- [AI insights service](https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/src/main/java/com/financetracker/service/AiInsightsService.java): `src/main/java/com/financetracker/service/AiInsightsService.java`
- [Gemini service](https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/src/main/java/com/financetracker/service/GeminiService.java): `src/main/java/com/financetracker/service/GeminiService.java`

### Shared expenses

- [Expense groups API](https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/src/main/java/com/financetracker/controller/GroupController.java): `src/main/java/com/financetracker/controller/GroupController.java`
- [Group expense store](https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/src/main/java/com/financetracker/repository/GroupExpenseRepository.java): `src/main/java/com/financetracker/repository/GroupExpenseRepository.java`
- [Email reminders](https://github.com/vd876733/expense_tracker-spring-boot-and-react-/blob/main/src/main/java/com/financetracker/service/EmailReminderService.java): `src/main/java/com/financetracker/service/EmailReminderService.java`

### Other components

- **User**
- **Gemini API**

## Connections

- User → React app: uses
- React app → Dashboard: routes to
- React app → Insights view: routes to
- User → Transaction entry: enters transactions
- User → CSV import: uploads CSV
- Transaction entry → API client: submits data
- CSV import → API client: submits file
- Dashboard → API client: requests data
- Insights view → API client: requests insights
- API client → Transaction API: REST requests
- API client → Import API: REST requests
- API client → Budget API: REST requests
- API client → Savings goals API: REST requests
- API client → AI insights API: REST requests
- API client → Expense groups API: REST requests
- Authentication API → User store: looks up users
- JWT security → Authentication API: protects requests
- Transaction API → Transaction store: queries and saves
- Transaction API → Transaction service: delegates operations
- Transaction service → Transaction store: queries totals
- Import API → CSV import service: delegates import
- CSV import service → Transaction store: persists transactions
- CSV import service → User store: resolves owner
- Budget API → Budget analysis: delegates analysis
- Budget analysis → Budget store: reads and saves
- Budget analysis → Transaction store: reads spending
- Savings goals API → Savings goals store: reads and saves
- AI insights API → AI insights service: requests insights
- AI insights service → Transaction store: reads transactions
- AI insights service → Gemini API: sends prompt
- Expense groups API → Group expense store: manages expenses
- Expense groups API → Email reminders: sends reminders
