# samuelclark04/signaldesk-v2 architecture

> Architecture diagram of the GitHub repository samuelclark04/signaldesk-v2, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-26). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/samuelclark04/signaldesk-v2
- Repository: https://github.com/samuelclark04/signaldesk-v2

## Overview

SignalDesk is a multi-market trading terminal with paper and broker-live execution. Users inspect market opportunities and portfolio state, then approve or reject staged setups; strategies propose candidates, the risk engine sizes and gates them, and the ledger records approved trades. The server also manages exits, portfolio-pilot actions, market intelligence, and live client updates. The empty README and partial excerpts limit certainty about some subsystem wiring, so the graph shows only documented or directly evidenced connections.

Main entry points: [`server/server.js`](https://github.com/samuelclark04/signaldesk-v2/blob/main/server/server.js) (HTTP and WS hub), [`server/execution/pipeline.js`](https://github.com/samuelclark04/signaldesk-v2/blob/main/server/execution/pipeline.js) (Trading pipeline), [`client/app.js`](https://github.com/samuelclark04/signaldesk-v2/blob/main/client/app.js) (Terminal shell), [`server/execution/order-router.js`](https://github.com/samuelclark04/signaldesk-v2/blob/main/server/execution/order-router.js) (Order routing)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["Client experience"]
  node_client["Terminal shell<br/>[app.js]"]
  node_opportunities["Opportunities<br/>[opportunities.js]"]
  node_portfolio_ui["Portfolio views<br/>[portfolio.js]"]
  node_trade_ui["Trade tickets"]
end

subgraph group_market["Market data"]
  node_connectors["Broker connectors<br/>[alpaca-api.js]"]
  node_market_data["Price and session data<br/>[latest-prices.js]"]
end

subgraph group_trading["Trade lifecycle"]
  node_pipeline["Trading pipeline<br/>[pipeline.js]"]
  node_strategies["Market strategies<br/>[1-equity-day.js]"]
  node_risk["Risk engine<br/>[risk-engine.js]"]
  node_ledger[("Trade ledger<br/>[paper-ledger.js]")]
  node_routing["Order routing<br/>[order-router.js]"]
  node_message_handler["Client action handler<br/>[message-handler.js]"]
  node_exit["Exit management<br/>[exit-pass.js]"]
end

subgraph group_portfolio["Portfolio and intelligence"]
  node_pilot["Portfolio Pilot<br/>[pilot-handler.js]"]
  node_intelligence["Market intelligence<br/>[dashboard-intel.js]"]
  node_notifier["Notifications<br/>[notifier.js]"]
  node_holdings[("External holdings")]
end

subgraph group_platform["Server access"]
  node_server["HTTP and WS hub<br/>[server.js]"]
  node_security["Access control<br/>[auth-gate.js]"]
end

node_user(("Trader"))
node_broker["Broker services"]

node_user -->|"uses"| node_client
node_client -->|"requests and streams"| node_server
node_server -->|"guards access"| node_security
node_server -->|"serves and broadcasts"| node_client
node_client -->|"routes views"| node_opportunities
node_client -->|"routes views"| node_portfolio_ui
node_client -->|"routes views"| node_trade_ui
node_server -->|"starts"| node_pipeline
node_pipeline -->|"reads feeds"| node_connectors
node_pipeline -->|"generates candidates"| node_strategies
node_pipeline -->|"gates candidates"| node_risk
node_pipeline -->|"stages trades"| node_ledger
node_pipeline -->|"manages exits"| node_exit
node_pipeline -->|"notifies"| node_notifier
node_connectors -.->|"requests market and broker data"| node_broker
node_connectors -->|"provides prices"| node_market_data
node_message_handler -->|"routes intents"| node_routing
node_routing -->|"records fills"| node_ledger
node_routing -.->|"submits live orders"| node_broker
node_routing -->|"checks sizing basis"| node_risk
node_server -->|"routes client messages"| node_message_handler
node_server -->|"publishes pilot state"| node_pilot
node_pilot -->|"stages and syncs actions"| node_ledger
node_pilot -->|"gates pilot trades"| node_risk
node_server -->|"publishes snapshots"| node_intelligence
node_intelligence -->|"reads market context"| node_market_data
node_server -->|"serves holdings state"| node_holdings

click node_client "https://github.com/samuelclark04/signaldesk-v2/blob/main/client/app.js"
click node_opportunities "https://github.com/samuelclark04/signaldesk-v2/blob/main/client/views/opportunities.js"
click node_portfolio_ui "https://github.com/samuelclark04/signaldesk-v2/blob/main/client/views/portfolio.js"
click node_trade_ui "https://github.com/samuelclark04/signaldesk-v2/blob/main/client/components/manual-trade-ticket.js"
click node_server "https://github.com/samuelclark04/signaldesk-v2/blob/main/server/server.js"
click node_security "https://github.com/samuelclark04/signaldesk-v2/blob/main/server/security/auth-gate.js"
click node_pipeline "https://github.com/samuelclark04/signaldesk-v2/blob/main/server/execution/pipeline.js"
click node_strategies "https://github.com/samuelclark04/signaldesk-v2/blob/main/server/strategies/1-equity-day.js"
click node_risk "https://github.com/samuelclark04/signaldesk-v2/blob/main/server/risk/risk-engine.js"
click node_ledger "https://github.com/samuelclark04/signaldesk-v2/blob/main/server/execution/paper-ledger.js"
click node_routing "https://github.com/samuelclark04/signaldesk-v2/blob/main/server/execution/order-router.js"
click node_message_handler "https://github.com/samuelclark04/signaldesk-v2/blob/main/server/execution/message-handler.js"
click node_connectors "https://github.com/samuelclark04/signaldesk-v2/blob/main/server/connectors/alpaca-api.js"
click node_market_data "https://github.com/samuelclark04/signaldesk-v2/blob/main/server/market/latest-prices.js"
click node_exit "https://github.com/samuelclark04/signaldesk-v2/blob/main/server/execution/exit-pass.js"
click node_pilot "https://github.com/samuelclark04/signaldesk-v2/blob/main/server/execution/pilot-handler.js"
click node_intelligence "https://github.com/samuelclark04/signaldesk-v2/blob/main/server/intelligence/dashboard-intel.js"
click node_notifier "https://github.com/samuelclark04/signaldesk-v2/blob/main/server/execution/notifier.js"
click node_holdings "https://github.com/samuelclark04/signaldesk-v2/blob/main/server/execution/external-holdings.js"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_client,node_opportunities,node_portfolio_ui,node_trade_ui toneBlue
class node_connectors,node_market_data toneAmber
class node_pipeline,node_strategies,node_risk,node_ledger,node_routing,node_message_handler,node_exit toneMint
class node_pilot,node_intelligence,node_notifier,node_holdings toneRose
class node_server,node_security,node_user,node_broker toneIndigo
```

## Components

### Client experience

- [Terminal shell](https://github.com/samuelclark04/signaldesk-v2/blob/main/client/app.js): `client/app.js`
- [Opportunities](https://github.com/samuelclark04/signaldesk-v2/blob/main/client/views/opportunities.js): `client/views/opportunities.js`
- [Portfolio views](https://github.com/samuelclark04/signaldesk-v2/blob/main/client/views/portfolio.js): `client/views/portfolio.js`
- [Trade tickets](https://github.com/samuelclark04/signaldesk-v2/blob/main/client/components/manual-trade-ticket.js): `client/components/manual-trade-ticket.js`

### Market data

- [Broker connectors](https://github.com/samuelclark04/signaldesk-v2/blob/main/server/connectors/alpaca-api.js): `server/connectors/alpaca-api.js`
- [Price and session data](https://github.com/samuelclark04/signaldesk-v2/blob/main/server/market/latest-prices.js): `server/market/latest-prices.js`

### Trade lifecycle

- [Trading pipeline](https://github.com/samuelclark04/signaldesk-v2/blob/main/server/execution/pipeline.js): `server/execution/pipeline.js`
- [Market strategies](https://github.com/samuelclark04/signaldesk-v2/blob/main/server/strategies/1-equity-day.js): `server/strategies/1-equity-day.js`
- [Risk engine](https://github.com/samuelclark04/signaldesk-v2/blob/main/server/risk/risk-engine.js): `server/risk/risk-engine.js`
- [Trade ledger](https://github.com/samuelclark04/signaldesk-v2/blob/main/server/execution/paper-ledger.js): `server/execution/paper-ledger.js`
- [Order routing](https://github.com/samuelclark04/signaldesk-v2/blob/main/server/execution/order-router.js): `server/execution/order-router.js`
- [Client action handler](https://github.com/samuelclark04/signaldesk-v2/blob/main/server/execution/message-handler.js): `server/execution/message-handler.js`
- [Exit management](https://github.com/samuelclark04/signaldesk-v2/blob/main/server/execution/exit-pass.js): `server/execution/exit-pass.js`

### Portfolio and intelligence

- [Portfolio Pilot](https://github.com/samuelclark04/signaldesk-v2/blob/main/server/execution/pilot-handler.js): `server/execution/pilot-handler.js`
- [Market intelligence](https://github.com/samuelclark04/signaldesk-v2/blob/main/server/intelligence/dashboard-intel.js): `server/intelligence/dashboard-intel.js`
- [Notifications](https://github.com/samuelclark04/signaldesk-v2/blob/main/server/execution/notifier.js): `server/execution/notifier.js`
- [External holdings](https://github.com/samuelclark04/signaldesk-v2/blob/main/server/execution/external-holdings.js): `server/execution/external-holdings.js`

### Server access

- [HTTP and WS hub](https://github.com/samuelclark04/signaldesk-v2/blob/main/server/server.js): `server/server.js`
- [Access control](https://github.com/samuelclark04/signaldesk-v2/blob/main/server/security/auth-gate.js): `server/security/auth-gate.js`

### Other components

- **Trader**
- **Broker services**

## Connections

- Trader → Terminal shell: uses
- Terminal shell → HTTP and WS hub: requests and streams
- HTTP and WS hub → Access control: guards access
- HTTP and WS hub → Terminal shell: serves and broadcasts
- Terminal shell → Opportunities: routes views
- Terminal shell → Portfolio views: routes views
- Terminal shell → Trade tickets: routes views
- HTTP and WS hub → Trading pipeline: starts
- Trading pipeline → Broker connectors: reads feeds
- Trading pipeline → Market strategies: generates candidates
- Trading pipeline → Risk engine: gates candidates
- Trading pipeline → Trade ledger: stages trades
- Trading pipeline → Exit management: manages exits
- Trading pipeline → Notifications: notifies
- Broker connectors → Broker services: requests market and broker data
- Broker connectors → Price and session data: provides prices
- Client action handler → Order routing: routes intents
- Order routing → Trade ledger: records fills
- Order routing → Broker services: submits live orders
- Order routing → Risk engine: checks sizing basis
- HTTP and WS hub → Client action handler: routes client messages
- HTTP and WS hub → Portfolio Pilot: publishes pilot state
- Portfolio Pilot → Trade ledger: stages and syncs actions
- Portfolio Pilot → Risk engine: gates pilot trades
- HTTP and WS hub → Market intelligence: publishes snapshots
- Market intelligence → Price and session data: reads market context
- HTTP and WS hub → External holdings: serves holdings state
