thinkwise-environment.mdx
---
title: Thinkwise environment
description: System context and container model for a Thinkwise environment (stable across lanes).
sidebar:
order: 20
---
import { LinkButton } from "starlight-theme-nova/components";
This page models the **Thinkwise environment** as a software system. Lanes (in [DTAP](/reference/glossary/dtap/)) are occurrences of the same system construct.
## System context
```plantuml
@startuml
!include <C4/C4_Context>
!NEW_C4_STYLE = 1
LAYOUT_TOP_DOWN()
HIDE_STEREOTYPE()
title Thinkwise environment — system context
Person(stakeholders, "Business stakeholders")
Person(delivery, "Solution architects & engineers")
Person(endUsers, "End users")
Person(ops, "LEF delivery/support")
System(twEnv, "Thinkwise Environment", "Lane instance (DTAP)")
System_Ext(entra, "Identity", "Microsoft Entra ID")
System_Ext(infra, "Shared infra enablers", "VPN, DNS, proxies, storage")
System_Ext(integrations, "External integrations")
Rel(stakeholders, twEnv, "Uses")
Rel(delivery, twEnv, "Uses")
Rel(endUsers, twEnv, "Uses")
Rel(ops, twEnv, "Uses")
Rel(twEnv, entra, "Uses")
Rel(twEnv, infra, "Uses")
Rel(twEnv, integrations, "Integrates with")
@enduml
```
{/* TODO: Link canonical integration/service pages for “external integrations” once available. */}
## Container model
Inside the Thinkwise environment boundary, we model the stable container set:
- **GUI** (web UI)
- **App/API runtime** (Indicium)
- **Database**
- **Object storage** (S3-compatible; avoid local disk as the source of truth)
```plantuml
@startuml
!include <C4/C4_Container>
!NEW_C4_STYLE = 1
LAYOUT_TOP_DOWN()
HIDE_STEREOTYPE()
title Thinkwise environment — container model
Person(user, "User")
System_Ext(reverseProxy, "Reverse proxy", "HTTP(S) ingress")
System_Ext(dns, "DNS", "Name resolution")
System_Ext(tcpProxy, "TCP proxy", "DB endpoints")
System_Ext(identity, "Identity", "Entra ID")
System_Boundary(twEnv, "Thinkwise Environment") {
Container(gui, "GUI", "Web UI", "User-facing interface")
Container(api, "App/API runtime", "Indicium", "Processing logic and APIs")
ContainerDb(db, "Database", "SQL Server", "System state")
ContainerDb(obj, "Object storage", "S3", "Files/objects")
}
Rel(user, reverseProxy, "Uses", "HTTPS")
Rel(reverseProxy, gui, "Routes", "HTTPS")
Rel(gui, api, "Calls", "HTTP(S)")
Rel(api, db, "Reads/writes", "SQL")
Rel(api, obj, "Stores/loads", "S3 API")
Rel(user, dns, "Resolves hostnames via")
Rel(api, tcpProxy, "Connects via", "SQL")
Rel(tcpProxy, db, "Routes", "SQL")
Rel(gui, identity, "Uses")
Rel(api, identity, "Uses")
@enduml
```
## Apply the aspect lens
<div class="sl-flex sl-flex-wrap sl-gap-2">
<LinkButton href="/architecture/aspects/service/" variant="secondary">Service</LinkButton>
<LinkButton href="/architecture/aspects/development/" variant="secondary">Development</LinkButton>
<LinkButton href="/architecture/aspects/delivery/" variant="secondary">Delivery</LinkButton>
<LinkButton href="/architecture/aspects/operational-management/" variant="secondary">Operational management</LinkButton>
<LinkButton href="/architecture/aspects/security/" variant="secondary">Security</LinkButton>
</div>
## Where to go next
<div class="sl-flex sl-flex-wrap sl-gap-2">
<LinkButton href="/architecture/archetypes/containers/" variant="secondary">Container archetypes</LinkButton>
<LinkButton href="/reference/environments/" variant="secondary">Environment definitions (facts)</LinkButton>
<LinkButton href="/run-and-support/infra/app-tiers/thinkwise/" variant="secondary">Indicium runtimes (operate)</LinkButton>
<LinkButton href="/run-and-support/platforms/thinkwise/" variant="secondary">Thinkwise procedures (operate)</LinkButton>
<LinkButton href="/platforms-and-services/platforms/thinkwise/" variant="secondary">Thinkwise platform docs</LinkButton>
</div>
{/* TODO:
- Capture “turn-key vs assisted vs support” responsibility boundaries once agreed (Architecture; no runbooks here).
*/}