Appearance
Alerts
Alerts are the cross-cutting trigger system that lives behind the Watchlist, the News panel, and the price-target sub-panel of the Security dashboard. One backend service, three call sites. Implemented at backend/routes/alerts.py.
Alert types
Price thresholds
Trigger when a symbol's last quote crosses an absolute level (above or below). The most common alert. Backed by the WebSocket channel (backend/routes/websocket.py) that streams Finnhub quotes — alerts evaluate on every tick during market hours.
Volume spikes
Trigger when intraday volume exceeds a multiple of 30-day average. Useful for catching unusual interest before the price reflects it.
News keyword triggers
Trigger when a story matching your keyword filter (and optionally tagged with a symbol from your watchlist) lands in the news feed. Composes with News panel screens.
Price-target / consensus shifts
Trigger when sell-side analyst consensus revises up or down beyond a threshold. Driven by EODHD analyst-estimates feed.
Composing an alert
The bell icon in the Watchlist, the Alert me action in News, and the Watch this target button in Price target all open the same composer modal. Inputs:
| Field | Notes |
|---|---|
| Trigger | One of the four types above |
| Symbol or keyword | Required; auto-filled from caller context |
| Threshold | Absolute price, % change, or volume multiplier |
| Window | Always-on, market-hours-only, or custom schedule |
| Channel | In-app toast, email, or both |
Delivery channels
- In-app toasts — surface in the right rail with the offending data point.
- Email — sent from the configured
SMTPprovider; verify your address in Settings → Profile. - Webhook delivery is on the roadmap — not yet shipped.
State and history
Alerts have three states: active, tracking (within 1% of trigger), inactive (paused or fired-once). See status.* keys in frontend/src/i18n/en.json. Past triggers are listed in the alerts panel; you can re-arm a one-shot alert from history.
Limits
- Soft cap: ~100 active alerts per user. There's no hard limit, but the composer warns above that.
- News keyword alerts evaluate every ~5 minutes on the news feed cadence — they're not instant.
- The free tier has email-only delivery; in-app toasts are universal.
Tips
- For a stop-loss-like alert, set a price threshold ~5% below your average cost from the Market panel Portfolio view.
- For breakouts, combine a price threshold with a volume spike alert on the same symbol — fire only when both are true (composer supports AND combinator).
- Don't forget to disarm alerts on closed positions — they don't auto-prune.