# kiptoo345/umoja-sacco-system architecture

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

- Interactive diagram: https://gitdiagram.com/kiptoo345/umoja-sacco-system
- Repository: https://github.com/kiptoo345/umoja-sacco-system

## Overview

Umoja SACCO is a role-based web system for member savings, deposits, loans, and administration. Staff register members and record deposits; accountants verify deposits and record repayments; loan officers review applications; members track balances and apply for loans; administrators manage accounts and audit activity. React screens call an Express API, which uses MySQL for persistent records. The sampled code supports the loan repayment flow and API routing; other feature links reflect README documentation and the source index, not inspection of those implementations.

Main entry points: [`frontend/src/api.js`](https://github.com/kiptoo345/umoja-sacco-system/blob/main/frontend/src/api.js) (API client), [`backend/src/server.js`](https://github.com/kiptoo345/umoja-sacco-system/blob/main/backend/src/server.js) (API router), [`backend/src/routes/loans.js`](https://github.com/kiptoo345/umoja-sacco-system/blob/main/backend/src/routes/loans.js) (Loan routes), [`backend/src/routes/auth.js`](https://github.com/kiptoo345/umoja-sacco-system/blob/main/backend/src/routes/auth.js) (Login and reset)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_front["Web application"]
  node_member_ui["Member services"]
  node_registration["Member registration<br/>[RegisterMember.jsx]"]
  node_deposit_entry["Deposit entry<br/>[RecordDeposit.jsx]"]
  node_deposit_review["Deposit verification<br/>[VerifyDeposits.jsx]"]
  node_bank_ledger["Bank ledger"]
  node_repayment_ui["Loan repayments<br/>[LoanRepayments.jsx]"]
  node_loan_review["Application review"]
  node_admin_ui["Admin console"]
  node_client_api["API client<br/>[api.js]"]
end

subgraph group_api["API and access"]
  node_api_entry["API router<br/>[server.js]"]
  node_authentication["Login and reset<br/>[auth.js]"]
  node_authorization["Token and roles<br/>[auth.js]"]
  node_validation["Request validation<br/>[util.js]"]
end

subgraph group_ops["SACCO operations"]
  node_member_routes["Member routes<br/>[members.js]"]
  node_deposit_routes["Deposit routes<br/>[deposits.js]"]
  node_loan_routes["Loan routes<br/>[loans.js]"]
  node_bank_routes["Bank routes<br/>[bank.js]"]
end

subgraph group_admin["Administration"]
  node_admin_routes["Admin routes<br/>[admin.js]"]
  node_audit["Audit trail<br/>[audit.js]"]
end

subgraph group_data["Persistent data"]
  node_db_access["Database access<br/>[db.js]"]
  node_mysql[("SACCO database<br/>[Umoja_sacco_db.sql]")]
  node_sql_rules["Procedures and triggers"]
  node_dashboard_view["Member dashboard view"]
end

node_staff(("Staff"))
node_accountant(("Accountant"))
node_member(("Member"))
node_officer(("Loan officer"))
node_administrator(("Administrator"))

node_staff -->|"registers"| node_registration
node_staff -->|"records"| node_deposit_entry
node_accountant -->|"verifies"| node_deposit_review
node_accountant -->|"maintains"| node_bank_ledger
node_accountant -->|"records"| node_repayment_ui
node_member -->|"views"| node_member_ui
node_member -->|"applies"| node_loan_review
node_officer -->|"decides"| node_loan_review
node_administrator -->|"manages"| node_admin_ui
node_registration -->|"submits via"| node_client_api
node_deposit_entry -.->|"submits via"| node_client_api
node_deposit_review -.->|"submits via"| node_client_api
node_bank_ledger -->|"requests via"| node_client_api
node_repayment_ui -->|"requests via"| node_client_api
node_loan_review -->|"requests via"| node_client_api
node_member_ui -->|"requests via"| node_client_api
node_admin_ui -.->|"requests via"| node_client_api
node_client_api -->|"calls"| node_api_entry
node_api_entry -->|"routes"| node_authentication
node_api_entry -->|"routes"| node_member_routes
node_api_entry -->|"routes"| node_deposit_routes
node_api_entry -->|"routes"| node_loan_routes
node_api_entry -->|"routes"| node_bank_routes
node_api_entry -->|"routes"| node_admin_routes
node_loan_routes -->|"checks access"| node_authorization
node_authentication -->|"authenticates"| node_authorization
node_loan_routes -->|"queries and transacts"| node_db_access
node_authentication -->|"queries"| node_db_access
node_admin_routes -->|"queries"| node_db_access
node_loan_routes -->|"records actions"| node_audit
node_authentication -->|"records actions"| node_audit
node_loan_routes -->|"validates input"| node_validation
node_db_access -->|"connects to"| node_mysql
node_loan_routes -->|"calls approval procedure"| node_sql_rules
node_loan_routes -->|"reads and writes"| node_mysql
node_member_routes -.->|"uses dashboard data"| node_dashboard_view

click node_member_ui "https://github.com/kiptoo345/umoja-sacco-system/blob/main/frontend/src/Pages/MemberDashboard.jsx"
click node_registration "https://github.com/kiptoo345/umoja-sacco-system/blob/main/frontend/src/Pages/RegisterMember.jsx"
click node_deposit_entry "https://github.com/kiptoo345/umoja-sacco-system/blob/main/frontend/src/Pages/RecordDeposit.jsx"
click node_deposit_review "https://github.com/kiptoo345/umoja-sacco-system/blob/main/frontend/src/Pages/VerifyDeposits.jsx"
click node_bank_ledger "https://github.com/kiptoo345/umoja-sacco-system/blob/main/frontend/src/Pages/BankTransactions.jsx"
click node_repayment_ui "https://github.com/kiptoo345/umoja-sacco-system/blob/main/frontend/src/Pages/LoanRepayments.jsx"
click node_loan_review "https://github.com/kiptoo345/umoja-sacco-system/blob/main/frontend/src/Pages/PendingApplications.jsx"
click node_admin_ui "https://github.com/kiptoo345/umoja-sacco-system/tree/main/frontend/src/Pages/admin"
click node_client_api "https://github.com/kiptoo345/umoja-sacco-system/blob/main/frontend/src/api.js"
click node_api_entry "https://github.com/kiptoo345/umoja-sacco-system/blob/main/backend/src/server.js"
click node_authentication "https://github.com/kiptoo345/umoja-sacco-system/blob/main/backend/src/routes/auth.js"
click node_authorization "https://github.com/kiptoo345/umoja-sacco-system/blob/main/backend/src/auth.js"
click node_member_routes "https://github.com/kiptoo345/umoja-sacco-system/blob/main/backend/src/routes/members.js"
click node_deposit_routes "https://github.com/kiptoo345/umoja-sacco-system/blob/main/backend/src/routes/deposits.js"
click node_loan_routes "https://github.com/kiptoo345/umoja-sacco-system/blob/main/backend/src/routes/loans.js"
click node_bank_routes "https://github.com/kiptoo345/umoja-sacco-system/blob/main/backend/src/routes/bank.js"
click node_admin_routes "https://github.com/kiptoo345/umoja-sacco-system/blob/main/backend/src/routes/admin.js"
click node_audit "https://github.com/kiptoo345/umoja-sacco-system/blob/main/backend/src/audit.js"
click node_validation "https://github.com/kiptoo345/umoja-sacco-system/blob/main/backend/src/util.js"
click node_db_access "https://github.com/kiptoo345/umoja-sacco-system/blob/main/backend/src/db.js"
click node_mysql "https://github.com/kiptoo345/umoja-sacco-system/blob/main/database/Umoja_sacco_db.sql"
click node_sql_rules "https://github.com/kiptoo345/umoja-sacco-system/tree/main/database"
click node_dashboard_view "https://github.com/kiptoo345/umoja-sacco-system/blob/main/database/View_MemberDashboard.sql"

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_member_ui,node_registration,node_deposit_entry,node_deposit_review,node_bank_ledger,node_repayment_ui,node_loan_review,node_admin_ui,node_client_api toneBlue
class node_api_entry,node_authentication,node_authorization,node_validation toneAmber
class node_member_routes,node_deposit_routes,node_loan_routes,node_bank_routes toneMint
class node_admin_routes,node_audit toneRose
class node_db_access,node_mysql,node_sql_rules,node_dashboard_view,node_staff,node_accountant,node_member,node_officer,node_administrator toneIndigo
```

## Components

### Web application

- [Member services](https://github.com/kiptoo345/umoja-sacco-system/blob/main/frontend/src/Pages/MemberDashboard.jsx): `frontend/src/Pages/MemberDashboard.jsx`
- [Member registration](https://github.com/kiptoo345/umoja-sacco-system/blob/main/frontend/src/Pages/RegisterMember.jsx): `frontend/src/Pages/RegisterMember.jsx`
- [Deposit entry](https://github.com/kiptoo345/umoja-sacco-system/blob/main/frontend/src/Pages/RecordDeposit.jsx): `frontend/src/Pages/RecordDeposit.jsx`
- [Deposit verification](https://github.com/kiptoo345/umoja-sacco-system/blob/main/frontend/src/Pages/VerifyDeposits.jsx): `frontend/src/Pages/VerifyDeposits.jsx`
- [Bank ledger](https://github.com/kiptoo345/umoja-sacco-system/blob/main/frontend/src/Pages/BankTransactions.jsx): `frontend/src/Pages/BankTransactions.jsx`
- [Loan repayments](https://github.com/kiptoo345/umoja-sacco-system/blob/main/frontend/src/Pages/LoanRepayments.jsx): `frontend/src/Pages/LoanRepayments.jsx`
- [Application review](https://github.com/kiptoo345/umoja-sacco-system/blob/main/frontend/src/Pages/PendingApplications.jsx): `frontend/src/Pages/PendingApplications.jsx`
- [Admin console](https://github.com/kiptoo345/umoja-sacco-system/tree/main/frontend/src/Pages/admin): `frontend/src/Pages/admin`
- [API client](https://github.com/kiptoo345/umoja-sacco-system/blob/main/frontend/src/api.js): `frontend/src/api.js`

### API and access

- [API router](https://github.com/kiptoo345/umoja-sacco-system/blob/main/backend/src/server.js): `backend/src/server.js`
- [Login and reset](https://github.com/kiptoo345/umoja-sacco-system/blob/main/backend/src/routes/auth.js): `backend/src/routes/auth.js`
- [Token and roles](https://github.com/kiptoo345/umoja-sacco-system/blob/main/backend/src/auth.js): `backend/src/auth.js`
- [Request validation](https://github.com/kiptoo345/umoja-sacco-system/blob/main/backend/src/util.js): `backend/src/util.js`

### SACCO operations

- [Member routes](https://github.com/kiptoo345/umoja-sacco-system/blob/main/backend/src/routes/members.js): `backend/src/routes/members.js`
- [Deposit routes](https://github.com/kiptoo345/umoja-sacco-system/blob/main/backend/src/routes/deposits.js): `backend/src/routes/deposits.js`
- [Loan routes](https://github.com/kiptoo345/umoja-sacco-system/blob/main/backend/src/routes/loans.js): `backend/src/routes/loans.js`
- [Bank routes](https://github.com/kiptoo345/umoja-sacco-system/blob/main/backend/src/routes/bank.js): `backend/src/routes/bank.js`

### Administration

- [Admin routes](https://github.com/kiptoo345/umoja-sacco-system/blob/main/backend/src/routes/admin.js): `backend/src/routes/admin.js`
- [Audit trail](https://github.com/kiptoo345/umoja-sacco-system/blob/main/backend/src/audit.js): `backend/src/audit.js`

### Persistent data

- [Database access](https://github.com/kiptoo345/umoja-sacco-system/blob/main/backend/src/db.js): `backend/src/db.js`
- [SACCO database](https://github.com/kiptoo345/umoja-sacco-system/blob/main/database/Umoja_sacco_db.sql): `database/Umoja_sacco_db.sql`
- [Procedures and triggers](https://github.com/kiptoo345/umoja-sacco-system/tree/main/database): `database`
- [Member dashboard view](https://github.com/kiptoo345/umoja-sacco-system/blob/main/database/View_MemberDashboard.sql): `database/View_MemberDashboard.sql`

### Other components

- **Staff**
- **Accountant**
- **Member**
- **Loan officer**
- **Administrator**

## Connections

- Staff → Member registration: registers (evidence: `README.md`)
- Staff → Deposit entry: records (evidence: `README.md`)
- Accountant → Deposit verification: verifies (evidence: `README.md`)
- Accountant → Bank ledger: maintains (evidence: `README.md`)
- Accountant → Loan repayments: records (evidence: `README.md`)
- Member → Member services: views (evidence: `README.md`)
- Member → Application review: applies (evidence: `README.md`)
- Loan officer → Application review: decides (evidence: `README.md`)
- Administrator → Admin console: manages (evidence: `README.md`)
- Member registration → API client: submits via (evidence: `frontend/src/Pages/RegisterMember.jsx`)
- Deposit entry → API client: submits via (evidence: `frontend/src/Pages/RecordDeposit.jsx`)
- Deposit verification → API client: submits via (evidence: `frontend/src/Pages/VerifyDeposits.jsx`)
- Bank ledger → API client: requests via (evidence: `frontend/src/Pages/BankTransactions.jsx`)
- Loan repayments → API client: requests via (evidence: `frontend/src/Pages/LoanRepayments.jsx`)
- Application review → API client: requests via (evidence: `frontend/src/Pages/PendingApplications.jsx`)
- Member services → API client: requests via (evidence: `frontend/src/Pages/MemberDashboard.jsx`)
- Admin console → API client: requests via (evidence: `frontend/src/Pages/admin/Reports.jsx`)
- API client → API router: calls (evidence: `README.md`)
- API router → Login and reset: routes (evidence: `backend/src/server.js`)
- API router → Member routes: routes (evidence: `backend/src/server.js`)
- API router → Deposit routes: routes (evidence: `backend/src/server.js`)
- API router → Loan routes: routes (evidence: `backend/src/server.js`)
- API router → Bank routes: routes (evidence: `backend/src/server.js`)
- API router → Admin routes: routes (evidence: `backend/src/server.js`)
- Loan routes → Token and roles: checks access (evidence: `backend/src/routes/loans.js`)
- Login and reset → Token and roles: authenticates (evidence: `backend/src/routes/auth.js`)
- Loan routes → Database access: queries and transacts (evidence: `backend/src/routes/loans.js`)
- Login and reset → Database access: queries (evidence: `backend/src/routes/auth.js`)
- Admin routes → Database access: queries (evidence: `backend/src/routes/admin.js`)
- Loan routes → Audit trail: records actions (evidence: `backend/src/routes/loans.js`)
- Login and reset → Audit trail: records actions (evidence: `backend/src/routes/auth.js`)
- Loan routes → Request validation: validates input (evidence: `backend/src/routes/loans.js`)
- Database access → SACCO database: connects to (evidence: `backend/src/db.js`)
- Loan routes → Procedures and triggers: calls approval procedure (evidence: `backend/src/routes/loans.js`)
- Loan routes → SACCO database: reads and writes (evidence: `backend/src/routes/loans.js`)
- Member routes → Member dashboard view: uses dashboard data
