# vedant-kerulkar07/invoiceflow architecture

> Architecture diagram of the GitHub repository vedant-kerulkar07/invoiceflow, 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/vedant-kerulkar07/invoiceflow
- Repository: https://github.com/vedant-kerulkar07/invoiceflow

## Overview

InvoiceFlow is a full-stack invoicing application. Users authenticate, manage clients, create and track itemized invoices, review billing metrics, and export invoice data as CSV. The frontend routes protected screens through a shared layout and calls REST services; the backend routes requests through authentication to controllers that apply business rules and persist data in MongoDB. The map includes documented authentication, client, invoice, dashboard, and export capabilities; some unsampled links are omitted rather than inferred.

Main entry points: [`backend/server.js`](https://github.com/vedant-kerulkar07/invoiceflow/blob/master/backend/server.js) (Express API server), [`frontend/src/App.jsx`](https://github.com/vedant-kerulkar07/invoiceflow/blob/master/frontend/src/App.jsx) (Routes and layout), [`backend/controllers/invoice.controller.js`](https://github.com/vedant-kerulkar07/invoiceflow/blob/master/backend/controllers/invoice.controller.js) (Invoice operations), [`backend/middleware/auth.middleware.js`](https://github.com/vedant-kerulkar07/invoiceflow/blob/master/backend/middleware/auth.middleware.js) (JWT protection)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web application"]
  node_app["Routes and layout<br/>[App.jsx]"]
  node_auth_ui["Sign in / register"]
  node_auth_guard["Protected screens<br/>[ProtectedRoute.jsx]"]
  node_client_ui["Client management"]
  node_invoice_ui["Invoice management"]
  node_dashboard_ui["Billing dashboard<br/>[Dashboard.jsx]"]
  node_export_ui["CSV export screen<br/>[InvoiceExport.jsx]"]
  node_csv["CSV generation"]
  node_auth_svc["Authentication service<br/>[auth.service.js]"]
  node_client_svc["Client service<br/>[client.service.js]"]
  node_invoice_svc["Invoice service<br/>[invoice.service.js]"]
  node_dashboard_svc["Dashboard service"]
  node_export_svc["Export service"]
end

subgraph group_api["REST API"]
  node_api_server["Express API server<br/>[server.js]"]
  node_auth_routes["Auth routes<br/>[auth.routes.js]"]
  node_auth_ctrl["Authentication logic<br/>[auth.controller.js]"]
  node_auth_mw["JWT protection<br/>[auth.middleware.js]"]
  node_client_routes["Client routes<br/>[client.routes.js]"]
  node_client_ctrl["Client operations"]
  node_invoice_routes["Invoice routes<br/>[invoice.routes.js]"]
  node_invoice_ctrl["Invoice operations"]
  node_invoice_num["Invoice numbering"]
  node_overdue["Overdue updater"]
  node_dashboard_routes["Dashboard routes<br/>[dashboard.route.js]"]
  node_dashboard_ctrl["Dashboard metrics"]
  node_export_routes["Export routes"]
  node_export_ctrl["Invoice export data"]
end

subgraph group_data["Persistence"]
  node_mongo[("MongoDB")]
  node_client_model["Client records<br/>[Client.model.js]"]
  node_invoice_model["Invoice records<br/>[Invoice.model.js]"]
  node_user_model["User records<br/>[User.model.js]"]
end

node_user(("Business user"))

node_user -->|"uses"| node_app
node_app -->|"routes"| node_auth_ui
node_app -->|"protects"| node_auth_guard
node_app -->|"routes"| node_client_ui
node_app -->|"routes"| node_invoice_ui
node_app -->|"routes"| node_dashboard_ui
node_app -->|"routes"| node_export_ui
node_auth_ui -->|"calls"| node_auth_svc
node_auth_guard -->|"checks session"| node_auth_svc
node_client_ui -->|"calls"| node_client_svc
node_invoice_ui -->|"calls"| node_invoice_svc
node_invoice_ui -->|"loads clients"| node_client_svc
node_dashboard_ui -->|"calls"| node_dashboard_svc
node_export_ui -->|"fetches data"| node_export_svc
node_export_ui -->|"generates CSV"| node_csv
node_auth_svc -->|"HTTP requests"| node_api_server
node_client_svc -->|"HTTP requests"| node_api_server
node_invoice_svc -->|"HTTP requests"| node_api_server
node_dashboard_svc -.->|"HTTP requests"| node_api_server
node_export_svc -.->|"HTTP requests"| node_api_server
node_api_server -->|"mounts"| node_auth_routes
node_api_server -->|"mounts"| node_client_routes
node_api_server -->|"mounts"| node_invoice_routes
node_api_server -->|"mounts"| node_dashboard_routes
node_api_server -->|"mounts"| node_export_routes
node_auth_routes -->|"dispatches"| node_auth_ctrl
node_client_routes -->|"protects"| node_auth_mw
node_client_routes -->|"dispatches"| node_client_ctrl
node_invoice_routes -->|"protects"| node_auth_mw
node_invoice_routes -->|"dispatches"| node_invoice_ctrl
node_dashboard_routes -->|"protects"| node_auth_mw
node_dashboard_routes -->|"dispatches"| node_dashboard_ctrl
node_export_routes -->|"protects"| node_auth_mw
node_export_routes -->|"dispatches"| node_export_ctrl
node_auth_mw -->|"loads user"| node_user_model
node_auth_ctrl -->|"uses"| node_user_model
node_client_ctrl -->|"manages records"| node_client_model
node_client_ctrl -->|"checks invoices"| node_invoice_model
node_invoice_ctrl -->|"validates client"| node_client_model
node_invoice_ctrl -->|"generates number"| node_invoice_num
node_invoice_ctrl -->|"updates status"| node_overdue
node_invoice_ctrl -->|"reads / writes"| node_invoice_model
node_dashboard_ctrl -->|"updates status"| node_overdue
node_dashboard_ctrl -->|"counts clients"| node_client_model
node_dashboard_ctrl -->|"aggregates metrics"| node_invoice_model
node_export_ctrl -->|"reads invoices"| node_invoice_model
node_client_model -.->|"persists"| node_mongo
node_invoice_model -.->|"persists"| node_mongo

click node_app "https://github.com/vedant-kerulkar07/invoiceflow/blob/master/frontend/src/App.jsx"
click node_auth_ui "https://github.com/vedant-kerulkar07/invoiceflow/tree/master/frontend/src/pages/auth"
click node_auth_guard "https://github.com/vedant-kerulkar07/invoiceflow/blob/master/frontend/src/components/auth/ProtectedRoute.jsx"
click node_client_ui "https://github.com/vedant-kerulkar07/invoiceflow/tree/master/frontend/src/pages/clients"
click node_invoice_ui "https://github.com/vedant-kerulkar07/invoiceflow/tree/master/frontend/src/pages/invoices"
click node_dashboard_ui "https://github.com/vedant-kerulkar07/invoiceflow/blob/master/frontend/src/pages/dashboard/Dashboard.jsx"
click node_export_ui "https://github.com/vedant-kerulkar07/invoiceflow/blob/master/frontend/src/pages/invoices/InvoiceExport.jsx"
click node_csv "https://github.com/vedant-kerulkar07/invoiceflow/blob/master/frontend/src/utils/generateInvoiceCSV.js"
click node_auth_svc "https://github.com/vedant-kerulkar07/invoiceflow/blob/master/frontend/src/services/auth.service.js"
click node_client_svc "https://github.com/vedant-kerulkar07/invoiceflow/blob/master/frontend/src/services/client.service.js"
click node_invoice_svc "https://github.com/vedant-kerulkar07/invoiceflow/blob/master/frontend/src/services/invoice.service.js"
click node_dashboard_svc "https://github.com/vedant-kerulkar07/invoiceflow/blob/master/frontend/src/services/dashboardService.js"
click node_export_svc "https://github.com/vedant-kerulkar07/invoiceflow/blob/master/frontend/src/services/invoiceExport.service.js"
click node_api_server "https://github.com/vedant-kerulkar07/invoiceflow/blob/master/backend/server.js"
click node_auth_routes "https://github.com/vedant-kerulkar07/invoiceflow/blob/master/backend/routes/auth.routes.js"
click node_auth_ctrl "https://github.com/vedant-kerulkar07/invoiceflow/blob/master/backend/controllers/auth.controller.js"
click node_auth_mw "https://github.com/vedant-kerulkar07/invoiceflow/blob/master/backend/middleware/auth.middleware.js"
click node_client_routes "https://github.com/vedant-kerulkar07/invoiceflow/blob/master/backend/routes/client.routes.js"
click node_client_ctrl "https://github.com/vedant-kerulkar07/invoiceflow/blob/master/backend/controllers/client.controller.js"
click node_invoice_routes "https://github.com/vedant-kerulkar07/invoiceflow/blob/master/backend/routes/invoice.routes.js"
click node_invoice_ctrl "https://github.com/vedant-kerulkar07/invoiceflow/blob/master/backend/controllers/invoice.controller.js"
click node_invoice_num "https://github.com/vedant-kerulkar07/invoiceflow/blob/master/backend/utils/generateInvoiceNumber.js"
click node_overdue "https://github.com/vedant-kerulkar07/invoiceflow/blob/master/backend/utils/updateOverdueInvoices.js"
click node_dashboard_routes "https://github.com/vedant-kerulkar07/invoiceflow/blob/master/backend/routes/dashboard.route.js"
click node_dashboard_ctrl "https://github.com/vedant-kerulkar07/invoiceflow/blob/master/backend/controllers/dashboard.controller.js"
click node_export_routes "https://github.com/vedant-kerulkar07/invoiceflow/blob/master/backend/routes/invoiceExport.routes.js"
click node_export_ctrl "https://github.com/vedant-kerulkar07/invoiceflow/blob/master/backend/controllers/invoiceExport.controller.js"
click node_client_model "https://github.com/vedant-kerulkar07/invoiceflow/blob/master/backend/models/Client.model.js"
click node_invoice_model "https://github.com/vedant-kerulkar07/invoiceflow/blob/master/backend/models/Invoice.model.js"
click node_user_model "https://github.com/vedant-kerulkar07/invoiceflow/blob/master/backend/models/User.model.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_auth_ui,node_auth_guard,node_client_ui,node_invoice_ui,node_dashboard_ui,node_export_ui,node_csv,node_auth_svc,node_client_svc,node_invoice_svc,node_dashboard_svc,node_export_svc,node_user toneBlue
class node_api_server,node_auth_routes,node_auth_ctrl,node_auth_mw,node_client_routes,node_client_ctrl,node_invoice_routes,node_invoice_ctrl,node_invoice_num,node_overdue,node_dashboard_routes,node_dashboard_ctrl,node_export_routes,node_export_ctrl toneAmber
class node_mongo,node_client_model,node_invoice_model,node_user_model toneMint
```

## Components

### Web application

- [Routes and layout](https://github.com/vedant-kerulkar07/invoiceflow/blob/master/frontend/src/App.jsx): `frontend/src/App.jsx`
- [Sign in / register](https://github.com/vedant-kerulkar07/invoiceflow/tree/master/frontend/src/pages/auth): `frontend/src/pages/auth`
- [Protected screens](https://github.com/vedant-kerulkar07/invoiceflow/blob/master/frontend/src/components/auth/ProtectedRoute.jsx): `frontend/src/components/auth/ProtectedRoute.jsx`
- [Client management](https://github.com/vedant-kerulkar07/invoiceflow/tree/master/frontend/src/pages/clients): `frontend/src/pages/clients`
- [Invoice management](https://github.com/vedant-kerulkar07/invoiceflow/tree/master/frontend/src/pages/invoices): `frontend/src/pages/invoices`
- [Billing dashboard](https://github.com/vedant-kerulkar07/invoiceflow/blob/master/frontend/src/pages/dashboard/Dashboard.jsx): `frontend/src/pages/dashboard/Dashboard.jsx`
- [CSV export screen](https://github.com/vedant-kerulkar07/invoiceflow/blob/master/frontend/src/pages/invoices/InvoiceExport.jsx): `frontend/src/pages/invoices/InvoiceExport.jsx`
- [CSV generation](https://github.com/vedant-kerulkar07/invoiceflow/blob/master/frontend/src/utils/generateInvoiceCSV.js): `frontend/src/utils/generateInvoiceCSV.js`
- [Authentication service](https://github.com/vedant-kerulkar07/invoiceflow/blob/master/frontend/src/services/auth.service.js): `frontend/src/services/auth.service.js`
- [Client service](https://github.com/vedant-kerulkar07/invoiceflow/blob/master/frontend/src/services/client.service.js): `frontend/src/services/client.service.js`
- [Invoice service](https://github.com/vedant-kerulkar07/invoiceflow/blob/master/frontend/src/services/invoice.service.js): `frontend/src/services/invoice.service.js`
- [Dashboard service](https://github.com/vedant-kerulkar07/invoiceflow/blob/master/frontend/src/services/dashboardService.js): `frontend/src/services/dashboardService.js`
- [Export service](https://github.com/vedant-kerulkar07/invoiceflow/blob/master/frontend/src/services/invoiceExport.service.js): `frontend/src/services/invoiceExport.service.js`

### REST API

- [Express API server](https://github.com/vedant-kerulkar07/invoiceflow/blob/master/backend/server.js): `backend/server.js`
- [Auth routes](https://github.com/vedant-kerulkar07/invoiceflow/blob/master/backend/routes/auth.routes.js): `backend/routes/auth.routes.js`
- [Authentication logic](https://github.com/vedant-kerulkar07/invoiceflow/blob/master/backend/controllers/auth.controller.js): `backend/controllers/auth.controller.js`
- [JWT protection](https://github.com/vedant-kerulkar07/invoiceflow/blob/master/backend/middleware/auth.middleware.js): `backend/middleware/auth.middleware.js`
- [Client routes](https://github.com/vedant-kerulkar07/invoiceflow/blob/master/backend/routes/client.routes.js): `backend/routes/client.routes.js`
- [Client operations](https://github.com/vedant-kerulkar07/invoiceflow/blob/master/backend/controllers/client.controller.js): `backend/controllers/client.controller.js`
- [Invoice routes](https://github.com/vedant-kerulkar07/invoiceflow/blob/master/backend/routes/invoice.routes.js): `backend/routes/invoice.routes.js`
- [Invoice operations](https://github.com/vedant-kerulkar07/invoiceflow/blob/master/backend/controllers/invoice.controller.js): `backend/controllers/invoice.controller.js`
- [Invoice numbering](https://github.com/vedant-kerulkar07/invoiceflow/blob/master/backend/utils/generateInvoiceNumber.js): `backend/utils/generateInvoiceNumber.js`
- [Overdue updater](https://github.com/vedant-kerulkar07/invoiceflow/blob/master/backend/utils/updateOverdueInvoices.js): `backend/utils/updateOverdueInvoices.js`
- [Dashboard routes](https://github.com/vedant-kerulkar07/invoiceflow/blob/master/backend/routes/dashboard.route.js): `backend/routes/dashboard.route.js`
- [Dashboard metrics](https://github.com/vedant-kerulkar07/invoiceflow/blob/master/backend/controllers/dashboard.controller.js): `backend/controllers/dashboard.controller.js`
- [Export routes](https://github.com/vedant-kerulkar07/invoiceflow/blob/master/backend/routes/invoiceExport.routes.js): `backend/routes/invoiceExport.routes.js`
- [Invoice export data](https://github.com/vedant-kerulkar07/invoiceflow/blob/master/backend/controllers/invoiceExport.controller.js): `backend/controllers/invoiceExport.controller.js`

### Persistence

- **MongoDB**
- [Client records](https://github.com/vedant-kerulkar07/invoiceflow/blob/master/backend/models/Client.model.js): `backend/models/Client.model.js`
- [Invoice records](https://github.com/vedant-kerulkar07/invoiceflow/blob/master/backend/models/Invoice.model.js): `backend/models/Invoice.model.js`
- [User records](https://github.com/vedant-kerulkar07/invoiceflow/blob/master/backend/models/User.model.js): `backend/models/User.model.js`

### Other components

- **Business user**

## Connections

- Business user → Routes and layout: uses (evidence: `README.md`)
- Routes and layout → Sign in / register: routes (evidence: `frontend/src/App.jsx`)
- Routes and layout → Protected screens: protects (evidence: `frontend/src/App.jsx`)
- Routes and layout → Client management: routes (evidence: `frontend/src/App.jsx`)
- Routes and layout → Invoice management: routes (evidence: `frontend/src/App.jsx`)
- Routes and layout → Billing dashboard: routes (evidence: `frontend/src/App.jsx`)
- Routes and layout → CSV export screen: routes (evidence: `frontend/src/App.jsx`)
- Sign in / register → Authentication service: calls (evidence: `frontend/src/pages/auth/Login.jsx`)
- Protected screens → Authentication service: checks session (evidence: `frontend/src/components/auth/ProtectedRoute.jsx`)
- Client management → Client service: calls (evidence: `frontend/src/pages/clients/Clients.jsx`)
- Invoice management → Invoice service: calls (evidence: `frontend/src/pages/invoices/Invoices.jsx`)
- Invoice management → Client service: loads clients (evidence: `frontend/src/pages/invoices/CreateInvoice.jsx`)
- Billing dashboard → Dashboard service: calls (evidence: `frontend/src/pages/dashboard/Dashboard.jsx`)
- CSV export screen → Export service: fetches data (evidence: `frontend/src/pages/invoices/InvoiceExport.jsx`)
- CSV export screen → CSV generation: generates CSV (evidence: `frontend/src/pages/invoices/InvoiceExport.jsx`)
- Authentication service → Express API server: HTTP requests (evidence: `frontend/src/services/auth.service.js`)
- Client service → Express API server: HTTP requests (evidence: `frontend/src/services/client.service.js`)
- Invoice service → Express API server: HTTP requests (evidence: `frontend/src/services/invoice.service.js`)
- Dashboard service → Express API server: HTTP requests
- Export service → Express API server: HTTP requests
- Express API server → Auth routes: mounts (evidence: `backend/server.js`)
- Express API server → Client routes: mounts (evidence: `backend/server.js`)
- Express API server → Invoice routes: mounts (evidence: `backend/server.js`)
- Express API server → Dashboard routes: mounts (evidence: `backend/server.js`)
- Express API server → Export routes: mounts (evidence: `backend/server.js`)
- Auth routes → Authentication logic: dispatches (evidence: `backend/routes/auth.routes.js`)
- Client routes → JWT protection: protects (evidence: `backend/routes/client.routes.js`)
- Client routes → Client operations: dispatches (evidence: `backend/routes/client.routes.js`)
- Invoice routes → JWT protection: protects (evidence: `backend/routes/invoice.routes.js`)
- Invoice routes → Invoice operations: dispatches (evidence: `backend/routes/invoice.routes.js`)
- Dashboard routes → JWT protection: protects (evidence: `backend/routes/dashboard.route.js`)
- Dashboard routes → Dashboard metrics: dispatches (evidence: `backend/routes/dashboard.route.js`)
- Export routes → JWT protection: protects (evidence: `backend/routes/invoiceExport.routes.js`)
- Export routes → Invoice export data: dispatches (evidence: `backend/routes/invoiceExport.routes.js`)
- JWT protection → User records: loads user (evidence: `backend/middleware/auth.middleware.js`)
- Authentication logic → User records: uses (evidence: `backend/controllers/auth.controller.js`)
- Client operations → Client records: manages records (evidence: `backend/controllers/client.controller.js`)
- Client operations → Invoice records: checks invoices (evidence: `backend/controllers/client.controller.js`)
- Invoice operations → Client records: validates client (evidence: `backend/controllers/invoice.controller.js`)
- Invoice operations → Invoice numbering: generates number (evidence: `backend/controllers/invoice.controller.js`)
- Invoice operations → Overdue updater: updates status (evidence: `backend/controllers/invoice.controller.js`)
- Invoice operations → Invoice records: reads / writes (evidence: `backend/controllers/invoice.controller.js`)
- Dashboard metrics → Overdue updater: updates status (evidence: `backend/controllers/dashboard.controller.js`)
- Dashboard metrics → Client records: counts clients (evidence: `backend/controllers/dashboard.controller.js`)
- Dashboard metrics → Invoice records: aggregates metrics (evidence: `backend/controllers/dashboard.controller.js`)
- Invoice export data → Invoice records: reads invoices (evidence: `backend/controllers/invoiceExport.controller.js`)
- Client records → MongoDB: persists
- Invoice records → MongoDB: persists
