# lasitharanathunga/safedeal-escrow-platform- architecture

> Architecture diagram of the GitHub repository lasitharanathunga/safedeal-escrow-platform-, 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/lasitharanathunga/safedeal-escrow-platform-
- Repository: https://github.com/lasitharanathunga/safedeal-escrow-platform-

## Overview

SafeDeal is a web escrow platform for freelance contracts. The main user journey is to create or open a contract, coordinate milestone work and file previews, then complete payments as work is approved; the interface also supports account access and contract discussions. The client router connects pages to contract and payment loaders, while the Express app dispatches authentication, contract, file, and payment routes. README capabilities and directory names support the broader workflow, but unsampled handlers do not establish all client-to-server calls or payment-provider details.

Main entry points: [`client/src/App.tsx`](https://github.com/lasitharanathunga/safedeal-escrow-platform-/blob/main/client/src/App.tsx) (App router), [`server/index.ts`](https://github.com/lasitharanathunga/safedeal-escrow-platform-/blob/main/server/index.ts) (Express API), [`server/services/authServices.ts`](https://github.com/lasitharanathunga/safedeal-escrow-platform-/blob/main/server/services/authServices.ts) (Authentication service), [`server/db/db.ts`](https://github.com/lasitharanathunga/safedeal-escrow-platform-/blob/main/server/db/db.ts) (Application database)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Client experience"]
  node_router["App router<br/>[App.tsx]"]
  node_landing["Landing and access<br/>[LandingPage.tsx]"]
  node_dashboard["Dashboard<br/>[Dashboard.tsx]"]
  node_payment_complete["Payment completion"]
  node_contract_loader["Contract loaders<br/>[contractLoaders.ts]"]
  node_payment_loader["Payment loader<br/>[paymentLoaders.ts]"]
  node_api_client["API request layer<br/>[fetchWrapper.ts]"]
end

subgraph group_work["Contract workflow"]
  node_contracts_ui["Contract views<br/>[Contract.tsx]"]
  node_contract_list["Contract list<br/>[ContractsList.tsx]"]
  node_contract_create["Contract creation"]
  node_milestones["Milestones and comments"]
  node_files_ui["File exchange<br/>[FileUpload.tsx]"]
  node_payment_ui["Payment flow<br/>[Payment.tsx]"]
end

subgraph group_server["Server API"]
  node_express["Express API<br/>[index.ts]"]
  node_contract_routes["Contract routes<br/>[contractRouts.ts]"]
  node_file_routes["File handling<br/>[fileHandler.ts]"]
  node_payment_routes["Payment routes<br/>[payment.ts]"]
end

subgraph group_identity["Identity and data"]
  node_auth_routes["Authentication routes<br/>[authRouts.ts]"]
  node_auth_service["Authentication service<br/>[authServices.ts]"]
  node_user_repo["User repository<br/>[userRepository.ts]"]
  node_token_repo["Refresh-token repository"]
  node_database[("Application database<br/>[db.ts]")]
end

node_person(("Client or freelancer"))

node_person -->|"uses"| node_router
node_router -->|"routes to"| node_landing
node_router -->|"routes to"| node_dashboard
node_router -->|"routes to"| node_contract_list
node_router -->|"routes to"| node_contracts_ui
node_router -->|"routes to"| node_payment_complete
node_router -->|"loads contracts"| node_contract_loader
node_router -->|"finishes payment"| node_payment_loader
node_contract_loader -->|"requests data"| node_api_client
node_payment_loader -->|"requests data"| node_api_client
node_person -->|"creates contracts"| node_contract_create
node_person -->|"tracks progress"| node_milestones
node_person -->|"exchanges files"| node_files_ui
node_person -->|"pays milestones"| node_payment_ui
node_express -->|"dispatches"| node_auth_routes
node_express -->|"dispatches"| node_contract_routes
node_express -->|"dispatches"| node_file_routes
node_express -->|"dispatches"| node_payment_routes
node_auth_routes -->|"uses"| node_auth_service
node_auth_service -->|"reads and writes"| node_user_repo
node_auth_service -->|"reads and writes"| node_token_repo
node_user_repo -->|"queries"| node_database
node_token_repo -->|"queries"| node_database
node_file_routes -->|"updates milestones"| node_database

click node_router "https://github.com/lasitharanathunga/safedeal-escrow-platform-/blob/main/client/src/App.tsx"
click node_landing "https://github.com/lasitharanathunga/safedeal-escrow-platform-/blob/main/client/src/containers/HomePage/LandingPage.tsx"
click node_dashboard "https://github.com/lasitharanathunga/safedeal-escrow-platform-/blob/main/client/src/pages/Dashboard.tsx"
click node_contracts_ui "https://github.com/lasitharanathunga/safedeal-escrow-platform-/blob/main/client/src/containers/Dashbord/Contract/Contract.tsx"
click node_contract_list "https://github.com/lasitharanathunga/safedeal-escrow-platform-/blob/main/client/src/containers/Dashbord/ContractsList/ContractsList.tsx"
click node_contract_create "https://github.com/lasitharanathunga/safedeal-escrow-platform-/blob/main/client/src/containers/Dashbord/CreateContractDialog.tsx"
click node_milestones "https://github.com/lasitharanathunga/safedeal-escrow-platform-/blob/main/client/src/containers/Dashbord/Contract/ContractTimeline/ContractTimeline.tsx"
click node_files_ui "https://github.com/lasitharanathunga/safedeal-escrow-platform-/blob/main/client/src/containers/Dashbord/Contract/FileHandlingComponents/FileUpload.tsx"
click node_payment_ui "https://github.com/lasitharanathunga/safedeal-escrow-platform-/blob/main/client/src/containers/Dashbord/Contract/PaymentComponents/Payment.tsx"
click node_payment_complete "https://github.com/lasitharanathunga/safedeal-escrow-platform-/blob/main/client/src/pages/PaymentComplete.tsx"
click node_contract_loader "https://github.com/lasitharanathunga/safedeal-escrow-platform-/blob/main/client/src/dataLoaders/contractLoaders.ts"
click node_payment_loader "https://github.com/lasitharanathunga/safedeal-escrow-platform-/blob/main/client/src/dataLoaders/paymentLoaders.ts"
click node_api_client "https://github.com/lasitharanathunga/safedeal-escrow-platform-/blob/main/client/src/fetch/fetchWrapper.ts"
click node_express "https://github.com/lasitharanathunga/safedeal-escrow-platform-/blob/main/server/index.ts"
click node_auth_routes "https://github.com/lasitharanathunga/safedeal-escrow-platform-/blob/main/server/auth/authRouts.ts"
click node_contract_routes "https://github.com/lasitharanathunga/safedeal-escrow-platform-/blob/main/server/contract/contractRouts.ts"
click node_file_routes "https://github.com/lasitharanathunga/safedeal-escrow-platform-/blob/main/server/handleFiles/fileHandler.ts"
click node_payment_routes "https://github.com/lasitharanathunga/safedeal-escrow-platform-/blob/main/server/payment/payment.ts"
click node_auth_service "https://github.com/lasitharanathunga/safedeal-escrow-platform-/blob/main/server/services/authServices.ts"
click node_user_repo "https://github.com/lasitharanathunga/safedeal-escrow-platform-/blob/main/server/repositories/userRepository.ts"
click node_token_repo "https://github.com/lasitharanathunga/safedeal-escrow-platform-/blob/main/server/repositories/refreshTokenRepository.ts"
click node_database "https://github.com/lasitharanathunga/safedeal-escrow-platform-/blob/main/server/db/db.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_router,node_landing,node_dashboard,node_payment_complete,node_contract_loader,node_payment_loader,node_api_client,node_person toneBlue
class node_contracts_ui,node_contract_list,node_contract_create,node_milestones,node_files_ui,node_payment_ui toneAmber
class node_express,node_contract_routes,node_file_routes,node_payment_routes toneMint
class node_auth_routes,node_auth_service,node_user_repo,node_token_repo,node_database toneRose
```

## Components

### Client experience

- [App router](https://github.com/lasitharanathunga/safedeal-escrow-platform-/blob/main/client/src/App.tsx): `client/src/App.tsx`
- [Landing and access](https://github.com/lasitharanathunga/safedeal-escrow-platform-/blob/main/client/src/containers/HomePage/LandingPage.tsx): `client/src/containers/HomePage/LandingPage.tsx`
- [Dashboard](https://github.com/lasitharanathunga/safedeal-escrow-platform-/blob/main/client/src/pages/Dashboard.tsx): `client/src/pages/Dashboard.tsx`
- [Payment completion](https://github.com/lasitharanathunga/safedeal-escrow-platform-/blob/main/client/src/pages/PaymentComplete.tsx): `client/src/pages/PaymentComplete.tsx`
- [Contract loaders](https://github.com/lasitharanathunga/safedeal-escrow-platform-/blob/main/client/src/dataLoaders/contractLoaders.ts): `client/src/dataLoaders/contractLoaders.ts`
- [Payment loader](https://github.com/lasitharanathunga/safedeal-escrow-platform-/blob/main/client/src/dataLoaders/paymentLoaders.ts): `client/src/dataLoaders/paymentLoaders.ts`
- [API request layer](https://github.com/lasitharanathunga/safedeal-escrow-platform-/blob/main/client/src/fetch/fetchWrapper.ts): `client/src/fetch/fetchWrapper.ts`

### Contract workflow

- [Contract views](https://github.com/lasitharanathunga/safedeal-escrow-platform-/blob/main/client/src/containers/Dashbord/Contract/Contract.tsx): `client/src/containers/Dashbord/Contract/Contract.tsx`
- [Contract list](https://github.com/lasitharanathunga/safedeal-escrow-platform-/blob/main/client/src/containers/Dashbord/ContractsList/ContractsList.tsx): `client/src/containers/Dashbord/ContractsList/ContractsList.tsx`
- [Contract creation](https://github.com/lasitharanathunga/safedeal-escrow-platform-/blob/main/client/src/containers/Dashbord/CreateContractDialog.tsx): `client/src/containers/Dashbord/CreateContractDialog.tsx`
- [Milestones and comments](https://github.com/lasitharanathunga/safedeal-escrow-platform-/blob/main/client/src/containers/Dashbord/Contract/ContractTimeline/ContractTimeline.tsx): `client/src/containers/Dashbord/Contract/ContractTimeline/ContractTimeline.tsx`
- [File exchange](https://github.com/lasitharanathunga/safedeal-escrow-platform-/blob/main/client/src/containers/Dashbord/Contract/FileHandlingComponents/FileUpload.tsx): `client/src/containers/Dashbord/Contract/FileHandlingComponents/FileUpload.tsx`
- [Payment flow](https://github.com/lasitharanathunga/safedeal-escrow-platform-/blob/main/client/src/containers/Dashbord/Contract/PaymentComponents/Payment.tsx): `client/src/containers/Dashbord/Contract/PaymentComponents/Payment.tsx`

### Server API

- [Express API](https://github.com/lasitharanathunga/safedeal-escrow-platform-/blob/main/server/index.ts): `server/index.ts`
- [Contract routes](https://github.com/lasitharanathunga/safedeal-escrow-platform-/blob/main/server/contract/contractRouts.ts): `server/contract/contractRouts.ts`
- [File handling](https://github.com/lasitharanathunga/safedeal-escrow-platform-/blob/main/server/handleFiles/fileHandler.ts): `server/handleFiles/fileHandler.ts`
- [Payment routes](https://github.com/lasitharanathunga/safedeal-escrow-platform-/blob/main/server/payment/payment.ts): `server/payment/payment.ts`

### Identity and data

- [Authentication routes](https://github.com/lasitharanathunga/safedeal-escrow-platform-/blob/main/server/auth/authRouts.ts): `server/auth/authRouts.ts`
- [Authentication service](https://github.com/lasitharanathunga/safedeal-escrow-platform-/blob/main/server/services/authServices.ts): `server/services/authServices.ts`
- [User repository](https://github.com/lasitharanathunga/safedeal-escrow-platform-/blob/main/server/repositories/userRepository.ts): `server/repositories/userRepository.ts`
- [Refresh-token repository](https://github.com/lasitharanathunga/safedeal-escrow-platform-/blob/main/server/repositories/refreshTokenRepository.ts): `server/repositories/refreshTokenRepository.ts`
- [Application database](https://github.com/lasitharanathunga/safedeal-escrow-platform-/blob/main/server/db/db.ts): `server/db/db.ts`

### Other components

- **Client or freelancer**

## Connections

- Client or freelancer → App router: uses
- App router → Landing and access: routes to
- App router → Dashboard: routes to
- App router → Contract list: routes to
- App router → Contract views: routes to
- App router → Payment completion: routes to
- App router → Contract loaders: loads contracts
- App router → Payment loader: finishes payment
- Contract loaders → API request layer: requests data
- Payment loader → API request layer: requests data
- Client or freelancer → Contract creation: creates contracts
- Client or freelancer → Milestones and comments: tracks progress
- Client or freelancer → File exchange: exchanges files
- Client or freelancer → Payment flow: pays milestones
- Express API → Authentication routes: dispatches
- Express API → Contract routes: dispatches
- Express API → File handling: dispatches
- Express API → Payment routes: dispatches
- Authentication routes → Authentication service: uses
- Authentication service → User repository: reads and writes
- Authentication service → Refresh-token repository: reads and writes
- User repository → Application database: queries
- Refresh-token repository → Application database: queries
- File handling → Application database: updates milestones
