# developer-akbar/finance-manager-mobile-app-v2 architecture

> Architecture diagram of the GitHub repository developer-akbar/finance-manager-mobile-app-v2, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/developer-akbar/finance-manager-mobile-app-v2
- Repository: https://github.com/developer-akbar/finance-manager-mobile-app-v2

## Overview

FinMan is a local-first personal-finance app. The main workflow is entering or importing financial activity, persisting it on-device, and viewing account, category, dashboard, and analytics summaries. It also covers budgets, investment and stock tracking, and shared-expense settlement. The README describes no cloud sync, while the tree and sampled settings/sync code show an optional Google Drive synchronization feature; source excerpts do not establish all of its wiring. The graph preserves documented capabilities, but omits uncertain links for unsampled feature implementations.

Main entry points: [`src/App.jsx`](https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/App.jsx) (App bootstrap and navigation), [`src/database/index.js`](https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/database/index.js) (Local database), [`src/components/Transactions/Transactions.jsx`](https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/components/Transactions/Transactions.jsx) (Transactions), [`src/hooks/usePortfolio.js`](https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/hooks/usePortfolio.js) (Portfolio orchestration)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["App shell"]
  node_app["App bootstrap and navigation<br/>[App.jsx]"]
  node_context["App state<br/>[AppContext.jsx]"]
  node_lock["PIN lock<br/>[PinLock.jsx]"]
end

subgraph group_finance["Core finance"]
  node_txns["Transactions<br/>[Transactions.jsx]"]
  node_transaction_entry["Transaction entry<br/>[AddTransaction.jsx]"]
  node_accounts["Accounts<br/>[Accounts.jsx]"]
  node_categories["Categories<br/>[Categories.jsx]"]
  node_budgets["Budgets<br/>[budgets.js]"]
  node_recurring["Recurring activity<br/>[recurring.js]"]
  node_groups["Shared expenses"]
  node_debt["Settlement calculation<br/>[debtSimplifier.js]"]
end

subgraph group_insights["Insights"]
  node_dashboard["Dashboard<br/>[Dashboard.jsx]"]
  node_analytics["Analytics<br/>[Analytics.jsx]"]
  node_reports["Reports"]
end

subgraph group_investments["Investments"]
  node_portfolio_ui["Portfolio views"]
  node_portfolio_hook["Portfolio orchestration<br/>[usePortfolio.js]"]
  node_portfolio_positions["Fund positions"]
  node_stock["Stock inventory<br/>[StockManager.jsx]"]
  node_valuation["Market valuation"]
end

subgraph group_integrations["Import and sync"]
  node_import_ui["Transaction import"]
  node_parsers["Import parsers<br/>[xlsParser.js]"]
  node_cloud_ui["Cloud sync controls"]
  node_sync_engine["Sync and merge<br/>[cloudSyncEngine.js]"]
  node_crypto["Encrypted backup<br/>[cryptoBackup.js]"]
  node_drive["Google Drive transport<br/>[googleDriveSync.js]"]
  node_google["Google sign-in<br/>[googleAuth.js]"]
end

subgraph group_core["Local storage"]
  node_storage[("Local database<br/>[index.js]")]
end

node_user(("Finance user"))
node_drive_service(("Google Drive"))

