# grow-project-org/grow architecture

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

## Overview

Grow is a plant-care management application for independently owned gardens. Its main workflow is to review plants due today, record a care action, and update the plant’s schedule and cultivation history; users can also organize plants into working or temporary groups, manage species-specific intervals, and review plant histories. The graph includes the frontend, API, domain, authentication, and persistence layers. The README documents domain behavior, while sampled source confirms selected query and storage behavior; several runtime connections are therefore shown as unverified rather than asserted.

Main entry points: [`backend/Grow.Infrastructure.Database/DatabaseContext.cs`](https://github.com/grow-project-org/grow/blob/main/backend/Grow.Infrastructure.Database/DatabaseContext.cs) (Database context), [`frontend/src/App.tsx`](https://github.com/grow-project-org/grow/blob/main/frontend/src/App.tsx) (Application shell), [`frontend/src/api/client.ts`](https://github.com/grow-project-org/grow/blob/main/frontend/src/api/client.ts) (API client), [`backend/Grow.Infrastructure.Cqrs/Dispatcher.cs`](https://github.com/grow-project-org/grow/blob/main/backend/Grow.Infrastructure.Cqrs/Dispatcher.cs) (CQRS dispatcher)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Garden interface"]
  node_app["Application shell<br/>[App.tsx]"]
  node_today["Today care<br/>[TodayPage.tsx]"]
  node_calendar["Care calendar<br/>[CalendarPage.tsx]"]
  node_plants_ui["Plant views<br/>[PlantsPage.tsx]"]
  node_groups_ui["Group views<br/>[GroupsPage.tsx]"]
  node_add_ui["Plant creation<br/>[AddPlantPage.tsx]"]
  node_api_client["API client<br/>[client.ts]"]
end

subgraph group_api["API and dispatch"]
  node_webapi["HTTP endpoints<br/>[PlantsEndpoints.cs]"]
  node_cqrs["CQRS dispatcher<br/>[Dispatcher.cs]"]
end

subgraph group_domain["Plant domain"]
  node_plant_handlers["Plant operations<br/>[Handlers]"]
  node_species_handlers["Species operations<br/>[Handlers]"]
  node_user_handlers["User operations<br/>[Handlers]"]
  node_plant_model["Plants and events<br/>[Plant.cs]"]
  node_group_model["Plant groups<br/>[PlantGroup.cs]"]
  node_species_model["Species intervals<br/>[Specie.cs]"]
  node_history["Cultivation history<br/>[PlantEvent.cs]"]
end

subgraph group_identity["Identity"]
  node_auth_endpoints["Authentication setup<br/>[AuthExtensions.cs]"]
  node_session_storage[("Session storage<br/>[SessionStorage.cs]")]
end

subgraph group_storage["Persistence"]
  node_db_context[("Database context<br/>[DatabaseContext.cs]")]
end

node_gardener(("Gardener"))

node_gardener -->|"uses"| node_app
node_app -->|"renders"| node_today
node_app -->|"renders"| node_calendar
node_app -->|"renders"| node_plants_ui
node_app -->|"renders"| node_groups_ui
node_app -->|"renders"| node_add_ui
node_today -.->|"requests data"| node_api_client
node_calendar -.->|"requests data"| node_api_client
node_plants_ui -.->|"requests data"| node_api_client
node_groups_ui -.->|"requests data"| node_api_client
node_add_ui -.->|"submits changes"| node_api_client
node_api_client -.->|"sends requests"| node_webapi
node_webapi -.->|"dispatches"| node_cqrs
node_cqrs -.->|"dispatches"| node_plant_handlers
node_cqrs -.->|"dispatches"| node_species_handlers
node_cqrs -.->|"dispatches"| node_user_handlers
node_plant_handlers -.->|"queries and saves"| node_db_context
node_species_handlers -.->|"queries and saves"| node_db_context
node_user_handlers -.->|"queries and saves"| node_db_context
node_plant_handlers -.->|"updates"| node_plant_model
node_plant_handlers -.->|"manages membership"| node_group_model
node_species_handlers -.->|"updates"| node_species_model
node_plant_model -->|"records actions"| node_history
node_gardener -->|"reviews due care"| node_today
node_gardener -->|"organizes work"| node_groups_ui
node_gardener -->|"reviews history"| node_plants_ui
node_webapi -->|"configures auth"| node_auth_endpoints
node_auth_endpoints -->|"uses sessions"| node_session_storage
node_session_storage -.->|"authenticates"| node_gardener
node_db_context -->|"persists"| node_plant_model
node_db_context -->|"persists"| node_group_model
node_db_context -->|"persists"| node_species_model
node_db_context -->|"persists"| node_history

click node_app "https://github.com/grow-project-org/grow/blob/main/frontend/src/App.tsx"
click node_today "https://github.com/grow-project-org/grow/blob/main/frontend/src/features/today/TodayPage.tsx"
click node_calendar "https://github.com/grow-project-org/grow/blob/main/frontend/src/features/calendar/CalendarPage.tsx"
click node_plants_ui "https://github.com/grow-project-org/grow/blob/main/frontend/src/features/plants/PlantsPage.tsx"
click node_groups_ui "https://github.com/grow-project-org/grow/blob/main/frontend/src/features/groups/GroupsPage.tsx"
click node_add_ui "https://github.com/grow-project-org/grow/blob/main/frontend/src/features/add/AddPlantPage.tsx"
click node_api_client "https://github.com/grow-project-org/grow/blob/main/frontend/src/api/client.ts"
click node_webapi "https://github.com/grow-project-org/grow/blob/main/backend/Grow.WebApi/Endpoints/PlantsEndpoints.cs"
click node_cqrs "https://github.com/grow-project-org/grow/blob/main/backend/Grow.Infrastructure.Cqrs/Dispatcher.cs"
click node_plant_handlers "https://github.com/grow-project-org/grow/tree/main/backend/Grow.Domain/Plants/Handlers"
click node_species_handlers "https://github.com/grow-project-org/grow/tree/main/backend/Grow.Domain/Species/Handlers"
click node_user_handlers "https://github.com/grow-project-org/grow/tree/main/backend/Grow.Domain/Users/Handlers"
click node_plant_model "https://github.com/grow-project-org/grow/blob/main/backend/Grow.Domain/Plants/Plant.cs"
click node_group_model "https://github.com/grow-project-org/grow/blob/main/backend/Grow.Domain/Plants/PlantGroup.cs"
click node_species_model "https://github.com/grow-project-org/grow/blob/main/backend/Grow.Domain/Species/Specie.cs"
click node_history "https://github.com/grow-project-org/grow/blob/main/backend/Grow.Domain/Plants/PlantEvent.cs"
click node_auth_endpoints "https://github.com/grow-project-org/grow/blob/main/backend/Grow.WebApi/Extensions/AuthExtensions.cs"
click node_session_storage "https://github.com/grow-project-org/grow/blob/main/backend/Grow.Infrastructure.Auth/SessionStorage.cs"
click node_db_context "https://github.com/grow-project-org/grow/blob/main/backend/Grow.Infrastructure.Database/DatabaseContext.cs"

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_today,node_calendar,node_plants_ui,node_groups_ui,node_add_ui,node_api_client toneBlue
class node_webapi,node_cqrs toneAmber
class node_plant_handlers,node_species_handlers,node_user_handlers,node_plant_model,node_group_model,node_species_model,node_history toneMint
class node_auth_endpoints,node_session_storage toneRose
class node_db_context,node_gardener toneIndigo
```

## Components

### Garden interface

- [Application shell](https://github.com/grow-project-org/grow/blob/main/frontend/src/App.tsx): `frontend/src/App.tsx`
- [Today care](https://github.com/grow-project-org/grow/blob/main/frontend/src/features/today/TodayPage.tsx): `frontend/src/features/today/TodayPage.tsx`
- [Care calendar](https://github.com/grow-project-org/grow/blob/main/frontend/src/features/calendar/CalendarPage.tsx): `frontend/src/features/calendar/CalendarPage.tsx`
- [Plant views](https://github.com/grow-project-org/grow/blob/main/frontend/src/features/plants/PlantsPage.tsx): `frontend/src/features/plants/PlantsPage.tsx`
- [Group views](https://github.com/grow-project-org/grow/blob/main/frontend/src/features/groups/GroupsPage.tsx): `frontend/src/features/groups/GroupsPage.tsx`
- [Plant creation](https://github.com/grow-project-org/grow/blob/main/frontend/src/features/add/AddPlantPage.tsx): `frontend/src/features/add/AddPlantPage.tsx`
- [API client](https://github.com/grow-project-org/grow/blob/main/frontend/src/api/client.ts): `frontend/src/api/client.ts`

### API and dispatch

- [HTTP endpoints](https://github.com/grow-project-org/grow/blob/main/backend/Grow.WebApi/Endpoints/PlantsEndpoints.cs): `backend/Grow.WebApi/Endpoints/PlantsEndpoints.cs`
- [CQRS dispatcher](https://github.com/grow-project-org/grow/blob/main/backend/Grow.Infrastructure.Cqrs/Dispatcher.cs): `backend/Grow.Infrastructure.Cqrs/Dispatcher.cs`

### Plant domain

- [Plant operations](https://github.com/grow-project-org/grow/tree/main/backend/Grow.Domain/Plants/Handlers): `backend/Grow.Domain/Plants/Handlers`
- [Species operations](https://github.com/grow-project-org/grow/tree/main/backend/Grow.Domain/Species/Handlers): `backend/Grow.Domain/Species/Handlers`
- [User operations](https://github.com/grow-project-org/grow/tree/main/backend/Grow.Domain/Users/Handlers): `backend/Grow.Domain/Users/Handlers`
- [Plants and events](https://github.com/grow-project-org/grow/blob/main/backend/Grow.Domain/Plants/Plant.cs): `backend/Grow.Domain/Plants/Plant.cs`
- [Plant groups](https://github.com/grow-project-org/grow/blob/main/backend/Grow.Domain/Plants/PlantGroup.cs): `backend/Grow.Domain/Plants/PlantGroup.cs`
- [Species intervals](https://github.com/grow-project-org/grow/blob/main/backend/Grow.Domain/Species/Specie.cs): `backend/Grow.Domain/Species/Specie.cs`
- [Cultivation history](https://github.com/grow-project-org/grow/blob/main/backend/Grow.Domain/Plants/PlantEvent.cs): `backend/Grow.Domain/Plants/PlantEvent.cs`

### Identity

- [Authentication setup](https://github.com/grow-project-org/grow/blob/main/backend/Grow.WebApi/Extensions/AuthExtensions.cs): `backend/Grow.WebApi/Extensions/AuthExtensions.cs`
- [Session storage](https://github.com/grow-project-org/grow/blob/main/backend/Grow.Infrastructure.Auth/SessionStorage.cs): `backend/Grow.Infrastructure.Auth/SessionStorage.cs`

### Persistence

- [Database context](https://github.com/grow-project-org/grow/blob/main/backend/Grow.Infrastructure.Database/DatabaseContext.cs): `backend/Grow.Infrastructure.Database/DatabaseContext.cs`

### Other components

- **Gardener**

## Connections

- Gardener → Application shell: uses
- Application shell → Today care: renders (evidence: `frontend/src/App.tsx`)
- Application shell → Care calendar: renders (evidence: `frontend/src/App.tsx`)
- Application shell → Plant views: renders (evidence: `frontend/src/App.tsx`)
- Application shell → Group views: renders (evidence: `frontend/src/App.tsx`)
- Application shell → Plant creation: renders (evidence: `frontend/src/App.tsx`)
- Today care → API client: requests data
- Care calendar → API client: requests data
- Plant views → API client: requests data
- Group views → API client: requests data
- Plant creation → API client: submits changes
- API client → HTTP endpoints: sends requests
- HTTP endpoints → CQRS dispatcher: dispatches
- CQRS dispatcher → Plant operations: dispatches
- CQRS dispatcher → Species operations: dispatches
- CQRS dispatcher → User operations: dispatches
- Plant operations → Database context: queries and saves
- Species operations → Database context: queries and saves
- User operations → Database context: queries and saves
- Plant operations → Plants and events: updates (evidence: `backend/Grow.Domain/Plants/Handlers/SearchPlantsQueryHandler.cs`)
- Plant operations → Plant groups: manages membership (evidence: `backend/Grow.Domain/Plants/Handlers/GetPlantGroupsQueryHandler.cs`)
- Species operations → Species intervals: updates (evidence: `backend/Grow.Domain/Species/Handlers/GetSpeciesQueryHandler.cs`)
- Plants and events → Cultivation history: records actions (evidence: `backend/Grow.Domain/Plants/Plant.cs`)
- Gardener → Today care: reviews due care
- Gardener → Group views: organizes work
- Gardener → Plant views: reviews history
- HTTP endpoints → Authentication setup: configures auth
- Authentication setup → Session storage: uses sessions (evidence: `backend/Grow.WebApi/Extensions/AuthExtensions.cs`)
- Session storage → Gardener: authenticates
- Database context → Plants and events: persists (evidence: `backend/Grow.Infrastructure.Database/DatabaseContext.cs`)
- Database context → Plant groups: persists (evidence: `backend/Grow.Infrastructure.Database/DatabaseContext.cs`)
- Database context → Species intervals: persists (evidence: `backend/Grow.Infrastructure.Database/DatabaseContext.cs`)
- Database context → Cultivation history: persists (evidence: `backend/Grow.Infrastructure.Database/DatabaseContext.cs`)
