Native Qt desk wired into proprietary C++ trading libraries — not a web shell. Three-thread model: ingest, strategy, UI via queued snapshots.
Ingest thread normalizes ticks → strategy thread mutates books and emits order intents → UI thread renders from immutable snapshots. UI never holds locks on algo memory.
| Decision | Rejected | Chosen because |
|---|---|---|
| Desktop shell | Electron, WPF | Direct C++ lib link; dense grid perf; no IPC latency |
| UI updates | Mutex every tick | Queued signals; coalesce bursts before repaint |
| Order state | Global lock | Per-instrument single writer |
| Widgets | Live pointers | Snapshot copies — safe during realloc |
void BookEngine::onTick(const Tick& t) {
applyToBook(t);
if (shouldRepaint(t.symbol))
emit bookUpdated(t.symbol, snapshot(t.symbol));
}
// UI thread: render immutable BookSnap — no locks
On feed disconnect: stale banner + block new orders until resync. Operators never trade on partial book state.
Client names anonymized where required. Metrics from production monitoring during engagement.