⚠ This document is superseded (v1 reference — not confirmed v2 design).

Module 13: Notifications

SUPERSEDED 2026-06-11 — Sprig-era feature spec (pre-pivot). The authoritative current design is the locked schema in docs/SCHEMA.md, the module's entry in docs/PROJECT_DECISIONS.md, and the responsibility/seam maps in docs/MODULE_INDEX.md + docs/CROSS_MODULE_CONTRACTS.md. This file is retained for historical feature context only; do NOT treat its scope/table/feature claims as current (it predates the nursery→generic pivot, the HR-out-of-scope cut, the identity/payments/integrations/files extractions, and the schema locks). Superseded note added 2026-06-11.

Status: ✅ Locked for v1.0 Schema: notifications Feature count: 128 features in v1.0 Build estimate: Strategic spec only — implementation effort TBD Last updated: 2026-05-12

Overview

Notifications is the cross-cutting "send things to people" infrastructure module. It owns email, SMS, push, in-app, web push, Slack, and webhook delivery; templates; customer/staff preferences; compliance enforcement; multi-channel orchestration; deliverability monitoring; campaign management; and analytics.

Other modules emit notification-triggering events; Notifications decides how, when, and where to deliver them based on tenant configuration, customer preferences, compliance rules, and rate limits.

Notifications is consumed by every module via event subscription. Notifications depends on Module 5 (CRM) for customer preferences, Module 10 (Admin) for tenant configuration, and external providers (Resend, Twilio, FCM/APNS) for actual delivery.

Routing note (Architecture Redesign 2026-05-13): External delivery providers (Resend, Twilio, FCM, APNS) are owned and configured via the Integrations module (Core & Platform Layer). They follow the unified connector pattern. Notifications still owns orchestration, templates, multi-channel routing, compliance enforcement (CAN-SPAM/TCPA/GDPR), audit log, and analytics; Integrations owns the provider connectors (API client, authentication, delivery API calls, webhook receivers for delivery status). The line: Notifications decides what to send, when, to whom, and in what shape; Integrations executes the delivery against a specific provider's API.

Target Customer Profile

  • Mid-size growth-stage retail nursery, $500K–$5M revenue
  • Sends 1,000–10,000 transactional notifications per month
  • Sends 5,000–50,000 marketing notifications per month at peak season
  • Mix of customer-facing and tenant-staff-facing notifications
  • Email + SMS + push for customer communications
  • Email + in-app for staff alerts
  • Spring-weighted notification volume (3x normal in March-May)

Architecture Principles

Multi-channel orchestration

Same notification can be sent via multiple channels with deduplication. Channel priority and fallback configured per notification type.

Compliance-first

CAN-SPAM, TCPA, GDPR consent enforcement is built into the dispatch layer. Notifications that would violate compliance are blocked, not sent.

Configurability

Every channel, template, schedule, rate limit, and policy is configurable per tenant via the Owner Dashboard (Module 10).

Tier Behavior

Tier Notifications capability
Starter Email channel only; transactional + basic marketing; built-in templates; basic analytics
Pro All channels (email, SMS, push, in-app, web push); custom templates; A/B testing; predictive send-time; analytics
Enterprise All Pro + Slack channel + webhook channel + custom From/Reply-To + provider failover + approval workflows + dedicated sender reputation + advanced compliance monitoring

Feature Hierarchy (128 features across 15 groups)

Group 1: Notification Channels (8 features)

# Feature Notes
1.1 Email channel Resend integration; built-in for all tenants
1.2 SMS channel Twilio integration; Pro+ tier feature
1.3 Push notification channel (mobile) FCM (Android), APNS (iOS)
1.4 In-app notification channel Real-time within app
1.5 Web push channel For tenants using web admin
1.6 Slack channel (Enterprise) Tenant Slack workspace integration
1.7 Webhook channel (Enterprise) External system notifications
1.8 Multi-channel orchestration Same notification delivered via multiple channels with deduplication

Group 2: Email Notifications (12 features)

# Feature Notes
2.1 Transactional email (receipts, confirmations) Always delivered (not subject to marketing opt-out)
2.2 Marketing email (campaigns, offers) Subject to opt-out
2.3 Email templates per tenant Branded with tenant logo, colors
2.4 Email template versioning Multiple template versions per notification type
2.5 Email scheduling Send at specific time
2.6 Email A/B testing Test variants (Pro+)
2.7 Email open tracking Pixel-based; respects DNT
2.8 Email click tracking Link-based; respects DNT
2.9 Email bounce handling Hard bounces → mark email invalid; soft bounces tracked separately
2.10 Email unsubscribe handling One-click unsubscribe per CAN-SPAM
2.11 Email authentication (SPF, DKIM, DMARC) Configurable per tenant for deliverability
2.12 Custom From address & Reply-To address per tenant "info@nursery-name.com" instead of generic Vrida address

