# ohcnetwork/care_clinic architecture

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

- Interactive diagram: https://gitdiagram.com/ohcnetwork/care_clinic
- Repository: https://github.com/ohcnetwork/care_clinic

## Overview

CARE Clinic is a Go/Wails desktop application with a React interface for hosting or joining an offline-first clinic. The main workflow runs from choosing server or client mode through prerequisite checks and setup, then into clinic operations such as backups, updates, storage, and settings; client mode instead discovers a clinic and installs its trusted certificate. The README documents these capabilities, while sampled source confirms selected UI and backend relationships. Several larger modules were not sampled, so their internal call paths are not asserted here.

Main entry points: [`app/app.go`](https://github.com/ohcnetwork/care_clinic/blob/main/app/app.go) (App API), [`app/app_client.go`](https://github.com/ohcnetwork/care_clinic/blob/main/app/app_client.go) (Client connection API), [`app/app_storage.go`](https://github.com/ohcnetwork/care_clinic/blob/main/app/app_storage.go) (Storage reporting), [`app/frontend/src/screens/setup/setup-screen.tsx`](https://github.com/ohcnetwork/care_clinic/blob/main/app/frontend/src/screens/setup/setup-screen.tsx) (Setup wizard)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_desktop["Desktop shell"]
  node_desktop_app["Desktop app<br/>[main.go]"]
  node_app_api["App API<br/>[app.go]"]
  node_frontend["React interface<br/>[main.tsx]"]
end

subgraph group_setup["Server setup"]
  node_setup_wizard["Setup wizard<br/>[setup-screen.tsx]"]
  node_setup_layout["Setup steps<br/>[setup-layout.tsx]"]
  node_setup_requirements["Requirement checks"]
  node_setup_model["Setup model<br/>[setup-model.ts]"]
  node_provisioner["Host provisioning<br/>[provision.go]"]
end

subgraph group_clinic["Clinic operations"]
  node_clinic_engine["Clinic engine"]
  node_recovery["Backup recovery<br/>[app_recovery.go]"]
  node_plugins["Plugin catalog<br/>[plugins.go]"]
  node_plugin_install["Plugin transactions"]
  node_compose["Compose builds<br/>[build.go]"]
  node_storage_api["Storage reporting<br/>[app_storage.go]"]
  node_storage_core["Storage assessment<br/>[storage.go]"]
  node_panel_storage["Storage page<br/>[storage-tab.tsx]"]
  node_panel_status["Control panel<br/>[panel-ui.tsx]"]
end

subgraph group_client["Client connection"]
  node_client_ui["Client setup<br/>[client-screen.tsx]"]
  node_client_api["Client connection API<br/>[app_client.go]"]
  node_trust["Certificate trust<br/>[client.go]"]
end

subgraph group_platform["Host integrations"]
  node_residue["Legacy cleanup<br/>[residue.go]"]
  node_hosts["Hosts repair<br/>[hosts.go]"]
  node_mdns["Local discovery<br/>[responder.go]"]
end

node_staff(("Clinic staff"))

node_staff -->|"uses"| node_frontend
node_frontend -.->|"invokes"| node_desktop_app
node_desktop_app -->|"binds"| node_app_api
node_setup_wizard -->|"renders"| node_setup_layout
node_setup_wizard -->|"renders"| node_setup_requirements
node_setup_requirements -->|"uses"| node_setup_model
node_app_api -.->|"provisions host"| node_provisioner
node_provisioner -.->|"prepares runtime"| node_clinic_engine
node_staff -->|"connects"| node_client_ui
node_client_ui -.->|"calls"| node_client_api
node_client_api -->|"verifies certificate"| node_trust
node_client_api -->|"resolves clinic"| node_mdns
node_client_api -->|"checks overrides"| node_hosts
node_app_api -->|"handles restore"| node_recovery
node_plugin_install -->|"uses catalog"| node_plugins
node_plugin_install -->|"uses builds"| node_compose
node_app_api -->|"reports storage"| node_storage_api
node_storage_api -->|"assesses space"| node_storage_core
node_panel_storage -.->|"requests checks"| node_storage_api
node_staff -->|"operates clinic"| node_panel_status
node_app_api -.->|"controls services"| node_clinic_engine
node_client_api -.->|"cleans leftovers"| node_residue

click node_desktop_app "https://github.com/ohcnetwork/care_clinic/blob/main/app/main.go"
click node_app_api "https://github.com/ohcnetwork/care_clinic/blob/main/app/app.go"
click node_frontend "https://github.com/ohcnetwork/care_clinic/blob/main/app/frontend/src/main.tsx"
click node_setup_wizard "https://github.com/ohcnetwork/care_clinic/blob/main/app/frontend/src/screens/setup/setup-screen.tsx"
click node_setup_layout "https://github.com/ohcnetwork/care_clinic/blob/main/app/frontend/src/screens/setup/setup-layout.tsx"
click node_setup_requirements "https://github.com/ohcnetwork/care_clinic/blob/main/app/frontend/src/screens/setup/requirement-step.tsx"
click node_setup_model "https://github.com/ohcnetwork/care_clinic/blob/main/app/frontend/src/screens/setup/setup-model.ts"
click node_provisioner "https://github.com/ohcnetwork/care_clinic/blob/main/app/internal/prereq/provision.go"
click node_clinic_engine "https://github.com/ohcnetwork/care_clinic/tree/main/app/internal/clinic"
click node_recovery "https://github.com/ohcnetwork/care_clinic/blob/main/app/app_recovery.go"
click node_plugins "https://github.com/ohcnetwork/care_clinic/blob/main/app/internal/plugins/plugins.go"
click node_plugin_install "https://github.com/ohcnetwork/care_clinic/blob/main/app/internal/clinic/plugin_transaction.go"
click node_compose "https://github.com/ohcnetwork/care_clinic/blob/main/app/internal/compose/build.go"
click node_storage_api "https://github.com/ohcnetwork/care_clinic/blob/main/app/app_storage.go"
click node_storage_core "https://github.com/ohcnetwork/care_clinic/blob/main/app/internal/storage/storage.go"
click node_panel_storage "https://github.com/ohcnetwork/care_clinic/blob/main/app/frontend/src/screens/panel/storage-tab.tsx"
click node_panel_status "https://github.com/ohcnetwork/care_clinic/blob/main/app/frontend/src/screens/panel/panel-ui.tsx"
click node_client_ui "https://github.com/ohcnetwork/care_clinic/blob/main/app/frontend/src/screens/client-screen.tsx"
click node_client_api "https://github.com/ohcnetwork/care_clinic/blob/main/app/app_client.go"
click node_trust "https://github.com/ohcnetwork/care_clinic/blob/main/app/internal/sys/trust/client.go"
click node_residue "https://github.com/ohcnetwork/care_clinic/blob/main/app/internal/residue/residue.go"
click node_hosts "https://github.com/ohcnetwork/care_clinic/blob/main/app/internal/sys/hosts/hosts.go"
click node_mdns "https://github.com/ohcnetwork/care_clinic/blob/main/app/internal/sys/mdns/responder.go"

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_desktop_app,node_app_api,node_frontend toneBlue
class node_setup_wizard,node_setup_layout,node_setup_requirements,node_setup_model,node_provisioner toneAmber
class node_clinic_engine,node_recovery,node_plugins,node_plugin_install,node_compose,node_storage_api,node_storage_core,node_panel_storage,node_panel_status toneMint
class node_client_ui,node_client_api,node_trust toneRose
class node_residue,node_hosts,node_mdns,node_staff toneIndigo
```

## Components

### Desktop shell

- [Desktop app](https://github.com/ohcnetwork/care_clinic/blob/main/app/main.go): `app/main.go`
- [App API](https://github.com/ohcnetwork/care_clinic/blob/main/app/app.go): `app/app.go`
- [React interface](https://github.com/ohcnetwork/care_clinic/blob/main/app/frontend/src/main.tsx): `app/frontend/src/main.tsx`

### Server setup

- [Setup wizard](https://github.com/ohcnetwork/care_clinic/blob/main/app/frontend/src/screens/setup/setup-screen.tsx): `app/frontend/src/screens/setup/setup-screen.tsx`
- [Setup steps](https://github.com/ohcnetwork/care_clinic/blob/main/app/frontend/src/screens/setup/setup-layout.tsx): `app/frontend/src/screens/setup/setup-layout.tsx`
- [Requirement checks](https://github.com/ohcnetwork/care_clinic/blob/main/app/frontend/src/screens/setup/requirement-step.tsx): `app/frontend/src/screens/setup/requirement-step.tsx`
- [Setup model](https://github.com/ohcnetwork/care_clinic/blob/main/app/frontend/src/screens/setup/setup-model.ts): `app/frontend/src/screens/setup/setup-model.ts`
- [Host provisioning](https://github.com/ohcnetwork/care_clinic/blob/main/app/internal/prereq/provision.go): `app/internal/prereq/provision.go`

### Clinic operations

- [Clinic engine](https://github.com/ohcnetwork/care_clinic/tree/main/app/internal/clinic): `app/internal/clinic`
- [Backup recovery](https://github.com/ohcnetwork/care_clinic/blob/main/app/app_recovery.go): `app/app_recovery.go`
- [Plugin catalog](https://github.com/ohcnetwork/care_clinic/blob/main/app/internal/plugins/plugins.go): `app/internal/plugins/plugins.go`
- [Plugin transactions](https://github.com/ohcnetwork/care_clinic/blob/main/app/internal/clinic/plugin_transaction.go): `app/internal/clinic/plugin_transaction.go`
- [Compose builds](https://github.com/ohcnetwork/care_clinic/blob/main/app/internal/compose/build.go): `app/internal/compose/build.go`
- [Storage reporting](https://github.com/ohcnetwork/care_clinic/blob/main/app/app_storage.go): `app/app_storage.go`
- [Storage assessment](https://github.com/ohcnetwork/care_clinic/blob/main/app/internal/storage/storage.go): `app/internal/storage/storage.go`
- [Storage page](https://github.com/ohcnetwork/care_clinic/blob/main/app/frontend/src/screens/panel/storage-tab.tsx): `app/frontend/src/screens/panel/storage-tab.tsx`
- [Control panel](https://github.com/ohcnetwork/care_clinic/blob/main/app/frontend/src/screens/panel/panel-ui.tsx): `app/frontend/src/screens/panel/panel-ui.tsx`

### Client connection

- [Client setup](https://github.com/ohcnetwork/care_clinic/blob/main/app/frontend/src/screens/client-screen.tsx): `app/frontend/src/screens/client-screen.tsx`
- [Client connection API](https://github.com/ohcnetwork/care_clinic/blob/main/app/app_client.go): `app/app_client.go`
- [Certificate trust](https://github.com/ohcnetwork/care_clinic/blob/main/app/internal/sys/trust/client.go): `app/internal/sys/trust/client.go`

### Host integrations

- [Legacy cleanup](https://github.com/ohcnetwork/care_clinic/blob/main/app/internal/residue/residue.go): `app/internal/residue/residue.go`
- [Hosts repair](https://github.com/ohcnetwork/care_clinic/blob/main/app/internal/sys/hosts/hosts.go): `app/internal/sys/hosts/hosts.go`
- [Local discovery](https://github.com/ohcnetwork/care_clinic/blob/main/app/internal/sys/mdns/responder.go): `app/internal/sys/mdns/responder.go`

### Other components

- **Clinic staff**

## Connections

- Clinic staff → React interface: uses
- React interface → Desktop app: invokes
- Desktop app → App API: binds (evidence: `app/main.go`)
- Setup wizard → Setup steps: renders (evidence: `app/frontend/src/screens/setup/setup-screen.tsx`)
- Setup wizard → Requirement checks: renders (evidence: `app/frontend/src/screens/setup/setup-screen.tsx`)
- Requirement checks → Setup model: uses (evidence: `app/frontend/src/screens/setup/requirement-step.tsx`)
- App API → Host provisioning: provisions host
- Host provisioning → Clinic engine: prepares runtime
- Clinic staff → Client setup: connects
- Client setup → Client connection API: calls
- Client connection API → Certificate trust: verifies certificate (evidence: `app/app_client.go`)
- Client connection API → Local discovery: resolves clinic (evidence: `app/app_client.go`)
- Client connection API → Hosts repair: checks overrides (evidence: `app/app_client.go`)
- App API → Backup recovery: handles restore (evidence: `app/app_recovery.go`)
- Plugin transactions → Plugin catalog: uses catalog (evidence: `app/internal/clinic/plugin_transaction.go`)
- Plugin transactions → Compose builds: uses builds (evidence: `app/internal/clinic/plugin_transaction.go`)
- App API → Storage reporting: reports storage (evidence: `app/app_storage.go`)
- Storage reporting → Storage assessment: assesses space (evidence: `app/app_storage.go`)
- Storage page → Storage reporting: requests checks
- Clinic staff → Control panel: operates clinic
- App API → Clinic engine: controls services
- Client connection API → Legacy cleanup: cleans leftovers
