# kasket091/coop architecture

> Architecture diagram of the GitHub repository kasket091/coop, 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/kasket091/coop
- Repository: https://github.com/kasket091/coop

## Overview

Coop is a member-and-admin app for managing a cooperative’s savings, loans, repayments, and member accounts. Members sign in, review their accounts, submit loan or payment requests, and respond to co-maker requests; administrators manage members, review requests, and record cooperative transactions. The app routes authenticated users to separate member and admin experiences, with Firestore-backed state. The source excerpts show several UI-to-store actions and selected domain calculations; other listed capabilities are represented by their source modules, but their internal wiring was not sampled.

Main entry points: [`src/store.ts`](https://github.com/kasket091/coop/blob/main/src/store.ts) (Application data store), [`src/App.tsx`](https://github.com/kasket091/coop/blob/main/src/App.tsx) (Session routing), [`src/MemberApp.tsx`](https://github.com/kasket091/coop/blob/main/src/MemberApp.tsx) (Member app), [`src/AdminApp.tsx`](https://github.com/kasket091/coop/blob/main/src/AdminApp.tsx) (Admin app)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_apps["User experiences"]
  node_member["Member app<br/>[MemberApp.tsx]"]
  node_admin["Admin app<br/>[AdminApp.tsx]"]
  node_login["Sign in<br/>[Login.tsx]"]
  node_app["Session routing<br/>[App.tsx]"]
  node_member_tabs["Member features<br/>[member-tabs.tsx]"]
  node_payment_dialogs["Payment dialogs<br/>[pay-dialogs.tsx]"]
  node_dashboard["Co-op dashboard<br/>[Dashboard.tsx]"]
  node_handbook["Handbook access<br/>[handbook.tsx]"]
  node_savings["Savings view<br/>[savings.tsx]"]
end

subgraph group_operations["Cooperative operations"]
end

subgraph group_domain["Financial domain"]
  node_requests["Loan requests<br/>[requests.ts]"]
  node_payments["Payment rules<br/>[payments.ts]"]
  node_ledger["Transaction ledger<br/>[ledger.ts]"]
  node_rules["Co-op rules<br/>[rules.ts]"]
  node_accounts["Account identity<br/>[accounts.ts]"]
  node_account_log["Account history<br/>[account-log.ts]"]
  node_termination["Account termination<br/>[termination.ts]"]
end

subgraph group_platform["Data and services"]
  node_store["Application data store<br/>[store.ts]"]
  node_firebase["Firebase setup<br/>[firebase.ts]"]
  node_push["Push notifications<br/>[push.tsx]"]
  node_backup["Data backup<br/>[backup.ts]"]
  node_firestore[("Cloud database")]
end

node_member_actor(("Member"))
node_admin_actor(("Administrator"))

node_member_actor -->|"opens app"| node_app
node_admin_actor -->|"opens app"| node_app
node_app -->|"checks session"| node_store
node_app -->|"routes signed out"| node_login
node_app -->|"routes admin"| node_admin
node_app -->|"routes member"| node_member
node_member -->|"renders features"| node_member_tabs
node_member -->|"opens payment flows"| node_payment_dialogs
node_admin -->|"renders dashboard"| node_dashboard
node_admin -->|"adds members"| node_store
node_member_tabs -->|"validates requests"| node_requests
node_member_tabs -->|"submits requests"| node_store
node_payment_dialogs -->|"sends payment requests"| node_store
node_payment_dialogs -->|"previews loan payments"| node_payments
node_store -->|"reads and writes"| node_firestore
node_store -->|"uses configuration"| node_firebase
node_app -->|"enables notifications"| node_push
node_member -->|"shows savings"| node_savings
node_member -->|"offers handbook"| node_handbook
node_store -.->|"rebuilds ledger"| node_ledger
node_store -->|"uses loan periods"| node_requests

click node_member "https://github.com/kasket091/coop/blob/main/src/MemberApp.tsx"
click node_admin "https://github.com/kasket091/coop/blob/main/src/AdminApp.tsx"
click node_login "https://github.com/kasket091/coop/blob/main/src/Login.tsx"
click node_app "https://github.com/kasket091/coop/blob/main/src/App.tsx"
click node_member_tabs "https://github.com/kasket091/coop/blob/main/src/member-tabs.tsx"
click node_payment_dialogs "https://github.com/kasket091/coop/blob/main/src/pay-dialogs.tsx"
click node_dashboard "https://github.com/kasket091/coop/blob/main/src/Dashboard.tsx"
click node_handbook "https://github.com/kasket091/coop/blob/main/src/handbook.tsx"
click node_savings "https://github.com/kasket091/coop/blob/main/src/savings.tsx"
click node_requests "https://github.com/kasket091/coop/blob/main/src/requests.ts"
click node_payments "https://github.com/kasket091/coop/blob/main/src/payments.ts"
click node_ledger "https://github.com/kasket091/coop/blob/main/src/ledger.ts"
click node_rules "https://github.com/kasket091/coop/blob/main/src/rules.ts"
click node_accounts "https://github.com/kasket091/coop/blob/main/src/accounts.ts"
click node_account_log "https://github.com/kasket091/coop/blob/main/src/account-log.ts"
click node_termination "https://github.com/kasket091/coop/blob/main/src/termination.ts"
click node_store "https://github.com/kasket091/coop/blob/main/src/store.ts"
click node_firebase "https://github.com/kasket091/coop/blob/main/src/firebase.ts"
click node_push "https://github.com/kasket091/coop/blob/main/src/push.tsx"
click node_backup "https://github.com/kasket091/coop/blob/main/src/backup.ts"

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,node_admin,node_login,node_app,node_member_tabs,node_payment_dialogs,node_dashboard,node_handbook,node_savings toneBlue
class node_requests,node_payments,node_ledger,node_rules,node_accounts,node_account_log,node_termination toneMint
class node_store,node_firebase,node_push,node_backup,node_firestore toneRose
class node_member_actor,node_admin_actor toneIndigo
```

## Components

### User experiences

- [Member app](https://github.com/kasket091/coop/blob/main/src/MemberApp.tsx): `src/MemberApp.tsx`
- [Admin app](https://github.com/kasket091/coop/blob/main/src/AdminApp.tsx): `src/AdminApp.tsx`
- [Sign in](https://github.com/kasket091/coop/blob/main/src/Login.tsx): `src/Login.tsx`
- [Session routing](https://github.com/kasket091/coop/blob/main/src/App.tsx): `src/App.tsx`
- [Member features](https://github.com/kasket091/coop/blob/main/src/member-tabs.tsx): `src/member-tabs.tsx`
- [Payment dialogs](https://github.com/kasket091/coop/blob/main/src/pay-dialogs.tsx): `src/pay-dialogs.tsx`
- [Co-op dashboard](https://github.com/kasket091/coop/blob/main/src/Dashboard.tsx): `src/Dashboard.tsx`
- [Handbook access](https://github.com/kasket091/coop/blob/main/src/handbook.tsx): `src/handbook.tsx`
- [Savings view](https://github.com/kasket091/coop/blob/main/src/savings.tsx): `src/savings.tsx`

### Financial domain

- [Loan requests](https://github.com/kasket091/coop/blob/main/src/requests.ts): `src/requests.ts`
- [Payment rules](https://github.com/kasket091/coop/blob/main/src/payments.ts): `src/payments.ts`
- [Transaction ledger](https://github.com/kasket091/coop/blob/main/src/ledger.ts): `src/ledger.ts`
- [Co-op rules](https://github.com/kasket091/coop/blob/main/src/rules.ts): `src/rules.ts`
- [Account identity](https://github.com/kasket091/coop/blob/main/src/accounts.ts): `src/accounts.ts`
- [Account history](https://github.com/kasket091/coop/blob/main/src/account-log.ts): `src/account-log.ts`
- [Account termination](https://github.com/kasket091/coop/blob/main/src/termination.ts): `src/termination.ts`

### Data and services

- [Application data store](https://github.com/kasket091/coop/blob/main/src/store.ts): `src/store.ts`
- [Firebase setup](https://github.com/kasket091/coop/blob/main/src/firebase.ts): `src/firebase.ts`
- [Push notifications](https://github.com/kasket091/coop/blob/main/src/push.tsx): `src/push.tsx`
- [Data backup](https://github.com/kasket091/coop/blob/main/src/backup.ts): `src/backup.ts`
- **Cloud database**

### Other components

- **Member**
- **Administrator**

## Connections

- Member → Session routing: opens app
- Administrator → Session routing: opens app
- Session routing → Application data store: checks session (evidence: `src/App.tsx`)
- Session routing → Sign in: routes signed out (evidence: `src/App.tsx`)
- Session routing → Admin app: routes admin (evidence: `src/App.tsx`)
- Session routing → Member app: routes member (evidence: `src/App.tsx`)
- Member app → Member features: renders features (evidence: `src/MemberApp.tsx`)
- Member app → Payment dialogs: opens payment flows (evidence: `src/MemberApp.tsx`)
- Admin app → Co-op dashboard: renders dashboard (evidence: `src/AdminApp.tsx`)
- Admin app → Application data store: adds members (evidence: `src/AdminApp.tsx`)
- Member features → Loan requests: validates requests (evidence: `src/member-tabs.tsx`)
- Member features → Application data store: submits requests (evidence: `src/member-tabs.tsx`)
- Payment dialogs → Application data store: sends payment requests (evidence: `src/pay-dialogs.tsx`)
- Payment dialogs → Payment rules: previews loan payments (evidence: `src/pay-dialogs.tsx`)
- Application data store → Cloud database: reads and writes (evidence: `src/store.ts`)
- Application data store → Firebase setup: uses configuration (evidence: `src/store.ts`)
- Session routing → Push notifications: enables notifications (evidence: `src/App.tsx`)
- Member app → Savings view: shows savings (evidence: `src/MemberApp.tsx`)
- Member app → Handbook access: offers handbook (evidence: `src/MemberApp.tsx`)
- Application data store → Transaction ledger: rebuilds ledger (evidence: `src/store.ts`)
- Application data store → Loan requests: uses loan periods (evidence: `src/store.ts`)