Group 3: SMS Notifications (10 features)

# Feature Notes
3.1 Transactional SMS (order ready, etc.) Pro+ tier; Twilio
3.2 Marketing SMS (offers, campaigns) Requires explicit opt-in per TCPA
3.3 SMS templates per tenant Branded sender ID where possible
3.4 SMS character limits 160 char standard; long messages split
3.5 SMS scheduling Delivery at specific time
3.6 SMS opt-in management Reply YES to subscribe; verify before sending
3.7 SMS opt-out management Reply STOP to unsubscribe; immediate respect
3.8 SMS delivery status tracking Sent/delivered/failed states
3.9 SMS link tracking Short URL with tracking
3.10 Two-way SMS conversation Customer replies → routed to staff

Group 4: Push Notifications (8 features)

# Feature Notes
4.1 Push registration on customer app App requests permission, registers with backend
4.2 Push opt-in management User can opt-in/out per category
4.3 Push delivery scheduling Send at specific time
4.4 Push notification badges App icon shows unread count
4.5 Push notification deep-linking Tap notification → opens specific app screen
4.6 Push delivery status Successful/failed; reasons for failure
4.7 Push notification categories Plant care / orders / loyalty / promotions — opt-in per category
4.8 Push notification analytics Open rate, action rate

Group 5: In-App Notifications (6 features)

# Feature Notes
5.1 In-app notification feed Bell icon shows unread count; click to see all
5.2 In-app notification persistence Notifications saved per user
5.3 Mark as read User dismisses individual or all
5.4 Notification categories in-app Same as push categories
5.5 Real-time delivery WebSocket/SSE for instant arrival
5.6 Notification action buttons "View order", "Mark resolved", "Snooze" buttons

Group 6: Notification Templates & Customization (12 features)

# Feature Notes
6.1 Template library Pre-built templates for common notifications
6.2 Custom template creation Tenant builds custom notification templates
6.3 Template variables Inject customer name, order details, etc.
6.4 Multi-language templates Per-customer language preference
6.5 Template preview See rendered template before sending
6.6 Template branding Logo, colors, fonts per tenant
6.7 Template versioning Edit history; rollback
6.8 Template approval workflow (Enterprise) Marketing manager approves before tenant uses
6.9 Template AI assistance AI suggests copy, subject lines, content
6.10 Template performance tracking Open/click rates per template version
6.11 Multi-step journeys with branching logic "If open → SMS reminder; if not → second email" — automated workflows
6.12 Dynamic content blocks Same email, different content per segment (e.g., "Annuals section" for one segment, "Trees section" for another)

Group 7: Customer-Facing Notifications (10 features)

# Feature Notes
7.1 Receipt email Sale receipt to customer
7.2 Order confirmation email Reservation/order created
7.3 Order ready notification Customer notified plant is ready for pickup
7.4 Order modified notification Order changes communicated
7.5 Order cancellation notification With reason
7.6 Plant care reminder Personalized to customer's plants
7.7 Loyalty status notification Tier change, anniversary, promotion
7.8 Marketing campaign notification Spring sale, new arrivals, etc.
7.9 Customer service response Tenant's reply to customer message
7.10 Payment receipt Confirmation of payment received

Group 8: Tenant-Facing Notifications (10 features)

# Feature Notes
8.1 Operational alert Low stock, A/R aging, security events
8.2 Financial alert Daily sales summary, weekly P&L
8.3 Customer alert New review, complaint, large purchase
8.4 Vendor alert PO confirmations, late deliveries
8.5 System alert Maintenance, downtime, version updates
8.6 Compliance alert Tax filing due, certification expiring
8.7 Security alert Suspicious activity, unauthorized access
8.8 Tier limit alert "Approaching SKU limit"
8.9 Subscription alert Trial ending, charge failed
8.10 Performance alert Site capacity, system performance issues

Group 9: Notification Scheduling & Delivery (13 features)

# Feature Notes
9.1 Real-time delivery Notification fires immediately on event
9.2 Scheduled delivery "Send this at 10am Saturday"
9.3 Recurring delivery Weekly digest, monthly summary
9.4 Delivery time-of-day preferences Respect customer's preferred time
9.5 Delivery frequency limits Max per day; rate limiting per customer
9.6 Delivery deduplication Same notification not sent twice
9.7 Delivery retry on failure Failed delivery retries up to N times
9.8 Delivery batching Multiple notifications batched into digest
9.9 Notification quotas per tenant Track SMS, email volume against tenant limits
9.10 Notification quota auto-purchasing or overage Tenant runs out → automatic purchase or overage charge
9.11 Notification quiet hours (per customer) "Don't send between 10pm-7am customer local time"
9.12 Notification predictive send-time (AI) AI predicts best time to send per customer
9.13 Notification expiration / time-sensitivity Time-sensitive notifications expire; e.g., "ready for pickup" only valid 4 hours

