Merged
Conversation
Introduce Famick.HomeManagement.Messaging library that replaces scattered inline email HTML and the evaluator/dispatcher notification pipeline with a unified IMessageService backed by Mustache templates. - Add MessageType enum (consolidates NotificationType + transactional types) - Add Mustache templates for all 9 message types across 5 transport channels - Add IMessageService with SendAsync (preference-routed) and SendTransactionalAsync - Add transport abstractions: email, SMS, push, in-app - Add CAN-SPAM/GDPR compliance footer auto-inserted on notification emails - Add RFC 2369 List-Unsubscribe and RFC 8058 One-Click headers - Split ExpiryLowStock into separate Expiry and LowStock evaluators - Migrate transactional email call sites to IMessageService - Refactor background services to use IMessageService instead of dispatchers - Add MessagingStartup with AddMessaging() and ValidateMessagingTemplates() - Add Famick.HomeManagement.Messaging.Tests.Unit (21 tests) - Add EF migration for SmsEnabled, PhoneNumber, and ExpiryLowStock data split
Tracks cloud commit for unified messaging service migration (PushMessageTransport, FeatureAnnouncementEvaluator, Messaging ref).
- Add MessageTypeExtensions with IsNotification()/IsTransactional() - Replace all hardcoded (int)type threshold checks with extension methods - Reject transactional message types in preference update validator - Add defense-in-depth filter in NotificationService.UpdatePreferencesAsync - Add Push and SMS toggle columns to NotificationPreferencesEditor UI
…minder Add content hash-based change detection to the notification background service. Daily notifications are skipped when the underlying data hasn't changed since the last notification. Saturday always sends as a weekly reminder regardless of changes. - Add ContentHash column to Notification entity - Add ContentHasher utility (SHA256 of serialized IMessageData) - Add GetLastContentHashAsync to INotificationService - Compare hashes in NotificationBackgroundService before dispatching - Pass content hash through RenderedMessage to InAppMessageTransport
Move notification preferences from Settings to the Profile page in both web and mobile apps so users manage them alongside their personal info. Web: - Move NotificationPreferencesEditor from Settings.razor to Profile.razor Mobile: - Add Notifications tab to Profile flyout in AppShell - Settings page redirects to Profile > Notifications tab - Add SmsEnabled to mobile NotificationPreferenceItemDto - Add tab_notifications.svg icon
Wrap the MudMenu activator content in a MudButton with explicit context.ToggleAsync handler. MudBlazor 9.x no longer auto-opens menus from ActivatorContent clicks — requires explicit wiring. Also rename context to menuContext to avoid collision with the enclosing AuthorizeView context.
… cleanliness and reduce clutter.
Add scripts/PreviewEmails console project that renders all 9 message templates to HTML files with sample data for local review. Generates both transactional and notification emails with compliance footers. Usage: dotnet run --project scripts/PreviewEmails [MessageType]
Convert UTC start times to the tenant's configured time zone before formatting in the CalendarEventEvaluator. Times now display as "6:00 PM" instead of "18:00 UTC".
Add a blue (#1976D2) header bar to the email layout with the Famick logo loaded from the app's static assets URL. Notification emails use the hosted logo-dark.svg via BaseUrl; transactional emails fall back to a styled text heading. Layout also updated with card-style wrapper, rounded corners, and light background.
Add "View in App" buttons to notification emails (Expiry, LowStock, TaskSummary, CalendarReminder) using BaseUrl + DeepLinkUrl for universal links that open in the native app on mobile. Update email layout to match website branding (Forest Green header, icon, Roboto font, dark mode support). Add Compliance configuration section to appsettings.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.