# Deployment Architecture — Unit: SlpSoftware Client Setup
**Status note**: this diagram documents the **target state after** the Operations-phase cutover (D-15) — it is reference/planning context for Code Generation, not something this unit deploys itself. No infrastructure changes happen as part of this Construction stage.
```mermaid
graph TD
visitor["Site Visitor / CMS Administrator browser"]
proxy["Proxy Pi
nginx + TLS (certbot)"]
pimain["pi-main
systemd --user"]
svc_test["slpsoftware-test.service
port 5100"]
svc_prod["slpsoftware-production.service
port 5101"]
dll["SlpModularCms.Api.SlpSoftware.dll
(replaces Api.dll at cutover)"]
db["MariaDB
SlpSoftwareTest / SlpSoftwareProduction"]
sentry["Sentry (shared project)"]
visitor -->|"HTTPS"| proxy
proxy -->|"proxy_pass, plain HTTP over LAN"| pimain
pimain --> svc_test
pimain --> svc_prod
svc_test --> dll
svc_prod --> dll
dll -->|"EF Core / MariaDB provider"| db
dll -->|"error/event reporting"| sentry
classDef external fill:#e9d8fd,stroke:#553c9a,stroke-width:2px,color:#000000,font-weight:bold;
classDef proxy fill:#bee3f8,stroke:#2b6cb0,stroke-width:2px,color:#000000,font-weight:bold;
classDef compute fill:#fefcbf,stroke:#b7791f,stroke-width:2px,color:#000000,font-weight:bold;
classDef data fill:#c6f6d5,stroke:#2f855a,stroke-width:2px,color:#000000,font-weight:bold;
class visitor external;
class proxy proxy;
class pimain,svc_test,svc_prod,dll compute;
class db,sentry data;
linkStyle default stroke:#666666,stroke-width:2px;
```
Text alternative: a visitor's browser reaches the proxy Pi over HTTPS, which forwards plain HTTP over the LAN to pi-main; pi-main runs two systemd-managed instances (test on port 5100, production on port 5101), both eventually running `SlpModularCms.Api.SlpSoftware.dll` after the cutover, each talking to its own MariaDB database and the shared Sentry project (purple = external actor, blue = the TLS-terminating proxy, yellow = compute/hosting, green = data/observability backends).
## Local Development (Current Scope of This Unit)
```mermaid
graph LR
dev["Developer machine"]
api["SlpModularCms.Api
(existing dev host)"]
apislp["SlpModularCms.Api.SlpSoftware
(new, this unit)"]
dbA["Local DB: Api"]
dbB["Local DB: Api.SlpSoftware (isolated)"]
dev --> api
dev --> apislp
api --> dbA
apislp --> dbB
classDef dev fill:#fefcbf,stroke:#b7791f,stroke-width:2px,color:#000000,font-weight:bold;
classDef data fill:#c6f6d5,stroke:#2f855a,stroke-width:2px,color:#000000,font-weight:bold;
class dev,api,apislp dev;
class dbA,dbB data;
linkStyle default stroke:#666666,stroke-width:2px;
```
Text alternative: locally, `Api` and the new `Api.SlpSoftware` each connect to their own separate, isolated database (decision Q1 = B) — no shared local dev data between the two.