Group 10: Notification Preferences & Opt-Out (8 features)

# Feature Notes
10.1 Customer notification preferences (granular) Per-channel, per-category opt-in/out
10.2 Tenant staff notification preferences What staff wants alerted on
10.3 Global opt-out (no notifications at all) User completely opts out
10.4 Notification preference inheritance Default → channel → category → specific
10.5 Opt-in verification (TCPA) Confirmation before SMS marketing
10.6 Opt-out audit trail When/who opted out of what
10.7 Compliance opt-out enforcement Marketing must respect opt-out within 10 days (CAN-SPAM)
10.8 Preference center User-facing page to manage all preferences

Group 11: Notification Analytics & Reporting (9 features)

# Feature Notes
11.1 Delivery success rate % delivered vs failed per channel
11.2 Engagement rate Open + click + action rate
11.3 Channel performance Which channels work best
11.4 Campaign performance ROI of marketing notifications
11.5 Notification volume by tenant How many sent per period
11.6 Notification costs (SMS, etc.) Tenant sees their notification spend
11.7 Notification engagement per customer Which customers respond, which don't
11.8 Notification disruption (unsubscribe pattern) Where do users opt out
11.9 Notification spam testing / score prediction "This message has X% spam likelihood — review before sending"

Group 12: Compliance & Regulatory (7 features)

# Feature Notes
12.1 CAN-SPAM compliance Sender info, unsubscribe link, address
12.2 TCPA compliance SMS opt-in verification, opt-out respect
12.3 GDPR consent tracking When/how customer consented to marketing
12.4 Notification audit log All sent notifications tracked
12.5 Unsubscribe compliance One-click unsubscribe per CAN-SPAM
12.6 Sensitive data masking PII in notification logs masked
12.7 Compliance pre-check Before send, system flags CAN-SPAM, TCPA, and opt-in risk indicators. Tenant attests transactional vs marketing intent on flagged sends. Audit log captures the attestation. System does not unilaterally block sends; the tenant is the legal sender.

Group 13: Multi-Channel Orchestration (6 features)

# Feature Notes
13.1 Same notification, multiple channels Email + SMS + push for same event
13.2 Channel priority routing "Try email first, fall back to SMS"
13.3 Channel cost optimization Use cheapest channel for non-urgent
13.4 Cross-channel deduplication Same user, same notification = once
13.5 Cross-channel analytics Aggregate response across channels
13.6 Per-channel message customization Same notification, different copy per channel (email vs SMS vs push)

Group 14: Notification Operations & Reliability (6 features)

# Feature Notes
14.1 Provider failover If Resend down, fall back to alternative
14.2 Rate limiting Per-tenant API limits
14.3 Queue management Pending notifications visible
14.4 Bulk notification handling High-volume campaigns optimized
14.5 Notification health monitoring Alerts on provider issues
14.6 Sender reputation & deliverability monitoring Track sender score, blacklist status, ISP performance

Group 15: Campaign Management (3 features)

# Feature Notes
15.1 Notification campaign approval workflow Marketing manager approves before tenant sends campaigns (Enterprise)
15.2 A/B test winner auto-promotion Best-performing variant automatically wins; full send to remaining segment
15.3 Notification event aggregation Multiple events in short time → single aggregated notification (prevents fatigue)

Configurable Defaults (Owner Dashboard)

Configurable Default
Email channel ON for all tenants
SMS channel OFF (Pro+ feature; opt-in per tenant)
Push channel ON (customer app)
In-app channel ON
Slack channel OFF (Enterprise; opt-in)
Webhook channel OFF (Enterprise; opt-in)
Default delivery frequency limit (per customer per day) 5 messages max per day
Default delivery time-of-day 8 AM - 8 PM customer local time
Marketing notifications opt-in default OFF (must opt in)
Transactional notifications Always ON (cannot opt out)
SMS opt-in verification Required (TCPA compliance)
Email open tracking ON
Email click tracking ON
Notification analytics retention 90 days
AI template suggestion ON (Pro+)
Template A/B testing OFF (Pro+; opt-in)
Multi-channel deduplication ON
Channel failover OFF (Enterprise feature)
Notification queue visibility Manager+
Bulk notification batch size 100 per batch
Email authentication required Pro+ tier; configurable
Custom From address per tenant OFF (Pro+)
Notification quotas Per-tier — Starter: email 1,000/mo (transactional only), SMS 0 (SMS is Pro+); Pro: email 10K/mo, SMS 1,000/mo; Enterprise: email 100K/mo, SMS 10,000/mo
Auto-purchase notification overage OFF (tenant must opt-in)
Notification quiet hours per customer ON; default 10pm-7am customer local time
AI predictive send-time ON (Pro+)
Spam score check before send ON for marketing campaigns
Compliance pre-check before send ON (always)
Campaign approval workflow OFF (Enterprise; opt-in)
A/B test winner auto-promotion OFF (Enterprise; opt-in)
Event aggregation OFF (configurable to ON for non-urgent)
Sender reputation monitoring ON (Pro+)

