# lawliet0x/sunsync architecture

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

- Interactive diagram: https://gitdiagram.com/lawliet0x/sunsync
- Repository: https://github.com/lawliet0x/sunsync

## Overview

SunSync is a community energy-management web application with authenticated, role-scoped workspaces, meter-reading imports, reporting, and sourced public-data views. The principal workflow is sign-in, enter a workspace, then review records or submit reviewed meter readings for server-side processing. Public reference and public energy data are separate from operational records. The graph includes the frontend, shared Supabase access, operations gateway, and database layer; unsampled SQL details are represented only at the migrations-directory level.

Main entry points: [`src/backend.jsx`](https://github.com/lawliet0x/sunsync/blob/main/src/backend.jsx) (Auth and client), [`src/main.jsx`](https://github.com/lawliet0x/sunsync/blob/main/src/main.jsx) (App shell), [`src/Workspace.jsx`](https://github.com/lawliet0x/sunsync/blob/main/src/Workspace.jsx) (Role workspaces), [`src/MeterCsvImport.jsx`](https://github.com/lawliet0x/sunsync/blob/main/src/MeterCsvImport.jsx) (CSV import UI)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Application UI"]
  node_app["App shell<br/>[main.jsx]"]
  node_workspace["Role workspaces<br/>[Workspace.jsx]"]
end

subgraph group_energy["Energy Data"]
  node_csv_ui["CSV import UI<br/>[MeterCsvImport.jsx]"]
  node_csv_parser["CSV validation<br/>[meter-csv.js]"]
  node_public_workspace["Public energy views"]
  node_public_helpers["Energy formatting<br/>[public-data.js]"]
end

subgraph group_platform["Backend Platform"]
  node_auth["Auth and client<br/>[backend.jsx]"]
  node_operations["Operations gateway<br/>[index.ts]"]
  node_body_parser["Request body limits<br/>[request-body.js]"]
  node_database[("Supabase database")]
end

subgraph group_sources["Public Sources"]
  node_public_reference["Municipal references"]
  node_public_datasets["Sourced public data"]
end

node_user(("Community user"))

node_user -->|"opens"| node_app
node_app -->|"uses"| node_auth
node_app -->|"renders"| node_workspace
node_app -->|"renders"| node_public_reference
node_workspace -->|"uses"| node_auth
node_workspace -->|"renders"| node_csv_ui
node_workspace -->|"renders"| node_public_workspace
node_csv_ui -->|"validates with"| node_csv_parser
node_csv_ui -->|"submits through"| node_auth
node_public_workspace -->|"reads through"| node_auth
node_public_workspace -->|"formats with"| node_public_helpers
node_auth -->|"authenticates against"| node_database
node_auth -->|"invokes"| node_operations
node_public_reference -->|"queries"| node_database
node_operations -->|"parses with"| node_body_parser
node_operations -->|"calls RPC"| node_database

click node_app "https://github.com/lawliet0x/sunsync/blob/main/src/main.jsx"
click node_auth "https://github.com/lawliet0x/sunsync/blob/main/src/backend.jsx"
click node_workspace "https://github.com/lawliet0x/sunsync/blob/main/src/Workspace.jsx"
click node_csv_ui "https://github.com/lawliet0x/sunsync/blob/main/src/MeterCsvImport.jsx"
click node_csv_parser "https://github.com/lawliet0x/sunsync/blob/main/src/meter-csv.js"
click node_public_workspace "https://github.com/lawliet0x/sunsync/blob/main/src/PublicDataWorkspace.jsx"
click node_public_helpers "https://github.com/lawliet0x/sunsync/blob/main/src/public-data.js"
click node_public_reference "https://github.com/lawliet0x/sunsync/blob/main/src/PublicReference.jsx"
click node_operations "https://github.com/lawliet0x/sunsync/blob/main/supabase/functions/operations/index.ts"
click node_body_parser "https://github.com/lawliet0x/sunsync/blob/main/supabase/functions/operations/request-body.js"
click node_database "https://github.com/lawliet0x/sunsync/tree/main/supabase/migrations"
click node_public_datasets "https://github.com/lawliet0x/sunsync/tree/main/data"

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_workspace,node_user toneBlue
class node_csv_ui,node_csv_parser,node_public_workspace,node_public_helpers toneAmber
class node_auth,node_operations,node_body_parser,node_database toneMint
class node_public_reference,node_public_datasets toneRose
```

## Components

### Application UI

- [App shell](https://github.com/lawliet0x/sunsync/blob/main/src/main.jsx): `src/main.jsx`
- [Role workspaces](https://github.com/lawliet0x/sunsync/blob/main/src/Workspace.jsx): `src/Workspace.jsx`

### Energy Data

- [CSV import UI](https://github.com/lawliet0x/sunsync/blob/main/src/MeterCsvImport.jsx): `src/MeterCsvImport.jsx`
- [CSV validation](https://github.com/lawliet0x/sunsync/blob/main/src/meter-csv.js): `src/meter-csv.js`
- [Public energy views](https://github.com/lawliet0x/sunsync/blob/main/src/PublicDataWorkspace.jsx): `src/PublicDataWorkspace.jsx`
- [Energy formatting](https://github.com/lawliet0x/sunsync/blob/main/src/public-data.js): `src/public-data.js`

### Backend Platform

- [Auth and client](https://github.com/lawliet0x/sunsync/blob/main/src/backend.jsx): `src/backend.jsx`
- [Operations gateway](https://github.com/lawliet0x/sunsync/blob/main/supabase/functions/operations/index.ts): `supabase/functions/operations/index.ts`
- [Request body limits](https://github.com/lawliet0x/sunsync/blob/main/supabase/functions/operations/request-body.js): `supabase/functions/operations/request-body.js`
- [Supabase database](https://github.com/lawliet0x/sunsync/tree/main/supabase/migrations): `supabase/migrations`

### Public Sources

- [Municipal references](https://github.com/lawliet0x/sunsync/blob/main/src/PublicReference.jsx): `src/PublicReference.jsx`
- [Sourced public data](https://github.com/lawliet0x/sunsync/tree/main/data): `data`

### Other components

- **Community user**

## Connections

- Community user → App shell: opens (evidence: `README.md`)
- App shell → Auth and client: uses (evidence: `src/main.jsx`)
- App shell → Role workspaces: renders (evidence: `src/main.jsx`)
- App shell → Municipal references: renders (evidence: `src/main.jsx`)
- Role workspaces → Auth and client: uses (evidence: `src/Workspace.jsx`)
- Role workspaces → CSV import UI: renders (evidence: `src/Workspace.jsx`)
- Role workspaces → Public energy views: renders (evidence: `src/Workspace.jsx`)
- CSV import UI → CSV validation: validates with (evidence: `src/MeterCsvImport.jsx`)
- CSV import UI → Auth and client: submits through (evidence: `src/MeterCsvImport.jsx`)
- Public energy views → Auth and client: reads through (evidence: `src/PublicDataWorkspace.jsx`)
- Public energy views → Energy formatting: formats with (evidence: `src/PublicDataWorkspace.jsx`)
- Auth and client → Supabase database: authenticates against (evidence: `src/backend.jsx`)
- Auth and client → Operations gateway: invokes (evidence: `src/backend.jsx`)
- Municipal references → Supabase database: queries (evidence: `src/PublicReference.jsx`)
- Operations gateway → Request body limits: parses with (evidence: `supabase/functions/operations/index.ts`)
- Operations gateway → Supabase database: calls RPC (evidence: `supabase/functions/operations/index.ts`)
