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 <[email protected]>
This commit is contained in:
2025-07-10 22:19:15 +02:00
co-authored by Claude
parent 6438374258
commit 5328b4f73a
52 changed files with 3237 additions and 683 deletions
+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",