Distributed systems · Financial simulation · 2026

Live risk numbers need a visible chain of trust.

Argus is a local educational simulator for a multi-currency equity risk platform. It follows simulated market data and trades through an event-driven system, calculates portfolio state, and exposes freshness, failure, and replay in the browser.

Project
Argus Risk
Role
Independent system architecture, backend, simulation, observability, and dashboard engineering
Stack
.NET 8 · Kafka / Redpanda · PostgreSQL / Marten · SignalR · Next.js
Argus Risk dashboard showing portfolio value, profit and loss, exposure, and system status
Argus Risk · Distributed systems · Financial simulation
4
.NET services
1 Hz
risk snapshots
5
position events
1–60×
replay speed

01 / Follow the event

Follow a trade from event to screen.

Simulated prices, FX rates, and trades enter separate Kafka topics. The risk engine consumes them, projects position state, publishes snapshots, and persists the history needed for replay. The API then pushes each snapshot to the Next.js dashboard through SignalR.

The services communicate through events instead of a chain of direct calls. That separation makes the journey visible and lets each part be restarted or inspected independently in the local Docker environment.

  • Market data
  • Trade events
  • Risk engine
  • SignalR dashboard
Argus Risk positions table with live price and freshness data

02 / Preserve the why

Rebuild position state from the events that changed it.

Position changes are appended as immutable Marten events: opened, increased, decreased, reversed, or closed. Replaying those events reconstructs the position at a point in time and preserves the path that produced it.

FIFO cost basis and the risk calculations stay in pure functions with no infrastructure dependencies. The same inputs produce the same result, which makes correctness testable and replay meaningful.

  • Append-only history
  • FIFO cost basis
  • Deterministic calculations
  • Point-in-time state

03 / Design for doubt

Show when a live number is stale.

The interface pairs portfolio values with connection state, price freshness, alerts, and reconciliation. When a source stalls, the useful question is no longer only ‘what is the value?’ but ‘how old is it, what failed, and can the system recover?’

Replay, checksums, metrics, traces, and degraded states are part of the product story. Argus is deliberately a simulator, but it explores the operational questions that make real-time software believable.

  • Staleness
  • Reconciliation
  • Circuit breaking
  • Observability

What stayed with me

Argus put backend correctness and interface trust into the same design problem. The dashboard has to show enough operational state for someone to know when its numbers are usable.