# butterkookies/finlite architecture

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

- Interactive diagram: https://gitdiagram.com/butterkookies/finlite
- Repository: https://github.com/butterkookies/finlite

## Overview

FinLITE is a role-gated finance and document-generation app for student officers. Its primary workflow is to record financial activity, reconcile the cashbox and advances, then prepare and export institutional proposals or liquidation reports. Authentication and administrator approval control access; a grounded assistant answers questions about ledger context. The tree and excerpts establish the report, chat, and approval handlers, but do not expose transaction APIs or all page wiring, so those internal connections are intentionally limited.

Main entry points: [`lib/supabase/server.js`](https://github.com/butterkookies/finlite/blob/main/lib/supabase/server.js) (Supabase access), [`app/page.jsx`](https://github.com/butterkookies/finlite/blob/main/app/page.jsx) (Finance dashboard), [`app/admin/page.jsx`](https://github.com/butterkookies/finlite/blob/main/app/admin/page.jsx) (Admin console), [`app/login/page.jsx`](https://github.com/butterkookies/finlite/blob/main/app/login/page.jsx) (Login and registration)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_access["Access and governance"]
  node_login["Login and registration<br/>[page.jsx]"]
  node_auth_api["Authentication handlers<br/>[route.js]"]
  node_oauth_callback["Google OAuth callback<br/>[route.js]"]
  node_google_register["Google profile registration<br/>[route.js]"]
  node_register_api["Email registration<br/>[route.js]"]
  node_pending["Pending approval<br/>[page.jsx]"]
  node_admin_page["Admin console<br/>[page.jsx]"]
  node_admin_requests["Request review<br/>[route.js]"]
  node_admin_decisions["Approve or reject<br/>[route.js]"]
  node_admin_users["User roles<br/>[route.js]"]
end

subgraph group_operations["Financial operations"]
  node_dashboard["Finance dashboard<br/>[page.jsx]"]
  node_ledger["Transaction ledger"]
  node_transaction_entry["Transaction entry"]
  node_reconciliation["Cash reconciliation"]
end

subgraph group_documents["Documents and assistance"]
  node_proposal["Business proposals"]
  node_preview["Document preview"]
  node_docx["DOCX generation<br/>[route.js]"]
  node_chat_ui["AI chat interface<br/>[AIChatDrawer.jsx]"]
  node_chat_api["Grounded assistant<br/>[route.js]"]
end

subgraph group_services["Data and integrations"]
  node_supabase_server["Supabase access<br/>[server.js]"]
  node_supabase_auth["Supabase Auth"]
  node_database[("Supabase database")]
  node_gemini["Gemini API"]
end

node_officer(("Officer"))
node_admin(("Administrator"))

node_officer -->|"signs in"| node_login
node_login -->|"submits credentials"| node_auth_api
node_login -->|"registers"| node_register_api
node_auth_api -->|"creates client"| node_supabase_server
node_register_api -->|"creates clients"| node_supabase_server
node_auth_api -->|"authenticates"| node_supabase_auth
node_register_api -->|"provisions user"| node_supabase_auth
node_oauth_callback -->|"creates client"| node_supabase_server
node_oauth_callback -->|"exchanges code"| node_supabase_auth
node_officer -->|"checks status"| node_pending
node_admin -->|"reviews access"| node_admin_page
node_admin_page -->|"loads requests"| node_admin_requests
node_admin_page -->|"submits decision"| node_admin_decisions
node_admin_page -->|"manages roles"| node_admin_users
node_admin_requests -->|"verifies admin"| node_supabase_server
node_admin_decisions -->|"verifies and writes"| node_supabase_server
node_admin_users -->|"verifies and queries"| node_supabase_server
node_supabase_server -->|"queries and updates"| node_database
node_supabase_server -->|"accesses auth"| node_supabase_auth
node_officer -->|"uses finances"| node_dashboard
node_dashboard -->|"views activity"| node_ledger
node_dashboard -->|"records activity"| node_transaction_entry
node_dashboard -->|"reconciles cash"| node_reconciliation
node_dashboard -->|"prepares proposal"| node_proposal
node_proposal -->|"previews document"| node_preview
node_officer -->|"edits preview"| node_preview
node_preview -->|"requests export"| node_docx
node_docx -->|"reads ledger data"| node_database
node_dashboard -->|"opens assistant"| node_chat_ui
node_chat_ui -->|"sends query context"| node_chat_api
node_chat_api -.->|"sends grounded prompt"| node_gemini

click node_login "https://github.com/butterkookies/finlite/blob/main/app/login/page.jsx"
click node_auth_api "https://github.com/butterkookies/finlite/blob/main/app/api/auth/login/route.js"
click node_oauth_callback "https://github.com/butterkookies/finlite/blob/main/app/api/auth/callback/route.js"
click node_google_register "https://github.com/butterkookies/finlite/blob/main/app/api/auth/google-register/route.js"
click node_register_api "https://github.com/butterkookies/finlite/blob/main/app/api/auth/register/route.js"
click node_pending "https://github.com/butterkookies/finlite/blob/main/app/pending-approval/page.jsx"
click node_admin_page "https://github.com/butterkookies/finlite/blob/main/app/admin/page.jsx"
click node_admin_requests "https://github.com/butterkookies/finlite/blob/main/app/api/admin/requests/route.js"
click node_admin_decisions "https://github.com/butterkookies/finlite/blob/main/app/api/admin/approve/route.js"
click node_admin_users "https://github.com/butterkookies/finlite/blob/main/app/api/admin/users/route.js"
click node_dashboard "https://github.com/butterkookies/finlite/blob/main/app/page.jsx"
click node_ledger "https://github.com/butterkookies/finlite/blob/main/components/ledger/TransactionTable.jsx"
click node_transaction_entry "https://github.com/butterkookies/finlite/blob/main/components/ledger/NewTransactionModal.jsx"
click node_reconciliation "https://github.com/butterkookies/finlite/blob/main/components/reconciliation/DenominationCounter.jsx"
click node_proposal "https://github.com/butterkookies/finlite/blob/main/components/proposals/NewProposalModal.jsx"
click node_preview "https://github.com/butterkookies/finlite/blob/main/components/reports/DocumentPreviewModal.jsx"
click node_docx "https://github.com/butterkookies/finlite/blob/main/app/api/reports/docx/route.js"
click node_chat_ui "https://github.com/butterkookies/finlite/blob/main/components/ai/AIChatDrawer.jsx"
click node_chat_api "https://github.com/butterkookies/finlite/blob/main/app/api/chat/route.js"
click node_supabase_server "https://github.com/butterkookies/finlite/blob/main/lib/supabase/server.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_login,node_auth_api,node_oauth_callback,node_google_register,node_register_api,node_pending,node_admin_page,node_admin_requests,node_admin_decisions,node_admin_users toneBlue
class node_dashboard,node_ledger,node_transaction_entry,node_reconciliation toneAmber
class node_proposal,node_preview,node_docx,node_chat_ui,node_chat_api toneMint
class node_supabase_server,node_supabase_auth,node_database,node_gemini toneRose
class node_officer,node_admin toneIndigo
```

## Components

### Access and governance

- [Login and registration](https://github.com/butterkookies/finlite/blob/main/app/login/page.jsx): `app/login/page.jsx`
- [Authentication handlers](https://github.com/butterkookies/finlite/blob/main/app/api/auth/login/route.js): `app/api/auth/login/route.js`
- [Google OAuth callback](https://github.com/butterkookies/finlite/blob/main/app/api/auth/callback/route.js): `app/api/auth/callback/route.js`
- [Google profile registration](https://github.com/butterkookies/finlite/blob/main/app/api/auth/google-register/route.js): `app/api/auth/google-register/route.js`
- [Email registration](https://github.com/butterkookies/finlite/blob/main/app/api/auth/register/route.js): `app/api/auth/register/route.js`
- [Pending approval](https://github.com/butterkookies/finlite/blob/main/app/pending-approval/page.jsx): `app/pending-approval/page.jsx`
- [Admin console](https://github.com/butterkookies/finlite/blob/main/app/admin/page.jsx): `app/admin/page.jsx`
- [Request review](https://github.com/butterkookies/finlite/blob/main/app/api/admin/requests/route.js): `app/api/admin/requests/route.js`
- [Approve or reject](https://github.com/butterkookies/finlite/blob/main/app/api/admin/approve/route.js): `app/api/admin/approve/route.js`
- [User roles](https://github.com/butterkookies/finlite/blob/main/app/api/admin/users/route.js): `app/api/admin/users/route.js`

### Financial operations

- [Finance dashboard](https://github.com/butterkookies/finlite/blob/main/app/page.jsx): `app/page.jsx`
- [Transaction ledger](https://github.com/butterkookies/finlite/blob/main/components/ledger/TransactionTable.jsx): `components/ledger/TransactionTable.jsx`
- [Transaction entry](https://github.com/butterkookies/finlite/blob/main/components/ledger/NewTransactionModal.jsx): `components/ledger/NewTransactionModal.jsx`
- [Cash reconciliation](https://github.com/butterkookies/finlite/blob/main/components/reconciliation/DenominationCounter.jsx): `components/reconciliation/DenominationCounter.jsx`

### Documents and assistance

- [Business proposals](https://github.com/butterkookies/finlite/blob/main/components/proposals/NewProposalModal.jsx): `components/proposals/NewProposalModal.jsx`
- [Document preview](https://github.com/butterkookies/finlite/blob/main/components/reports/DocumentPreviewModal.jsx): `components/reports/DocumentPreviewModal.jsx`
- [DOCX generation](https://github.com/butterkookies/finlite/blob/main/app/api/reports/docx/route.js): `app/api/reports/docx/route.js`
- [AI chat interface](https://github.com/butterkookies/finlite/blob/main/components/ai/AIChatDrawer.jsx): `components/ai/AIChatDrawer.jsx`
- [Grounded assistant](https://github.com/butterkookies/finlite/blob/main/app/api/chat/route.js): `app/api/chat/route.js`

### Data and integrations

- [Supabase access](https://github.com/butterkookies/finlite/blob/main/lib/supabase/server.js): `lib/supabase/server.js`
- **Supabase Auth**
- **Supabase database**
- **Gemini API**

### Other components

- **Officer**
- **Administrator**

## Connections

- Officer → Login and registration: signs in
- Login and registration → Authentication handlers: submits credentials
- Login and registration → Email registration: registers
- Authentication handlers → Supabase access: creates client
- Email registration → Supabase access: creates clients
- Authentication handlers → Supabase Auth: authenticates
- Email registration → Supabase Auth: provisions user
- Google OAuth callback → Supabase access: creates client
- Google OAuth callback → Supabase Auth: exchanges code
- Officer → Pending approval: checks status
- Administrator → Admin console: reviews access
- Admin console → Request review: loads requests
- Admin console → Approve or reject: submits decision
- Admin console → User roles: manages roles
- Request review → Supabase access: verifies admin
- Approve or reject → Supabase access: verifies and writes
- User roles → Supabase access: verifies and queries
- Supabase access → Supabase database: queries and updates
- Supabase access → Supabase Auth: accesses auth
- Officer → Finance dashboard: uses finances
- Finance dashboard → Transaction ledger: views activity
- Finance dashboard → Transaction entry: records activity
- Finance dashboard → Cash reconciliation: reconciles cash
- Finance dashboard → Business proposals: prepares proposal
- Business proposals → Document preview: previews document
- Officer → Document preview: edits preview
- Document preview → DOCX generation: requests export
- DOCX generation → Supabase database: reads ledger data
- Finance dashboard → AI chat interface: opens assistant
- AI chat interface → Grounded assistant: sends query context
- Grounded assistant → Gemini API: sends grounded prompt
