# saumyadhorje/artblock-defi-control architecture

> Architecture diagram of the GitHub repository saumyadhorje/artblock-defi-control, 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/saumyadhorje/artblock-defi-control
- Repository: https://github.com/saumyadhorje/artblock-defi-control

## Overview

ArtBlock is a role-based digital art gallery and investment platform. Artists and curators use the React app to manage artwork and galleries; artists can upload artwork to IPFS and mint NFTs through a wallet, while gallery and NFT records are also persisted in MongoDB. Investors can track portfolios and purchase artwork, and curators can create galleries and claim revenue. The README also describes gallery applications, curation, and analytics. Some UI and route implementations were not sampled, so uncertain links are omitted.

Main entry points: [`frontend/src/App.js`](https://github.com/saumyadhorje/artblock-defi-control/blob/main/frontend/src/App.js) (React app), [`backend/controllers/investorController.js`](https://github.com/saumyadhorje/artblock-defi-control/blob/main/backend/controllers/investorController.js) (Investor operations), [`frontend/src/hooks/useNFTContract.js`](https://github.com/saumyadhorje/artblock-defi-control/blob/main/frontend/src/hooks/useNFTContract.js) (NFT contract hook), [`backend/controllers/galleryController.js`](https://github.com/saumyadhorje/artblock-defi-control/blob/main/backend/controllers/galleryController.js) (Gallery operations)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web experience"]
  node_app["React app<br/>[App.js]"]
  node_roles["Role dashboards"]
end

subgraph group_identity["Identity and roles"]
  node_authui["Auth UI<br/>[Auth.js]"]
  node_authcontext["Auth context<br/>[AuthContext.js]"]
  node_authroutes["Auth routes<br/>[authRoutes.js]"]
  node_authservice["Auth service<br/>[authService.js]"]
end

subgraph group_galleries["Gallery curation"]
  node_galleryui["Gallery views"]
  node_galleryroutes["Gallery routes<br/>[gallery.routes.js]"]
  node_gallerycontroller["Gallery operations"]
  node_gallerymodel[("Gallery records<br/>[Gallery.js]")]
  node_curatormodel[("Curator records<br/>[Curator.js]")]
  node_contractservice["Gallery contracts<br/>[contractService.js]"]
end

subgraph group_art["Artwork and NFTs"]
  node_mintui["NFT contract hook<br/>[useNFTContract.js]"]
  node_ipfsutil["IPFS uploads<br/>[ipfs.js]"]
  node_nftapi["NFT routes<br/>[nft.routes.js]"]
  node_nftmodel[("NFT records<br/>[nft.model.js]")]
end

subgraph group_investment["Investment"]
  node_investorroutes["Investor routes<br/>[investorRoutes.js]"]
  node_investorcontroller["Investor operations"]
  node_investormodel[("Investor records<br/>[Investor.js]")]
  node_transactions[("Transactions<br/>[Transaction.js]")]
end

node_artist(("Artist"))
node_curator(("Gallery curator"))
node_investor(("Art collector"))
node_wallet["Wallet"]
node_ipfs["IPFS"]
node_chain["Blockchain"]
node_mongo[("MongoDB")]

node_artist -->|"uses"| node_app
node_curator -->|"uses"| node_app
node_investor -->|"uses"| node_app
node_app -->|"wraps"| node_authcontext
node_app -->|"routes to"| node_authui
node_app -->|"routes to"| node_roles
node_app -->|"routes to"| node_galleryui
node_authui -->|"uses"| node_authcontext
node_authcontext -->|"API requests"| node_authroutes
node_authroutes -->|"delegates"| node_authservice
node_authservice -->|"reads/writes"| node_mongo
node_galleryui -->|"API requests"| node_galleryroutes
node_galleryroutes -->|"calls"| node_gallerycontroller
node_gallerycontroller -->|"reads"| node_curatormodel
node_gallerycontroller -->|"reads/writes"| node_gallerymodel
node_gallerycontroller -->|"calls"| node_contractservice
node_contractservice -->|"gallery transactions"| node_chain
node_mintui -->|"uploads"| node_ipfsutil
node_ipfsutil -->|"stores content"| node_ipfs
node_mintui -->|"signs mint"| node_wallet
node_mintui -->|"mints NFT"| node_chain
node_mintui -->|"stores NFT"| node_nftapi
node_nftapi -->|"reads/writes"| node_nftmodel
node_nftapi -->|"updates submissions"| node_gallerymodel
node_investorroutes -->|"calls"| node_investorcontroller
node_investorcontroller -->|"reads/writes"| node_investormodel
node_investorcontroller -->|"looks up"| node_nftmodel
node_investorcontroller -->|"records sales"| node_transactions
node_investorcontroller -->|"updates stats"| node_gallerymodel

click node_app "https://github.com/saumyadhorje/artblock-defi-control/blob/main/frontend/src/App.js"
click node_authui "https://github.com/saumyadhorje/artblock-defi-control/blob/main/frontend/src/pages/Auth.js"
click node_authcontext "https://github.com/saumyadhorje/artblock-defi-control/blob/main/frontend/src/context/AuthContext.js"
click node_authroutes "https://github.com/saumyadhorje/artblock-defi-control/blob/main/backend/routes/authRoutes.js"
click node_authservice "https://github.com/saumyadhorje/artblock-defi-control/blob/main/backend/services/authService.js"
click node_roles "https://github.com/saumyadhorje/artblock-defi-control/tree/main/frontend/src/pages"
click node_galleryui "https://github.com/saumyadhorje/artblock-defi-control/tree/main/frontend/src/pages/gallery"
click node_galleryroutes "https://github.com/saumyadhorje/artblock-defi-control/blob/main/backend/routes/gallery.routes.js"
click node_gallerycontroller "https://github.com/saumyadhorje/artblock-defi-control/blob/main/backend/controllers/galleryController.js"
click node_gallerymodel "https://github.com/saumyadhorje/artblock-defi-control/blob/main/backend/models/Gallery.js"
click node_curatormodel "https://github.com/saumyadhorje/artblock-defi-control/blob/main/backend/models/Curator.js"
click node_contractservice "https://github.com/saumyadhorje/artblock-defi-control/blob/main/backend/services/contractService.js"
click node_mintui "https://github.com/saumyadhorje/artblock-defi-control/blob/main/frontend/src/hooks/useNFTContract.js"
click node_ipfsutil "https://github.com/saumyadhorje/artblock-defi-control/blob/main/frontend/src/utils/ipfs.js"
click node_nftapi "https://github.com/saumyadhorje/artblock-defi-control/blob/main/backend/routes/nft.routes.js"
click node_nftmodel "https://github.com/saumyadhorje/artblock-defi-control/blob/main/backend/models/nft.model.js"
click node_investorroutes "https://github.com/saumyadhorje/artblock-defi-control/blob/main/backend/routes/investorRoutes.js"
click node_investorcontroller "https://github.com/saumyadhorje/artblock-defi-control/blob/main/backend/controllers/investorController.js"
click node_investormodel "https://github.com/saumyadhorje/artblock-defi-control/blob/main/backend/models/Investor.js"
click node_transactions "https://github.com/saumyadhorje/artblock-defi-control/blob/main/backend/models/Transaction.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_roles toneBlue
class node_authui,node_authcontext,node_authroutes,node_authservice,node_mongo toneAmber
class node_galleryui,node_galleryroutes,node_gallerycontroller,node_gallerymodel,node_curatormodel,node_contractservice toneMint
class node_mintui,node_ipfsutil,node_nftapi,node_nftmodel toneRose
class node_investorroutes,node_investorcontroller,node_investormodel,node_transactions,node_artist,node_curator,node_investor,node_wallet,node_ipfs,node_chain toneIndigo
```

## Components

### Web experience

- [React app](https://github.com/saumyadhorje/artblock-defi-control/blob/main/frontend/src/App.js): `frontend/src/App.js`
- [Role dashboards](https://github.com/saumyadhorje/artblock-defi-control/tree/main/frontend/src/pages): `frontend/src/pages`

### Identity and roles

- [Auth UI](https://github.com/saumyadhorje/artblock-defi-control/blob/main/frontend/src/pages/Auth.js): `frontend/src/pages/Auth.js`
- [Auth context](https://github.com/saumyadhorje/artblock-defi-control/blob/main/frontend/src/context/AuthContext.js): `frontend/src/context/AuthContext.js`
- [Auth routes](https://github.com/saumyadhorje/artblock-defi-control/blob/main/backend/routes/authRoutes.js): `backend/routes/authRoutes.js`
- [Auth service](https://github.com/saumyadhorje/artblock-defi-control/blob/main/backend/services/authService.js): `backend/services/authService.js`

### Gallery curation

- [Gallery views](https://github.com/saumyadhorje/artblock-defi-control/tree/main/frontend/src/pages/gallery): `frontend/src/pages/gallery`
- [Gallery routes](https://github.com/saumyadhorje/artblock-defi-control/blob/main/backend/routes/gallery.routes.js): `backend/routes/gallery.routes.js`
- [Gallery operations](https://github.com/saumyadhorje/artblock-defi-control/blob/main/backend/controllers/galleryController.js): `backend/controllers/galleryController.js`
- [Gallery records](https://github.com/saumyadhorje/artblock-defi-control/blob/main/backend/models/Gallery.js): `backend/models/Gallery.js`
- [Curator records](https://github.com/saumyadhorje/artblock-defi-control/blob/main/backend/models/Curator.js): `backend/models/Curator.js`
- [Gallery contracts](https://github.com/saumyadhorje/artblock-defi-control/blob/main/backend/services/contractService.js): `backend/services/contractService.js`

### Artwork and NFTs

- [NFT contract hook](https://github.com/saumyadhorje/artblock-defi-control/blob/main/frontend/src/hooks/useNFTContract.js): `frontend/src/hooks/useNFTContract.js`
- [IPFS uploads](https://github.com/saumyadhorje/artblock-defi-control/blob/main/frontend/src/utils/ipfs.js): `frontend/src/utils/ipfs.js`
- [NFT routes](https://github.com/saumyadhorje/artblock-defi-control/blob/main/backend/routes/nft.routes.js): `backend/routes/nft.routes.js`
- [NFT records](https://github.com/saumyadhorje/artblock-defi-control/blob/main/backend/models/nft.model.js): `backend/models/nft.model.js`

### Investment

- [Investor routes](https://github.com/saumyadhorje/artblock-defi-control/blob/main/backend/routes/investorRoutes.js): `backend/routes/investorRoutes.js`
- [Investor operations](https://github.com/saumyadhorje/artblock-defi-control/blob/main/backend/controllers/investorController.js): `backend/controllers/investorController.js`
- [Investor records](https://github.com/saumyadhorje/artblock-defi-control/blob/main/backend/models/Investor.js): `backend/models/Investor.js`
- [Transactions](https://github.com/saumyadhorje/artblock-defi-control/blob/main/backend/models/Transaction.js): `backend/models/Transaction.js`

### Other components

- **Artist**
- **Gallery curator**
- **Art collector**
- **Wallet**
- **IPFS**
- **Blockchain**
- **MongoDB**

## Connections

- Artist → React app: uses
- Gallery curator → React app: uses
- Art collector → React app: uses
- React app → Auth context: wraps
- React app → Auth UI: routes to
- React app → Role dashboards: routes to
- React app → Gallery views: routes to
- Auth UI → Auth context: uses
- Auth context → Auth routes: API requests
- Auth routes → Auth service: delegates
- Auth service → MongoDB: reads/writes
- Gallery views → Gallery routes: API requests
- Gallery routes → Gallery operations: calls
- Gallery operations → Curator records: reads
- Gallery operations → Gallery records: reads/writes
- Gallery operations → Gallery contracts: calls
- Gallery contracts → Blockchain: gallery transactions
- NFT contract hook → IPFS uploads: uploads
- IPFS uploads → IPFS: stores content
- NFT contract hook → Wallet: signs mint
- NFT contract hook → Blockchain: mints NFT
- NFT contract hook → NFT routes: stores NFT
- NFT routes → NFT records: reads/writes
- NFT routes → Gallery records: updates submissions
- Investor routes → Investor operations: calls
- Investor operations → Investor records: reads/writes
- Investor operations → NFT records: looks up
- Investor operations → Transactions: records sales
- Investor operations → Gallery records: updates stats
