# satapathy-m1/academic-blockchain-pbl architecture

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

- Interactive diagram: https://gitdiagram.com/satapathy-m1/academic-blockchain-pbl
- Repository: https://github.com/satapathy-m1/academic-blockchain-pbl

## Overview

This is a multi-organization academic credential lifecycle application: students are registered, certificate requests pass through a seven-stage consortium approval workflow, PDFs are issued and stored via IPFS, and certificate fingerprints/status are anchored and checked on Hyperledger Fabric. The graph combines README-documented capabilities with sampled callers; detailed wiring of unsampled UI modules and backend helpers is limited to documented relationships.

Main entry points: [`backend/src/server.js`](https://github.com/satapathy-m1/academic-blockchain-pbl/blob/main/backend/src/server.js) (REST API), [`frontend/src/App.jsx`](https://github.com/satapathy-m1/academic-blockchain-pbl/blob/main/frontend/src/App.jsx) (Portal Application), [`backend/src/fabric.js`](https://github.com/satapathy-m1/academic-blockchain-pbl/blob/main/backend/src/fabric.js) (Fabric Client), [`frontend/src/components/WorkflowModule.jsx`](https://github.com/satapathy-m1/academic-blockchain-pbl/blob/main/frontend/src/components/WorkflowModule.jsx) (Request Workflow)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_portal["Web Portal"]
  node_app["Portal Application<br/>[App.jsx]"]
  node_student_ui["Student Registration<br/>[StudentModule.jsx]"]
  node_workflow_ui["Request Workflow<br/>[WorkflowModule.jsx]"]
  node_issue_ui["Certificate Issuance<br/>[IssuanceModule.jsx]"]
  node_verify_ui["Employer Verification<br/>[EmployerPortal.jsx]"]
  node_revoke_ui["Revocation"]
  node_ledger_ui["Ledger Explorer<br/>[LedgerExplorer.jsx]"]
end

subgraph group_api["API and Documents"]
  node_api_server["REST API<br/>[server.js]"]
  node_pdf["PDF Generator<br/>[pdf.js]"]
  node_ipfs_client["IPFS Client<br/>[ipfs.js]"]
  node_fabric_client["Fabric Client<br/>[fabric.js]"]
end

subgraph group_credential["Credential Lifecycle"]
  node_workflow_contract["Lifecycle Contract<br/>[index.js]"]
end

subgraph group_network["Distributed Ledger"]
  node_fabric_ledger[("Fabric Ledger")]
  node_ipfs[("IPFS Storage")]
end

node_student(("Student"))
node_issuer(("Consortium Staff"))
node_employer(("Employer / Verifier"))

node_student -->|"registers"| node_student_ui
node_issuer -->|"reviews requests"| node_workflow_ui
node_student_ui -->|"submits registration"| node_api_server
node_workflow_ui -->|"submits and tracks"| node_api_server
node_api_server -->|"invokes and queries"| node_fabric_client
node_fabric_client -->|"submits transactions"| node_workflow_contract
node_workflow_contract -->|"reads and writes state"| node_fabric_ledger
node_workflow_ui -->|"readies request"| node_issue_ui
node_issue_ui -->|"requests issuance"| node_api_server
node_api_server -->|"generates document"| node_pdf
node_api_server -->|"uploads document"| node_ipfs_client
node_ipfs_client -->|"stores PDF"| node_ipfs
node_api_server -->|"anchors certificate"| node_fabric_client
node_api_server -->|"checks certificate"| node_fabric_client
node_verify_ui -->|"requests verification"| node_api_server
node_employer -->|"checks credential"| node_verify_ui
node_verify_ui -.->|"opens stored PDF"| node_ipfs
node_issuer -->|"requests revocation"| node_revoke_ui
node_revoke_ui -->|"submits revocation"| node_api_server
node_api_server -->|"submits revocation"| node_fabric_client
node_ledger_ui -->|"requests ledger data"| node_api_server
node_app -->|"presents module"| node_student_ui
node_app -->|"presents module"| node_workflow_ui
node_app -->|"presents module"| node_issue_ui
node_app -->|"presents module"| node_verify_ui
node_app -->|"presents module"| node_revoke_ui
node_app -->|"presents module"| node_ledger_ui

click node_app "https://github.com/satapathy-m1/academic-blockchain-pbl/blob/main/frontend/src/App.jsx"
click node_student_ui "https://github.com/satapathy-m1/academic-blockchain-pbl/blob/main/frontend/src/components/StudentModule.jsx"
click node_workflow_ui "https://github.com/satapathy-m1/academic-blockchain-pbl/blob/main/frontend/src/components/WorkflowModule.jsx"
click node_issue_ui "https://github.com/satapathy-m1/academic-blockchain-pbl/blob/main/frontend/src/components/IssuanceModule.jsx"
click node_verify_ui "https://github.com/satapathy-m1/academic-blockchain-pbl/blob/main/frontend/src/components/EmployerPortal.jsx"
click node_revoke_ui "https://github.com/satapathy-m1/academic-blockchain-pbl/blob/main/frontend/src/components/RevocationModule.jsx"
click node_ledger_ui "https://github.com/satapathy-m1/academic-blockchain-pbl/blob/main/frontend/src/components/LedgerExplorer.jsx"
click node_api_server "https://github.com/satapathy-m1/academic-blockchain-pbl/blob/main/backend/src/server.js"
click node_pdf "https://github.com/satapathy-m1/academic-blockchain-pbl/blob/main/backend/src/pdf.js"
click node_ipfs_client "https://github.com/satapathy-m1/academic-blockchain-pbl/blob/main/backend/src/ipfs.js"
click node_fabric_client "https://github.com/satapathy-m1/academic-blockchain-pbl/blob/main/backend/src/fabric.js"
click node_workflow_contract "https://github.com/satapathy-m1/academic-blockchain-pbl/blob/main/chaincode/academic-contract/index.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_student_ui,node_workflow_ui,node_issue_ui,node_verify_ui,node_revoke_ui,node_ledger_ui toneBlue
class node_api_server,node_pdf,node_ipfs_client,node_fabric_client toneAmber
class node_workflow_contract toneMint
class node_fabric_ledger,node_ipfs toneRose
class node_student,node_issuer,node_employer toneIndigo
```

## Components

### Web Portal

- [Portal Application](https://github.com/satapathy-m1/academic-blockchain-pbl/blob/main/frontend/src/App.jsx): `frontend/src/App.jsx`
- [Student Registration](https://github.com/satapathy-m1/academic-blockchain-pbl/blob/main/frontend/src/components/StudentModule.jsx): `frontend/src/components/StudentModule.jsx`
- [Request Workflow](https://github.com/satapathy-m1/academic-blockchain-pbl/blob/main/frontend/src/components/WorkflowModule.jsx): `frontend/src/components/WorkflowModule.jsx`
- [Certificate Issuance](https://github.com/satapathy-m1/academic-blockchain-pbl/blob/main/frontend/src/components/IssuanceModule.jsx): `frontend/src/components/IssuanceModule.jsx`
- [Employer Verification](https://github.com/satapathy-m1/academic-blockchain-pbl/blob/main/frontend/src/components/EmployerPortal.jsx): `frontend/src/components/EmployerPortal.jsx`
- [Revocation](https://github.com/satapathy-m1/academic-blockchain-pbl/blob/main/frontend/src/components/RevocationModule.jsx): `frontend/src/components/RevocationModule.jsx`
- [Ledger Explorer](https://github.com/satapathy-m1/academic-blockchain-pbl/blob/main/frontend/src/components/LedgerExplorer.jsx): `frontend/src/components/LedgerExplorer.jsx`

### API and Documents

- [REST API](https://github.com/satapathy-m1/academic-blockchain-pbl/blob/main/backend/src/server.js): `backend/src/server.js`
- [PDF Generator](https://github.com/satapathy-m1/academic-blockchain-pbl/blob/main/backend/src/pdf.js): `backend/src/pdf.js`
- [IPFS Client](https://github.com/satapathy-m1/academic-blockchain-pbl/blob/main/backend/src/ipfs.js): `backend/src/ipfs.js`
- [Fabric Client](https://github.com/satapathy-m1/academic-blockchain-pbl/blob/main/backend/src/fabric.js): `backend/src/fabric.js`

### Credential Lifecycle

- [Lifecycle Contract](https://github.com/satapathy-m1/academic-blockchain-pbl/blob/main/chaincode/academic-contract/index.js): `chaincode/academic-contract/index.js`

### Distributed Ledger

- **Fabric Ledger**
- **IPFS Storage**

### Other components

- **Student**
- **Consortium Staff**
- **Employer / Verifier**

## Connections

- Student → Student Registration: registers
- Consortium Staff → Request Workflow: reviews requests
- Student Registration → REST API: submits registration
- Request Workflow → REST API: submits and tracks
- REST API → Fabric Client: invokes and queries
- Fabric Client → Lifecycle Contract: submits transactions
- Lifecycle Contract → Fabric Ledger: reads and writes state
- Request Workflow → Certificate Issuance: readies request
- Certificate Issuance → REST API: requests issuance
- REST API → PDF Generator: generates document
- REST API → IPFS Client: uploads document
- IPFS Client → IPFS Storage: stores PDF
- REST API → Fabric Client: anchors certificate
- REST API → Fabric Client: checks certificate
- Employer Verification → REST API: requests verification
- Employer / Verifier → Employer Verification: checks credential
- Employer Verification → IPFS Storage: opens stored PDF
- Consortium Staff → Revocation: requests revocation
- Revocation → REST API: submits revocation
- REST API → Fabric Client: submits revocation
- Ledger Explorer → REST API: requests ledger data
- Portal Application → Student Registration: presents module
- Portal Application → Request Workflow: presents module
- Portal Application → Certificate Issuance: presents module
- Portal Application → Employer Verification: presents module
- Portal Application → Revocation: presents module
- Portal Application → Ledger Explorer: presents module
