Developer tooling / Windows
DevProxy Studio
A modular reverse proxy that exposes local applications to the network and captures, persists and inspects every HTTP exchange passing through it.
The problem
Testing a local application from a real device — a phone, an industrial tablet — requires exposing it to the network, and understanding what is failing requires seeing the traffic. Existing tools solve one or the other: discovering what is listening, exposing it and then inspecting the conversation means chaining three separate utilities.
Constraints
- Capture must not add latency to the traffic crossing the proxy
- Each proxy must start, stop and restart without affecting the others
- The interface must stay responsive while thousands of records are written
Decisions
Outcome
- Independent proxy life cycles — start, stop and restart per instance
- Non-blocking capture with batched persistence
- Request and response inspector with formatting, decompression and upstream error diagnostics
- Discovery of listening ports and their owning process, exposed to the network in one click
The hot path and the cold path
The decision that defines this project is where the write happens. A proxy that persists every exchange inside the request path adds disk latency to every call passing through it, which ruins the tool exactly when it is most needed: under load.
Capture enqueues into a bounded channel and a background worker writes in batches. The channel is bounded on purpose: under sustained pressure, records are dropped rather than consuming unbounded memory. Incomplete diagnostics are recoverable; a process that exhausts the machine’s memory is not.
Why the layers
The domain knows nothing about the interface, the database or the proxy library. All three are replaceable and the product rules are not. The practical consequence showed up when port discovery was added: it came in as a new adapter, without touching the core.
Why it belongs here
Because it is a case where the architecture is justified by a concrete reason — protecting latency and memory — rather than by the habit of splitting things into layers.