# aritrasphs16-design/bill_splitter_website architecture

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

- Interactive diagram: https://gitdiagram.com/aritrasphs16-design/bill_splitter_website
- Repository: https://github.com/aritrasphs16-design/bill_splitter_website

## Overview

SplitEasy is a shared-expense ledger for travelers and roommates. Users sign up or log in, create or join a group, record expenses and splits, review spending and balances, then settle debts; personal expenses, profile preferences, and UPI details are also managed in the dashboard. The UI invokes server actions for ledger operations, while the documented stack identifies Supabase Auth and MongoDB/Mongoose persistence. The README also describes currency conversion, email nudges, and PDF reports. Some subsystems are represented from documentation and the file tree; their internal wiring was not sampled.

Main entry points: [`src/lib/mongoose.ts`](https://github.com/aritrasphs16-design/bill_splitter_website/blob/main/src/lib/mongoose.ts) (Mongoose connection), [`src/app/dashboard/groups/[id]/page.tsx`](https://github.com/aritrasphs16-design/bill_splitter_website/blob/main/src/app/dashboard/groups/%5Bid%5D/page.tsx) (Group ledger), [`src/app/dashboard/expenses/page.tsx`](https://github.com/aritrasphs16-design/bill_splitter_website/blob/main/src/app/dashboard/expenses/page.tsx) (Personal expenses), [`src/app/dashboard/groups/page.tsx`](https://github.com/aritrasphs16-design/bill_splitter_website/blob/main/src/app/dashboard/groups/page.tsx) (Group directory)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_identity["Identity and entry"]
  node_landing["Landing page<br/>[page.tsx]"]
  node_login["Login<br/>[page.tsx]"]
  node_signup["Signup<br/>[page.tsx]"]
  node_auth["Supabase Auth<br/>[supabase.ts]"]
  node_profile["Profile<br/>[page.tsx]"]
  node_useractions["User actions<br/>[user.ts]"]
  node_supabase["Supabase"]
end

subgraph group_ledger["Expense ledger"]
  node_expenses["Personal expenses<br/>[page.tsx]"]
  node_groups["Group directory<br/>[page.tsx]"]
  node_groupdetail["Group ledger<br/>[page.tsx]"]
  node_expenseactions["Expense actions<br/>[expenses.ts]"]
  node_groupactions["Group actions<br/>[groups.ts]"]
  node_detailactions["Group detail actions<br/>[groupDetails.ts]"]
  node_messageactions["Message actions<br/>[messages.ts]"]
end

subgraph group_settlement["Balances and insights"]
  node_dashboard["Dashboard<br/>[page.tsx]"]
  node_dashboardactions["Dashboard actions<br/>[dashboard.ts]"]
  node_settle["Settlement algorithm"]
end

subgraph group_services["Integrations"]
  node_currency["Currency rates API<br/>[route.ts]"]
  node_rateservice["Exchange-rate service"]
  node_emailroute["Email API<br/>[route.ts]"]
  node_emailservice["Email delivery"]
end

subgraph group_data["Persistence"]
  node_mongo[("MongoDB")]
  node_mongoose["Mongoose connection<br/>[mongoose.ts]"]
  node_models["Ledger models"]
end

node_visitor(("User"))

node_visitor -->|"opens"| node_landing
node_visitor -->|"signs in"| node_login
node_visitor -->|"registers"| node_signup
node_landing -->|"links to"| node_login
node_login -->|"authenticates"| node_auth
node_signup -->|"registers with"| node_auth
node_auth -->|"uses"| node_supabase
node_visitor -->|"opens"| node_dashboard
node_dashboard -->|"loads data"| node_dashboardactions
node_dashboard -->|"calculates balances"| node_settle
node_dashboard -->|"saves UPI"| node_dashboardactions
node_visitor -->|"records expenses"| node_expenses
node_expenses -->|"loads and writes"| node_expenseactions
node_expenses -->|"requests conversion"| node_currency
node_expenses -->|"opens group"| node_groupdetail
node_expenses -->|"exports PDF"| node_visitor
node_visitor -->|"manages groups"| node_groups
node_groups -->|"loads and changes"| node_groupactions
node_groups -->|"opens ledger"| node_groupdetail
node_groups -->|"exports PDF"| node_visitor
node_visitor -->|"records group activity"| node_groupdetail
node_groupdetail -->|"loads and adds"| node_detailactions
node_groupdetail -->|"loads messages"| node_messageactions
node_groupdetail -->|"uses transactions"| node_settle
node_groupdetail -->|"requests conversion"| node_currency
node_visitor -->|"manages profile"| node_profile
node_profile -->|"loads and updates"| node_useractions
node_currency -.->|"fetches rates"| node_rateservice
node_emailroute -.->|"sends email"| node_emailservice
node_expenseactions -->|"uses persistence"| node_mongoose
node_groupactions -->|"uses persistence"| node_mongoose
node_detailactions -->|"uses persistence"| node_mongoose
node_messageactions -->|"uses persistence"| node_mongoose
node_dashboardactions -->|"uses persistence"| node_mongoose
node_useractions -->|"uses persistence"| node_mongoose
node_mongoose -->|"connects to"| node_mongo
node_mongoose -->|"uses models"| node_models

click node_landing "https://github.com/aritrasphs16-design/bill_splitter_website/blob/main/src/app/page.tsx"
click node_login "https://github.com/aritrasphs16-design/bill_splitter_website/blob/main/src/app/login/page.tsx"
click node_signup "https://github.com/aritrasphs16-design/bill_splitter_website/blob/main/src/app/signup/page.tsx"
click node_auth "https://github.com/aritrasphs16-design/bill_splitter_website/blob/main/src/lib/supabase.ts"
click node_dashboard "https://github.com/aritrasphs16-design/bill_splitter_website/blob/main/src/app/dashboard/page.tsx"
click node_expenses "https://github.com/aritrasphs16-design/bill_splitter_website/blob/main/src/app/dashboard/expenses/page.tsx"
click node_groups "https://github.com/aritrasphs16-design/bill_splitter_website/blob/main/src/app/dashboard/groups/page.tsx"
click node_groupdetail "https://github.com/aritrasphs16-design/bill_splitter_website/blob/main/src/app/dashboard/groups/%5Bid%5D/page.tsx"
click node_profile "https://github.com/aritrasphs16-design/bill_splitter_website/blob/main/src/app/dashboard/profile/page.tsx"
click node_expenseactions "https://github.com/aritrasphs16-design/bill_splitter_website/blob/main/src/app/actions/expenses.ts"
click node_groupactions "https://github.com/aritrasphs16-design/bill_splitter_website/blob/main/src/app/actions/groups.ts"
click node_detailactions "https://github.com/aritrasphs16-design/bill_splitter_website/blob/main/src/app/actions/groupDetails.ts"
click node_messageactions "https://github.com/aritrasphs16-design/bill_splitter_website/blob/main/src/app/actions/messages.ts"
click node_dashboardactions "https://github.com/aritrasphs16-design/bill_splitter_website/blob/main/src/app/actions/dashboard.ts"
click node_useractions "https://github.com/aritrasphs16-design/bill_splitter_website/blob/main/src/app/actions/user.ts"
click node_settle "https://github.com/aritrasphs16-design/bill_splitter_website/blob/main/src/lib/settlement-algorithm.ts"
click node_currency "https://github.com/aritrasphs16-design/bill_splitter_website/blob/main/src/app/api/currency/route.ts"
click node_emailroute "https://github.com/aritrasphs16-design/bill_splitter_website/blob/main/src/app/api/send-email/route.ts"
click node_mongoose "https://github.com/aritrasphs16-design/bill_splitter_website/blob/main/src/lib/mongoose.ts"
click node_models "https://github.com/aritrasphs16-design/bill_splitter_website/tree/main/src/models"

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_landing,node_login,node_signup,node_auth,node_profile,node_useractions,node_supabase,node_visitor toneBlue
class node_expenses,node_groups,node_groupdetail,node_expenseactions,node_groupactions,node_detailactions,node_messageactions toneAmber
class node_dashboard,node_dashboardactions,node_settle toneMint
class node_currency,node_rateservice,node_emailroute,node_emailservice toneRose
class node_mongo,node_mongoose,node_models toneIndigo
```

## Components

### Identity and entry

- [Landing page](https://github.com/aritrasphs16-design/bill_splitter_website/blob/main/src/app/page.tsx): `src/app/page.tsx`
- [Login](https://github.com/aritrasphs16-design/bill_splitter_website/blob/main/src/app/login/page.tsx): `src/app/login/page.tsx`
- [Signup](https://github.com/aritrasphs16-design/bill_splitter_website/blob/main/src/app/signup/page.tsx): `src/app/signup/page.tsx`
- [Supabase Auth](https://github.com/aritrasphs16-design/bill_splitter_website/blob/main/src/lib/supabase.ts): `src/lib/supabase.ts`
- [Profile](https://github.com/aritrasphs16-design/bill_splitter_website/blob/main/src/app/dashboard/profile/page.tsx): `src/app/dashboard/profile/page.tsx`
- [User actions](https://github.com/aritrasphs16-design/bill_splitter_website/blob/main/src/app/actions/user.ts): `src/app/actions/user.ts`
- **Supabase**

### Expense ledger

- [Personal expenses](https://github.com/aritrasphs16-design/bill_splitter_website/blob/main/src/app/dashboard/expenses/page.tsx): `src/app/dashboard/expenses/page.tsx`
- [Group directory](https://github.com/aritrasphs16-design/bill_splitter_website/blob/main/src/app/dashboard/groups/page.tsx): `src/app/dashboard/groups/page.tsx`
- [Group ledger](https://github.com/aritrasphs16-design/bill_splitter_website/blob/main/src/app/dashboard/groups/%5Bid%5D/page.tsx): `src/app/dashboard/groups/[id]/page.tsx`
- [Expense actions](https://github.com/aritrasphs16-design/bill_splitter_website/blob/main/src/app/actions/expenses.ts): `src/app/actions/expenses.ts`
- [Group actions](https://github.com/aritrasphs16-design/bill_splitter_website/blob/main/src/app/actions/groups.ts): `src/app/actions/groups.ts`
- [Group detail actions](https://github.com/aritrasphs16-design/bill_splitter_website/blob/main/src/app/actions/groupDetails.ts): `src/app/actions/groupDetails.ts`
- [Message actions](https://github.com/aritrasphs16-design/bill_splitter_website/blob/main/src/app/actions/messages.ts): `src/app/actions/messages.ts`

### Balances and insights

- [Dashboard](https://github.com/aritrasphs16-design/bill_splitter_website/blob/main/src/app/dashboard/page.tsx): `src/app/dashboard/page.tsx`
- [Dashboard actions](https://github.com/aritrasphs16-design/bill_splitter_website/blob/main/src/app/actions/dashboard.ts): `src/app/actions/dashboard.ts`
- [Settlement algorithm](https://github.com/aritrasphs16-design/bill_splitter_website/blob/main/src/lib/settlement-algorithm.ts): `src/lib/settlement-algorithm.ts`

### Integrations

- [Currency rates API](https://github.com/aritrasphs16-design/bill_splitter_website/blob/main/src/app/api/currency/route.ts): `src/app/api/currency/route.ts`
- **Exchange-rate service**
- [Email API](https://github.com/aritrasphs16-design/bill_splitter_website/blob/main/src/app/api/send-email/route.ts): `src/app/api/send-email/route.ts`
- **Email delivery**

### Persistence

- **MongoDB**
- [Mongoose connection](https://github.com/aritrasphs16-design/bill_splitter_website/blob/main/src/lib/mongoose.ts): `src/lib/mongoose.ts`
- [Ledger models](https://github.com/aritrasphs16-design/bill_splitter_website/tree/main/src/models): `src/models`

### Other components

- **User**

## Connections

- User → Landing page: opens
- User → Login: signs in
- User → Signup: registers
- Landing page → Login: links to
- Login → Supabase Auth: authenticates
- Signup → Supabase Auth: registers with
- Supabase Auth → Supabase: uses
- User → Dashboard: opens
- Dashboard → Dashboard actions: loads data
- Dashboard → Settlement algorithm: calculates balances
- Dashboard → Dashboard actions: saves UPI
- User → Personal expenses: records expenses
- Personal expenses → Expense actions: loads and writes
- Personal expenses → Currency rates API: requests conversion
- Personal expenses → Group ledger: opens group
- Personal expenses → User: exports PDF
- User → Group directory: manages groups
- Group directory → Group actions: loads and changes
- Group directory → Group ledger: opens ledger
- Group directory → User: exports PDF
- User → Group ledger: records group activity
- Group ledger → Group detail actions: loads and adds
- Group ledger → Message actions: loads messages
- Group ledger → Settlement algorithm: uses transactions
- Group ledger → Currency rates API: requests conversion
- User → Profile: manages profile
- Profile → User actions: loads and updates
- Currency rates API → Exchange-rate service: fetches rates
- Email API → Email delivery: sends email
- Expense actions → Mongoose connection: uses persistence
- Group actions → Mongoose connection: uses persistence
- Group detail actions → Mongoose connection: uses persistence
- Message actions → Mongoose connection: uses persistence
- Dashboard actions → Mongoose connection: uses persistence
- User actions → Mongoose connection: uses persistence
- Mongoose connection → MongoDB: connects to
- Mongoose connection → Ledger models: uses models
