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.
+
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
` : ''}
+
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.
+
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,
});