# jacksonitoro/budget-buddy architecture

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

- Interactive diagram: https://gitdiagram.com/jacksonitoro/budget-buddy
- Repository: https://github.com/jacksonitoro/budget-buddy

## Overview

Budget Buddy is a full-stack personal finance app: users manage monthly budgets and categorized expenses, then review dashboard summaries and expense history. The main path runs from the browser UI through frontend API calls, Express routes/controllers, business services, and SQLite-backed models. The graph also preserves the documented dashboard and health capabilities. Backend wiring is sampled; frontend page-to-component details and some dashboard behavior are inferred only from the README and tree, so uncertain links are omitted.

Main entry points: [`frontend/src/app/page.js`](https://github.com/jacksonitoro/budget-buddy/blob/main/frontend/src/app/page.js) (App page), [`backend/src/app.js`](https://github.com/jacksonitoro/budget-buddy/blob/main/backend/src/app.js) (Express app), [`frontend/src/services/api.js`](https://github.com/jacksonitoro/budget-buddy/blob/main/frontend/src/services/api.js) (API client), [`backend/src/database/connection.js`](https://github.com/jacksonitoro/budget-buddy/blob/main/backend/src/database/connection.js) (SQLite connection)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Frontend"]
  node_page["App page<br/>[page.js]"]
  node_dashboard["Dashboard<br/>[Dashboard.jsx]"]
  node_budgetform["Budget form<br/>[BudgetForm.jsx]"]
  node_expenseform["Expense form<br/>[ExpenseForm.jsx]"]
  node_history["Expense history<br/>[ExpenseList.jsx]"]
  node_api_client["API client<br/>[api.js]"]
end

subgraph group_api["Backend API"]
  node_app["Express app<br/>[app.js]"]
  node_budget_routes["Budget routes<br/>[budget.routes.js]"]
  node_expense_routes["Expense routes<br/>[expense.routes.js]"]
  node_health_routes["Health route<br/>[health.routes.js]"]
  node_budget_controller["Budget controller"]
  node_expense_controller["Expense controller"]
  node_server["API server<br/>[server.js]"]
end

subgraph group_domain["Finance Logic"]
  node_budget_service["Budget service<br/>[budget.service.js]"]
  node_expense_service["Expense service<br/>[expense.service.js]"]
end

subgraph group_storage["Persistence"]
  node_budget_model["Budget model<br/>[budget.model.js]"]
  node_expense_model["Expense model<br/>[expense.model.js]"]
  node_db_init["Database setup<br/>[init.js]"]
  node_db_connection[("SQLite connection<br/>[connection.js]")]
end

node_browser(("Browser user"))

node_browser -->|"uses"| node_page
node_page -->|"renders"| node_dashboard
node_page -->|"renders"| node_budgetform
node_page -->|"renders"| node_expenseform
node_page -->|"renders"| node_history
node_dashboard -->|"requests data"| node_api_client
node_budgetform -->|"saves budget"| node_api_client
node_expenseform -->|"saves expense"| node_api_client
node_history -->|"loads and deletes"| node_api_client
node_api_client -->|"REST/JSON"| node_app
node_server -->|"starts"| node_app
node_server -->|"initializes"| node_db_init
node_app -->|"mounts"| node_budget_routes
node_app -->|"mounts"| node_expense_routes
node_app -->|"mounts"| node_health_routes
node_budget_routes -->|"dispatches"| node_budget_controller
node_expense_routes -->|"dispatches"| node_expense_controller
node_budget_controller -->|"calls"| node_budget_service
node_expense_controller -->|"calls"| node_expense_service
node_budget_service -->|"calls"| node_budget_model
node_expense_service -->|"calls"| node_expense_model
node_budget_model -->|"queries"| node_db_connection
node_expense_model -->|"queries"| node_db_connection
node_db_init -->|"creates tables"| node_db_connection

click node_page "https://github.com/jacksonitoro/budget-buddy/blob/main/frontend/src/app/page.js"
click node_dashboard "https://github.com/jacksonitoro/budget-buddy/blob/main/frontend/src/components/dashboard/Dashboard.jsx"
click node_budgetform "https://github.com/jacksonitoro/budget-buddy/blob/main/frontend/src/components/forms/BudgetForm.jsx"
click node_expenseform "https://github.com/jacksonitoro/budget-buddy/blob/main/frontend/src/components/forms/ExpenseForm.jsx"
click node_history "https://github.com/jacksonitoro/budget-buddy/blob/main/frontend/src/components/expenses/ExpenseList.jsx"
click node_api_client "https://github.com/jacksonitoro/budget-buddy/blob/main/frontend/src/services/api.js"
click node_app "https://github.com/jacksonitoro/budget-buddy/blob/main/backend/src/app.js"
click node_budget_routes "https://github.com/jacksonitoro/budget-buddy/blob/main/backend/src/routes/budget.routes.js"
click node_expense_routes "https://github.com/jacksonitoro/budget-buddy/blob/main/backend/src/routes/expense.routes.js"
click node_health_routes "https://github.com/jacksonitoro/budget-buddy/blob/main/backend/src/routes/health.routes.js"
click node_budget_controller "https://github.com/jacksonitoro/budget-buddy/blob/main/backend/src/controllers/budget.controller.js"
click node_expense_controller "https://github.com/jacksonitoro/budget-buddy/blob/main/backend/src/controllers/expense.controller.js"
click node_budget_service "https://github.com/jacksonitoro/budget-buddy/blob/main/backend/src/services/budget.service.js"
click node_expense_service "https://github.com/jacksonitoro/budget-buddy/blob/main/backend/src/services/expense.service.js"
click node_budget_model "https://github.com/jacksonitoro/budget-buddy/blob/main/backend/src/models/budget.model.js"
click node_expense_model "https://github.com/jacksonitoro/budget-buddy/blob/main/backend/src/models/expense.model.js"
click node_db_init "https://github.com/jacksonitoro/budget-buddy/blob/main/backend/src/database/init.js"
click node_db_connection "https://github.com/jacksonitoro/budget-buddy/blob/main/backend/src/database/connection.js"
click node_server "https://github.com/jacksonitoro/budget-buddy/blob/main/backend/src/server.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_page,node_dashboard,node_budgetform,node_expenseform,node_history,node_api_client,node_browser toneBlue
class node_app,node_budget_routes,node_expense_routes,node_health_routes,node_budget_controller,node_expense_controller,node_server toneAmber
class node_budget_service,node_expense_service toneMint
class node_budget_model,node_expense_model,node_db_init,node_db_connection toneRose
```

## Components

### Frontend

- [App page](https://github.com/jacksonitoro/budget-buddy/blob/main/frontend/src/app/page.js): `frontend/src/app/page.js`
- [Dashboard](https://github.com/jacksonitoro/budget-buddy/blob/main/frontend/src/components/dashboard/Dashboard.jsx): `frontend/src/components/dashboard/Dashboard.jsx`
- [Budget form](https://github.com/jacksonitoro/budget-buddy/blob/main/frontend/src/components/forms/BudgetForm.jsx): `frontend/src/components/forms/BudgetForm.jsx`
- [Expense form](https://github.com/jacksonitoro/budget-buddy/blob/main/frontend/src/components/forms/ExpenseForm.jsx): `frontend/src/components/forms/ExpenseForm.jsx`
- [Expense history](https://github.com/jacksonitoro/budget-buddy/blob/main/frontend/src/components/expenses/ExpenseList.jsx): `frontend/src/components/expenses/ExpenseList.jsx`
- [API client](https://github.com/jacksonitoro/budget-buddy/blob/main/frontend/src/services/api.js): `frontend/src/services/api.js`

### Backend API

- [Express app](https://github.com/jacksonitoro/budget-buddy/blob/main/backend/src/app.js): `backend/src/app.js`
- [Budget routes](https://github.com/jacksonitoro/budget-buddy/blob/main/backend/src/routes/budget.routes.js): `backend/src/routes/budget.routes.js`
- [Expense routes](https://github.com/jacksonitoro/budget-buddy/blob/main/backend/src/routes/expense.routes.js): `backend/src/routes/expense.routes.js`
- [Health route](https://github.com/jacksonitoro/budget-buddy/blob/main/backend/src/routes/health.routes.js): `backend/src/routes/health.routes.js`
- [Budget controller](https://github.com/jacksonitoro/budget-buddy/blob/main/backend/src/controllers/budget.controller.js): `backend/src/controllers/budget.controller.js`
- [Expense controller](https://github.com/jacksonitoro/budget-buddy/blob/main/backend/src/controllers/expense.controller.js): `backend/src/controllers/expense.controller.js`
- [API server](https://github.com/jacksonitoro/budget-buddy/blob/main/backend/src/server.js): `backend/src/server.js`

### Finance Logic

- [Budget service](https://github.com/jacksonitoro/budget-buddy/blob/main/backend/src/services/budget.service.js): `backend/src/services/budget.service.js`
- [Expense service](https://github.com/jacksonitoro/budget-buddy/blob/main/backend/src/services/expense.service.js): `backend/src/services/expense.service.js`

### Persistence

- [Budget model](https://github.com/jacksonitoro/budget-buddy/blob/main/backend/src/models/budget.model.js): `backend/src/models/budget.model.js`
- [Expense model](https://github.com/jacksonitoro/budget-buddy/blob/main/backend/src/models/expense.model.js): `backend/src/models/expense.model.js`
- [Database setup](https://github.com/jacksonitoro/budget-buddy/blob/main/backend/src/database/init.js): `backend/src/database/init.js`
- [SQLite connection](https://github.com/jacksonitoro/budget-buddy/blob/main/backend/src/database/connection.js): `backend/src/database/connection.js`

### Other components

- **Browser user**

## Connections

- Browser user → App page: uses
- App page → Dashboard: renders
- App page → Budget form: renders
- App page → Expense form: renders
- App page → Expense history: renders
- Dashboard → API client: requests data
- Budget form → API client: saves budget
- Expense form → API client: saves expense
- Expense history → API client: loads and deletes
- API client → Express app: REST/JSON
- API server → Express app: starts
- API server → Database setup: initializes
- Express app → Budget routes: mounts
- Express app → Expense routes: mounts
- Express app → Health route: mounts
- Budget routes → Budget controller: dispatches
- Expense routes → Expense controller: dispatches
- Budget controller → Budget service: calls
- Expense controller → Expense service: calls
- Budget service → Budget model: calls
- Expense service → Expense model: calls
- Budget model → SQLite connection: queries
- Expense model → SQLite connection: queries
- Database setup → SQLite connection: creates tables
