From 732f2fb0e6e59c0241579f1b23fa94b82e1d6b30 Mon Sep 17 00:00:00 2001 From: elpatron Date: Tue, 30 Sep 2025 18:30:27 +0200 Subject: [PATCH] =?UTF-8?q?F=C3=BCge=20Impressum/Datenschutz-Links=20zu=20?= =?UTF-8?q?allen=20Benutzer-E-Mails=20hinzu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Alle Benutzer-E-Mails enthalten jetzt Links zu Impressum/Datenschutz - Schöner blauer Info-Block mit 📋 Icon in HTML-E-Mails - Text-Links in allen Text-Versionen der E-Mails - Betroffen: Pending-Buchungen, Bestätigungen, Stornierungen - Admin-E-Mails bleiben unverändert - Konsistentes Design und Benutzerfreundlichkeit - Direkte Navigation zu /legal für rechtliche Informationen --- src/server/lib/email-templates.ts | 24 ++++++++++++++++++++++++ src/server/rpc/bookings.ts | 6 +++--- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/src/server/lib/email-templates.ts b/src/server/lib/email-templates.ts index 0fdc53d..3264a0b 100644 --- a/src/server/lib/email-templates.ts +++ b/src/server/lib/email-templates.ts @@ -61,10 +61,18 @@ async function renderBrandedEmail(title: string, bodyHtml: string): PromiseHallo ${name},

wir haben deine Anfrage für ${formattedDate} um ${time} erhalten.

Wir bestätigen deinen Termin in Kürze. Du erhältst eine weitere E-Mail, sobald der Termin bestätigt ist.

+
+

📋 Rechtliche Informationen:

+

Weitere Informationen findest du in unserem Impressum und Datenschutz.

+

Liebe Grüße,
Stargirlnails Kiel

`; return renderBrandedEmail("Deine Terminanfrage ist eingegangen", inner); @@ -73,6 +81,10 @@ export async function renderBookingPendingHTML(params: { name: string; date: str export async function renderBookingConfirmedHTML(params: { name: string; date: string; time: string; cancellationUrl?: string }) { const { name, date, time, cancellationUrl } = params; const formattedDate = formatDateGerman(date); + const domain = process.env.DOMAIN || 'localhost:5173'; + const protocol = domain.includes('localhost') ? 'http' : 'https'; + const legalUrl = `${protocol}://${domain}/legal`; + const inner = `

Hallo ${name},

wir haben deinen Termin am ${formattedDate} um ${time} bestätigt.

@@ -88,6 +100,10 @@ export async function renderBookingConfirmedHTML(params: { name: string; date: s Termin stornieren ` : ''} +
+

📋 Rechtliche Informationen:

+

Weitere Informationen findest du in unserem Impressum und Datenschutz.

+

Liebe Grüße,
Stargirlnails Kiel

`; return renderBrandedEmail("Termin bestätigt", inner); @@ -96,10 +112,18 @@ export async function renderBookingConfirmedHTML(params: { name: string; date: s export async function renderBookingCancelledHTML(params: { name: string; date: string; time: string }) { const { name, date, time } = params; const formattedDate = formatDateGerman(date); + const domain = process.env.DOMAIN || 'localhost:5173'; + const protocol = domain.includes('localhost') ? 'http' : 'https'; + const legalUrl = `${protocol}://${domain}/legal`; + const inner = `

Hallo ${name},

dein Termin am ${formattedDate} um ${time} wurde abgesagt.

Bitte buche einen neuen Termin. Bei Fragen helfen wir dir gerne weiter.

+
+

📋 Rechtliche Informationen:

+

Weitere Informationen findest du in unserem Impressum und Datenschutz.

+

Liebe Grüße,
Stargirlnails Kiel

`; return renderBrandedEmail("Termin abgesagt", inner); diff --git a/src/server/rpc/bookings.ts b/src/server/rpc/bookings.ts index 75ab11c..b2925a9 100644 --- a/src/server/rpc/bookings.ts +++ b/src/server/rpc/bookings.ts @@ -131,7 +131,7 @@ const create = os await sendEmail({ to: input.customerEmail, subject: "Deine Terminanfrage ist eingegangen", - text: `Hallo ${input.customerName},\n\nwir haben deine Anfrage für ${formattedDate} um ${input.appointmentTime} erhalten. Wir bestätigen deinen Termin in Kürze.\n\nZur Website: ${homepageUrl}\n\nLiebe Grüße\nStargirlnails Kiel`, + text: `Hallo ${input.customerName},\n\nwir haben deine Anfrage für ${formattedDate} um ${input.appointmentTime} erhalten. Wir bestätigen deinen Termin in Kürze.\n\nRechtliche Informationen: ${generateUrl('/legal')}\nZur Website: ${homepageUrl}\n\nLiebe Grüße\nStargirlnails Kiel`, html, }).catch(() => {}); })(); @@ -276,7 +276,7 @@ const updateStatus = os await sendEmailWithAGB({ to: booking.customerEmail, subject: "Dein Termin wurde bestätigt - AGB im Anhang", - text: `Hallo ${booking.customerName},\n\nwir haben deinen Termin am ${formattedDate} um ${booking.appointmentTime} bestätigt.\n\nWichtiger Hinweis: Die Allgemeinen Geschäftsbedingungen (AGB) findest du im Anhang dieser E-Mail. Bitte lies sie vor deinem Termin durch.\n\nFalls du den Termin stornieren möchtest, kannst du das hier tun: ${cancellationUrl}\n\nZur Website: ${homepageUrl}\n\nBis bald!\nStargirlnails Kiel`, + text: `Hallo ${booking.customerName},\n\nwir haben deinen Termin am ${formattedDate} um ${booking.appointmentTime} bestätigt.\n\nWichtiger Hinweis: Die Allgemeinen Geschäftsbedingungen (AGB) findest du im Anhang dieser E-Mail. Bitte lies sie vor deinem Termin durch.\n\nFalls du den Termin stornieren möchtest, kannst du das hier tun: ${cancellationUrl}\n\nRechtliche Informationen: ${generateUrl('/legal')}\nZur Website: ${homepageUrl}\n\nBis bald!\nStargirlnails Kiel`, html, cc: process.env.ADMIN_EMAIL ? [process.env.ADMIN_EMAIL] : undefined, }); @@ -287,7 +287,7 @@ const updateStatus = os await sendEmail({ to: booking.customerEmail, subject: "Dein Termin wurde abgesagt", - text: `Hallo ${booking.customerName},\n\nleider wurde dein Termin am ${formattedDate} um ${booking.appointmentTime} abgesagt. Bitte buche einen neuen Termin.\n\nZur Website: ${homepageUrl}\n\nLiebe Grüße\nStargirlnails Kiel`, + text: `Hallo ${booking.customerName},\n\nleider wurde dein Termin am ${formattedDate} um ${booking.appointmentTime} abgesagt. Bitte buche einen neuen Termin.\n\nRechtliche Informationen: ${generateUrl('/legal')}\nZur Website: ${homepageUrl}\n\nLiebe Grüße\nStargirlnails Kiel`, html, cc: process.env.ADMIN_EMAIL ? [process.env.ADMIN_EMAIL] : undefined, });