# pydah-soft-projects/stationary architecture

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

- Interactive diagram: https://gitdiagram.com/pydah-soft-projects/stationary
- Repository: https://github.com/pydah-soft-projects/stationary

## Overview

Pydah Stationery Management is an offline-first stationery inventory and student-issuance platform. Staff authenticate, manage students and academic context, issue products or kits, and track receipts and transaction history; inventory, campus transfers, settings, governance, and reporting support those operations. The React app calls an Express API backed by MongoDB, with MySQL supplying student data. The graph includes documented offline behavior, but the excerpts do not establish its queue implementation or all page-to-endpoint wiring, so those links are not inferred.

Main entry points: [`frontend/src/utils/api.js`](https://github.com/pydah-soft-projects/stationary/blob/main/frontend/src/utils/api.js) (API helper), [`frontend/src/App.jsx`](https://github.com/pydah-soft-projects/stationary/blob/main/frontend/src/App.jsx) (App routing), [`frontend/src/pages/StudentDetail.jsx`](https://github.com/pydah-soft-projects/stationary/blob/main/frontend/src/pages/StudentDetail.jsx) (Student tools), [`backend/controllers/sqlStudentController.js`](https://github.com/pydah-soft-projects/stationary/blob/main/backend/controllers/sqlStudentController.js) (Student services)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["React application"]
  node_app["App routing<br/>[App.jsx]"]
  node_apiutil["API helper<br/>[api.js]"]
  node_local["Offline storage<br/>[storage.js]"]
end

subgraph group_student["Student issuance"]
  node_studentui["Student tools<br/>[StudentDetail.jsx]"]
  node_dueui["Student dues<br/>[StudentDue.jsx]"]
  node_studentctl["Student services"]
  node_sqlpool[("Student database<br/>[mysql.js]")]
  node_txnui["Transaction history"]
  node_txnctl["Issuance engine"]
end

subgraph group_inventory["Inventory operations"]
  node_productui["Product management<br/>[AddProduct.jsx]"]
  node_stockui["Stock management<br/>[GeneralStock.jsx]"]
  node_transferui["Campus transfers<br/>[StockTransfers.jsx]"]
  node_productctl["Product services"]
  node_productdata[("Product catalog<br/>[productModel.js]")]
  node_transferctl["Transfer services"]
  node_college[("Campus stock<br/>[collegeModel.js]")]
end

subgraph group_backend["API and persistence"]
  node_txndata[("Transactions")]
  node_server["Express API<br/>[server.js]"]
  node_mongodb[("MongoDB")]
end

subgraph group_insights["Governance and reports"]
  node_reports["Reports<br/>[Reports.jsx]"]
  node_dashboard["Dashboards<br/>[Dashboard.jsx]"]
  node_audit["Audit history"]
  node_admin["Admin governance"]
  node_settings["Settings<br/>[Settings.jsx]"]
end

node_staff(("Institution staff"))

node_staff -->|"uses"| node_app
node_app -->|"routes to"| node_studentui
node_app -->|"loads and saves"| node_local
node_studentui -->|"requests data"| node_apiutil
node_dueui -->|"requests data"| node_apiutil
node_studentui -->|"uses student API"| node_studentctl
node_studentctl -->|"queries"| node_sqlpool
node_studentctl -->|"reads history"| node_txndata
node_txnui -->|"requests data"| node_apiutil
node_txnctl -->|"writes transactions"| node_txndata
node_txnctl -->|"adjusts stock"| node_productdata
node_productui -->|"requests data"| node_apiutil
node_stockui -->|"requests data"| node_apiutil
node_transferui -->|"requests data"| node_apiutil
node_productctl -->|"manages products"| node_productdata
node_productctl -->|"updates campus stock"| node_college
node_transferctl -->|"updates stock"| node_college
node_transferctl -->|"validates products"| node_productdata
node_app -->|"calls API"| node_server
node_server -->|"connects"| node_mongodb
node_reports -->|"requests data"| node_apiutil
node_dashboard -.->|"requests data"| node_apiutil
node_audit -->|"reads records"| node_txndata
node_admin -.->|"records changes"| node_audit
node_settings -.->|"requests settings"| node_apiutil
node_app -->|"login request"| node_apiutil

click node_app "https://github.com/pydah-soft-projects/stationary/blob/main/frontend/src/App.jsx"
click node_apiutil "https://github.com/pydah-soft-projects/stationary/blob/main/frontend/src/utils/api.js"
click node_local "https://github.com/pydah-soft-projects/stationary/blob/main/frontend/src/utils/storage.js"
click node_studentui "https://github.com/pydah-soft-projects/stationary/blob/main/frontend/src/pages/StudentDetail.jsx"
click node_dueui "https://github.com/pydah-soft-projects/stationary/blob/main/frontend/src/pages/StudentDue.jsx"
click node_studentctl "https://github.com/pydah-soft-projects/stationary/blob/main/backend/controllers/sqlStudentController.js"
click node_sqlpool "https://github.com/pydah-soft-projects/stationary/blob/main/backend/config/mysql.js"
click node_txnui "https://github.com/pydah-soft-projects/stationary/blob/main/frontend/src/pages/ChangeTransactionDate.jsx"
click node_txnctl "https://github.com/pydah-soft-projects/stationary/blob/main/backend/controllers/transactionController.js"
click node_txndata "https://github.com/pydah-soft-projects/stationary/blob/main/backend/models/transactionModel.js"
click node_productui "https://github.com/pydah-soft-projects/stationary/blob/main/frontend/src/pages/stock/AddProduct.jsx"
click node_stockui "https://github.com/pydah-soft-projects/stationary/blob/main/frontend/src/pages/GeneralStock.jsx"
click node_transferui "https://github.com/pydah-soft-projects/stationary/blob/main/frontend/src/pages/StockTransfers.jsx"
click node_productctl "https://github.com/pydah-soft-projects/stationary/blob/main/backend/controllers/productController.js"
click node_productdata "https://github.com/pydah-soft-projects/stationary/blob/main/backend/models/productModel.js"
click node_transferctl "https://github.com/pydah-soft-projects/stationary/blob/main/backend/controllers/stockTransferController.js"
click node_college "https://github.com/pydah-soft-projects/stationary/blob/main/backend/models/collegeModel.js"
click node_server "https://github.com/pydah-soft-projects/stationary/blob/main/backend/server.js"
click node_reports "https://github.com/pydah-soft-projects/stationary/blob/main/frontend/src/pages/Reports.jsx"
click node_dashboard "https://github.com/pydah-soft-projects/stationary/blob/main/frontend/src/pages/Dashboard.jsx"
click node_audit "https://github.com/pydah-soft-projects/stationary/blob/main/backend/controllers/auditLogController.js"
click node_admin "https://github.com/pydah-soft-projects/stationary/blob/main/backend/controllers/subAdminController.js"
click node_settings "https://github.com/pydah-soft-projects/stationary/blob/main/frontend/src/pages/Settings.jsx"

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_apiutil,node_local toneBlue
class node_studentui,node_dueui,node_studentctl,node_sqlpool,node_txnui,node_txnctl toneAmber
class node_productui,node_stockui,node_transferui,node_productctl,node_productdata,node_transferctl,node_college toneMint
class node_txndata,node_server,node_mongodb toneRose
class node_reports,node_dashboard,node_audit,node_admin,node_settings,node_staff toneIndigo
```

## Components

### React application

- [App routing](https://github.com/pydah-soft-projects/stationary/blob/main/frontend/src/App.jsx): `frontend/src/App.jsx`
- [API helper](https://github.com/pydah-soft-projects/stationary/blob/main/frontend/src/utils/api.js): `frontend/src/utils/api.js`
- [Offline storage](https://github.com/pydah-soft-projects/stationary/blob/main/frontend/src/utils/storage.js): `frontend/src/utils/storage.js`

### Student issuance

- [Student tools](https://github.com/pydah-soft-projects/stationary/blob/main/frontend/src/pages/StudentDetail.jsx): `frontend/src/pages/StudentDetail.jsx`
- [Student dues](https://github.com/pydah-soft-projects/stationary/blob/main/frontend/src/pages/StudentDue.jsx): `frontend/src/pages/StudentDue.jsx`
- [Student services](https://github.com/pydah-soft-projects/stationary/blob/main/backend/controllers/sqlStudentController.js): `backend/controllers/sqlStudentController.js`
- [Student database](https://github.com/pydah-soft-projects/stationary/blob/main/backend/config/mysql.js): `backend/config/mysql.js`
- [Transaction history](https://github.com/pydah-soft-projects/stationary/blob/main/frontend/src/pages/ChangeTransactionDate.jsx): `frontend/src/pages/ChangeTransactionDate.jsx`
- [Issuance engine](https://github.com/pydah-soft-projects/stationary/blob/main/backend/controllers/transactionController.js): `backend/controllers/transactionController.js`

### Inventory operations

- [Product management](https://github.com/pydah-soft-projects/stationary/blob/main/frontend/src/pages/stock/AddProduct.jsx): `frontend/src/pages/stock/AddProduct.jsx`
- [Stock management](https://github.com/pydah-soft-projects/stationary/blob/main/frontend/src/pages/GeneralStock.jsx): `frontend/src/pages/GeneralStock.jsx`
- [Campus transfers](https://github.com/pydah-soft-projects/stationary/blob/main/frontend/src/pages/StockTransfers.jsx): `frontend/src/pages/StockTransfers.jsx`
- [Product services](https://github.com/pydah-soft-projects/stationary/blob/main/backend/controllers/productController.js): `backend/controllers/productController.js`
- [Product catalog](https://github.com/pydah-soft-projects/stationary/blob/main/backend/models/productModel.js): `backend/models/productModel.js`
- [Transfer services](https://github.com/pydah-soft-projects/stationary/blob/main/backend/controllers/stockTransferController.js): `backend/controllers/stockTransferController.js`
- [Campus stock](https://github.com/pydah-soft-projects/stationary/blob/main/backend/models/collegeModel.js): `backend/models/collegeModel.js`

### API and persistence

- [Transactions](https://github.com/pydah-soft-projects/stationary/blob/main/backend/models/transactionModel.js): `backend/models/transactionModel.js`
- [Express API](https://github.com/pydah-soft-projects/stationary/blob/main/backend/server.js): `backend/server.js`
- **MongoDB**

### Governance and reports

- [Reports](https://github.com/pydah-soft-projects/stationary/blob/main/frontend/src/pages/Reports.jsx): `frontend/src/pages/Reports.jsx`
- [Dashboards](https://github.com/pydah-soft-projects/stationary/blob/main/frontend/src/pages/Dashboard.jsx): `frontend/src/pages/Dashboard.jsx`
- [Audit history](https://github.com/pydah-soft-projects/stationary/blob/main/backend/controllers/auditLogController.js): `backend/controllers/auditLogController.js`
- [Admin governance](https://github.com/pydah-soft-projects/stationary/blob/main/backend/controllers/subAdminController.js): `backend/controllers/subAdminController.js`
- [Settings](https://github.com/pydah-soft-projects/stationary/blob/main/frontend/src/pages/Settings.jsx): `frontend/src/pages/Settings.jsx`

### Other components

- **Institution staff**

## Connections

- Institution staff → App routing: uses (evidence: `README.md`)
- App routing → Student tools: routes to (evidence: `frontend/src/App.jsx`)
- App routing → Offline storage: loads and saves (evidence: `frontend/src/App.jsx`)
- Student tools → API helper: requests data
- Student dues → API helper: requests data
- Student tools → Student services: uses student API (evidence: `README.md`)
- Student services → Student database: queries (evidence: `backend/controllers/sqlStudentController.js`)
- Student services → Transactions: reads history (evidence: `backend/controllers/sqlStudentController.js`)
- Transaction history → API helper: requests data
- Issuance engine → Transactions: writes transactions (evidence: `backend/controllers/transactionController.js`)
- Issuance engine → Product catalog: adjusts stock (evidence: `backend/controllers/transactionController.js`)
- Product management → API helper: requests data (evidence: `README.md`)
- Stock management → API helper: requests data (evidence: `frontend/src/pages/GeneralStock.jsx`)
- Campus transfers → API helper: requests data (evidence: `README.md`)
- Product services → Product catalog: manages products (evidence: `backend/controllers/productController.js`)
- Product services → Campus stock: updates campus stock (evidence: `backend/controllers/productController.js`)
- Transfer services → Campus stock: updates stock (evidence: `backend/controllers/stockTransferController.js`)
- Transfer services → Product catalog: validates products (evidence: `backend/controllers/stockTransferController.js`)
- App routing → Express API: calls API (evidence: `README.md`)
- Express API → MongoDB: connects (evidence: `backend/server.js`)
- Reports → API helper: requests data (evidence: `frontend/src/pages/Reports.jsx`)
- Dashboards → API helper: requests data
- Audit history → Transactions: reads records (evidence: `backend/controllers/auditLogController.js`)
- Admin governance → Audit history: records changes
- Settings → API helper: requests settings
- App routing → API helper: login request (evidence: `frontend/src/App.jsx`)
