Enhance email templates with clickable links, branding, and improved styling

- Add clickable gallery links in all email templates
- Include application logo in email header and footer (custom or PicPeak default)
- Redesign emails with professional styling matching gallery login page
  - Gray background with white content box
  - PicPeak green header with centered logo
  - Clean typography and proper spacing
  - Responsive design for mobile devices
  - Styled call-to-action buttons
  - Footer with branding and copyright
- Update email processor to fetch branding settings dynamically
- Use proper API URLs for logo images in emails

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-07-10 22:19:15 +02:00
parent 6438374258
commit 5328b4f73a
52 changed files with 3237 additions and 683 deletions
+158 -3
View File
@@ -17,6 +17,9 @@
"previous": "Zurück",
"close": "Schließen",
"logout": "Abmelden",
"menu": "Menü",
"change": "Ändern",
"remove": "Entfernen",
"download": "Herunterladen",
"downloadAll": "Alle herunterladen",
"uploading": "Wird hochgeladen...",
@@ -150,12 +153,30 @@
"deselectAll": "Auswahl aufheben",
"downloadSelected": "{{count}} ausgewählte herunterladen",
"remaining": "verbleibend",
"selectPhotosHint": "Tipp: Verwenden Sie Strg+Klick (Cmd+Klick auf Mac), um schnell mehrere Fotos auszuwählen"
"selectPhotosHint": "Tipp: Verwenden Sie Strg+Klick (Cmd+Klick auf Mac), um schnell mehrere Fotos auszuwählen",
"filters": "Filter",
"openFilters": "Filter öffnen",
"toggleSidebar": "Seitenleiste umschalten",
"toggleMenu": "Menü umschalten",
"allCategories": "Alle Kategorien",
"categories": "Kategorien",
"download": "Herunterladen",
"searchPlaceholder": "Fotos suchen...",
"sortBy": "Sortieren nach"
},
"categories": {
"title": "Fotokategorien",
"global": "Globale Kategorien",
"eventSpecific": "Veranstaltungsspezifische Kategorien",
"eventSpecificCategories": "Veranstaltungsspezifische Kategorien",
"organizationInfo": "Organisieren Sie Ihre Fotos in Kategorien. Kategorien helfen Gästen, bestimmte Fototypen zu navigieren und zu finden.",
"noEventSpecificCategories": "Keine veranstaltungsspezifischen Kategorien. Globale Kategorien sind standardmäßig verfügbar.",
"globalCategoriesAlwaysAvailable": "Globale Kategorien (immer verfügbar):",
"deleteCategoryTitle": "Kategorie löschen",
"categoryCreatedSuccess": "Kategorie erfolgreich erstellt",
"categoryDeletedSuccess": "Kategorie erfolgreich gelöscht",
"failedToCreateCategory": "Fehler beim Erstellen der Kategorie",
"failedToDeleteCategory": "Fehler beim Löschen der Kategorie",
"addCategory": "Kategorie hinzufügen",
"categoryName": "Kategoriename",
"noCategory": "Keine Kategorie",
@@ -164,6 +185,17 @@
"cannotDelete": "Kategorie mit Fotos kann nicht gelöscht werden. Bitte weisen Sie die Fotos zuerst neu zu."
},
"events": {
"noStatisticsAvailableYet": "Noch keine Statistiken verfügbar",
"totalPhotos": "Gesamtfotos",
"totalViews": "Gesamtaufrufe",
"totalDownloads": "Gesamte Downloads",
"uniqueVisitors": "Eindeutige Besucher",
"addPlus": "Hinzufügen+",
"galleryTheme": "Galerie-Design",
"customizeTheme": "Design anpassen",
"noThemeSet": "Kein Design konfiguriert",
"customizingTheme": "Galerie-Design anpassen",
"customizingThemeFor": "Design für {{event}} anpassen",
"title": "Veranstaltungen",
"create": "Veranstaltung erstellen",
"createEvent": "Veranstaltung erstellen",
@@ -172,6 +204,8 @@
"eventType": "Veranstaltungstyp",
"eventDate": "Veranstaltungsdatum",
"hostEmail": "Gastgeber-E-Mail",
"hostName": "Name des Gastgebers",
"hostNamePlaceholder": "Max Mustermann",
"adminEmail": "Admin-E-Mail",
"expirationDate": "Ablaufdatum",
"active": "Aktiv",
@@ -199,6 +233,7 @@
"eventInformation": "Veranstaltungsinformationen",
"welcomeMessage": "Willkommensnachricht",
"noWelcomeMessage": "Keine Willkommensnachricht festgelegt",
"noWelcomeMessageSet": "Keine Willkommensnachricht festgelegt",
"created": "Erstellt",
"expires": "Läuft ab",
"shareWithGuests": "Teilen Sie diesen Link mit Gästen. Sie benötigen das Passwort, um auf die Galerie zuzugreifen.",
@@ -232,6 +267,7 @@
"galleryExpiration": "Galerie-Ablauf",
"galleryExpiresIn": "Galerie läuft ab in",
"daysAfterEvent": "Tage nach der Veranstaltung",
"expiresOn": "Läuft ab am",
"themeAndStyle": "Design & Stil",
"galleryWillExpireOn": "Galerie läuft ab am {{date}}",
"expirationWarning": "Gäste erhalten 7 Tage vor Ablauf eine Warn-E-Mail.",
@@ -340,7 +376,10 @@
"defaultLanguage": "Standardsprache",
"defaultLanguageHelp": "Sprache, die Gästen vor der Anmeldung angezeigt wird",
"saveSettings": "Allgemeine Einstellungen speichern",
"saveGeneralSettings": "Allgemeine Einstellungen speichern"
"saveGeneralSettings": "Allgemeine Einstellungen speichern",
"dateTimeFormat": "Datums- & Zeitformat",
"dateFormat": "Datumsformat",
"dateFormatHelp": "Wie Daten in E-Mails und in der gesamten Anwendung angezeigt werden"
},
"storage": {
"title": "Speicher",
@@ -467,7 +506,80 @@
"saveChanges": "Änderungen speichern",
"applyLivePreview": "Änderungen sofort anwenden (Live-Vorschau)",
"eventSpecificThemes": "Veranstaltungsspezifische Themen",
"eventThemesInfo": "Sie können diese globalen Theme-Einstellungen für einzelne Veranstaltungen beim Erstellen oder Bearbeiten überschreiben."
"eventThemesInfo": "Sie können diese globalen Theme-Einstellungen für einzelne Veranstaltungen beim Erstellen oder Bearbeiten überschreiben.",
"themePresets": "Theme-Vorlagen",
"galleryLayout": "Galerie-Layout",
"layoutDescriptions": {
"grid": "Klassisches Rasterlayout mit einheitlichen Fotogrößen",
"masonry": "Pinterest-ähnliches Layout mit variablen Höhen",
"carousel": "Vollbild-Diashow mit Navigation",
"timeline": "Nach Datum organisierte Fotos",
"hero": "Hervorgehobenes Bild mit Raster darunter",
"mosaic": "Künstlerisches Layout mit gemischten Größen"
},
"layoutSettings": "Layout-Einstellungen",
"photoSpacing": "Foto-Abstand",
"spacing": {
"tight": "Eng",
"normal": "Normal",
"relaxed": "Locker"
},
"photoAnimation": "Foto-Animation",
"animation": {
"none": "Keine",
"fade": "Einblenden",
"scale": "Skalieren",
"slide": "Gleiten"
},
"columns": "Spalten",
"mobile": "Mobil",
"tablet": "Tablet",
"desktop": "Desktop",
"enableAutoplay": "Autoplay aktivieren",
"autoplayInterval": "Autoplay-Intervall (Sekunden)",
"groupPhotosBy": "Fotos gruppieren nach",
"grouping": {
"day": "Tag",
"week": "Woche",
"month": "Monat"
},
"typographyAndStyle": "Typografie & Stil",
"bodyFont": "Fließtext-Schriftart",
"headingFont": "Überschriften-Schriftart",
"sameAsBody": "Wie Fließtext",
"fontSize": "Schriftgröße",
"fontSizes": {
"small": "Klein",
"normal": "Normal",
"large": "Groß"
},
"borderRadius": "Eckenradius",
"borderRadiusOptions": {
"none": "Keine",
"small": "Klein",
"medium": "Mittel",
"large": "Groß"
},
"shadowStyle": "Schattenstil",
"shadowOptions": {
"none": "Kein",
"subtle": "Dezent",
"normal": "Normal",
"dramatic": "Dramatisch"
},
"backgroundPattern": "Hintergrund",
"backgroundOptions": {
"none": "Keiner",
"dots": "Punkte",
"grid": "Raster",
"waves": "Wellen"
},
"customCSSHelp": "Erweitert: Fügen Sie benutzerdefiniertes CSS hinzu, um das Erscheinungsbild weiter anzupassen",
"resetToDefault": "Auf Standard zurücksetzen",
"applyTheme": "Theme anwenden",
"customTheme": "Benutzerdefiniertes Design",
"customizeTheme": "Design anpassen",
"saveTheme": "Design speichern"
},
"admin": {
"title": "Admin-Panel",
@@ -483,6 +595,48 @@
"notifications": "Benachrichtigungen",
"viewAllNotifications": "Alle Benachrichtigungen anzeigen",
"noNotifications": "Keine neuen Benachrichtigungen",
"markAllRead": "Alle als gelesen markieren",
"clearOld": "Alte löschen",
"close": "Schließen",
"noNotificationsMessage": "Keine Benachrichtigungen",
"notificationMessages": {
"eventCreated": "Neues Event \"{{eventName}}\" wurde erstellt",
"eventArchived": "Event \"{{eventName}}\" wurde archiviert",
"eventUpdated": "Event \"{{eventName}}\" wurde aktualisiert",
"eventDeleted": "Event \"{{eventName}}\" wurde gelöscht",
"photosUploaded": "{{count}} Fotos zu \"{{eventName}}\" hochgeladen",
"photoDeleted": "Foto aus \"{{eventName}}\" gelöscht",
"photosBulkDeleted": "{{count}} Fotos aus \"{{eventName}}\" gelöscht",
"eventExpiring": "Event \"{{eventName}}\" läuft in {{days}} Tagen ab",
"eventExpired": "Event \"{{eventName}}\" ist abgelaufen",
"passwordChanged": "Passwort geändert von {{actorName}}",
"passwordReset": "Passwort zurückgesetzt für \"{{eventName}}\"",
"settingsUpdated": "{{type}}-Einstellungen aktualisiert",
"emailTemplateUpdated": "E-Mail-Vorlage \"{{template}}\" aktualisiert",
"bulkDownload": "{{count}} Fotos von \"{{eventName}}\" heruntergeladen",
"storageWarning": "Speichernutzung bei {{percentage}}%",
"adminLogout": "Admin {{actorName}} hat sich abgemeldet",
"categoryCreated": "Kategorie \"{{name}}\" für \"{{eventName}}\" erstellt",
"categoryUpdated": "Kategorie \"{{name}}\" für \"{{eventName}}\" aktualisiert",
"categoryDeleted": "Kategorie \"{{name}}\" aus \"{{eventName}}\" gelöscht",
"cmsPageUpdated": "CMS-Seite \"{{slug}}\" aktualisiert",
"emailConfigUpdated": "E-Mail-Konfiguration aktualisiert",
"faviconUploaded": "Favicon hochgeladen",
"brandingUpdated": "Branding-Einstellungen aktualisiert",
"generalSettingsUpdated": "Allgemeine Einstellungen aktualisiert",
"securitySettingsUpdated": "Sicherheitseinstellungen aktualisiert",
"themeUpdated": "Theme-Einstellungen aktualisiert",
"archiveDownloaded": "Archiv für \"{{eventName}}\" heruntergeladen",
"archiveDeleted": "Archiv für \"{{eventName}}\" gelöscht",
"archiveRestored": "Archiv für \"{{eventName}}\" wiederhergestellt",
"systemActivity": "Systemaktivität: {{type}}"
},
"notificationToasts": {
"markedAllRead": "Alle Benachrichtigungen als gelesen markiert",
"clearedOld": "{{count}} alte Benachrichtigungen gelöscht"
},
"viewAllNotifications": "Alle Benachrichtigungen anzeigen",
"noNotifications": "Keine neuen Benachrichtigungen",
"markAsRead": "Als gelesen markieren",
"markAllAsRead": "Alle als gelesen markieren",
"notificationSettings": "Benachrichtigungseinstellungen",
@@ -663,6 +817,7 @@
"validation": {
"eventNameRequired": "Veranstaltungsname ist erforderlich",
"hostEmailRequired": "Gastgeber-E-Mail ist erforderlich",
"hostNameRequired": "Der Name des Gastgebers ist erforderlich",
"adminEmailRequired": "Admin-E-Mail ist erforderlich",
"invalidEmailFormat": "Ungültiges E-Mail-Format",
"passwordRequired": "Passwort ist erforderlich",
+162 -6
View File
@@ -17,6 +17,9 @@
"previous": "Previous",
"close": "Close",
"logout": "Logout",
"menu": "Menu",
"change": "Change",
"remove": "Remove",
"download": "Download",
"downloadAll": "Download All",
"uploading": "Uploading...",
@@ -150,13 +153,30 @@
"deselectAll": "Deselect All",
"downloadSelected": "Download {{count}} Selected",
"remaining": "remaining",
"selectPhotosHint": "Tip: Use Ctrl+Click (Cmd+Click on Mac) to quickly select multiple photos"
"selectPhotosHint": "Tip: Use Ctrl+Click (Cmd+Click on Mac) to quickly select multiple photos",
"filters": "Filters",
"openFilters": "Open filters",
"toggleSidebar": "Toggle sidebar",
"toggleMenu": "Toggle menu",
"allCategories": "All Categories",
"categories": "Categories",
"download": "Download",
"searchPlaceholder": "Search photos..."
},
"categories": {
"title": "Photo Categories",
"global": "Global Categories",
"eventSpecific": "Event-Specific Categories",
"addCategory": "Add Category",
"organizationInfo": "Organize your photos into categories. Categories help guests navigate and find specific types of photos.",
"eventSpecificCategories": "Event-Specific Categories",
"noEventSpecificCategories": "No event-specific categories. Global categories are available by default.",
"globalCategoriesAlwaysAvailable": "Global Categories (always available):",
"deleteCategoryTitle": "Delete category",
"categoryCreatedSuccess": "Category created successfully",
"categoryDeletedSuccess": "Category deleted successfully",
"failedToCreateCategory": "Failed to create category",
"failedToDeleteCategory": "Failed to delete category",
"categoryName": "Category name",
"noCategory": "No category",
"noCategoriesYet": "No categories yet. Create your first category to organize photos.",
@@ -166,6 +186,9 @@
"events": {
"title": "Events",
"createEvent": "Create Event",
"totalViews": "Total Views",
"totalDownloads": "Total Downloads",
"uniqueVisitors": "Unique Visitors",
"createNewEvent": "Create New Event",
"setupNewGallery": "Set up a new photo gallery for your event",
"createNewEventSubtitle": "Set up a new photo gallery for your event",
@@ -197,6 +220,8 @@
"eventType": "Event Type",
"eventDate": "Event Date",
"hostEmail": "Host Email",
"hostName": "Host Name",
"hostNamePlaceholder": "John Smith",
"adminEmail": "Admin Email",
"adminNotificationEmail": "Admin Notification Email",
"expirationDate": "Expiration Date",
@@ -230,6 +255,7 @@
"shareWithGuests": "Share this link with guests. They'll need the password to access the gallery.",
"resetGalleryPassword": "Reset Gallery Password",
"photoStatistics": "Photo Statistics",
"totalPhotos": "Total Photos",
"managePhotos": "Manage Photos",
"actions": "Actions",
"archivingInfo": "Archiving will create a ZIP file of all photos and remove the gallery from public access.",
@@ -264,6 +290,12 @@
"selectCategory": "Select a category for user uploads",
"uploadCategoryHelp": "All user-uploaded photos will be added to this category",
"userUploadWarning": "User uploads will be moderated and can be removed by admins at any time.",
"heroPhoto": "Hero Photo",
"heroPhotoHelp": "Select a featured photo for the hero gallery layout",
"selectHeroPhoto": "Select Hero Photo",
"noHeroPhotoSelected": "No hero photo selected",
"heroPhotoSelected": "Hero photo selected",
"noPhotosAvailable": "No photos available",
"processingRequest": "Processing your request...",
"eventTypeWedding": "Wedding",
"eventTypeBirthday": "Birthday",
@@ -317,8 +349,8 @@
"adminEmail": "Admin Email",
"createdOn": "Created",
"expires": "Expires",
"daysLeft": "({{days}} days left)",
"daysLeft_plural": "({{days}} days left)",
"daysLeft": "({{count}} day left)",
"daysLeft_plural": "({{count}} days left)",
"shareLink": "Share Link",
"copy": "Copy",
"copied": "Copied!",
@@ -332,7 +364,14 @@
"downloadStarted": "Download started",
"failedToDownloadArchive": "Failed to download archive",
"statisticsNotAvailable": "No statistics available yet",
"photoFilters": "Photo Filters"
"photoFilters": "Photo Filters",
"noStatisticsAvailableYet": "No statistics available yet",
"addPlus": "Add+",
"galleryTheme": "Gallery Theme",
"customizeTheme": "Customize Theme",
"noThemeSet": "No theme configured",
"customizingTheme": "Customizing gallery theme",
"customizingThemeFor": "Customizing theme for {{event}}"
},
"settings": {
"title": "System Settings",
@@ -358,7 +397,10 @@
"defaultLanguage": "Default Language",
"defaultLanguageHelp": "Language shown to guests before login",
"saveSettings": "Save General Settings",
"saveGeneralSettings": "Save General Settings"
"saveGeneralSettings": "Save General Settings",
"dateTimeFormat": "Date & Time Format",
"dateFormat": "Date Format",
"dateFormatHelp": "How dates are displayed in emails and throughout the application"
},
"storage": {
"title": "Storage",
@@ -519,7 +561,80 @@
"saveChanges": "Save Changes",
"applyLivePreview": "Apply changes immediately (Live Preview)",
"eventSpecificThemes": "Event-Specific Themes",
"eventThemesInfo": "You can override these global theme settings for individual events when creating or editing them."
"eventThemesInfo": "You can override these global theme settings for individual events when creating or editing them.",
"themePresets": "Theme Presets",
"galleryLayout": "Gallery Layout",
"layoutDescriptions": {
"grid": "Classic grid layout with consistent photo sizes",
"masonry": "Pinterest-style layout with varied heights",
"carousel": "Full-screen slideshow with navigation",
"timeline": "Photos organized by date",
"hero": "Featured image with grid below",
"mosaic": "Artistic layout with mixed sizes"
},
"layoutSettings": "Layout Settings",
"photoSpacing": "Photo Spacing",
"spacing": {
"tight": "Tight",
"normal": "Normal",
"relaxed": "Relaxed"
},
"photoAnimation": "Photo Animation",
"animation": {
"none": "None",
"fade": "Fade",
"scale": "Scale",
"slide": "Slide"
},
"columns": "Columns",
"mobile": "Mobile",
"tablet": "Tablet",
"desktop": "Desktop",
"enableAutoplay": "Enable Autoplay",
"autoplayInterval": "Autoplay Interval (seconds)",
"groupPhotosBy": "Group Photos By",
"grouping": {
"day": "Day",
"week": "Week",
"month": "Month"
},
"typographyAndStyle": "Typography & Style",
"bodyFont": "Body Font",
"headingFont": "Heading Font",
"sameAsBody": "Same as body",
"fontSize": "Font Size",
"fontSizes": {
"small": "Small",
"normal": "Normal",
"large": "Large"
},
"borderRadius": "Border Radius",
"borderRadiusOptions": {
"none": "None",
"small": "Small",
"medium": "Medium",
"large": "Large"
},
"shadowStyle": "Shadow Style",
"shadowOptions": {
"none": "None",
"subtle": "Subtle",
"normal": "Normal",
"dramatic": "Dramatic"
},
"backgroundPattern": "Background",
"backgroundOptions": {
"none": "None",
"dots": "Dots",
"grid": "Grid",
"waves": "Waves"
},
"customCSSHelp": "Advanced: Add custom CSS to further customize the appearance",
"resetToDefault": "Reset to Default",
"applyTheme": "Apply Theme",
"customTheme": "Custom Theme",
"customizeTheme": "Customize Theme",
"saveTheme": "Save Theme"
},
"admin": {
"title": "Admin Panel",
@@ -535,6 +650,46 @@
"notifications": "Notifications",
"viewAllNotifications": "View all notifications",
"noNotifications": "No new notifications",
"markAllRead": "Mark all read",
"clearOld": "Clear old",
"close": "Close",
"noNotificationsMessage": "No notifications",
"notificationMessages": {
"eventCreated": "New event \"{{eventName}}\" was created",
"eventArchived": "Event \"{{eventName}}\" was archived",
"eventUpdated": "Event \"{{eventName}}\" was updated",
"eventDeleted": "Event \"{{eventName}}\" was deleted",
"photosUploaded": "{{count}} photos uploaded to \"{{eventName}}\"",
"photoDeleted": "Photo deleted from \"{{eventName}}\"",
"photosBulkDeleted": "{{count}} photos deleted from \"{{eventName}}\"",
"eventExpiring": "Event \"{{eventName}}\" expires in {{days}} days",
"eventExpired": "Event \"{{eventName}}\" has expired",
"passwordChanged": "Password changed by {{actorName}}",
"passwordReset": "Password reset for \"{{eventName}}\"",
"settingsUpdated": "{{type}} settings updated",
"emailTemplateUpdated": "Email template \"{{template}}\" updated",
"bulkDownload": "{{count}} photos downloaded from \"{{eventName}}\"",
"storageWarning": "Storage usage at {{percentage}}%",
"adminLogout": "Admin {{actorName}} logged out",
"categoryCreated": "Category \"{{name}}\" created for \"{{eventName}}\"",
"categoryUpdated": "Category \"{{name}}\" updated for \"{{eventName}}\"",
"categoryDeleted": "Category \"{{name}}\" deleted from \"{{eventName}}\"",
"cmsPageUpdated": "CMS page \"{{slug}}\" updated",
"emailConfigUpdated": "Email configuration updated",
"faviconUploaded": "Favicon uploaded",
"brandingUpdated": "Branding settings updated",
"generalSettingsUpdated": "General settings updated",
"securitySettingsUpdated": "Security settings updated",
"themeUpdated": "Theme settings updated",
"archiveDownloaded": "Archive downloaded for \"{{eventName}}\"",
"archiveDeleted": "Archive deleted for \"{{eventName}}\"",
"archiveRestored": "Archive restored for \"{{eventName}}\"",
"systemActivity": "System activity: {{type}}"
},
"notificationToasts": {
"markedAllRead": "All notifications marked as read",
"clearedOld": "Cleared {{count}} old notifications"
},
"markAsRead": "Mark as read",
"markAllAsRead": "Mark all as read",
"notificationSettings": "Notification Settings",
@@ -584,6 +739,7 @@
"validation": {
"eventNameRequired": "Event name is required",
"hostEmailRequired": "Host email is required",
"hostNameRequired": "Host name is required",
"adminEmailRequired": "Admin email is required",
"invalidEmailFormat": "Invalid email format",
"passwordRequired": "Password is required",