diff --git a/frontend/src/lib/server/email.ts b/frontend/src/lib/server/email.ts index b1ea3a8..f91486b 100644 --- a/frontend/src/lib/server/email.ts +++ b/frontend/src/lib/server/email.ts @@ -132,7 +132,6 @@ export async function sendMentionEmail(opts: { message: string; dashboardUrl: string; }) { - if (await isDemoMode()) return; const { to, parentName, authorName, message, dashboardUrl } = opts; await resend.emails.send({ diff --git a/frontend/src/lib/server/services/chat.ts b/frontend/src/lib/server/services/chat.ts index f92ffae..e918587 100644 --- a/frontend/src/lib/server/services/chat.ts +++ b/frontend/src/lib/server/services/chat.ts @@ -74,15 +74,21 @@ async function notifyMentionedParents( .collection('fams') .getOne(famId) .catch(() => null); + // Don't send emails for the demo family. + if (fam?.slug === 'showboaters') return; const dashboardUrl = `${siteUrl}/${fam?.slug || famId}`; for (const parent of mentioned) { - await sendMentionEmail({ - to: parent.email, - parentName: parent.name || 'there', - authorName: message.authorName || 'Family member', - message: content, - dashboardUrl - }); + try { + await sendMentionEmail({ + to: parent.email, + parentName: parent.name || 'there', + authorName: message.authorName || 'Family member', + message: content, + dashboardUrl + }); + } catch (err) { + console.error(`[chat] Failed to send mention email to ${parent.email}:`, err); + } } } diff --git a/frontend/src/lib/stores/chat.svelte.ts b/frontend/src/lib/stores/chat.svelte.ts index 19611f8..c64cd15 100644 --- a/frontend/src/lib/stores/chat.svelte.ts +++ b/frontend/src/lib/stores/chat.svelte.ts @@ -163,22 +163,24 @@ class ChatStore { if (record.authorId !== this.actorId) { if (!this.open) this.unread++; this.playDunk(); - this.notifyIfMentioned(record); + if (this.notifyIfMentioned(record) && this.open) this.unread++; } } // Toast the current user when a message @mentions them by name. - private notifyIfMentioned(record: ChatMessage) { + // Returns true if the user was mentioned. + private notifyIfMentioned(record: ChatMessage): boolean { const lower = (record.content || '').toLowerCase(); const me = this.members.find((m) => m.id === this.actorId); - if (!me || !me.name) return; - if (!lower.includes('@' + me.name.toLowerCase())) return; + if (!me || !me.name) return false; + if (!lower.includes('@' + me.name.toLowerCase())) return false; addAutoDismissNotice({ type: 'info', title: 'You were mentioned 👋', message: `${record.authorName || 'Someone'}: ${record.content}`, dismissible: true }); + return true; } private onTyping(action: string, record: TypingRow) {