Every notification in TradeOnyx has a kind (`risk_limit`, `streak_warning`, `eod_reminder`, `news_alert`, `price_alert`, `achievement`, `info`) and goes through the same dispatcher. The dispatcher reads a per-`(user, kind)` channel matrix — three booleans, one per channel — and fans out to whichever channels are on.
- Inbox is the bell-icon drawer in the dashboard header. Always available. Every notification writes a row here regardless of the other channel choices, so you have an audit trail.
- Browser Push is opt-in. The first visit shows a small "Enable browser notifications" row in the bell drawer; click and the OS prompts for permission. Once granted, dispatches arrive even when TradeOnyx is in a closed tab.
- Email lands in your registered mail address through the same Postmark sender as the verification mails (`[email protected]`).
Tier ceiling: Free members are clamped to inbox-only. Pro adds push. Pro+ gets all three. The clamp is enforced at the dispatcher, not at the UI — a feature-flagged user can't bypass it from the frontend.
How to think about which channels per kind: - Risk-limit warnings — inbox + push + email defaults. You want to know right now, not when you next open the dashboard. - EOD reminder — inbox-only by default. It's a nudge, not an emergency. - News alerts (30 min before high-impact) — push is the value channel here. The whole point is "reach me even if I'm in another tab". - Price alerts — push + inbox. Email is overkill for something that fires constantly. - Streak warnings — push if you tend to revenge-trade after a loss; inbox-only if you're more disciplined and just want the audit trail. - Achievements + info — inbox-only. Background-noise tier.
Go to Settings → Notifications to flip individual cells. Tier-locked rows render greyed out, so you also see what would unlock at the next tier — that's intentional, the gate is visible.
The notification system's value is closing the latency loop between an event in your trading data and your awareness of it. A daily-loss-limit breach you only notice tomorrow morning is one trading day too late. A high-impact news event you only see when you next open the briefing is a setup you missed.
The dispatcher fires from inside the request handlers that produce the events. Closing a losing trade triggers `check_loss_limits`. Every authenticated page-load triggers `check_eod_reminder`, `check_news_alerts`, and `check_price_alerts` once. The triggers are all idempotent — the same condition won't dispatch twice in the same UTC day for daily kinds, won't dispatch twice for the same news event, and price alerts have a 24-hour cooldown after firing so a hovering threshold doesn't spam.
In TradeOnyx every dispatched row is also bilingual — the title and body land in the language you set in Settings. Switching language doesn't rewrite history (existing rows stay in the language they were dispatched in), so a German trader who flips to English mid-week sees both languages in the inbox: that's a feature, not a bug.