AI Features in Notifications

Feature # AI capability
6.9 AI template assistance (suggest copy, subjects)
11.7 AI customer engagement scoring
11.4 AI campaign performance optimization
8.7 AI suspicious activity detection in security alerts
2.6 AI A/B test results interpretation
13.3 AI cost-optimized channel selection
9.12 AI predictive send-time (best time to send per customer)
11.9 AI spam score prediction
15.3 AI event aggregation timing

All AI features route via AIService (AI / Intelligence module; model-as-config; AWS Bedrock Claude Haiku 4.5 is the default model). Notifications does not call Bedrock directly.

Events Emitted

  • notifications.email_sent
  • notifications.email_delivered
  • notifications.email_opened
  • notifications.email_clicked
  • notifications.email_bounced
  • notifications.email_blocked (deliverability)
  • notifications.email_authentication_failed
  • notifications.sms_sent
  • notifications.sms_delivered
  • notifications.sms_failed
  • notifications.push_sent
  • notifications.push_delivered
  • notifications.push_opened
  • notifications.in_app_sent
  • notifications.in_app_read
  • notifications.notification_failed
  • notifications.notification_queued
  • notifications.opt_in_received
  • notifications.opt_out_received
  • notifications.template_created
  • notifications.template_updated
  • notifications.campaign_started
  • notifications.campaign_completed
  • notifications.compliance_check_passed
  • notifications.compliance_check_failed
  • notifications.quota_threshold_reached
  • notifications.quota_exceeded
  • notifications.sender_reputation_alert
  • notifications.predictive_send_time_calculated
  • notifications.event_aggregated
  • notifications.campaign_approval_requested
  • notifications.campaign_approved
  • notifications.ab_test_winner_promoted

Events Consumed

All modules emit events that may trigger notifications:

  • pos.sale_completed → receipt
  • orders.ready_for_pickup → ready notification
  • inventory.stock_low → low stock alert
  • crm.churn_risk_detected → re-engagement campaign
  • production.lot_ready → "New arrivals" notification
  • billing.charge_failed → tenant payment alert
  • audit.security_event → security alert
  • multi_loc.site_capacity_alert → tenant alert
  • All other operational events

API Contract (NotificationsService — public methods)

High-level surface (detailed signatures during implementation):

  • Send: sendEmail, sendSMS, sendPush, sendInApp, sendWebPush, sendSlack, sendWebhook, sendMultiChannel
  • Templates: createTemplate, updateTemplate, previewTemplate, versionTemplate, getTemplateLibrary, setupJourney, addContentBlock
  • Compliance: verifyOptIn, recordOptOut, complianceCheck, getAuditTrail
  • Quotas: getQuotaStatus, purchaseQuota, setQuotaLimits
  • Analytics: getDeliveryStats, getEngagement, getCampaignROI, predictSpamScore, getSenderReputation
  • Scheduling: scheduleNotification, predictSendTime, setQuietHours, expireNotification, aggregateEvents
  • Campaigns: createCampaign, requestApproval, approveCampaign, promoteWinner, analyzePerformance
  • Channel orchestration: setChannelPriority, customizePerChannel, enableFailover

Out of Scope

Capability Why excluded
Voice call notifications Out of scope
Postal mail notifications Out of scope
Fax notifications Out of scope
In-store kiosk display notifications Out of scope
Multi-tenant marketing platform integration (e.g., Marketo) Out of scope
Native iOS/Android Vrida admin app Future v1.5
Custom SMS templates with shortcodes Future feature
Notification A/B testing for all tiers Pro+ only
Internal Vrida support notifications Out of scope (internal Vrida tool)
Email warmup (gradual sending volume increase) Handled by Resend
Email render testing across clients (Gmail, Outlook) Out of scope (specialized tool)
Custom IP for sending (multi-IP rotation) Handled by Resend
Notification ticket integration (auto-create support ticket) No ticket system in v1.0
Voice assistant notifications (Alexa, Siri) Future v2.0

Gaps Identified from Market Research

Source: See docs/MARKET_RESEARCH_GAPS.md for the master gap registry. Status: All gaps below are Open — pending decision. None have been accepted into scope yet.

Gap # Gap What's missing in this module Research source Possible options
25 AI marketing copilot at delivery No AI-suggested campaign timing layer yet Research §6.3.5 Deferred (v1.2) — Coupled with CRM Gap #25 in v1.2 AI bundle.
Last modified: Jun 17, 2026, 6:57 PM PT
On this page
Esc