Your account receives real-time notifications: when a PDF is ready, when an import completes, when there's an update on a quote or order. All via WebSocket.
WebSocket bridge and tenant broadcast
Veendo maintains an open WebSocket connection between the customer's browser and the server (via Vercel or dedicated infra). When an event happens (new order, approved quote, PDF generated), the backend sends an instant notification to the tenant via broadcast on that channel.
No polling, no delay: as soon as the event happens, all users of the tenant with an open browser receive the notification immediately.
- Persistent WebSocket connection for real-time push
- Broadcast per tenant — all logged-in users receive
- Zero delay — notification arrives as soon as event happens
- Graceful degradation if WebSocket unavailable
In-app notification manager
The veendo-task service handles the creation and dispatch of in-app notifications. Every event (order:created, quote:status-updated, document:signature-request, etc.) flows through the notification manager which resolves the interested tenant, notification type and payload.
Notifications are persisted in MongoDB and simultaneously sent via WebSocket. If the client is offline, they retrieve the notification when they come back online.
- Support for 8 topic codes: system, orders, quotes, documents, support, billing, identity, default
- Persistent notifications — available even after refresh
- Filters by readBy and dismissedBy to track user interaction
- Scope: tenant, user, agent — every notification knows its recipient
Supported event types
In-app you can receive notifications for:
- Orders: customer-new-order, customer-order-status-updated, customer-shipped-order, customer-cancel-order - Quotes: customer-quote-sent, quote-status-updated, quote-communication - Documents: document-signature-request (for e-signature) - Support: support-ticket-replied - Admin: you also see the same orders/quotes from the admin side
- Order: created, status-updated, shipped, cancelled
- Quote: sent, status-updated, communication
- Document: signature-request for e-signature
- Support: ticket-replied for internal ticket system
- Subscription: tenant-created, plan-changed, trial-starting, etc.
Preferences and silencing
In-app notifications are always enabled by default. There's no UI interface to disable them (unlike email), but read/dismiss data is tracked — the system knows if you've read or ignored them.
You can develop custom logic (via API) to silence certain categories if needed.
- Enabled by default — no opt-in required
- readBy and dismissedBy data tracked automatically
- No retention limit — notifications remain indefinitely available
- Sync across devices: read on desktop, see on mobile