An Electron desktop app that aggregates multiple TradingView webhook signals and only forwards a trade to TradersPost when a configurable quorum of conditions agree.
TradingView Alerts (N separate alerts)
│
│ POST https://yourname.ngrok-free.dev/signal
│ { "name": "rsi", "trade": "long" }
▼
ngrok (stable free domain) → localhost:3777
│
▼
SignalQuorum (Express server inside Electron)
│ Update condition → Evaluate quorum
│ If threshold met → POST to TradersPost
▼
TradersPost Webhook
Each TradingView alert sends a signal identifying a condition name and a direction (long, short, or exit). SignalQuorum tracks all conditions and when enough of them agree — say 4 out of 5 are long — it fires a buy order to TradersPost. If the quorum breaks, it does nothing (no automatic exit signal).
- Auto-registering conditions — no pre-configuration needed. Send a signal with any name and it appears in the dashboard.
- Configurable threshold — set how many conditions must agree before a trade fires.
- Three editable payloads — customize the exact JSON sent to TradersPost for buy, sell, and exit actions. Add fields like
sentiment,orderType,quantity, etc. - ngrok integration — built-in tunnel with support for free static domains. Set your TradingView webhook URL once.
- Signal templates — one-click copy of JSON templates for long/short/exit to paste into TradingView alert messages.
- Activity log — tracks every incoming signal, quorum evaluation, and outgoing trade.
- Persistent state — conditions, settings, and payloads survive app restarts.
- TradersPost brand theme — dark UI with TradersPost's color system.
npm install
npm start- ngrok — Create a free account at ngrok.com, copy your authtoken, and optionally claim a free static domain. Paste both into Settings.
- TradersPost — Copy your webhook URL from your TradersPost strategy and paste it into Settings.
- Ticker — Click the ticker display to change it (default: SPY).
- Threshold — Set how many conditions must agree (default: 3).
For each indicator/condition, create a TradingView alert with:
- Webhook URL: the URL shown at the top of SignalQuorum (e.g.,
https://yourname.ngrok-free.dev/signal) - Message: use the template buttons to copy the JSON, then change the name:
{
"name": "rsi",
"trade": "long"
}Valid trade values: long, short, exit
The Payloads section shows three editable JSON editors — one each for buy, sell, and exit. The base payload is:
{
"ticker": "SPY",
"action": "buy"
}You can add any TradersPost-supported fields directly in the editor:
{
"ticker": "SPY",
"action": "buy",
"sentiment": "bullish",
"orderType": "market"
}Custom fields persist across restarts and are merged into the payload when a trade fires.
- Electron — desktop window
- Express — local HTTP server (port 3777)
- @ngrok/ngrok — tunnel for public webhook URL
- electron-store — persistent settings/state
- Plain HTML/CSS/JS — no framework, no build step
signal-quorum/
├── package.json
├── main.js # Electron + Express + ngrok + quorum logic
├── preload.js # Secure IPC bridge
└── renderer/
├── index.html # Dashboard layout
├── styles.css # TradersPost-branded dark theme
└── app.js # UI logic
{ "name": "rsi", "trade": "long" }name(string, required) — condition identifiertrade(string, required) —"long","short", or"exit"
Returns: { "success": true, "conditions": 5 }
Returns: { "status": "ok", "conditions": 5, "confluenceResult": "long" }
Below is a cleaned-up version of the prompt used to create this project with Claude Code:
Create a small Electron desktop app called SignalQuorum that receives webhook signals from TradingView on my local computer and monitors them for consensus.
Signal reception: Each signal is a POST request with a JSON body like
{"name": "rsi", "trade": "long"}wheretradecan belong,short, orexit. Conditions should auto-register when the first signal arrives — no pre-configuration needed, just how many there are.Quorum logic: I need to set a threshold so that if X out of Y conditions agree (e.g., 4 out of 5 are long), the app fires a trade. If the quorum breaks, do nothing — don't send an exit signal.
TradersPost integration: When the quorum is met, forward the trade as a webhook to TradersPost. I need to be able to see and edit the exact JSON payload that gets sent for each action (buy, sell, exit) — three editors side by side.
Tunneling: Use ngrok (free tier with static domain support) so I can set TradingView webhook URLs once and never change them.
UI requirements:
- Plain HTML/CSS/JS, no framework, no build step
- Dark theme using TradersPost brand colors
- Signal template copy buttons (Copy Long / Copy Short / Copy Exit) for easy TradingView alert setup
- Ticker symbol in its own editable section above conditions
- Settings and Activity Log as slide-in drawer panels
- Once a trade executes, the result should auto-archive to the activity log after 5 seconds of the window being in focus
Tech stack: Electron, Express for the local HTTP server, electron-store for persistence, @ngrok/ngrok SDK for tunneling.