# ahyannnn/solaris architecture

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

- Interactive diagram: https://gitdiagram.com/ahyannnn/solaris
- Repository: https://github.com/ahyannnn/solaris

## Overview

Solar IoT TPS is a role-based solar assessment and project-management application with customer, engineer, and administrator experiences. The main supported workflow is quote and pre-assessment handling, followed by project and invoice/payment management; administration also covers reporting and operations. The server exposes routed controllers over MongoDB, with PayMongo payments and Socket.IO-backed table updates. Source excerpts and the index establish only selected connections, so unsampled client-to-API wiring and several feature internals are left unspecified.

Main entry points: [`server/models/PreAssessment.js`](https://github.com/ahyannnn/solaris/blob/main/server/models/PreAssessment.js) (Assessment records), [`server/controllers/paymentController.js`](https://github.com/ahyannnn/solaris/blob/main/server/controllers/paymentController.js) (Payment processing), [`server/controllers/reportController.js`](https://github.com/ahyannnn/solaris/blob/main/server/controllers/reportController.js) (Reports and exports), [`server/models/Project.js`](https://github.com/ahyannnn/solaris/blob/main/server/models/Project.js) (Project records)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Web application"]
  node_webapp["Role-based routing<br/>[App.jsx]"]
  node_customer["Customer portal"]
  node_engineer["Engineer workspace"]
  node_adminui["Admin console"]
end

subgraph group_api["API and workflows"]
  node_server["HTTP server<br/>[server.js]"]
  node_adminroutes["Admin routes<br/>[adminRoutes.js]"]
  node_auth["Authentication<br/>[authMiddleware.js]"]
  node_quote["Free quote handling"]
  node_assessment["Pre-assessment workflow"]
  node_project["Project management"]
  node_payments["Payment processing"]
  node_reports["Reports and exports"]
  node_ops["Maintenance operations"]
end

subgraph group_data["Persistence and realtime"]
  node_users[("User records<br/>[Users.js]")]
  node_clientrecords[("Client records<br/>[Clients.js]")]
  node_assessmentrecords[("Assessment records<br/>[PreAssessment.js]")]
  node_projectrecords[("Project records<br/>[Project.js]")]
  node_invoice[("Solar invoices<br/>[SolarInvoice.js]")]
  node_realtime["Realtime updates<br/>[realtimeHelper.js]"]
  node_socket["Socket.IO server<br/>[socket.js]"]
end

subgraph group_integrations["External integrations"]
  node_paymongo["PayMongo adapter<br/>[paymongoService.js]"]
end

node_visitor(("Customer / staff"))
node_mongo[("MongoDB")]
node_paymentprovider["PayMongo"]

node_visitor -->|"uses"| node_webapp
node_webapp -->|"routes to"| node_customer
node_webapp -->|"routes to"| node_adminui
node_webapp -.->|"routes to"| node_engineer
node_server -->|"mounts routes"| node_adminroutes
node_adminroutes -->|"protects routes"| node_auth
node_auth -->|"loads account"| node_users
node_adminroutes -->|"dispatches reports"| node_reports
node_quote -->|"reads"| node_clientrecords
node_quote -->|"reads"| node_users
node_quote -.->|"creates or reads"| node_assessmentrecords
node_assessment -->|"reads and writes"| node_assessmentrecords
node_assessment -->|"reads"| node_clientrecords
node_assessment -->|"reads quote"| node_quote
node_assessment -.->|"uses records"| node_projectrecords
node_project -->|"reads and writes"| node_projectrecords
node_project -->|"reads"| node_clientrecords
node_project -->|"reads"| node_assessmentrecords
node_project -->|"requests payment"| node_paymongo
node_payments -->|"creates intents"| node_paymongo
node_payments -->|"reads and updates"| node_assessmentrecords
node_payments -->|"reads"| node_projectrecords
node_payments -->|"reads"| node_clientrecords
node_payments -->|"reads and updates"| node_invoice
node_reports -->|"queries"| node_assessmentrecords
node_reports -->|"queries"| node_projectrecords
node_reports -->|"queries"| node_clientrecords
node_reports -->|"queries"| node_invoice
node_paymongo -->|"calls API"| node_paymentprovider
node_users -->|"attaches hooks"| node_realtime
node_assessmentrecords -->|"attaches hooks"| node_realtime
node_projectrecords -->|"attaches hooks"| node_realtime
node_invoice -->|"attaches hooks"| node_realtime
node_realtime -->|"emits updates"| node_socket
node_server -->|"connects"| node_mongo

click node_webapp "https://github.com/ahyannnn/solaris/blob/main/client/src/App.jsx"
click node_customer "https://github.com/ahyannnn/solaris/tree/main/client/src/pages/Customer"
click node_engineer "https://github.com/ahyannnn/solaris/tree/main/client/src/pages/Engineer"
click node_adminui "https://github.com/ahyannnn/solaris/tree/main/client/src/pages/Admin"
click node_server "https://github.com/ahyannnn/solaris/blob/main/server/server.js"
click node_adminroutes "https://github.com/ahyannnn/solaris/blob/main/server/routes/adminRoutes.js"
click node_auth "https://github.com/ahyannnn/solaris/blob/main/server/middleware/authMiddleware.js"
click node_quote "https://github.com/ahyannnn/solaris/blob/main/server/controllers/freeQuoteControllers.js"
click node_assessment "https://github.com/ahyannnn/solaris/blob/main/server/controllers/preAssessmentControllers.js"
click node_project "https://github.com/ahyannnn/solaris/blob/main/server/controllers/projectController.js"
click node_payments "https://github.com/ahyannnn/solaris/blob/main/server/controllers/paymentController.js"
click node_reports "https://github.com/ahyannnn/solaris/blob/main/server/controllers/reportController.js"
click node_ops "https://github.com/ahyannnn/solaris/blob/main/server/controllers/maintenanceController.js"
click node_users "https://github.com/ahyannnn/solaris/blob/main/server/models/Users.js"
click node_clientrecords "https://github.com/ahyannnn/solaris/blob/main/server/models/Clients.js"
click node_assessmentrecords "https://github.com/ahyannnn/solaris/blob/main/server/models/PreAssessment.js"
click node_projectrecords "https://github.com/ahyannnn/solaris/blob/main/server/models/Project.js"
click node_invoice "https://github.com/ahyannnn/solaris/blob/main/server/models/SolarInvoice.js"
click node_realtime "https://github.com/ahyannnn/solaris/blob/main/server/utils/realtimeHelper.js"
click node_socket "https://github.com/ahyannnn/solaris/blob/main/server/socket.js"
click node_paymongo "https://github.com/ahyannnn/solaris/blob/main/server/services/paymongoService.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_webapp,node_customer,node_engineer,node_adminui toneBlue
class node_server,node_adminroutes,node_auth,node_quote,node_assessment,node_project,node_payments,node_reports,node_ops,node_mongo toneAmber
class node_users,node_clientrecords,node_assessmentrecords,node_projectrecords,node_invoice,node_realtime,node_socket toneMint
class node_paymongo toneRose
class node_visitor,node_paymentprovider toneIndigo
```

## Components

### Web application

- [Role-based routing](https://github.com/ahyannnn/solaris/blob/main/client/src/App.jsx): `client/src/App.jsx`
- [Customer portal](https://github.com/ahyannnn/solaris/tree/main/client/src/pages/Customer): `client/src/pages/Customer`
- [Engineer workspace](https://github.com/ahyannnn/solaris/tree/main/client/src/pages/Engineer): `client/src/pages/Engineer`
- [Admin console](https://github.com/ahyannnn/solaris/tree/main/client/src/pages/Admin): `client/src/pages/Admin`

### API and workflows

- [HTTP server](https://github.com/ahyannnn/solaris/blob/main/server/server.js): `server/server.js`
- [Admin routes](https://github.com/ahyannnn/solaris/blob/main/server/routes/adminRoutes.js): `server/routes/adminRoutes.js`
- [Authentication](https://github.com/ahyannnn/solaris/blob/main/server/middleware/authMiddleware.js): `server/middleware/authMiddleware.js`
- [Free quote handling](https://github.com/ahyannnn/solaris/blob/main/server/controllers/freeQuoteControllers.js): `server/controllers/freeQuoteControllers.js`
- [Pre-assessment workflow](https://github.com/ahyannnn/solaris/blob/main/server/controllers/preAssessmentControllers.js): `server/controllers/preAssessmentControllers.js`
- [Project management](https://github.com/ahyannnn/solaris/blob/main/server/controllers/projectController.js): `server/controllers/projectController.js`
- [Payment processing](https://github.com/ahyannnn/solaris/blob/main/server/controllers/paymentController.js): `server/controllers/paymentController.js`
- [Reports and exports](https://github.com/ahyannnn/solaris/blob/main/server/controllers/reportController.js): `server/controllers/reportController.js`
- [Maintenance operations](https://github.com/ahyannnn/solaris/blob/main/server/controllers/maintenanceController.js): `server/controllers/maintenanceController.js`

### Persistence and realtime

- [User records](https://github.com/ahyannnn/solaris/blob/main/server/models/Users.js): `server/models/Users.js`
- [Client records](https://github.com/ahyannnn/solaris/blob/main/server/models/Clients.js): `server/models/Clients.js`
- [Assessment records](https://github.com/ahyannnn/solaris/blob/main/server/models/PreAssessment.js): `server/models/PreAssessment.js`
- [Project records](https://github.com/ahyannnn/solaris/blob/main/server/models/Project.js): `server/models/Project.js`
- [Solar invoices](https://github.com/ahyannnn/solaris/blob/main/server/models/SolarInvoice.js): `server/models/SolarInvoice.js`
- [Realtime updates](https://github.com/ahyannnn/solaris/blob/main/server/utils/realtimeHelper.js): `server/utils/realtimeHelper.js`
- [Socket.IO server](https://github.com/ahyannnn/solaris/blob/main/server/socket.js): `server/socket.js`

### External integrations

- [PayMongo adapter](https://github.com/ahyannnn/solaris/blob/main/server/services/paymongoService.js): `server/services/paymongoService.js`

### Other components

- **Customer / staff**
- **MongoDB**
- **PayMongo**

## Connections

- Customer / staff → Role-based routing: uses (evidence: `client/src/App.jsx`)
- Role-based routing → Customer portal: routes to (evidence: `client/src/App.jsx`)
- Role-based routing → Admin console: routes to (evidence: `client/src/App.jsx`)
- Role-based routing → Engineer workspace: routes to (evidence: `client/src/App.jsx`)
- HTTP server → Admin routes: mounts routes (evidence: `server/server.js`)
- Admin routes → Authentication: protects routes (evidence: `server/routes/adminRoutes.js`)
- Authentication → User records: loads account (evidence: `server/middleware/authMiddleware.js`)
- Admin routes → Reports and exports: dispatches reports (evidence: `server/routes/adminRoutes.js`)
- Free quote handling → Client records: reads (evidence: `server/controllers/freeQuoteControllers.js`)
- Free quote handling → User records: reads (evidence: `server/controllers/freeQuoteControllers.js`)
- Free quote handling → Assessment records: creates or reads
- Pre-assessment workflow → Assessment records: reads and writes (evidence: `server/controllers/preAssessmentControllers.js`)
- Pre-assessment workflow → Client records: reads (evidence: `server/controllers/preAssessmentControllers.js`)
- Pre-assessment workflow → Free quote handling: reads quote (evidence: `server/controllers/preAssessmentControllers.js`)
- Pre-assessment workflow → Project records: uses records
- Project management → Project records: reads and writes (evidence: `server/controllers/projectController.js`)
- Project management → Client records: reads (evidence: `server/controllers/projectController.js`)
- Project management → Assessment records: reads (evidence: `server/controllers/projectController.js`)
- Project management → PayMongo adapter: requests payment (evidence: `server/controllers/projectController.js`)
- Payment processing → PayMongo adapter: creates intents (evidence: `server/controllers/paymentController.js`)
- Payment processing → Assessment records: reads and updates (evidence: `server/controllers/paymentController.js`)
- Payment processing → Project records: reads (evidence: `server/controllers/paymentController.js`)
- Payment processing → Client records: reads (evidence: `server/controllers/paymentController.js`)
- Payment processing → Solar invoices: reads and updates (evidence: `server/controllers/paymentController.js`)
- Reports and exports → Assessment records: queries (evidence: `server/controllers/reportController.js`)
- Reports and exports → Project records: queries (evidence: `server/controllers/reportController.js`)
- Reports and exports → Client records: queries (evidence: `server/controllers/reportController.js`)
- Reports and exports → Solar invoices: queries (evidence: `server/controllers/reportController.js`)
- PayMongo adapter → PayMongo: calls API (evidence: `server/services/paymongoService.js`)
- User records → Realtime updates: attaches hooks (evidence: `server/models/Users.js`)
- Assessment records → Realtime updates: attaches hooks (evidence: `server/models/PreAssessment.js`)
- Project records → Realtime updates: attaches hooks (evidence: `server/models/Project.js`)
- Solar invoices → Realtime updates: attaches hooks (evidence: `server/models/SolarInvoice.js`)
- Realtime updates → Socket.IO server: emits updates (evidence: `server/utils/realtimeHelper.js`)
- HTTP server → MongoDB: connects (evidence: `server/server.js`)
