Source types
| Type | Source | Cadence | Config |
|---|---|---|---|
| Stocks | Finnhub /quote | 60s | { symbol: "AAPL" } |
| Crypto | Coinbase /v2/prices | 60s | { pair: "BTC-USD" } |
| Topics | Ideate snapshot pull-through | 6h | { queryId: "…" } |
Adding a signal
On /signals, admins click Add signal, pick a type, enter the config (ticker symbol, trading pair, or a pinned Ideate query id), and optionally pin it to the home strip. The refresh Lambda picks it up on the next tick.
Admin source gating
Workspace owners can enable/disable source types in Settings → Signal sources. If stockis disabled for a workspace, the API refuses to create stock signals there — useful for workspaces that shouldn’t be tracking markets.
Home strip
The live signal strip on /home reads from the same table the /signalspage does, sorted pinned-first then most-recently-updated, capped at 6. Updates every 15 seconds while the tab is focused.
Errors
If a refresh tick fails (Finnhub 429, Coinbase 5xx, snapshot missing), we stamplastError and lastErrorAt on the row — visible as a red footnote on /signals. The next successful tick clears it.
Finnhub key
Stock signals require a Finnhub API key in Secrets Manager at clipunity/finnhub. The bootstrap script prints the exact aws secretsmanager create-secret command if the secret is missing; the Lambda simply skips stock signals until it lands.