node_user -->|"opens and navigates"| node_app
node_app -->|"initializes"| node_storage
node_app -->|"provides state"| node_context
node_app -->|"wraps views"| node_lock
node_app -->|"renders"| node_dashboard
node_app -->|"renders"| node_txns
node_app -->|"renders"| node_accounts
node_app -->|"renders"| node_categories
node_context -->|"supplies app state"| node_txns
node_txns -->|"opens entry"| node_transaction_entry
node_txns -->|"persists activity"| node_storage
node_accounts -->|"reads accounts"| node_storage
node_categories -->|"reads categories"| node_storage
node_budgets -->|"stores budgets"| node_storage
node_recurring -->|"stores schedules"| node_storage
node_groups -->|"computes balances"| node_debt
node_dashboard -->|"uses app state"| node_context
node_analytics -->|"uses app state"| node_context
node_reports -.->|"exports finance data"| node_storage
node_portfolio_ui -.->|"shows portfolio"| node_portfolio_hook
node_portfolio_hook -->|"derives fund positions"| node_portfolio_positions
node_portfolio_hook -->|"fetches valuations"| node_valuation
node_portfolio_hook -.->|"uses transaction data"| node_storage
node_stock -->|"reads and updates inventory"| node_storage
node_txns -.->|"opens import"| node_import_ui
node_import_ui -.->|"parses files"| node_parsers
node_cloud_ui -->|"authenticates"| node_google
node_cloud_ui -->|"previews and syncs"| node_sync_engine
node_sync_engine -->|"encrypts and decrypts"| node_crypto
node_sync_engine -->|"reads and uploads snapshots"| node_drive
node_drive -.->|"transfers backups"| node_drive_service

click node_app "https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/App.jsx"
click node_context "https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/contexts/AppContext.jsx"
click node_lock "https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/components/Common/PinLock.jsx"
click node_txns "https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/components/Transactions/Transactions.jsx"
click node_transaction_entry "https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/components/Transactions/AddTransaction.jsx"
click node_accounts "https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/components/Accounts/Accounts.jsx"
click node_categories "https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/components/Categories/Categories.jsx"
click node_budgets "https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/database/budgets.js"
click node_recurring "https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/database/recurring.js"
click node_groups "https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/components/Groups/GroupSplitManager.jsx"
click node_debt "https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/utils/debtSimplifier.js"
click node_dashboard "https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/components/Dashboard/Dashboard.jsx"
click node_analytics "https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/components/Analytics/Analytics.jsx"
click node_reports "https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/components/Reports/ReportGenerator.jsx"
click node_portfolio_ui "https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/components/Accounts/InvestmentsPortfolio.jsx"
click node_portfolio_hook "https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/hooks/usePortfolio.js"
click node_portfolio_positions "https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/utils/mutualFundPositionEngine.js"
click node_stock "https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/components/Accounts/StockManager.jsx"
click node_valuation "https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/utils/valuationProvider.js"
click node_storage "https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/database/index.js"
click node_import_ui "https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/components/Transactions/TransactionSyncModal.jsx"
click node_parsers "https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/utils/xlsParser.js"
click node_cloud_ui "https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/components/Settings/CloudSyncManager.jsx"
click node_sync_engine "https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/services/cloudSyncEngine.js"
click node_crypto "https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/utils/cryptoBackup.js"
click node_drive "https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/services/googleDriveSync.js"
click node_google "https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/services/googleAuth.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_app,node_context,node_lock,node_user toneBlue
class node_txns,node_transaction_entry,node_accounts,node_categories,node_budgets,node_recurring,node_groups,node_debt toneAmber
class node_dashboard,node_analytics,node_reports toneMint
class node_portfolio_ui,node_portfolio_hook,node_portfolio_positions,node_stock,node_valuation toneRose
class node_import_ui,node_parsers,node_cloud_ui,node_sync_engine,node_crypto,node_drive,node_google,node_drive_service toneIndigo
class node_storage toneTeal
```

## Components

### App shell

- [App bootstrap and navigation](https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/App.jsx): `src/App.jsx`
- [App state](https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/contexts/AppContext.jsx): `src/contexts/AppContext.jsx`
- [PIN lock](https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/components/Common/PinLock.jsx): `src/components/Common/PinLock.jsx`

### Core finance

- [Transactions](https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/components/Transactions/Transactions.jsx): `src/components/Transactions/Transactions.jsx`
- [Transaction entry](https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/components/Transactions/AddTransaction.jsx): `src/components/Transactions/AddTransaction.jsx`
- [Accounts](https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/components/Accounts/Accounts.jsx): `src/components/Accounts/Accounts.jsx`
- [Categories](https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/components/Categories/Categories.jsx): `src/components/Categories/Categories.jsx`
- [Budgets](https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/database/budgets.js): `src/database/budgets.js`
- [Recurring activity](https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/database/recurring.js): `src/database/recurring.js`
- [Shared expenses](https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/components/Groups/GroupSplitManager.jsx): `src/components/Groups/GroupSplitManager.jsx`
- [Settlement calculation](https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/utils/debtSimplifier.js): `src/utils/debtSimplifier.js`

### Insights

- [Dashboard](https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/components/Dashboard/Dashboard.jsx): `src/components/Dashboard/Dashboard.jsx`
- [Analytics](https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/components/Analytics/Analytics.jsx): `src/components/Analytics/Analytics.jsx`
- [Reports](https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/components/Reports/ReportGenerator.jsx): `src/components/Reports/ReportGenerator.jsx`

### Investments

- [Portfolio views](https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/components/Accounts/InvestmentsPortfolio.jsx): `src/components/Accounts/InvestmentsPortfolio.jsx`
- [Portfolio orchestration](https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/hooks/usePortfolio.js): `src/hooks/usePortfolio.js`
- [Fund positions](https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/utils/mutualFundPositionEngine.js): `src/utils/mutualFundPositionEngine.js`
- [Stock inventory](https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/components/Accounts/StockManager.jsx): `src/components/Accounts/StockManager.jsx`
- [Market valuation](https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/utils/valuationProvider.js): `src/utils/valuationProvider.js`

### Import and sync

- [Transaction import](https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/components/Transactions/TransactionSyncModal.jsx): `src/components/Transactions/TransactionSyncModal.jsx`
- [Import parsers](https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/utils/xlsParser.js): `src/utils/xlsParser.js`
- [Cloud sync controls](https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/components/Settings/CloudSyncManager.jsx): `src/components/Settings/CloudSyncManager.jsx`
- [Sync and merge](https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/services/cloudSyncEngine.js): `src/services/cloudSyncEngine.js`
- [Encrypted backup](https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/utils/cryptoBackup.js): `src/utils/cryptoBackup.js`
- [Google Drive transport](https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/services/googleDriveSync.js): `src/services/googleDriveSync.js`
- [Google sign-in](https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/services/googleAuth.js): `src/services/googleAuth.js`

### Local storage

- [Local database](https://github.com/developer-akbar/finance-manager-mobile-app-v2/blob/main/src/database/index.js): `src/database/index.js`

### Other components

- **Finance user**
- **Google Drive**

## Connections

- Finance user → App bootstrap and navigation: opens and navigates
- App bootstrap and navigation → Local database: initializes
- App bootstrap and navigation → App state: provides state
- App bootstrap and navigation → PIN lock: wraps views
- App bootstrap and navigation → Dashboard: renders
- App bootstrap and navigation → Transactions: renders
- App bootstrap and navigation → Accounts: renders
- App bootstrap and navigation → Categories: renders
- App state → Transactions: supplies app state
- Transactions → Transaction entry: opens entry
- Transactions → Local database: persists activity
- Accounts → Local database: reads accounts
- Categories → Local database: reads categories
- Budgets → Local database: stores budgets
- Recurring activity → Local database: stores schedules
- Shared expenses → Settlement calculation: computes balances
- Dashboard → App state: uses app state
- Analytics → App state: uses app state
- Reports → Local database: exports finance data
- Portfolio views → Portfolio orchestration: shows portfolio
- Portfolio orchestration → Fund positions: derives fund positions
- Portfolio orchestration → Market valuation: fetches valuations
- Portfolio orchestration → Local database: uses transaction data
- Stock inventory → Local database: reads and updates inventory
- Transactions → Transaction import: opens import
- Transaction import → Import parsers: parses files
- Cloud sync controls → Google sign-in: authenticates
- Cloud sync controls → Sync and merge: previews and syncs
- Sync and merge → Encrypted backup: encrypts and decrypts
- Sync and merge → Google Drive transport: reads and uploads snapshots
- Google Drive transport → Google Drive: transfers backups
