# meezaan-dev/accounting-software architecture

> Architecture diagram of the GitHub repository meezaan-dev/accounting-software, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-23). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/meezaan-dev/accounting-software
- Repository: https://github.com/meezaan-dev/accounting-software

## Overview

Accounting Workspace is a Firebase-backed bookkeeping app for a South African small-business administrator. The main flow is email/password sign-in, exchange of a recent Firebase ID token for a session cookie, server-side session verification, then company-scoped accounting work backed by Firestore. That work spans company setup, contacts and jobs, financial documents and conversions, purchases, receipt allocation, and reports; document previews can be exported as PDFs. The sampled data layer confirms Firestore subscriptions and writes. Dashboard feature wiring and several capabilities are documented but their implementation was not sampled, so links below indicate only documented ownership, not uninspected call chains.

Main entry points: [`features/accounting/lib/accounting.ts`](https://github.com/meezaan-dev/accounting-software/blob/master/features/accounting/lib/accounting.ts) (Accounting data layer), [`features/accounting/components/AccountingApp.tsx`](https://github.com/meezaan-dev/accounting-software/blob/master/features/accounting/components/AccountingApp.tsx) (Accounting interface), [`app/(landing)/page.tsx`](https://github.com/meezaan-dev/accounting-software/blob/master/app/(landing)/page.tsx) (Sign-in page), [`components/auth/EmailPasswordSignInForm.tsx`](https://github.com/meezaan-dev/accounting-software/blob/master/components/auth/EmailPasswordSignInForm.tsx) (Email sign-in)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_access["Access and sessions"]
  node_signin["Sign-in page<br/>[page.tsx]"]
  node_signinform["Email sign-in"]
  node_csrf["CSRF endpoint<br/>[route.ts]"]
  node_session["Session endpoint<br/>[route.ts]"]
  node_authservice["Session verification<br/>[auth.ts]"]
end

subgraph group_workspace["Accounting workspace"]
  node_dashboard["Dashboard routes<br/>[page.tsx]"]
  node_accountingui["Accounting interface<br/>[AccountingApp.tsx]"]
  node_reports["Accounting reports<br/>[page.tsx]"]
end

subgraph group_records["Books and documents"]
  node_data["Accounting data layer<br/>[accounting.ts]"]
  node_companies["Company profiles<br/>[accounting.ts]"]
  node_contacts["Customers and suppliers<br/>[accounting.ts]"]
  node_jobs["Jobs<br/>[accounting.ts]"]
  node_documents["Financial documents<br/>[accounting.ts]"]
  node_numbering["Sequences and references<br/>[accounting.ts]"]
  node_preview["Document preview"]
  node_pdf["PDF export<br/>[export-document.ts]"]
  node_purchases["Purchases and expenses<br/>[accounting.ts]"]
  node_receipts["Receipt allocation<br/>[accounting.ts]"]
  node_logos["Company logo handling<br/>[company-logo.ts]"]
end

subgraph group_infra["Firebase services"]
  node_adminsdk["Firebase Admin<br/>[admin.ts]"]
  node_clientfirebase["Firebase client<br/>[client.ts]"]
  node_firestore[("Cloud Firestore")]
  node_rules["Firestore rules<br/>[firestore.rules]"]
end

node_admin(("Administrator"))

node_admin -->|"opens"| node_signin
node_signin -->|"checks session"| node_authservice
node_signin -->|"renders"| node_signinform
node_signinform -->|"requests token"| node_csrf
node_signinform -->|"submits ID token"| node_session
node_session -->|"verifies token"| node_adminsdk
node_session -->|"sets session cookie"| node_admin
node_dashboard -->|"verifies session"| node_authservice
node_authservice -->|"verifies cookie"| node_adminsdk
node_dashboard -->|"renders workspace"| node_accountingui
node_accountingui -->|"reads and updates"| node_data
node_data -->|"uses client"| node_clientfirebase
node_clientfirebase -->|"reads and writes"| node_firestore
node_rules -->|"constrains access"| node_firestore
node_data -->|"manages"| node_companies
node_data -->|"manages"| node_contacts
node_data -->|"manages"| node_jobs
node_data -->|"manages and converts"| node_documents
node_data -->|"allocates numbers"| node_numbering
node_data -->|"records"| node_purchases
node_data -->|"allocates payments"| node_receipts
node_accountingui -->|"opens preview"| node_preview
node_preview -->|"exports PDF"| node_pdf
node_accountingui -->|"presents reports"| node_reports
node_accountingui -.->|"uses logo handling"| node_logos

click node_signin "https://github.com/meezaan-dev/accounting-software/blob/master/app/(landing)/page.tsx"
click node_signinform "https://github.com/meezaan-dev/accounting-software/blob/master/components/auth/EmailPasswordSignInForm.tsx"
click node_csrf "https://github.com/meezaan-dev/accounting-software/blob/master/app/api/auth/csrf/route.ts"
click node_session "https://github.com/meezaan-dev/accounting-software/blob/master/app/api/auth/session/route.ts"
click node_authservice "https://github.com/meezaan-dev/accounting-software/blob/master/services/auth.ts"
click node_adminsdk "https://github.com/meezaan-dev/accounting-software/blob/master/services/firebase/admin.ts"
click node_dashboard "https://github.com/meezaan-dev/accounting-software/blob/master/app/dashboard/%5Bsection%5D/page.tsx"
click node_accountingui "https://github.com/meezaan-dev/accounting-software/blob/master/features/accounting/components/AccountingApp.tsx"
click node_data "https://github.com/meezaan-dev/accounting-software/blob/master/features/accounting/lib/accounting.ts"
click node_companies "https://github.com/meezaan-dev/accounting-software/blob/master/features/accounting/lib/accounting.ts"
click node_contacts "https://github.com/meezaan-dev/accounting-software/blob/master/features/accounting/lib/accounting.ts"
click node_jobs "https://github.com/meezaan-dev/accounting-software/blob/master/features/accounting/lib/accounting.ts"
click node_documents "https://github.com/meezaan-dev/accounting-software/blob/master/features/accounting/lib/accounting.ts"
click node_numbering "https://github.com/meezaan-dev/accounting-software/blob/master/features/accounting/lib/accounting.ts"
click node_preview "https://github.com/meezaan-dev/accounting-software/blob/master/features/accounting/components/DocumentPreview.tsx"
click node_pdf "https://github.com/meezaan-dev/accounting-software/blob/master/features/accounting/lib/export-document.ts"
click node_purchases "https://github.com/meezaan-dev/accounting-software/blob/master/features/accounting/lib/accounting.ts"
click node_receipts "https://github.com/meezaan-dev/accounting-software/blob/master/features/accounting/lib/accounting.ts"
click node_reports "https://github.com/meezaan-dev/accounting-software/blob/master/app/dashboard/%5Bsection%5D/page.tsx"
click node_clientfirebase "https://github.com/meezaan-dev/accounting-software/blob/master/services/firebase/client.ts"
click node_rules "https://github.com/meezaan-dev/accounting-software/blob/master/firestore.rules"
click node_logos "https://github.com/meezaan-dev/accounting-software/blob/master/services/company-logo.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_signin,node_signinform,node_csrf,node_session,node_authservice toneBlue
class node_dashboard,node_accountingui,node_reports toneAmber
class node_data,node_companies,node_contacts,node_jobs,node_documents,node_numbering,node_preview,node_pdf,node_purchases,node_receipts,node_logos toneMint
class node_adminsdk,node_clientfirebase,node_firestore,node_rules toneRose
class node_admin toneIndigo
```

## Components

### Access and sessions

- [Sign-in page](https://github.com/meezaan-dev/accounting-software/blob/master/app/(landing)/page.tsx): `app/(landing)/page.tsx`
- [Email sign-in](https://github.com/meezaan-dev/accounting-software/blob/master/components/auth/EmailPasswordSignInForm.tsx): `components/auth/EmailPasswordSignInForm.tsx`
- [CSRF endpoint](https://github.com/meezaan-dev/accounting-software/blob/master/app/api/auth/csrf/route.ts): `app/api/auth/csrf/route.ts`
- [Session endpoint](https://github.com/meezaan-dev/accounting-software/blob/master/app/api/auth/session/route.ts): `app/api/auth/session/route.ts`
- [Session verification](https://github.com/meezaan-dev/accounting-software/blob/master/services/auth.ts): `services/auth.ts`

### Accounting workspace

- [Dashboard routes](https://github.com/meezaan-dev/accounting-software/blob/master/app/dashboard/%5Bsection%5D/page.tsx): `app/dashboard/[section]/page.tsx`
- [Accounting interface](https://github.com/meezaan-dev/accounting-software/blob/master/features/accounting/components/AccountingApp.tsx): `features/accounting/components/AccountingApp.tsx`
- [Accounting reports](https://github.com/meezaan-dev/accounting-software/blob/master/app/dashboard/%5Bsection%5D/page.tsx): `app/dashboard/[section]/page.tsx`

### Books and documents

- [Accounting data layer](https://github.com/meezaan-dev/accounting-software/blob/master/features/accounting/lib/accounting.ts): `features/accounting/lib/accounting.ts`
- [Company profiles](https://github.com/meezaan-dev/accounting-software/blob/master/features/accounting/lib/accounting.ts): `features/accounting/lib/accounting.ts`
- [Customers and suppliers](https://github.com/meezaan-dev/accounting-software/blob/master/features/accounting/lib/accounting.ts): `features/accounting/lib/accounting.ts`
- [Jobs](https://github.com/meezaan-dev/accounting-software/blob/master/features/accounting/lib/accounting.ts): `features/accounting/lib/accounting.ts`
- [Financial documents](https://github.com/meezaan-dev/accounting-software/blob/master/features/accounting/lib/accounting.ts): `features/accounting/lib/accounting.ts`
- [Sequences and references](https://github.com/meezaan-dev/accounting-software/blob/master/features/accounting/lib/accounting.ts): `features/accounting/lib/accounting.ts`
- [Document preview](https://github.com/meezaan-dev/accounting-software/blob/master/features/accounting/components/DocumentPreview.tsx): `features/accounting/components/DocumentPreview.tsx`
- [PDF export](https://github.com/meezaan-dev/accounting-software/blob/master/features/accounting/lib/export-document.ts): `features/accounting/lib/export-document.ts`
- [Purchases and expenses](https://github.com/meezaan-dev/accounting-software/blob/master/features/accounting/lib/accounting.ts): `features/accounting/lib/accounting.ts`
- [Receipt allocation](https://github.com/meezaan-dev/accounting-software/blob/master/features/accounting/lib/accounting.ts): `features/accounting/lib/accounting.ts`
- [Company logo handling](https://github.com/meezaan-dev/accounting-software/blob/master/services/company-logo.ts): `services/company-logo.ts`

### Firebase services

- [Firebase Admin](https://github.com/meezaan-dev/accounting-software/blob/master/services/firebase/admin.ts): `services/firebase/admin.ts`
- [Firebase client](https://github.com/meezaan-dev/accounting-software/blob/master/services/firebase/client.ts): `services/firebase/client.ts`
- **Cloud Firestore**
- [Firestore rules](https://github.com/meezaan-dev/accounting-software/blob/master/firestore.rules): `firestore.rules`

### Other components

- **Administrator**

## Connections

- Administrator → Sign-in page: opens
- Sign-in page → Session verification: checks session
- Sign-in page → Email sign-in: renders
- Email sign-in → CSRF endpoint: requests token
- Email sign-in → Session endpoint: submits ID token
- Session endpoint → Firebase Admin: verifies token
- Session endpoint → Administrator: sets session cookie
- Dashboard routes → Session verification: verifies session
- Session verification → Firebase Admin: verifies cookie
- Dashboard routes → Accounting interface: renders workspace
- Accounting interface → Accounting data layer: reads and updates
- Accounting data layer → Firebase client: uses client
- Firebase client → Cloud Firestore: reads and writes
- Firestore rules → Cloud Firestore: constrains access
- Accounting data layer → Company profiles: manages
- Accounting data layer → Customers and suppliers: manages
- Accounting data layer → Jobs: manages
- Accounting data layer → Financial documents: manages and converts
- Accounting data layer → Sequences and references: allocates numbers
- Accounting data layer → Purchases and expenses: records
- Accounting data layer → Receipt allocation: allocates payments
- Accounting interface → Document preview: opens preview
- Document preview → PDF export: exports PDF
- Accounting interface → Accounting reports: presents reports
- Accounting interface → Company logo handling: uses logo handling
