Notifications Feature Capsule
Quick Summary
Email and toast notification system for maintenance due/overdue items and expiring documents. Uses Resend for email delivery and provides admin-editable email templates. User-scoped data with per-entry email notification toggles.
API Endpoints
User Endpoints
GET /api/notifications/summary- Get notification summary (counts for login toast)GET /api/notifications/maintenance- Get due/overdue maintenance itemsGET /api/notifications/documents- Get expiring/expired documents
Admin Endpoints
GET /api/admin/email-templates- List all email templatesGET /api/admin/email-templates/:key- Get single email templatePUT /api/admin/email-templates/:key- Update email templatePOST /api/admin/email-templates/:key/preview- Preview template with sample variables
Structure
- api/ - HTTP endpoints, routes, validators
- domain/ - Business logic, services, types
- data/ - Repository, database queries
- migrations/ - Feature-specific schema
- tests/ - All feature tests
Email Templates
Predefined Templates (4 total)
- maintenance_due_soon - Sent when maintenance is due within 30 days or 500 miles
- maintenance_overdue - Sent when maintenance is past due
- document_expiring - Sent when document expires within 30 days
- document_expired - Sent when document has expired
Template Variables
Templates use {{variableName}} syntax for variable substitution.
Maintenance templates:
- userName, vehicleName, category, subtypes, dueDate, dueMileage
Document templates:
- userName, vehicleName, documentType, documentTitle, expirationDate
Dependencies
Internal
core/auth- Authentication plugincore/logging- Structured loggingcore/config- Database pool and secrets
External
resend- Email delivery service
Database
- Tables:
email_templates,notification_logs - FK:
maintenance_schedules(email_notifications),documents(email_notifications)
Business Rules
Notification Triggers
Maintenance Due Soon:
- Next due date within 30 days OR
- Next due mileage within 500 miles of current odometer
Maintenance Overdue:
- Next due date in the past OR
- Current odometer exceeds next due mileage
Document Expiring Soon:
- Expiration date within 30 days
Document Expired:
- Expiration date in the past
Email Notification Toggle
- Per-entry toggle on
maintenance_schedules.email_notifications - Per-entry toggle on
documents.email_notifications - Default:
false(opt-in)
Login Toast Summary
- Shows count of maintenance items requiring attention
- Shows count of documents requiring attention
- Displayed once per session on successful login
Security Requirements
- All queries user-scoped (filter by user_id)
- Prepared statements (never concatenate SQL)
- User endpoints require JWT authentication
- Admin endpoints require admin role
- Template editing restricted to admins
- Email logs track all sent notifications
Email Service Configuration
Environment Variables
RESEND_API_KEY- Resend API key (required, stored in secrets)FROM_EMAIL- Sender email address (default: noreply@motovaultpro.com)
Email Delivery
- Uses Resend API for transactional emails
- Converts plain text templates to HTML with line breaks
- Tracks all sent emails in
notification_logstable - Logs failures with error messages for debugging
Testing
# Run feature tests
npm test -- features/notifications
Future Enhancements
- Batch notification processing (scheduled job)
- Notification frequency controls (daily digest, etc.)
- User preference for notification types
- SMS notifications (via Twilio or similar)
- Push notifications (via FCM or similar)