diff --git a/README.md b/README.md
index 3fa65db..24359ce 100644
--- a/README.md
+++ b/README.md
@@ -84,17 +84,22 @@ Build without SDR support: `cargo build --release --no-default-features`
```mermaid
graph TD
- Radio["Radio / SDR Hardware"] <-->|"serial or USB"| Server["trx-server
rig control, DSP, decoders, audio capture"]
- Server <-->|"JSON-TCP :4530"| Client["trx-client
remote connection, audio relay"]
- Server -->|"Opus-TCP :4531"| Client
- Client <-->|internal channels| F1["Web UI :8080"]
- Client <-->|internal channels| F2["rigctl :4532"]
- Client <-->|internal channels| F3["JSON-TCP"]
+ SDR1["SDR #1"] & SDR2["SDR #2"] <-->|USB| S1["trx-server A"]
+ SDR3["SDR #3"] & FT817["FT-817"] <-->|USB / serial| S2["trx-server B"]
+
+ S1 <-->|"JSON-TCP :4530"| C1["trx-client"]
+ S1 -->|"Opus-TCP :4531"| C1
+ S2 <-->|"JSON-TCP :4530"| C1
+ S2 -->|"Opus-TCP :4531"| C1
+
+ C1 <-->|internal channels| F1["Web UI :8080"]
+ C1 <-->|internal channels| F2["rigctl :4532"]
+ C1 <-->|internal channels| F3["JSON-TCP"]
```
-`trx-server` owns hardware access and runs the DSP pipeline.
-`trx-client` connects over TCP and exposes user-facing frontends.
-This keeps hardware local to one host while making control available over the network.
+Each `trx-server` owns one or more rigs and runs DSP, decoding, and audio capture locally.
+A `trx-client` connects to any number of servers over TCP and exposes them through
+a unified set of frontends.
## Documentation