Features
Notifications
Vextro includes a built-in notifications system that delivers in-app alerts to admin users. Notifications are triggered by workflow events, content state changes, and system alerts, and are surfaced through a bell icon in the admin header. By surfacing these events inside the admin panel, editors stay informed about workflow assignments and content changes without switching to email or a separate tool — reducing missed approvals and keeping editorial coordination visible in context. For teams with review cycles or multiple contributors, notifications are the primary mechanism for keeping work moving without requiring manual follow-up.
Notification UI
The notification bell (VextroNotificationBell) renders in the admin header and provides:
- A bell icon with a numeric badge showing the unread count (capped at
9+when above 9) - A dropdown panel that opens on click and lists the most recent 20 notifications
- Per-notification actions: click to navigate to a linked document, or dismiss with the delete button
- A "Mark all as read" button in the panel header when unread notifications exist
- Keyboard support:
Escapecloses the panel and returns focus to the bell button
Unread notifications appear with a blue dot indicator and bold title. Read notifications are visually dimmed.
The component polls Convex for updates every 30 seconds by default. The interval is configurable via the pollInterval prop.
Notification types
| Type | Description | Badge color |
|---|---|---|
workflow_assigned | A workflow item has been assigned to the user | Primary |
workflow_approved | A workflow submission was approved | Success (green) |
workflow_rejected | A workflow submission was rejected | Danger (red) |
content_published | A document was published | Success (green) |
content_updated | A document was updated | Muted |
system_alert | A system-level alert requiring attention | Warning (yellow) |
mention | The user was mentioned in a document | Primary |
Choosing the right notification type
Not all notification types are equally useful for every team. Use this guidance to decide which types to enable and when.
Workflow notifications (workflow_assigned, workflow_approved, workflow_rejected) are triggered automatically by the workflow system. Enable these for any collection that uses status-based review. They keep reviewers and authors in the loop without requiring email — the right person is notified at each stage transition without any additional configuration.
Content activity notifications (content_published, content_updated) are most useful for teams where editors need awareness of others' publishing activity — for example, a collection of landing pages where one editor's publish could affect another's work. For low-coordination collections (blog posts, FAQs), these often generate noise without value.
System alerts (system_alert) should be reserved for critical operational events such as quota warnings, sync failures, or auth errors. Use sparingly — alert fatigue is real, and editors who see too many system alerts start ignoring all alerts including important ones.
Mentions (mention) are intended for targeted editorial feedback on a specific document. Use when you need to draw a particular person's attention to content they should review or respond to, rather than broadcasting a change to a team.
Start with workflow notifications only. Add content notifications for high-coordination collections. Avoid enabling all types globally — notification fatigue causes editors to ignore important alerts.
Notification shape
Each notification record has the following fields:
| Field | Type | Description |
|---|---|---|
_id | string | Unique notification ID |
_creationTime | number | Convex record creation timestamp |
userId | string | The recipient user's ID |
type | NotificationType | One of the 7 type values above |
title | string | Short notification title |
message | string | Full notification message body |
linkUrl | string? | Optional URL to navigate to when clicked |
isRead | boolean | Whether the notification has been read |
createdAt | number | Timestamp the notification was created |
Admin module API
Queries
listNotifications — returns the current user's notifications, newest first.
| Argument | Type | Description |
|---|---|---|
limit | number? | Max notifications to return (default: 20) |
Returns Array<AdminNotification>.
getUnreadNotificationCount — returns the number of unread notifications for the current user.
No arguments. Returns number.
Mutations
markNotificationAsRead — marks a single notification as read.
| Argument | Type | Description |
|---|---|---|
notificationId | string | The ID of the notification to mark as read |
Returns null.
markAllNotificationsAsRead — marks all of the current user's notifications as read.
No arguments. Returns number (count of notifications marked as read).
deleteNotification — permanently deletes a notification.
| Argument | Type | Description |
|---|---|---|
notificationId | string | The ID of the notification to delete |
Returns null.
When notifications are created
Vextro creates notifications automatically in response to admin events:
| Trigger | Notification type |
|---|---|
| A workflow item is assigned to a user | workflow_assigned |
| A workflow submission is approved | workflow_approved |
| A workflow submission is rejected | workflow_rejected |
| A document is published | content_published |
| A document is updated | content_updated |
| A system-level event requires attention | system_alert |
| A user is mentioned in a document | mention |
Notifications are scoped to the recipient user. Each user only sees their own notifications.