# rahulmelavanki08/worklog architecture

> Architecture diagram of the GitHub repository rahulmelavanki08/worklog, 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/rahulmelavanki08/worklog
- Repository: https://github.com/rahulmelavanki08/worklog

## Overview

WorkLog is a worker-first employment and labor-oversight platform. Workers discover nearby jobs or join a site, record photo-and-GPS attendance, track wages, and raise disputes; contractors manage sites and jobs, confirm attendance, and log payments; admins review disputes, safety reports, and worker-contractor links. The graph follows the documented role-based workflows and sampled route/controller calls. The Prisma schema is not present in the supplied tree, so database relationships are shown at the product level; unsampled module wiring is omitted.

Main entry points: [`backend/src/controllers/workerController.js`](https://github.com/rahulmelavanki08/worklog/blob/main/backend/src/controllers/workerController.js) (Worker controller), [`backend/src/server.js`](https://github.com/rahulmelavanki08/worklog/blob/main/backend/src/server.js) (Express server), [`backend/src/controllers/contractorController.js`](https://github.com/rahulmelavanki08/worklog/blob/main/backend/src/controllers/contractorController.js) (Contractor controller), [`frontend/src/App.jsx`](https://github.com/rahulmelavanki08/worklog/blob/main/frontend/src/App.jsx) (Role-based app)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Web client"]
  node_app["Role-based app<br/>[App.jsx]"]
  node_auth["Auth context<br/>[AuthContext.jsx]"]
  node_workerui["Worker pages"]
  node_contractorui["Contractor pages"]
  node_adminui["Admin pages"]
  node_api_client["API client<br/>[api.js]"]
end

subgraph group_api["API and identity"]
  node_server["Express server<br/>[server.js]"]
  node_auth_routes["Auth routes<br/>[authRoutes.js]"]
  node_auth_controller["Auth controller<br/>[authController.js]"]
  node_worker_routes["Worker routes<br/>[workerRoutes.js]"]
  node_contractor_routes["Contractor routes"]
  node_admin_routes["Admin routes<br/>[adminRoutes.js]"]
end

subgraph group_work["Work and pay"]
  node_worker_controller["Worker controller"]
  node_contractor_controller["Contractor controller"]
  node_trust["Trust scoring"]
  node_storage["Photo storage<br/>[storageService.js]"]
  node_distance["Distance matching<br/>[haversine.js]"]
  node_database[("PostgreSQL data")]
end

subgraph group_oversight["Safety and oversight"]
  node_admin_controller["Admin controller<br/>[adminController.js]"]
  node_weather["Weather service<br/>[weatherService.js]"]
  node_dispute_ai["Dispute summaries"]
  node_pdf["Dispute PDF<br/>[pdfService.js]"]
end

node_worker(("Worker"))
node_contractor(("Contractor"))
node_admin(("Admin"))
node_weather_api["Open-Meteo"]

node_worker -->|"uses"| node_app
node_contractor -->|"uses"| node_app
node_admin -->|"uses"| node_app
node_app -->|"provides auth"| node_auth
node_workerui -->|"requests"| node_api_client
node_contractorui -->|"requests"| node_api_client
node_adminui -->|"requests"| node_api_client
node_api_client -->|"HTTP requests"| node_server
node_server -->|"mounts"| node_auth_routes
node_server -->|"mounts"| node_worker_routes
node_server -->|"mounts"| node_contractor_routes
node_server -->|"mounts"| node_admin_routes
node_auth_routes -->|"dispatches"| node_auth_controller
node_worker_routes -->|"dispatches"| node_worker_controller
node_contractor_routes -->|"dispatches"| node_contractor_controller
node_admin_routes -->|"dispatches"| node_admin_controller
node_auth_controller -->|"reads/writes"| node_database
node_auth_controller -->|"saves profile photos"| node_storage
node_worker_controller -->|"reads/writes"| node_database
node_worker_controller -->|"saves check-in photos"| node_storage
node_worker_controller -->|"calculates proximity"| node_distance
node_worker_controller -->|"checks outdoor sites"| node_weather
node_worker_controller -->|"generates summary"| node_dispute_ai
node_worker_controller -->|"creates PDF"| node_pdf
node_worker_controller -.->|"creates applications and links"| node_contractor_controller
node_contractor_controller -->|"reads/writes"| node_database
node_contractor_controller -->|"ranks proximity"| node_distance
node_contractor_controller -->|"updates scores"| node_trust
node_admin_controller -->|"reads/writes"| node_database
node_admin_controller -->|"adjusts scores"| node_trust
node_trust -->|"records history"| node_database
node_weather -->|"fetches conditions"| node_weather_api

click node_app "https://github.com/rahulmelavanki08/worklog/blob/main/frontend/src/App.jsx"
click node_auth "https://github.com/rahulmelavanki08/worklog/blob/main/frontend/src/context/AuthContext.jsx"
click node_workerui "https://github.com/rahulmelavanki08/worklog/tree/main/frontend/src/pages/worker"
click node_contractorui "https://github.com/rahulmelavanki08/worklog/tree/main/frontend/src/pages/contractor"
click node_adminui "https://github.com/rahulmelavanki08/worklog/tree/main/frontend/src/pages/admin"
click node_api_client "https://github.com/rahulmelavanki08/worklog/blob/main/frontend/src/services/api.js"
click node_server "https://github.com/rahulmelavanki08/worklog/blob/main/backend/src/server.js"
click node_auth_routes "https://github.com/rahulmelavanki08/worklog/blob/main/backend/src/routes/authRoutes.js"
click node_auth_controller "https://github.com/rahulmelavanki08/worklog/blob/main/backend/src/controllers/authController.js"
click node_worker_routes "https://github.com/rahulmelavanki08/worklog/blob/main/backend/src/routes/workerRoutes.js"
click node_worker_controller "https://github.com/rahulmelavanki08/worklog/blob/main/backend/src/controllers/workerController.js"
click node_contractor_routes "https://github.com/rahulmelavanki08/worklog/blob/main/backend/src/routes/contractorRoutes.js"
click node_contractor_controller "https://github.com/rahulmelavanki08/worklog/blob/main/backend/src/controllers/contractorController.js"
click node_admin_routes "https://github.com/rahulmelavanki08/worklog/blob/main/backend/src/routes/adminRoutes.js"
click node_admin_controller "https://github.com/rahulmelavanki08/worklog/blob/main/backend/src/controllers/adminController.js"
click node_trust "https://github.com/rahulmelavanki08/worklog/blob/main/backend/src/services/trustScoreService.js"
click node_storage "https://github.com/rahulmelavanki08/worklog/blob/main/backend/src/services/storageService.js"
click node_distance "https://github.com/rahulmelavanki08/worklog/blob/main/backend/src/utils/haversine.js"
click node_weather "https://github.com/rahulmelavanki08/worklog/blob/main/backend/src/services/weatherService.js"
click node_dispute_ai "https://github.com/rahulmelavanki08/worklog/blob/main/backend/src/services/disputeAiService.js"
click node_pdf "https://github.com/rahulmelavanki08/worklog/blob/main/backend/src/services/pdfService.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_auth,node_workerui,node_contractorui,node_adminui,node_api_client toneBlue
class node_server,node_auth_routes,node_auth_controller,node_worker_routes,node_contractor_routes,node_admin_routes toneAmber
class node_worker_controller,node_contractor_controller,node_trust,node_storage,node_distance,node_database toneMint
class node_admin_controller,node_weather,node_dispute_ai,node_pdf,node_worker toneRose
class node_contractor,node_admin,node_weather_api toneIndigo
```

## Components

### Web client

- [Role-based app](https://github.com/rahulmelavanki08/worklog/blob/main/frontend/src/App.jsx): `frontend/src/App.jsx`
- [Auth context](https://github.com/rahulmelavanki08/worklog/blob/main/frontend/src/context/AuthContext.jsx): `frontend/src/context/AuthContext.jsx`
- [Worker pages](https://github.com/rahulmelavanki08/worklog/tree/main/frontend/src/pages/worker): `frontend/src/pages/worker`
- [Contractor pages](https://github.com/rahulmelavanki08/worklog/tree/main/frontend/src/pages/contractor): `frontend/src/pages/contractor`
- [Admin pages](https://github.com/rahulmelavanki08/worklog/tree/main/frontend/src/pages/admin): `frontend/src/pages/admin`
- [API client](https://github.com/rahulmelavanki08/worklog/blob/main/frontend/src/services/api.js): `frontend/src/services/api.js`

### API and identity

- [Express server](https://github.com/rahulmelavanki08/worklog/blob/main/backend/src/server.js): `backend/src/server.js`
- [Auth routes](https://github.com/rahulmelavanki08/worklog/blob/main/backend/src/routes/authRoutes.js): `backend/src/routes/authRoutes.js`
- [Auth controller](https://github.com/rahulmelavanki08/worklog/blob/main/backend/src/controllers/authController.js): `backend/src/controllers/authController.js`
- [Worker routes](https://github.com/rahulmelavanki08/worklog/blob/main/backend/src/routes/workerRoutes.js): `backend/src/routes/workerRoutes.js`
- [Contractor routes](https://github.com/rahulmelavanki08/worklog/blob/main/backend/src/routes/contractorRoutes.js): `backend/src/routes/contractorRoutes.js`
- [Admin routes](https://github.com/rahulmelavanki08/worklog/blob/main/backend/src/routes/adminRoutes.js): `backend/src/routes/adminRoutes.js`

### Work and pay

- [Worker controller](https://github.com/rahulmelavanki08/worklog/blob/main/backend/src/controllers/workerController.js): `backend/src/controllers/workerController.js`
- [Contractor controller](https://github.com/rahulmelavanki08/worklog/blob/main/backend/src/controllers/contractorController.js): `backend/src/controllers/contractorController.js`
- [Trust scoring](https://github.com/rahulmelavanki08/worklog/blob/main/backend/src/services/trustScoreService.js): `backend/src/services/trustScoreService.js`
- [Photo storage](https://github.com/rahulmelavanki08/worklog/blob/main/backend/src/services/storageService.js): `backend/src/services/storageService.js`
- [Distance matching](https://github.com/rahulmelavanki08/worklog/blob/main/backend/src/utils/haversine.js): `backend/src/utils/haversine.js`
- **PostgreSQL data**

### Safety and oversight

- [Admin controller](https://github.com/rahulmelavanki08/worklog/blob/main/backend/src/controllers/adminController.js): `backend/src/controllers/adminController.js`
- [Weather service](https://github.com/rahulmelavanki08/worklog/blob/main/backend/src/services/weatherService.js): `backend/src/services/weatherService.js`
- [Dispute summaries](https://github.com/rahulmelavanki08/worklog/blob/main/backend/src/services/disputeAiService.js): `backend/src/services/disputeAiService.js`
- [Dispute PDF](https://github.com/rahulmelavanki08/worklog/blob/main/backend/src/services/pdfService.js): `backend/src/services/pdfService.js`

### Other components

- **Worker**
- **Contractor**
- **Admin**
- **Open-Meteo**

## Connections

- Worker → Role-based app: uses
- Contractor → Role-based app: uses
- Admin → Role-based app: uses
- Role-based app → Auth context: provides auth
- Worker pages → API client: requests
- Contractor pages → API client: requests
- Admin pages → API client: requests
- API client → Express server: HTTP requests
- Express server → Auth routes: mounts
- Express server → Worker routes: mounts
- Express server → Contractor routes: mounts
- Express server → Admin routes: mounts
- Auth routes → Auth controller: dispatches
- Worker routes → Worker controller: dispatches
- Contractor routes → Contractor controller: dispatches
- Admin routes → Admin controller: dispatches
- Auth controller → PostgreSQL data: reads/writes
- Auth controller → Photo storage: saves profile photos
- Worker controller → PostgreSQL data: reads/writes
- Worker controller → Photo storage: saves check-in photos
- Worker controller → Distance matching: calculates proximity
- Worker controller → Weather service: checks outdoor sites
- Worker controller → Dispute summaries: generates summary
- Worker controller → Dispute PDF: creates PDF
- Worker controller → Contractor controller: creates applications and links
- Contractor controller → PostgreSQL data: reads/writes
- Contractor controller → Distance matching: ranks proximity
- Contractor controller → Trust scoring: updates scores
- Admin controller → PostgreSQL data: reads/writes
- Admin controller → Trust scoring: adjusts scores
- Trust scoring → PostgreSQL data: records history
- Weather service → Open-Meteo: fetches conditions
