DashboardSupportWelcome

👤 USER DOCS

Getting Started

Daily Operations

Shift Workspace & TasksPre-Shift SetupLine-Up CardsShift ReportsForms

Staff & Locations

Staff SchedulingManaging Locations

Oversight

Manager ReportsAnalyticsPre-Shift & Compliance

Incidents & Feedback

Incident ReportingAnonymous FeedbackMessages & Announcements

AI & Settings

AI ChatgearApp Settings

Administration

Dashboard & OnboardingAdmin

⚙️ DEVELOPER DOCS

Getting Started

Getting StartedDevelopmentDeployment Guide

Architecture

Architecture OverviewData FlowArchitecture Decision Records

Core Domain

Core DomainDatabase ReferenceLocations DomainAuth & RBACScheduling DomainReports DomainIncidents DomainNotifications DomainAudit Log & OptimizationDesign Audit Findings

Frontend

Frontend ArchitectureFormsLoading SkeletonsComponentsPWA & NotificationsimageScreenshots

API Reference

API Reference

Endpoints

POS Sales APIOptimization Data APISchedule Shifts APIEmployee Export APIReports APIIncidents APIAI Chat APIPush Notifications APIWebhooks APICron API

Contributing

ContributingcodeCode Examples

Security

Security & Compliance
Danvas IconDanvas
Danvas IconDanvas

Messages & Announcements

Internal team messaging with board announcements, categories, scheduling, and staff messaging

Danvas provides internal messaging for team communication, including company-wide announcements with categories and scheduling, plus targeted staff messages.

Board Announcements

The Board module provides company-wide announcements visible to all staff in a location. Announcements support categories, scheduling, inline editing, and read tracking.

Creating Announcements

Admins and managers can create announcements from the Board page:

  1. Navigate to Board
  2. Click "New Announcement"
  3. Select a category (General, Policy, Shift, Incident, Emergency)
  4. Add title and body content (max 4000 chars)
  5. Optionally target a specific location (default: all locations)
  6. Optionally add up to 4 media image URLs
  7. Optionally schedule for future publication (or publish immediately)
  8. Publish — announcement appears on the Board page (or at scheduled time)

Announcement Categories

Each announcement must have a category, which determines its visual badge color and notification priority:

CategoryBadge ColorUse CaseNotification Priority
GeneralPrimary blueRoutine updates, team newsNormal
PolicyPrimary bluePolicy changes, proceduresNormal
ShiftSuccess greenSchedule changes, shift notesNormal
IncidentEmber orangeSafety incidents, issuesHigh
EmergencyDestructive redUrgent safety, immediate actionHighest (bypasses DND)

Anonymous Feedback

Unauthenticated route for staff to share sensitive concerns

AI Chat

Ask plain-English questions about your operational data

On this page

Board AnnouncementsCreating AnnouncementsAnnouncement CategoriesScheduling AnnouncementsEditing AnnouncementsArchivalDatabase SchemaServer ActionsRead TrackingNotificationsStaff MessagingCreating MessagesMessage Status WorkflowDraft RecoveryNotifications

Categories are filterable — staff can filter the board to show only specific categories.

Scheduling Announcements

Announcements can be scheduled for future publication:

  • Scheduled At: Set a future date/time for the announcement to publish
  • Scheduled Section: Unpublished scheduled announcements appear in a "Scheduled" section visible only to admins/managers
  • Automatic Publication: At the scheduled time, the announcement automatically publishes and triggers notifications
  • Edit Before Publish: Scheduled announcements can be edited or deleted before publication

Editing Announcements

Announcements can be edited after publication:

  • Editable Fields: Title, body, location, media URLs, category
  • Edited Indicator: Edited announcements show "Edited [date]" below the creator line
  • Read Receipts Preserved: Editing does NOT reset read tracking
  • Audit Logged: All edits are logged with old/new values

Archival

  • Auto-Archive: Non-pinned announcements automatically archive after 14 days
  • Archived View: Admins/managers can toggle "Show Archived" to view old announcements
  • Pinned Exempt: Pinned announcements do not auto-archive

Database Schema

Announcements are stored in the announcements table:

ColumnTypeDescription
idtextPrimary key, UUIDv4
team_idtextTenant identifier
location_idtext?Null = all locations
creator_idtextFK → users
titletextMax 200 chars
bodytextMax 4000 chars
categorytextOne of: general, policy, shift, incident, emergency
media_urlstext[]Up to 4 image URLs
is_pinnedbooleanPinned to top of feed
scheduled_attimestamp?Future publication time
published_attimestamp?When published (null for scheduled-but-unpublished)
edited_attimestamp?When last edited
matrix_event_idtext?Matrix event for fanout tracking

Server Actions

ActionAuthDescription
getAnnouncementsAuthenticatedPaginated list, location-scoped, supports category filter
getAnnouncementReadSummariesAdminBatch read receipts for multiple announcements (N+1 fix)
createAnnouncementAdminInsert + matrix fanout + push fanout + Slack fanout
editAnnouncementAdminUpdate announcement, set edited_at, preserve reads
toggleAnnouncementPinAdminToggle pinned status
markAnnouncementReadAuthenticatedUpsert read receipt (IntersectionObserver)
getAnnouncementReadSummaryAdminPer-user read status for an announcement

Read Tracking

  • Each announcement tracks read receipts per user via announcementReads table
  • The ReadTracker component uses an IntersectionObserver — when a card is 50% visible for 1 second, it marks the announcement as read
  • Admins see a collapsible read-status list per announcement with per-user checkmarks
  • Staff can acknowledge announcements with an optional comment
  • Staff can ask questions on announcements (requires reply from admin/manager)

Notifications

New announcements trigger three fan-out channels:

  1. Matrix fan-out: pushes to Matrix rooms for the targeted audience
  2. Web Push fan-out: push notifications to subscribed staff devices
  3. Slack fan-out: posts to the location's configured Slack channel (or all location channels for global announcements)

Emergency-category announcements bypass quiet-hours/DND settings and use highest-priority notifications.

Staff Messaging

The Messages module enables direct and targeted staff messaging.

Creating Messages

  1. Navigate to Messages
  2. Select audience (specific staff, location, or all)
  3. Compose message content
  4. Set priority (normal or urgent)
  5. Send — message appears in staff inboxes

Message Status Workflow

Messages progress through statuses:

StatusDescription
DraftBeing composed, not yet sent
SentDelivered to recipient inboxes
ReadRecipient has opened the message

Draft Recovery

Messages being composed are auto-saved as drafts. If the page is closed, returning to Messages will restore the draft from localStorage.

Notifications

New messages trigger:

  • Push notification to subscribed staff
  • Badge count on Messages sidebar icon