# vetri1706/sitemorph architecture

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

- Interactive diagram: https://gitdiagram.com/vetri1706/sitemorph
- Repository: https://github.com/vetri1706/sitemorph

## Overview

SiteMorph is an Autodesk Forma extension that turns a selected site boundary and historical climate evidence into native design proposals, measured analysis, and a report. The main workflow runs through the UI and Zustand store: select a Forma Site Limit, restore or request FortyGuard evidence, review Climate DNA and its design brief, generate a building or subdivision, validate it with Forma analysis, and export a report. README capabilities inform several branches whose implementation was not sampled; those links are omitted where call ownership is uncertain.

Main entry points: [`src/stores/useSiteMorphStore.ts`](https://github.com/vetri1706/sitemorph/blob/main/src/stores/useSiteMorphStore.ts) (Workflow state), [`src/services/forma.service.ts`](https://github.com/vetri1706/sitemorph/blob/main/src/services/forma.service.ts) (Forma client), [`src/services/forma-subdivision.service.ts`](https://github.com/vetri1706/sitemorph/blob/main/src/services/forma-subdivision.service.ts) (Subdivision generator), [`src/services/overlay.service.ts`](https://github.com/vetri1706/sitemorph/blob/main/src/services/overlay.service.ts) (Climate overlays)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_extension["Extension workflow"]
  node_panel["Extension panel<br/>[ExtensionPanel.tsx]"]
  node_app["Application shell<br/>[App.tsx]"]
  node_store["Workflow state"]
  node_site["Site review<br/>[SiteTab.tsx]"]
  node_climate["Climate review<br/>[ClimateTab.tsx]"]
  node_trace["Activity trace<br/>[TraceTab.tsx]"]
end

subgraph group_evidence["Climate evidence"]
  node_climate_service["Climate analysis<br/>[climate.service.ts]"]
  node_fortyguard_service["FortyGuard client"]
  node_analysis_service["Site analysis"]
  node_overlay["Climate overlays<br/>[overlay.service.ts]"]
  node_compare["Climate comparison<br/>[CompareTab.tsx]"]
end

subgraph group_design["Design and validation"]
  node_design_ui["Design workspace<br/>[DesignTab.tsx]"]
  node_design_service["Building generator"]
  node_subdivision_service["Subdivision generator"]
  node_placement["Forma placement"]
  node_forma_service["Forma client<br/>[forma.service.ts]"]
end

subgraph group_output["Persistence and handoff"]
  node_report["Report assets<br/>[report-assets.ts]"]
  node_revit["Revit handoff"]
  node_server_fg["FortyGuard API<br/>[fortyguard.ts]"]
  node_persistence[("Analysis persistence<br/>[persistence.ts]")]
  node_api_usage["Usage endpoint<br/>[usage.ts]"]
end

node_user(("Forma user"))
node_forma{{"Autodesk Forma"}}
node_fortyguard{{"FortyGuard"}}

node_user -->|"uses"| node_panel
node_app -->|"renders"| node_panel
node_panel -->|"dispatches actions"| node_store
node_store -->|"reads site context"| node_forma_service
node_forma_service -->|"uses SDK"| node_forma
node_store -->|"requests analysis"| node_analysis_service
node_store -->|"builds climate result"| node_climate_service
node_climate_service -->|"requests evidence"| node_fortyguard_service
node_fortyguard_service -.->|"calls API"| node_server_fg
node_server_fg -->|"requests activities"| node_fortyguard
node_analysis_service -.->|"restores or saves"| node_persistence
node_store -->|"provides state"| node_site
node_store -->|"provides state"| node_climate
node_store -->|"provides state"| node_trace
node_store -->|"controls layers"| node_overlay
node_overlay -->|"gets Forma client"| node_forma_service
node_overlay -->|"renders overlays"| node_forma
node_store -->|"provides state"| node_compare
node_store -->|"provides state"| node_design_ui
node_store -->|"generates building"| node_design_service
node_store -->|"generates subdivision"| node_subdivision_service
node_design_service -->|"gets Forma client"| node_forma_service
node_design_service -->|"creates and analyzes"| node_forma
node_subdivision_service -->|"uses Forma client"| node_forma_service
node_subdivision_service -->|"verifies placement"| node_placement
node_subdivision_service -->|"creates and validates"| node_forma
node_store -.->|"prepares report data"| node_report
node_user -.->|"downloads report"| node_report
node_user -.->|"continues in Revit"| node_revit
node_api_usage -.->|"serves usage"| node_server_fg

click node_panel "https://github.com/vetri1706/sitemorph/blob/main/src/pages/ExtensionPanel.tsx"
click node_app "https://github.com/vetri1706/sitemorph/blob/main/src/App.tsx"
click node_store "https://github.com/vetri1706/sitemorph/blob/main/src/stores/useSiteMorphStore.ts"
click node_site "https://github.com/vetri1706/sitemorph/blob/main/src/components/site/SiteTab.tsx"
click node_climate "https://github.com/vetri1706/sitemorph/blob/main/src/components/climate/ClimateTab.tsx"
click node_trace "https://github.com/vetri1706/sitemorph/blob/main/src/components/trace/TraceTab.tsx"
click node_climate_service "https://github.com/vetri1706/sitemorph/blob/main/src/services/climate.service.ts"
click node_fortyguard_service "https://github.com/vetri1706/sitemorph/blob/main/src/services/fortyguard.service.ts"
click node_analysis_service "https://github.com/vetri1706/sitemorph/blob/main/src/services/analysis.service.ts"
click node_overlay "https://github.com/vetri1706/sitemorph/blob/main/src/services/overlay.service.ts"
click node_compare "https://github.com/vetri1706/sitemorph/blob/main/src/components/compare/CompareTab.tsx"
click node_design_ui "https://github.com/vetri1706/sitemorph/blob/main/src/components/design/DesignTab.tsx"
click node_design_service "https://github.com/vetri1706/sitemorph/blob/main/src/services/forma-design.service.ts"
click node_subdivision_service "https://github.com/vetri1706/sitemorph/blob/main/src/services/forma-subdivision.service.ts"
click node_placement "https://github.com/vetri1706/sitemorph/blob/main/src/services/forma-element-placement.service.ts"
click node_forma_service "https://github.com/vetri1706/sitemorph/blob/main/src/services/forma.service.ts"
click node_report "https://github.com/vetri1706/sitemorph/blob/main/src/utils/report-assets.ts"
click node_revit "https://github.com/vetri1706/sitemorph/blob/main/src/services/revit-handoff.service.ts"
click node_server_fg "https://github.com/vetri1706/sitemorph/blob/main/server/fortyguard.ts"
click node_persistence "https://github.com/vetri1706/sitemorph/blob/main/server/persistence.ts"
click node_api_usage "https://github.com/vetri1706/sitemorph/blob/main/api/fortyguard/usage.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_panel,node_app,node_store,node_site,node_climate,node_trace,node_user toneBlue
class node_climate_service,node_fortyguard_service,node_analysis_service,node_overlay,node_compare toneAmber
class node_design_ui,node_design_service,node_subdivision_service,node_placement,node_forma_service toneMint
class node_report,node_revit,node_server_fg,node_persistence,node_api_usage toneRose
class node_forma,node_fortyguard toneIndigo
```

## Components

### Extension workflow

- [Extension panel](https://github.com/vetri1706/sitemorph/blob/main/src/pages/ExtensionPanel.tsx): `src/pages/ExtensionPanel.tsx`
- [Application shell](https://github.com/vetri1706/sitemorph/blob/main/src/App.tsx): `src/App.tsx`
- [Workflow state](https://github.com/vetri1706/sitemorph/blob/main/src/stores/useSiteMorphStore.ts): `src/stores/useSiteMorphStore.ts`
- [Site review](https://github.com/vetri1706/sitemorph/blob/main/src/components/site/SiteTab.tsx): `src/components/site/SiteTab.tsx`
- [Climate review](https://github.com/vetri1706/sitemorph/blob/main/src/components/climate/ClimateTab.tsx): `src/components/climate/ClimateTab.tsx`
- [Activity trace](https://github.com/vetri1706/sitemorph/blob/main/src/components/trace/TraceTab.tsx): `src/components/trace/TraceTab.tsx`

### Climate evidence

- [Climate analysis](https://github.com/vetri1706/sitemorph/blob/main/src/services/climate.service.ts): `src/services/climate.service.ts`
- [FortyGuard client](https://github.com/vetri1706/sitemorph/blob/main/src/services/fortyguard.service.ts): `src/services/fortyguard.service.ts`
- [Site analysis](https://github.com/vetri1706/sitemorph/blob/main/src/services/analysis.service.ts): `src/services/analysis.service.ts`
- [Climate overlays](https://github.com/vetri1706/sitemorph/blob/main/src/services/overlay.service.ts): `src/services/overlay.service.ts`
- [Climate comparison](https://github.com/vetri1706/sitemorph/blob/main/src/components/compare/CompareTab.tsx): `src/components/compare/CompareTab.tsx`

### Design and validation

- [Design workspace](https://github.com/vetri1706/sitemorph/blob/main/src/components/design/DesignTab.tsx): `src/components/design/DesignTab.tsx`
- [Building generator](https://github.com/vetri1706/sitemorph/blob/main/src/services/forma-design.service.ts): `src/services/forma-design.service.ts`
- [Subdivision generator](https://github.com/vetri1706/sitemorph/blob/main/src/services/forma-subdivision.service.ts): `src/services/forma-subdivision.service.ts`
- [Forma placement](https://github.com/vetri1706/sitemorph/blob/main/src/services/forma-element-placement.service.ts): `src/services/forma-element-placement.service.ts`
- [Forma client](https://github.com/vetri1706/sitemorph/blob/main/src/services/forma.service.ts): `src/services/forma.service.ts`

### Persistence and handoff

- [Report assets](https://github.com/vetri1706/sitemorph/blob/main/src/utils/report-assets.ts): `src/utils/report-assets.ts`
- [Revit handoff](https://github.com/vetri1706/sitemorph/blob/main/src/services/revit-handoff.service.ts): `src/services/revit-handoff.service.ts`
- [FortyGuard API](https://github.com/vetri1706/sitemorph/blob/main/server/fortyguard.ts): `server/fortyguard.ts`
- [Analysis persistence](https://github.com/vetri1706/sitemorph/blob/main/server/persistence.ts): `server/persistence.ts`
- [Usage endpoint](https://github.com/vetri1706/sitemorph/blob/main/api/fortyguard/usage.ts): `api/fortyguard/usage.ts`

### Other components

- **Forma user**
- **Autodesk Forma**
- **FortyGuard**

## Connections

- Forma user → Extension panel: uses
- Application shell → Extension panel: renders
- Extension panel → Workflow state: dispatches actions
- Workflow state → Forma client: reads site context
- Forma client → Autodesk Forma: uses SDK
- Workflow state → Site analysis: requests analysis
- Workflow state → Climate analysis: builds climate result
- Climate analysis → FortyGuard client: requests evidence
- FortyGuard client → FortyGuard API: calls API
- FortyGuard API → FortyGuard: requests activities
- Site analysis → Analysis persistence: restores or saves
- Workflow state → Site review: provides state
- Workflow state → Climate review: provides state
- Workflow state → Activity trace: provides state
- Workflow state → Climate overlays: controls layers
- Climate overlays → Forma client: gets Forma client
- Climate overlays → Autodesk Forma: renders overlays
- Workflow state → Climate comparison: provides state
- Workflow state → Design workspace: provides state
- Workflow state → Building generator: generates building
- Workflow state → Subdivision generator: generates subdivision
- Building generator → Forma client: gets Forma client
- Building generator → Autodesk Forma: creates and analyzes
- Subdivision generator → Forma client: uses Forma client
- Subdivision generator → Forma placement: verifies placement
- Subdivision generator → Autodesk Forma: creates and validates
- Workflow state → Report assets: prepares report data
- Forma user → Report assets: downloads report
- Forma user → Revit handoff: continues in Revit
- Usage endpoint → FortyGuard API: serves usage
