Notifications
Leave Localhost ships a lightweight notification system for premium SaaS parity:
Leave Localhost ships a lightweight notification system for premium SaaS parity:
- in-app dashboard bell
- unread count
- newest notification dropdown
- mark one or all as read
- account/workspace-scoped preferences
- internal Convex helpers for product flows
- optional email-delivery defaults for future provider hooks
Convex queries are already realtime, so there is no separate notification socket or realtime service. When a notification row is inserted, subscribed clients update automatically.
The feature is intentionally not a campaign or inbox product. It does not ship browser push, mobile push, segmentation, marketing workflows, or a full message center.
Key Files
packages/backend/convex/schema.tspackages/backend/convex/notifications/apps/app/src/app/[locale]/(dashboard)/_components/notification-bell.tsxapps/app/src/app/[locale]/(dashboard)/settings/notifications/docs/reference/notification-events.md
Data Model
notifications stores one row per recipient. Rows include event, title, body,
optional deep link, read state, workspace scope, and email-delivery status.
notification_preferences stores per-user defaults, optionally scoped to the
active workspace.
Current Emitters
- Member invitation, join, role change, and removal flows.
- Billing grant creation/revocation.
- Super-admin workspace suspension/reactivation.
Security event types are registered for extension but are not emitted by default unless you wire them to a product flow.
Removing Billing
If your product does not need billing, you can disable it with a single env var or remove the billing system entirely. Billing is opt-in and ships disabled — with BILLING_PROVIDER unset, the system reports all organizations as "unconfigured" and no checkout flows or webhook routes exist.
Notification Preferences
Users manage notification preferences at /settings/notifications.