Skip to content

Notification history, test send, per-status sound, and high-contrast theme - #744

Open
martinzhames wants to merge 4 commits into
stellar-vortex-protocol:mainfrom
martinzhames:drips/613-614-615-616
Open

martinzhames wants to merge 4 commits into
stellar-vortex-protocol:mainfrom
martinzhames:drips/613-614-615-616

Conversation

@martinzhames

Copy link
Copy Markdown

Summary

Notification history, test send, per-status sound, and high-contrast theme

What was solved

#613 — [Medium] Add a notification history/inbox panel

Add a bounded local notification history recorded at the point the dispatcher actually decides to notify, plus an inbox-style panel (accessible from NotificationSettings) that lists recent entries with links to their intent href. History is local-only, capped (e.g. 50), and excludes suppressed/quiet-hours notifications.

Addressed:

  • Changed: src/lib/notifications/dispatcher.ts, src/lib/notifications/dispatcher.ts, src/components/NotificationSettings.tsx, src/store/notificationPreferences.ts
  • Record a bounded (last ~50) local history of dispatched notifications at the point decideChannels decides to actually notify; do NOT record suppressed or quiet-hours notifications
  • Persist history locally (consistent with existing local-first notification preferences) using the existing persist helper
  • Add an inbox-style panel accessible from NotificationSettings listing history entries with links to the relevant intent href from buildNotificationBody

#614 — [Trivial] Add a "send test notification" button to NotificationSettings

Add a "Send test notification" button to NotificationSettings that builds a sample FeedItem-shaped payload and runs it through the existing decideChannels/buildNotificationBody dispatch pipeline, with a clearly-marked "Test:" body prefix, respecting quiet hours like a real notification.

Addressed:

  • Changed: src/components/NotificationSettings.tsx, src/lib/notifications/dispatcher.ts
  • Add a "Send test notification" button in src/components/NotificationSettings.tsx
  • Construct a sample FeedItem-shaped payload and run it through the existing decideChannels/buildNotificationBody pipeline exactly as a real update would
  • Prefix the test notification body with "Test:" so it is clearly labeled as a test

#615 — [Medium] Add per-status sound selection instead of one global sound toggle

Extend notification preferences so sound can be enabled/disabled per intent status instead of a single global toggle, with a migration-safe default that preserves existing users' flat channels.sound value across all statuses. Update the dispatcher to consult per-status sound settings and add per-status controls in NotificationSettings, including i18n strings and tests.

Addressed:

  • Changed: src/store/notificationPreferences.ts, src/lib/notifications/dispatcher.ts, src/components/NotificationSettings.tsx
  • Extend NotificationPreferences channel/sound shape to support per-status sound enablement keyed by NOTIFIABLE_STATUSES, while keeping the existing flat channels.sound as the migration source/default.
  • Ensure persisted-store migration: existing users with flat channels.sound: boolean get that value applied to every status (all-on/all-off preserved).
  • Update decideChannels in src/lib/notifications/dispatcher.ts to consult the per-status sound setting instead of the flat channels.sound boolean.

#616 — [Medium] Add a high-contrast theme variant

Extend SettingsPanel's theme preference with a high-contrast option: add "high-contrast" to ThemePreference, handle it in applyTheme/resolveTheme without breaking system fallback, add a third option with i18n strings, and add an html[data-theme="high-contrast"] CSS variant in globals.css using WCAG AAA contrast via custom-property substitution only. Addressed: Changed: src/components/SettingsPanel.tsx, src/app/globals.css Add "high-contrast" to the ThemePreference type in src/components/SettingsPanel.tsx Update applyTheme and resolveTheme to handle "high-contrast" while preserving existing system-preference fallback via matchMedia Add a third option to SettingsPanel's theme for high-contrast

Changes

  • src/components/NotificationSettings.tsx (modify)
  • src/app/globals.css (modify)
  • src/lib/notifications/dispatcher.ts (modify)
  • src/components/SettingsPanel.tsx (modify)
  • src/store/notificationPreferences.ts (modify)

Approach

  1. [Medium] Add a notification history/inbox panel #613 — [Medium] Add a notification history/inbox panel (Changed: src/lib/notifications/dispatcher.ts, src/lib/notifications/dispatcher.ts, src/components/NotificationSettings.tsx, src/store/notificationPreferences.ts)
  2. [Trivial] Add a "send test notification" button to NotificationSettings #614 — [Trivial] Add a "send test notification" button to NotificationSettings (Changed: src/components/NotificationSettings.tsx, src/lib/notifications/dispatcher.ts)
  3. [Medium] Add per-status sound selection instead of one global sound toggle #615 — [Medium] Add per-status sound selection instead of one global sound toggle (Changed: src/store/notificationPreferences.ts, src/lib/notifications/dispatcher.ts, src/components/NotificationSettings.tsx)
  4. [Medium] Add a high-contrast theme variant #616 — [Medium] Add a high-contrast theme variant (Changed: src/components/SettingsPanel.tsx, src/app/globals.css)

Issues

Closes #613
Closes #614
Closes #615
Closes #616

@drips-wave

drips-wave Bot commented Oct 22, 2026

Copy link
Copy Markdown

@martinzhames Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits.

You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀

Learn more about application limits

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant