# bdets/housebuild architecture

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

- Interactive diagram: https://gitdiagram.com/bdets/housebuild
- Repository: https://github.com/bdets/housebuild

## Overview

Society Finance App is an offline-capable society finance PWA for staff and members. Users authenticate, resolve to a role, and enter role-filtered admin or member screens; staff manage accounts and financial records, while members view their own summaries and approved information. Reporting, approval, notices, messaging, backups, and settings form distinct supporting capabilities. Firestore provides authentication-backed data and local persistence. Connections reflect the README and source-index references or shown excerpts; unsampled wiring is not inferred.

Main entry points: [`src/admin-main.js`](https://github.com/bdets/housebuild/blob/main/src/admin-main.js) (Admin Runtime), [`src/auth.js`](https://github.com/bdets/housebuild/blob/main/src/auth.js) (Authentication and Roles), [`src/member-main.js`](https://github.com/bdets/housebuild/blob/main/src/member-main.js) (Member Runtime), [`src/firebase.js`](https://github.com/bdets/housebuild/blob/main/src/firebase.js) (Firebase Client)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Access and Shell"]
  node_adminpage["Admin App<br/>[admin.html]"]
  node_memberpage["Member App<br/>[member.html]"]
  node_adminmain["Admin Runtime<br/>[admin-main.js]"]
  node_membermain["Member Runtime<br/>[member-main.js]"]
  node_auth["Authentication and Roles<br/>[auth.js]"]
  node_shell["Role-filtered Shell<br/>[ui-shell.js]"]
end

subgraph group_finance["Finance Operations"]
  node_deposits["Deposits and Installments<br/>[deposits.js]"]
  node_costs["Costs and Expenses<br/>[costs.js]"]
  node_vouchers["Vouchers and Cheques<br/>[vouchers.js]"]
  node_members["Shareholder Entry"]
end

subgraph group_insight["Reports and Communication"]
  node_statements["Statements<br/>[statements.js]"]
  node_dashboard["Dashboard<br/>[dashboard.js]"]
  node_approval["Report Approval"]
  node_reports["Report Calculations<br/>[reports.js]"]
  node_notices["Notices and Posts<br/>[notices.js]"]
  node_messages["Messages<br/>[messages.js]"]
end

subgraph group_admin["Administration"]
  node_users["Account Management<br/>[users.js]"]
  node_settings["Organization Settings<br/>[settings.js]"]
  node_backup["Backup and Restore<br/>[backup.js]"]
  node_activity["Activity Log<br/>[activity.js]"]
end

subgraph group_platform["Shared Services"]
  node_firebase["Firebase Client<br/>[firebase.js]"]
  node_firestore[("Firestore")]
  node_printing["PDF and Receipt Printing<br/>[print.js]"]
  node_orgstore["Organization Store<br/>[org-store.js]"]
  node_configlists["Finance Configuration<br/>[config-lists.js]"]
  node_backupcore["Backup Core<br/>[backup-core.js]"]
end

node_staff(("Staff"))
node_member(("Member"))

node_staff -->|"opens"| node_adminpage
node_member -->|"opens"| node_memberpage
node_adminpage -.->|"loads"| node_adminmain
node_memberpage -.->|"loads"| node_membermain
node_adminmain -->|"checks identity"| node_auth
node_membermain -->|"checks identity"| node_auth
node_adminmain -->|"renders shell"| node_shell
node_membermain -.->|"renders shell"| node_shell
node_adminmain -->|"routes to"| node_deposits
node_adminmain -->|"routes to"| node_costs
node_adminmain -->|"routes to"| node_vouchers
node_adminmain -->|"routes to"| node_members
node_adminmain -->|"routes to"| node_statements
node_adminmain -->|"routes to"| node_dashboard
node_adminmain -->|"routes to"| node_approval
node_adminmain -->|"routes to"| node_notices
node_adminmain -->|"routes to"| node_messages
node_adminmain -->|"routes to"| node_users
node_adminmain -->|"routes to"| node_settings
node_adminmain -->|"routes to"| node_backup
node_membermain -->|"loads"| node_reports
node_membermain -->|"uses"| node_printing
node_auth -->|"authenticates with"| node_firebase
node_auth -->|"logs actions"| node_activity
node_auth -->|"backs up on logout"| node_backupcore
node_users -->|"creates accounts"| node_auth
node_users -->|"logs changes"| node_activity
node_deposits -->|"loads installment plan"| node_configlists
node_deposits -->|"prints receipts"| node_printing
node_costs -->|"loads cost items"| node_configlists
node_vouchers -->|"prints vouchers"| node_printing
node_statements -->|"calculates statements"| node_reports
node_dashboard -->|"loads summaries"| node_reports
node_statements -->|"exports reports"| node_printing
node_backup -->|"uses"| node_backupcore
node_settings -->|"invalidates cache"| node_orgstore
node_firebase -->|"reads and writes"| node_firestore
node_auth -->|"resolves profiles"| node_firestore
node_reports -->|"reads finance data"| node_firestore
node_orgstore -->|"reads organization"| node_firebase
node_configlists -->|"reads and saves config"| node_firebase
node_activity -->|"writes log entries"| node_firebase
node_printing -->|"reads cached organization"| node_orgstore

click node_adminpage "https://github.com/bdets/housebuild/blob/main/admin.html"
click node_memberpage "https://github.com/bdets/housebuild/blob/main/member.html"
click node_adminmain "https://github.com/bdets/housebuild/blob/main/src/admin-main.js"
click node_membermain "https://github.com/bdets/housebuild/blob/main/src/member-main.js"
click node_auth "https://github.com/bdets/housebuild/blob/main/src/auth.js"
click node_shell "https://github.com/bdets/housebuild/blob/main/src/ui-shell.js"
click node_deposits "https://github.com/bdets/housebuild/blob/main/src/modules/deposits.js"
click node_costs "https://github.com/bdets/housebuild/blob/main/src/modules/costs.js"
click node_vouchers "https://github.com/bdets/housebuild/blob/main/src/modules/vouchers.js"
click node_members "https://github.com/bdets/housebuild/blob/main/src/modules/shareholder-entry.js"
click node_statements "https://github.com/bdets/housebuild/blob/main/src/modules/statements.js"
click node_dashboard "https://github.com/bdets/housebuild/blob/main/src/modules/dashboard.js"
click node_approval "https://github.com/bdets/housebuild/blob/main/src/modules/reports-approval.js"
click node_reports "https://github.com/bdets/housebuild/blob/main/src/reports.js"
click node_notices "https://github.com/bdets/housebuild/blob/main/src/modules/notices.js"
click node_messages "https://github.com/bdets/housebuild/blob/main/src/modules/messages.js"
click node_users "https://github.com/bdets/housebuild/blob/main/src/modules/users.js"
click node_settings "https://github.com/bdets/housebuild/blob/main/src/modules/settings.js"
click node_backup "https://github.com/bdets/housebuild/blob/main/src/modules/backup.js"
click node_activity "https://github.com/bdets/housebuild/blob/main/src/activity.js"
click node_firebase "https://github.com/bdets/housebuild/blob/main/src/firebase.js"
click node_printing "https://github.com/bdets/housebuild/blob/main/src/print.js"
click node_orgstore "https://github.com/bdets/housebuild/blob/main/src/org-store.js"
click node_configlists "https://github.com/bdets/housebuild/blob/main/src/config-lists.js"
click node_backupcore "https://github.com/bdets/housebuild/blob/main/src/backup-core.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_adminpage,node_memberpage,node_adminmain,node_membermain,node_auth,node_shell toneBlue
class node_deposits,node_costs,node_vouchers,node_members toneAmber
class node_statements,node_dashboard,node_approval,node_reports,node_notices,node_messages toneMint
class node_users,node_settings,node_backup,node_activity toneRose
class node_firebase,node_firestore,node_printing,node_orgstore,node_configlists,node_backupcore,node_staff,node_member toneIndigo
```

## Components

### Access and Shell

- [Admin App](https://github.com/bdets/housebuild/blob/main/admin.html): `admin.html`
- [Member App](https://github.com/bdets/housebuild/blob/main/member.html): `member.html`
- [Admin Runtime](https://github.com/bdets/housebuild/blob/main/src/admin-main.js): `src/admin-main.js`
- [Member Runtime](https://github.com/bdets/housebuild/blob/main/src/member-main.js): `src/member-main.js`
- [Authentication and Roles](https://github.com/bdets/housebuild/blob/main/src/auth.js): `src/auth.js`
- [Role-filtered Shell](https://github.com/bdets/housebuild/blob/main/src/ui-shell.js): `src/ui-shell.js`

### Finance Operations

- [Deposits and Installments](https://github.com/bdets/housebuild/blob/main/src/modules/deposits.js): `src/modules/deposits.js`
- [Costs and Expenses](https://github.com/bdets/housebuild/blob/main/src/modules/costs.js): `src/modules/costs.js`
- [Vouchers and Cheques](https://github.com/bdets/housebuild/blob/main/src/modules/vouchers.js): `src/modules/vouchers.js`
- [Shareholder Entry](https://github.com/bdets/housebuild/blob/main/src/modules/shareholder-entry.js): `src/modules/shareholder-entry.js`

### Reports and Communication

- [Statements](https://github.com/bdets/housebuild/blob/main/src/modules/statements.js): `src/modules/statements.js`
- [Dashboard](https://github.com/bdets/housebuild/blob/main/src/modules/dashboard.js): `src/modules/dashboard.js`
- [Report Approval](https://github.com/bdets/housebuild/blob/main/src/modules/reports-approval.js): `src/modules/reports-approval.js`
- [Report Calculations](https://github.com/bdets/housebuild/blob/main/src/reports.js): `src/reports.js`
- [Notices and Posts](https://github.com/bdets/housebuild/blob/main/src/modules/notices.js): `src/modules/notices.js`
- [Messages](https://github.com/bdets/housebuild/blob/main/src/modules/messages.js): `src/modules/messages.js`

### Administration

- [Account Management](https://github.com/bdets/housebuild/blob/main/src/modules/users.js): `src/modules/users.js`
- [Organization Settings](https://github.com/bdets/housebuild/blob/main/src/modules/settings.js): `src/modules/settings.js`
- [Backup and Restore](https://github.com/bdets/housebuild/blob/main/src/modules/backup.js): `src/modules/backup.js`
- [Activity Log](https://github.com/bdets/housebuild/blob/main/src/activity.js): `src/activity.js`

### Shared Services

- [Firebase Client](https://github.com/bdets/housebuild/blob/main/src/firebase.js): `src/firebase.js`
- **Firestore**
- [PDF and Receipt Printing](https://github.com/bdets/housebuild/blob/main/src/print.js): `src/print.js`
- [Organization Store](https://github.com/bdets/housebuild/blob/main/src/org-store.js): `src/org-store.js`
- [Finance Configuration](https://github.com/bdets/housebuild/blob/main/src/config-lists.js): `src/config-lists.js`
- [Backup Core](https://github.com/bdets/housebuild/blob/main/src/backup-core.js): `src/backup-core.js`

### Other components

- **Staff**
- **Member**

## Connections

- Staff → Admin App: opens (evidence: `README.md`)
- Member → Member App: opens (evidence: `README.md`)
- Admin App → Admin Runtime: loads
- Member App → Member Runtime: loads
- Admin Runtime → Authentication and Roles: checks identity (evidence: `src/admin-main.js`)
- Member Runtime → Authentication and Roles: checks identity (evidence: `src/member-main.js`)
- Admin Runtime → Role-filtered Shell: renders shell (evidence: `src/admin-main.js`)
- Member Runtime → Role-filtered Shell: renders shell
- Admin Runtime → Deposits and Installments: routes to (evidence: `src/admin-main.js`)
- Admin Runtime → Costs and Expenses: routes to (evidence: `src/admin-main.js`)
- Admin Runtime → Vouchers and Cheques: routes to (evidence: `src/admin-main.js`)
- Admin Runtime → Shareholder Entry: routes to (evidence: `src/admin-main.js`)
- Admin Runtime → Statements: routes to (evidence: `src/admin-main.js`)
- Admin Runtime → Dashboard: routes to (evidence: `src/admin-main.js`)
- Admin Runtime → Report Approval: routes to (evidence: `src/admin-main.js`)
- Admin Runtime → Notices and Posts: routes to (evidence: `src/admin-main.js`)
- Admin Runtime → Messages: routes to (evidence: `src/admin-main.js`)
- Admin Runtime → Account Management: routes to (evidence: `src/admin-main.js`)
- Admin Runtime → Organization Settings: routes to (evidence: `src/admin-main.js`)
- Admin Runtime → Backup and Restore: routes to (evidence: `src/admin-main.js`)
- Member Runtime → Report Calculations: loads (evidence: `src/member-main.js`)
- Member Runtime → PDF and Receipt Printing: uses (evidence: `src/member-main.js`)
- Authentication and Roles → Firebase Client: authenticates with (evidence: `src/auth.js`)
- Authentication and Roles → Activity Log: logs actions (evidence: `src/auth.js`)
- Authentication and Roles → Backup Core: backs up on logout (evidence: `src/auth.js`)
- Account Management → Authentication and Roles: creates accounts (evidence: `src/modules/users.js`)
- Account Management → Activity Log: logs changes (evidence: `src/modules/users.js`)
- Deposits and Installments → Finance Configuration: loads installment plan (evidence: `src/modules/deposits.js`)
- Deposits and Installments → PDF and Receipt Printing: prints receipts (evidence: `src/modules/deposits.js`)
- Costs and Expenses → Finance Configuration: loads cost items (evidence: `src/modules/costs.js`)
- Vouchers and Cheques → PDF and Receipt Printing: prints vouchers (evidence: `src/modules/vouchers.js`)
- Statements → Report Calculations: calculates statements (evidence: `src/modules/statements.js`)
- Dashboard → Report Calculations: loads summaries (evidence: `src/modules/dashboard.js`)
- Statements → PDF and Receipt Printing: exports reports (evidence: `src/modules/statements.js`)
- Backup and Restore → Backup Core: uses (evidence: `src/modules/backup.js`)
- Organization Settings → Organization Store: invalidates cache (evidence: `src/modules/settings.js`)
- Firebase Client → Firestore: reads and writes (evidence: `README.md`)
- Authentication and Roles → Firestore: resolves profiles (evidence: `src/auth.js`)
- Report Calculations → Firestore: reads finance data (evidence: `src/reports.js`)
- Organization Store → Firebase Client: reads organization (evidence: `src/org-store.js`)
- Finance Configuration → Firebase Client: reads and saves config (evidence: `src/config-lists.js`)
- Activity Log → Firebase Client: writes log entries (evidence: `src/activity.js`)
- PDF and Receipt Printing → Organization Store: reads cached organization (evidence: `src/print.js`)
