Backend:
- New MailNotification model (models/mail/notification.go) with user_id,
conversation_id, message_id, from_addr, subject, preview, is_read
- CreateMailNotification on inbound message delivery
- MarkMailNotificationsReadForConversation when user opens conversation
- GetUnreadMailNotificationCount for navbar badge
- ListMailNotifications API endpoint (GET /api/v1/mail/notifications)
- PurgeOldMailNotifications cron job (daily, deletes >30 days old)
- SSE notification-count event now sends real unread count
Frontend:
- Removed playNotificationSound from MailApp (sound handled by Gitea's
notification system via notification-count SSE event)
- SSE listener still refreshes thread list + active thread on mail-message
Assisted-By: Cline:anthropic-claude-sonnet-4-20250514