# vladadev/expense-activity-tracker architecture

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

- Interactive diagram: https://gitdiagram.com/vladadev/expense-activity-tracker
- Repository: https://github.com/vladadev/expense-activity-tracker

## Overview

Expense & Activity Tracker is a household-oriented personal finance and activity app: users manage shared records in an Expo mobile app backed by an Express/Mongoose API. The principal flow is a user action in a mobile screen, through the API client and matching backend route, to household-scoped data and a response. The tree also shows distinct income, savings, wishlist, calendar/events, statistics, categories, notifications, and audit capabilities. Several route and screen implementations were not sampled, so links between those components are limited to documented mounts and evident product domains.

Main entry points: [`backend/src/app.js`](https://github.com/vladadev/expense-activity-tracker/blob/main/backend/src/app.js) (API dispatch), [`mobile/src/navigation/RootNavigator.js`](https://github.com/vladadev/expense-activity-tracker/blob/main/mobile/src/navigation/RootNavigator.js) (Screen navigation), [`mobile/src/api/client.js`](https://github.com/vladadev/expense-activity-tracker/blob/main/mobile/src/api/client.js) (HTTP and auth client), [`backend/src/routes/expenses.js`](https://github.com/vladadev/expense-activity-tracker/blob/main/backend/src/routes/expenses.js) (Expenses and income)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_mobile["Mobile app"]
  node_app["App providers<br/>[App.js]"]
  node_navigation["Screen navigation<br/>[RootNavigator.js]"]
  node_finance_screens["Finance screens<br/>[FinancesScreen.js]"]
  node_expense_screen["Expense entry"]
  node_income_savings["Income and savings"]
  node_activity_screens["Calendar and events<br/>[AgendaScreen.js]"]
  node_wishlist_screens["Wishlist screens<br/>[WishlistScreen.js]"]
  node_stats_screen["Statistics screens<br/>[StatsScreen.js]"]
  node_household_screen["Household settings<br/>[HouseholdScreen.js]"]
  node_api_client["HTTP and auth client<br/>[client.js]"]
  node_offline_queue["Offline write queue"]
end

subgraph group_api["Backend API"]
  node_server["Server startup<br/>[server.js]"]
  node_express_app["API dispatch<br/>[app.js]"]
  node_auth_routes["Authentication<br/>[auth.js]"]
  node_expense_routes["Expenses and income<br/>[expenses.js]"]
  node_activity_routes["Events and calendar<br/>[events.js]"]
  node_stats_routes["Statistics<br/>[stats.js]"]
  node_wishlist_routes["Wishlist<br/>[wishlist.js]"]
  node_household_routes["Households<br/>[households.js]"]
  node_support_routes["Categories and notices<br/>[categories.js]"]
  node_audit_routes["Activity audit<br/>[auditLog.js]"]
end

subgraph group_data["Domain data"]
  node_user_model[("User records<br/>[User.js]")]
  node_expense_model[("Expense records<br/>[Expense.js]")]
  node_income_model[("Income records<br/>[Income.js]")]
  node_savings_model[("Savings records<br/>[Savings.js]")]
  node_event_model[("Event records<br/>[Event.js]")]
  node_wishlist_model[("Wishlist records<br/>[WishlistItem.js]")]
  node_household_model[("Household records<br/>[Household.js]")]
  node_category_model[("Category records<br/>[Category.js]")]
  node_audit_model[("Audit records<br/>[AuditLog.js]")]
end

node_user(("Household user"))
node_mongo[("MongoDB")]

node_user -->|"uses"| node_navigation
node_app -->|"renders"| node_navigation
node_navigation -->|"navigates"| node_finance_screens
node_navigation -->|"navigates"| node_expense_screen
node_navigation -->|"navigates"| node_income_savings
node_navigation -->|"navigates"| node_activity_screens
node_navigation -->|"navigates"| node_wishlist_screens
node_navigation -->|"navigates"| node_stats_screen
node_navigation -->|"navigates"| node_household_screen
node_finance_screens -->|"requests"| node_api_client
node_expense_screen -->|"submits"| node_api_client
node_income_savings -->|"submits"| node_api_client
node_activity_screens -->|"requests"| node_api_client
node_wishlist_screens -->|"requests"| node_api_client
node_stats_screen -->|"requests"| node_api_client
node_household_screen -->|"requests"| node_api_client
node_api_client -->|"HTTP requests"| node_express_app
node_api_client -->|"queues failed writes"| node_offline_queue
node_offline_queue -->|"retries writes"| node_api_client
node_server -->|"starts"| node_express_app
node_express_app -->|"dispatches"| node_auth_routes
node_express_app -->|"dispatches"| node_expense_routes
node_express_app -->|"dispatches"| node_activity_routes
node_express_app -->|"dispatches"| node_stats_routes
node_express_app -->|"dispatches"| node_wishlist_routes
node_express_app -->|"dispatches"| node_household_routes
node_express_app -->|"dispatches"| node_support_routes
node_express_app -->|"dispatches"| node_audit_routes
node_auth_routes -->|"reads and writes"| node_user_model
node_expense_routes -->|"manages"| node_expense_model
node_expense_routes -->|"manages"| node_income_model
node_expense_routes -.->|"manages"| node_savings_model
node_activity_routes -->|"manages"| node_event_model
node_wishlist_routes -->|"manages"| node_wishlist_model
node_household_routes -->|"manages"| node_household_model
node_support_routes -->|"manages"| node_category_model
node_audit_routes -->|"reads"| node_audit_model
node_user_model -->|"persists"| node_mongo
node_expense_model -->|"persists"| node_mongo
node_income_model -->|"persists"| node_mongo
node_savings_model -->|"persists"| node_mongo
node_event_model -->|"persists"| node_mongo
node_wishlist_model -->|"persists"| node_mongo
node_household_model -->|"persists"| node_mongo
node_category_model -->|"persists"| node_mongo
node_audit_model -->|"persists"| node_mongo

click node_app "https://github.com/vladadev/expense-activity-tracker/blob/main/mobile/App.js"
click node_navigation "https://github.com/vladadev/expense-activity-tracker/blob/main/mobile/src/navigation/RootNavigator.js"
click node_finance_screens "https://github.com/vladadev/expense-activity-tracker/blob/main/mobile/src/screens/FinancesScreen.js"
click node_expense_screen "https://github.com/vladadev/expense-activity-tracker/blob/main/mobile/src/screens/ExpenseFormScreen.js"
click node_income_savings "https://github.com/vladadev/expense-activity-tracker/blob/main/mobile/src/screens/IncomeFormScreen.js"
click node_activity_screens "https://github.com/vladadev/expense-activity-tracker/blob/main/mobile/src/screens/AgendaScreen.js"
click node_wishlist_screens "https://github.com/vladadev/expense-activity-tracker/blob/main/mobile/src/screens/WishlistScreen.js"
click node_stats_screen "https://github.com/vladadev/expense-activity-tracker/blob/main/mobile/src/screens/StatsScreen.js"
click node_household_screen "https://github.com/vladadev/expense-activity-tracker/blob/main/mobile/src/screens/HouseholdScreen.js"
click node_api_client "https://github.com/vladadev/expense-activity-tracker/blob/main/mobile/src/api/client.js"
click node_offline_queue "https://github.com/vladadev/expense-activity-tracker/blob/main/mobile/src/context/OfflineQueueContext.js"
click node_server "https://github.com/vladadev/expense-activity-tracker/blob/main/backend/src/server.js"
click node_express_app "https://github.com/vladadev/expense-activity-tracker/blob/main/backend/src/app.js"
click node_auth_routes "https://github.com/vladadev/expense-activity-tracker/blob/main/backend/src/routes/auth.js"
click node_expense_routes "https://github.com/vladadev/expense-activity-tracker/blob/main/backend/src/routes/expenses.js"
click node_activity_routes "https://github.com/vladadev/expense-activity-tracker/blob/main/backend/src/routes/events.js"
click node_stats_routes "https://github.com/vladadev/expense-activity-tracker/blob/main/backend/src/routes/stats.js"
click node_wishlist_routes "https://github.com/vladadev/expense-activity-tracker/blob/main/backend/src/routes/wishlist.js"
click node_household_routes "https://github.com/vladadev/expense-activity-tracker/blob/main/backend/src/routes/households.js"
click node_support_routes "https://github.com/vladadev/expense-activity-tracker/blob/main/backend/src/routes/categories.js"
click node_audit_routes "https://github.com/vladadev/expense-activity-tracker/blob/main/backend/src/routes/auditLog.js"
click node_user_model "https://github.com/vladadev/expense-activity-tracker/blob/main/backend/src/models/User.js"
click node_expense_model "https://github.com/vladadev/expense-activity-tracker/blob/main/backend/src/models/Expense.js"
click node_income_model "https://github.com/vladadev/expense-activity-tracker/blob/main/backend/src/models/Income.js"
click node_savings_model "https://github.com/vladadev/expense-activity-tracker/blob/main/backend/src/models/Savings.js"
click node_event_model "https://github.com/vladadev/expense-activity-tracker/blob/main/backend/src/models/Event.js"
click node_wishlist_model "https://github.com/vladadev/expense-activity-tracker/blob/main/backend/src/models/WishlistItem.js"
click node_household_model "https://github.com/vladadev/expense-activity-tracker/blob/main/backend/src/models/Household.js"
click node_category_model "https://github.com/vladadev/expense-activity-tracker/blob/main/backend/src/models/Category.js"
click node_audit_model "https://github.com/vladadev/expense-activity-tracker/blob/main/backend/src/models/AuditLog.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_navigation,node_finance_screens,node_expense_screen,node_income_savings,node_activity_screens,node_wishlist_screens,node_stats_screen,node_household_screen,node_api_client,node_offline_queue,node_user toneBlue
class node_server,node_express_app,node_auth_routes,node_expense_routes,node_activity_routes,node_stats_routes,node_wishlist_routes,node_household_routes,node_support_routes,node_audit_routes,node_mongo toneAmber
class node_user_model,node_expense_model,node_income_model,node_savings_model,node_event_model,node_wishlist_model,node_household_model,node_category_model,node_audit_model toneMint
```

## Components

### Mobile app

- [App providers](https://github.com/vladadev/expense-activity-tracker/blob/main/mobile/App.js): `mobile/App.js`
- [Screen navigation](https://github.com/vladadev/expense-activity-tracker/blob/main/mobile/src/navigation/RootNavigator.js): `mobile/src/navigation/RootNavigator.js`
- [Finance screens](https://github.com/vladadev/expense-activity-tracker/blob/main/mobile/src/screens/FinancesScreen.js): `mobile/src/screens/FinancesScreen.js`
- [Expense entry](https://github.com/vladadev/expense-activity-tracker/blob/main/mobile/src/screens/ExpenseFormScreen.js): `mobile/src/screens/ExpenseFormScreen.js`
- [Income and savings](https://github.com/vladadev/expense-activity-tracker/blob/main/mobile/src/screens/IncomeFormScreen.js): `mobile/src/screens/IncomeFormScreen.js`
- [Calendar and events](https://github.com/vladadev/expense-activity-tracker/blob/main/mobile/src/screens/AgendaScreen.js): `mobile/src/screens/AgendaScreen.js`
- [Wishlist screens](https://github.com/vladadev/expense-activity-tracker/blob/main/mobile/src/screens/WishlistScreen.js): `mobile/src/screens/WishlistScreen.js`
- [Statistics screens](https://github.com/vladadev/expense-activity-tracker/blob/main/mobile/src/screens/StatsScreen.js): `mobile/src/screens/StatsScreen.js`
- [Household settings](https://github.com/vladadev/expense-activity-tracker/blob/main/mobile/src/screens/HouseholdScreen.js): `mobile/src/screens/HouseholdScreen.js`
- [HTTP and auth client](https://github.com/vladadev/expense-activity-tracker/blob/main/mobile/src/api/client.js): `mobile/src/api/client.js`
- [Offline write queue](https://github.com/vladadev/expense-activity-tracker/blob/main/mobile/src/context/OfflineQueueContext.js): `mobile/src/context/OfflineQueueContext.js`

### Backend API

- [Server startup](https://github.com/vladadev/expense-activity-tracker/blob/main/backend/src/server.js): `backend/src/server.js`
- [API dispatch](https://github.com/vladadev/expense-activity-tracker/blob/main/backend/src/app.js): `backend/src/app.js`
- [Authentication](https://github.com/vladadev/expense-activity-tracker/blob/main/backend/src/routes/auth.js): `backend/src/routes/auth.js`
- [Expenses and income](https://github.com/vladadev/expense-activity-tracker/blob/main/backend/src/routes/expenses.js): `backend/src/routes/expenses.js`
- [Events and calendar](https://github.com/vladadev/expense-activity-tracker/blob/main/backend/src/routes/events.js): `backend/src/routes/events.js`
- [Statistics](https://github.com/vladadev/expense-activity-tracker/blob/main/backend/src/routes/stats.js): `backend/src/routes/stats.js`
- [Wishlist](https://github.com/vladadev/expense-activity-tracker/blob/main/backend/src/routes/wishlist.js): `backend/src/routes/wishlist.js`
- [Households](https://github.com/vladadev/expense-activity-tracker/blob/main/backend/src/routes/households.js): `backend/src/routes/households.js`
- [Categories and notices](https://github.com/vladadev/expense-activity-tracker/blob/main/backend/src/routes/categories.js): `backend/src/routes/categories.js`
- [Activity audit](https://github.com/vladadev/expense-activity-tracker/blob/main/backend/src/routes/auditLog.js): `backend/src/routes/auditLog.js`

### Domain data

- [User records](https://github.com/vladadev/expense-activity-tracker/blob/main/backend/src/models/User.js): `backend/src/models/User.js`
- [Expense records](https://github.com/vladadev/expense-activity-tracker/blob/main/backend/src/models/Expense.js): `backend/src/models/Expense.js`
- [Income records](https://github.com/vladadev/expense-activity-tracker/blob/main/backend/src/models/Income.js): `backend/src/models/Income.js`
- [Savings records](https://github.com/vladadev/expense-activity-tracker/blob/main/backend/src/models/Savings.js): `backend/src/models/Savings.js`
- [Event records](https://github.com/vladadev/expense-activity-tracker/blob/main/backend/src/models/Event.js): `backend/src/models/Event.js`
- [Wishlist records](https://github.com/vladadev/expense-activity-tracker/blob/main/backend/src/models/WishlistItem.js): `backend/src/models/WishlistItem.js`
- [Household records](https://github.com/vladadev/expense-activity-tracker/blob/main/backend/src/models/Household.js): `backend/src/models/Household.js`
- [Category records](https://github.com/vladadev/expense-activity-tracker/blob/main/backend/src/models/Category.js): `backend/src/models/Category.js`
- [Audit records](https://github.com/vladadev/expense-activity-tracker/blob/main/backend/src/models/AuditLog.js): `backend/src/models/AuditLog.js`

### Other components

- **Household user**
- **MongoDB**

## Connections

- Household user → Screen navigation: uses
- App providers → Screen navigation: renders
- Screen navigation → Finance screens: navigates
- Screen navigation → Expense entry: navigates
- Screen navigation → Income and savings: navigates
- Screen navigation → Calendar and events: navigates
- Screen navigation → Wishlist screens: navigates
- Screen navigation → Statistics screens: navigates
- Screen navigation → Household settings: navigates
- Finance screens → HTTP and auth client: requests
- Expense entry → HTTP and auth client: submits
- Income and savings → HTTP and auth client: submits
- Calendar and events → HTTP and auth client: requests
- Wishlist screens → HTTP and auth client: requests
- Statistics screens → HTTP and auth client: requests
- Household settings → HTTP and auth client: requests
- HTTP and auth client → API dispatch: HTTP requests
- HTTP and auth client → Offline write queue: queues failed writes
- Offline write queue → HTTP and auth client: retries writes
- Server startup → API dispatch: starts
- API dispatch → Authentication: dispatches
- API dispatch → Expenses and income: dispatches
- API dispatch → Events and calendar: dispatches
- API dispatch → Statistics: dispatches
- API dispatch → Wishlist: dispatches
- API dispatch → Households: dispatches
- API dispatch → Categories and notices: dispatches
- API dispatch → Activity audit: dispatches
- Authentication → User records: reads and writes
- Expenses and income → Expense records: manages
- Expenses and income → Income records: manages
- Expenses and income → Savings records: manages
- Events and calendar → Event records: manages
- Wishlist → Wishlist records: manages
- Households → Household records: manages
- Categories and notices → Category records: manages
- Activity audit → Audit records: reads
- User records → MongoDB: persists
- Expense records → MongoDB: persists
- Income records → MongoDB: persists
- Savings records → MongoDB: persists
- Event records → MongoDB: persists
- Wishlist records → MongoDB: persists
- Household records → MongoDB: persists
- Category records → MongoDB: persists
- Audit records → MongoDB: persists
