# abhay030/expense-tracker architecture

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

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

## Overview

Expense Tracker is a full-stack personal-finance application. Users authenticate, record income and expenses, then review dashboard and analytics views; related capabilities include currency preferences, receipt extraction, AI categorization and summaries, forecasting, and Excel downloads. The graph separates browser pages, API routing/controllers, domain services, and persisted models. Direct backend calls are cited from sampled sources or the source index; links from UI feature pages to API capabilities are left dashed because those request details were not shown in excerpts.

Main entry points: [`backend/server.js`](https://github.com/abhay030/expense-tracker/blob/main/backend/server.js) (Express server), [`frontend/expense-tracker/src/utils/axiosInstance.js`](https://github.com/abhay030/expense-tracker/blob/main/frontend/expense-tracker/src/utils/axiosInstance.js) (API client), [`frontend/expense-tracker/src/App.jsx`](https://github.com/abhay030/expense-tracker/blob/main/frontend/expense-tracker/src/App.jsx) (App routing), [`backend/controllers/expenseController.js`](https://github.com/abhay030/expense-tracker/blob/main/backend/controllers/expenseController.js) (Expense handlers)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Browser application"]
  node_app["App routing<br/>[App.jsx]"]
  node_authpages["Login and signup"]
  node_userauth["User session<br/>[useUserAuth.jsx]"]
  node_userstate["User context<br/>[userContext.jsx]"]
  node_financepages["Income and expense"]
  node_dashboardpage["Dashboard page<br/>[Home.jsx]"]
  node_analyticspage["Analytics page<br/>[Analytics.jsx]"]
  node_settingspage["Settings page<br/>[Settings.jsx]"]
  node_httpclient["API client<br/>[axiosInstance.js]"]
end

subgraph group_api["API and access"]
  node_server["Express server<br/>[server.js]"]
  node_authroutes["Auth routes<br/>[authRoutes.js]"]
  node_authcontroller["Auth handlers<br/>[authController.js]"]
  node_authguard["JWT access guard<br/>[authMiddleware.js]"]
  node_incomeroutes["Income routes<br/>[incomeRoutes.js]"]
  node_expenseapi["Expense routes<br/>[expenseRoutes.js]"]
  node_analyticsroutes["Analytics routes<br/>[analyticsRoutes.js]"]
  node_dashboardroutes["Dashboard routes<br/>[dashboardRoutes.js]"]
  node_currencyroutes["Currency routes<br/>[currencyRoutes.js]"]
end

subgraph group_finance["Finance records"]
  node_incomes["Income handlers"]
  node_expenses["Expense handlers"]
  node_incomemodel[("Income records<br/>[Income.js]")]
  node_expensemodel[("Expense records<br/>[Expense.js]")]
  node_usermodel[("User records<br/>[User.js]")]
end

subgraph group_insights["Insights and tools"]
  node_analytics["Financial analytics"]
  node_dashboard["Dashboard data"]
  node_summary["AI summaries"]
  node_categorization["AI categorization"]
  node_receipt["Receipt OCR<br/>[ocrService.js]"]
  node_forecast["Expense forecasting"]
  node_predictionmodel["Forecast models"]
  node_currency["Currency conversion"]
end

node_person(("User"))
node_mongodb[("MongoDB")]
node_openai["OpenAI service"]

node_person -->|"uses"| node_app
node_app -->|"routes to"| node_authpages
node_app -->|"routes to"| node_financepages
node_app -->|"routes to"| node_dashboardpage
node_app -->|"routes to"| node_analyticspage
node_app -->|"routes to"| node_settingspage
node_authpages -->|"requests through"| node_httpclient
node_userauth -->|"fetches user"| node_httpclient
node_userauth -->|"updates session"| node_userstate
node_server -->|"mounts"| node_authroutes
node_server -->|"mounts"| node_incomeroutes
node_server -->|"mounts"| node_expenseapi
node_server -->|"mounts"| node_analyticsroutes
node_server -->|"mounts"| node_dashboardroutes
node_server -->|"mounts"| node_currencyroutes
node_authroutes -->|"protects user lookup"| node_authguard
node_authroutes -->|"dispatches to"| node_authcontroller
node_incomeroutes -->|"protects endpoints"| node_authguard
node_expenseapi -->|"protects endpoints"| node_authguard
node_incomeroutes -->|"dispatches to"| node_incomes
node_expenseapi -->|"dispatches to"| node_expenses
node_analyticsroutes -->|"dispatches to"| node_analytics
node_dashboardroutes -->|"dispatches to"| node_dashboard
node_currencyroutes -->|"dispatches to"| node_currency
node_authguard -->|"loads user"| node_usermodel
node_authcontroller -->|"uses"| node_usermodel
node_incomes -->|"reads and writes"| node_incomemodel
node_expenses -->|"reads and writes"| node_expensemodel
node_dashboard -->|"reads"| node_incomemodel
node_dashboard -->|"reads"| node_expensemodel
node_dashboard -->|"requests summary"| node_summary
node_expenses -->|"requests suggestion"| node_categorization
node_expenses -->|"processes receipt"| node_receipt
node_forecast -->|"reads expenses"| node_expensemodel
node_expenses -.->|"persists records"| node_mongodb
node_incomes -.->|"persists records"| node_mongodb
node_summary -.->|"uses AI"| node_openai
node_analyticspage -.->|"requests analytics"| node_httpclient
node_financepages -.->|"requests records"| node_httpclient
node_dashboardpage -.->|"requests overview"| node_httpclient
node_settingspage -.->|"updates preferences"| node_httpclient
node_httpclient -.->|"calls API"| node_server
node_forecast -.->|"uses forecasting"| node_predictionmodel

click node_app "https://github.com/abhay030/expense-tracker/blob/main/frontend/expense-tracker/src/App.jsx"
click node_authpages "https://github.com/abhay030/expense-tracker/tree/main/frontend/expense-tracker/src/pages/Auth"
click node_userauth "https://github.com/abhay030/expense-tracker/blob/main/frontend/expense-tracker/src/hooks/useUserAuth.jsx"
click node_userstate "https://github.com/abhay030/expense-tracker/blob/main/frontend/expense-tracker/src/context/userContext.jsx"
click node_financepages "https://github.com/abhay030/expense-tracker/tree/main/frontend/expense-tracker/src/pages/Dashboard"
click node_dashboardpage "https://github.com/abhay030/expense-tracker/blob/main/frontend/expense-tracker/src/pages/Dashboard/Home.jsx"
click node_analyticspage "https://github.com/abhay030/expense-tracker/blob/main/frontend/expense-tracker/src/pages/Dashboard/Analytics.jsx"
click node_settingspage "https://github.com/abhay030/expense-tracker/blob/main/frontend/expense-tracker/src/pages/Dashboard/Settings.jsx"
click node_httpclient "https://github.com/abhay030/expense-tracker/blob/main/frontend/expense-tracker/src/utils/axiosInstance.js"
click node_server "https://github.com/abhay030/expense-tracker/blob/main/backend/server.js"
click node_authroutes "https://github.com/abhay030/expense-tracker/blob/main/backend/routes/authRoutes.js"
click node_authcontroller "https://github.com/abhay030/expense-tracker/blob/main/backend/controllers/authController.js"
click node_authguard "https://github.com/abhay030/expense-tracker/blob/main/backend/middleware/authMiddleware.js"
click node_incomeroutes "https://github.com/abhay030/expense-tracker/blob/main/backend/routes/incomeRoutes.js"
click node_expenseapi "https://github.com/abhay030/expense-tracker/blob/main/backend/routes/expenseRoutes.js"
click node_analyticsroutes "https://github.com/abhay030/expense-tracker/blob/main/backend/routes/analyticsRoutes.js"
click node_dashboardroutes "https://github.com/abhay030/expense-tracker/blob/main/backend/routes/dashboardRoutes.js"
click node_currencyroutes "https://github.com/abhay030/expense-tracker/blob/main/backend/routes/currencyRoutes.js"
click node_incomes "https://github.com/abhay030/expense-tracker/blob/main/backend/controllers/incomeController.js"
click node_expenses "https://github.com/abhay030/expense-tracker/blob/main/backend/controllers/expenseController.js"
click node_incomemodel "https://github.com/abhay030/expense-tracker/blob/main/backend/models/Income.js"
click node_expensemodel "https://github.com/abhay030/expense-tracker/blob/main/backend/models/Expense.js"
click node_usermodel "https://github.com/abhay030/expense-tracker/blob/main/backend/models/User.js"
click node_analytics "https://github.com/abhay030/expense-tracker/blob/main/backend/controllers/analyticsController.js"
click node_dashboard "https://github.com/abhay030/expense-tracker/blob/main/backend/controllers/dashboardController.js"
click node_summary "https://github.com/abhay030/expense-tracker/blob/main/backend/services/aiSummaryService.js"
click node_categorization "https://github.com/abhay030/expense-tracker/blob/main/backend/services/aiCategorizationService.js"
click node_receipt "https://github.com/abhay030/expense-tracker/blob/main/backend/services/ocrService.js"
click node_forecast "https://github.com/abhay030/expense-tracker/blob/main/backend/services/predictionService.js"
click node_predictionmodel "https://github.com/abhay030/expense-tracker/blob/main/backend/ml/expense_predictor.py"
click node_currency "https://github.com/abhay030/expense-tracker/blob/main/backend/utils/currencyConverter.js"

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_authpages,node_userauth,node_userstate,node_financepages,node_dashboardpage,node_analyticspage,node_settingspage,node_httpclient,node_person toneBlue
class node_server,node_authroutes,node_authcontroller,node_authguard,node_incomeroutes,node_expenseapi,node_analyticsroutes,node_dashboardroutes,node_currencyroutes,node_mongodb toneAmber
class node_incomes,node_expenses,node_incomemodel,node_expensemodel,node_usermodel toneMint
class node_analytics,node_dashboard,node_summary,node_categorization,node_receipt,node_forecast,node_predictionmodel,node_currency toneRose
class node_openai toneIndigo
```

## Components

### Browser application

- [App routing](https://github.com/abhay030/expense-tracker/blob/main/frontend/expense-tracker/src/App.jsx): `frontend/expense-tracker/src/App.jsx`
- [Login and signup](https://github.com/abhay030/expense-tracker/tree/main/frontend/expense-tracker/src/pages/Auth): `frontend/expense-tracker/src/pages/Auth`
- [User session](https://github.com/abhay030/expense-tracker/blob/main/frontend/expense-tracker/src/hooks/useUserAuth.jsx): `frontend/expense-tracker/src/hooks/useUserAuth.jsx`
- [User context](https://github.com/abhay030/expense-tracker/blob/main/frontend/expense-tracker/src/context/userContext.jsx): `frontend/expense-tracker/src/context/userContext.jsx`
- [Income and expense](https://github.com/abhay030/expense-tracker/tree/main/frontend/expense-tracker/src/pages/Dashboard): `frontend/expense-tracker/src/pages/Dashboard`
- [Dashboard page](https://github.com/abhay030/expense-tracker/blob/main/frontend/expense-tracker/src/pages/Dashboard/Home.jsx): `frontend/expense-tracker/src/pages/Dashboard/Home.jsx`
- [Analytics page](https://github.com/abhay030/expense-tracker/blob/main/frontend/expense-tracker/src/pages/Dashboard/Analytics.jsx): `frontend/expense-tracker/src/pages/Dashboard/Analytics.jsx`
- [Settings page](https://github.com/abhay030/expense-tracker/blob/main/frontend/expense-tracker/src/pages/Dashboard/Settings.jsx): `frontend/expense-tracker/src/pages/Dashboard/Settings.jsx`
- [API client](https://github.com/abhay030/expense-tracker/blob/main/frontend/expense-tracker/src/utils/axiosInstance.js): `frontend/expense-tracker/src/utils/axiosInstance.js`

### API and access

- [Express server](https://github.com/abhay030/expense-tracker/blob/main/backend/server.js): `backend/server.js`
- [Auth routes](https://github.com/abhay030/expense-tracker/blob/main/backend/routes/authRoutes.js): `backend/routes/authRoutes.js`
- [Auth handlers](https://github.com/abhay030/expense-tracker/blob/main/backend/controllers/authController.js): `backend/controllers/authController.js`
- [JWT access guard](https://github.com/abhay030/expense-tracker/blob/main/backend/middleware/authMiddleware.js): `backend/middleware/authMiddleware.js`
- [Income routes](https://github.com/abhay030/expense-tracker/blob/main/backend/routes/incomeRoutes.js): `backend/routes/incomeRoutes.js`
- [Expense routes](https://github.com/abhay030/expense-tracker/blob/main/backend/routes/expenseRoutes.js): `backend/routes/expenseRoutes.js`
- [Analytics routes](https://github.com/abhay030/expense-tracker/blob/main/backend/routes/analyticsRoutes.js): `backend/routes/analyticsRoutes.js`
- [Dashboard routes](https://github.com/abhay030/expense-tracker/blob/main/backend/routes/dashboardRoutes.js): `backend/routes/dashboardRoutes.js`
- [Currency routes](https://github.com/abhay030/expense-tracker/blob/main/backend/routes/currencyRoutes.js): `backend/routes/currencyRoutes.js`

### Finance records

- [Income handlers](https://github.com/abhay030/expense-tracker/blob/main/backend/controllers/incomeController.js): `backend/controllers/incomeController.js`
- [Expense handlers](https://github.com/abhay030/expense-tracker/blob/main/backend/controllers/expenseController.js): `backend/controllers/expenseController.js`
- [Income records](https://github.com/abhay030/expense-tracker/blob/main/backend/models/Income.js): `backend/models/Income.js`
- [Expense records](https://github.com/abhay030/expense-tracker/blob/main/backend/models/Expense.js): `backend/models/Expense.js`
- [User records](https://github.com/abhay030/expense-tracker/blob/main/backend/models/User.js): `backend/models/User.js`

### Insights and tools

- [Financial analytics](https://github.com/abhay030/expense-tracker/blob/main/backend/controllers/analyticsController.js): `backend/controllers/analyticsController.js`
- [Dashboard data](https://github.com/abhay030/expense-tracker/blob/main/backend/controllers/dashboardController.js): `backend/controllers/dashboardController.js`
- [AI summaries](https://github.com/abhay030/expense-tracker/blob/main/backend/services/aiSummaryService.js): `backend/services/aiSummaryService.js`
- [AI categorization](https://github.com/abhay030/expense-tracker/blob/main/backend/services/aiCategorizationService.js): `backend/services/aiCategorizationService.js`
- [Receipt OCR](https://github.com/abhay030/expense-tracker/blob/main/backend/services/ocrService.js): `backend/services/ocrService.js`
- [Expense forecasting](https://github.com/abhay030/expense-tracker/blob/main/backend/services/predictionService.js): `backend/services/predictionService.js`
- [Forecast models](https://github.com/abhay030/expense-tracker/blob/main/backend/ml/expense_predictor.py): `backend/ml/expense_predictor.py`
- [Currency conversion](https://github.com/abhay030/expense-tracker/blob/main/backend/utils/currencyConverter.js): `backend/utils/currencyConverter.js`

### Other components

- **User**
- **MongoDB**
- **OpenAI service**

## Connections

- User → App routing: uses (evidence: `frontend/expense-tracker/src/App.jsx`)
- App routing → Login and signup: routes to (evidence: `frontend/expense-tracker/src/App.jsx`)
- App routing → Income and expense: routes to (evidence: `frontend/expense-tracker/src/App.jsx`)
- App routing → Dashboard page: routes to (evidence: `frontend/expense-tracker/src/App.jsx`)
- App routing → Analytics page: routes to (evidence: `frontend/expense-tracker/src/App.jsx`)
- App routing → Settings page: routes to (evidence: `frontend/expense-tracker/src/App.jsx`)
- Login and signup → API client: requests through (evidence: `frontend/expense-tracker/src/pages/Auth/Login.jsx`)
- User session → API client: fetches user (evidence: `frontend/expense-tracker/src/hooks/useUserAuth.jsx`)
- User session → User context: updates session (evidence: `frontend/expense-tracker/src/hooks/useUserAuth.jsx`)
- Express server → Auth routes: mounts (evidence: `backend/server.js`)
- Express server → Income routes: mounts (evidence: `backend/server.js`)
- Express server → Expense routes: mounts (evidence: `backend/server.js`)
- Express server → Analytics routes: mounts (evidence: `backend/server.js`)
- Express server → Dashboard routes: mounts (evidence: `backend/server.js`)
- Express server → Currency routes: mounts (evidence: `backend/server.js`)
- Auth routes → JWT access guard: protects user lookup (evidence: `backend/routes/authRoutes.js`)
- Auth routes → Auth handlers: dispatches to (evidence: `backend/routes/authRoutes.js`)
- Income routes → JWT access guard: protects endpoints (evidence: `backend/routes/incomeRoutes.js`)
- Expense routes → JWT access guard: protects endpoints (evidence: `backend/routes/expenseRoutes.js`)
- Income routes → Income handlers: dispatches to (evidence: `backend/routes/incomeRoutes.js`)
- Expense routes → Expense handlers: dispatches to (evidence: `backend/routes/expenseRoutes.js`)
- Analytics routes → Financial analytics: dispatches to (evidence: `backend/routes/analyticsRoutes.js`)
- Dashboard routes → Dashboard data: dispatches to (evidence: `backend/routes/dashboardRoutes.js`)
- Currency routes → Currency conversion: dispatches to (evidence: `backend/routes/currencyRoutes.js`)
- JWT access guard → User records: loads user (evidence: `backend/middleware/authMiddleware.js`)
- Auth handlers → User records: uses (evidence: `backend/controllers/authController.js`)
- Income handlers → Income records: reads and writes (evidence: `backend/controllers/incomeController.js`)
- Expense handlers → Expense records: reads and writes (evidence: `backend/controllers/expenseController.js`)
- Dashboard data → Income records: reads (evidence: `backend/controllers/dashboardController.js`)
- Dashboard data → Expense records: reads (evidence: `backend/controllers/dashboardController.js`)
- Dashboard data → AI summaries: requests summary (evidence: `backend/controllers/dashboardController.js`)
- Expense handlers → AI categorization: requests suggestion (evidence: `backend/controllers/expenseController.js`)
- Expense handlers → Receipt OCR: processes receipt (evidence: `backend/controllers/expenseController.js`)
- Expense forecasting → Expense records: reads expenses (evidence: `backend/services/predictionService.js`)
- Expense handlers → MongoDB: persists records
- Income handlers → MongoDB: persists records
- AI summaries → OpenAI service: uses AI
- Analytics page → API client: requests analytics (evidence: `frontend/expense-tracker/src/pages/Dashboard/Analytics.jsx`)
- Income and expense → API client: requests records (evidence: `frontend/expense-tracker/src/pages/Dashboard/Settings.jsx`)
- Dashboard page → API client: requests overview (evidence: `frontend/expense-tracker/src/pages/Dashboard/Home.jsx`)
- Settings page → API client: updates preferences (evidence: `frontend/expense-tracker/src/pages/Dashboard/Settings.jsx`)
- API client → Express server: calls API
- Expense forecasting → Forecast models: uses forecasting
