added watermark settings tab on the branding page and added more package details to the billing page, added a new guest notifications page

This commit is contained in:
Codex Agent
2025-12-17 16:39:25 +01:00
parent efe697f155
commit 5f3e7ae8c8
25 changed files with 2062 additions and 202 deletions

View File

@@ -30,6 +30,14 @@
"more": "Unable to load more entries."
},
"sections": {
"invoices": {
"title": "Invoices & payments",
"empty": "No payments found."
},
"addOns": {
"title": "Add-ons",
"empty": "No add-ons booked."
},
"overview": {
"title": "Package overview",
"description": "Your active package and the most important metrics.",
@@ -132,6 +140,15 @@
"loadMore": "Load more add-ons",
"loadingMore": "Loading add-ons…"
},
"features": {
"branding": "Branding",
"watermark": "Watermark",
"maxPhotos": "Max photos",
"maxGuests": "Max guests",
"galleryDays": "Gallery days",
"maxTasks": "Max tasks",
"featureList": "Included features"
},
"packages": {
"title": "Package history",
"description": "Overview of current and past packages.",
@@ -277,6 +294,7 @@
"qr": "QR code layouts",
"images": "Image management",
"guests": "Guest management",
"guestMessages": "Guest messages",
"branding": "Branding & theme",
"photobooth": "Photobooth",
"recap": "Recap & archive"
@@ -1802,8 +1820,60 @@
},
"errors": {
"missingSlug": "No event slug provided.",
"loadFailed": "Tasks could not be loaded.",
"saveFailed": "Task could not be saved."
"missingType": "Event type is missing. Please save the event again in the admin.",
"loadFailed": "Event data could not be loaded.",
"saveFailed": "Event could not be saved."
},
"branding": {
"titleShort": "Branding",
"previewTitle": "Guest app preview",
"previewSubtitle": "Current colors & fonts",
"primary": "Primary",
"accent": "Accent",
"colors": "Colors",
"primaryColor": "Primary color",
"accentColor": "Accent color",
"fonts": "Fonts",
"headingFont": "Headline font",
"bodyFont": "Body font",
"logo": "Logo",
"replaceLogo": "Replace logo",
"removeLogo": "Remove",
"logoHint": "Upload a logo to brand guest invites and QR posters.",
"uploadLogo": "Upload logo (max. 1 MB)",
"logoTooLarge": "Logo must be under 1 MB.",
"save": "Save branding",
"saving": "Saving...",
"saveSuccess": "Branding saved.",
"reset": "Reset to defaults",
"fontPicker": "Select font",
"noFonts": "No fonts found."
},
"watermark": {
"tab": "Watermark",
"title": "Watermark",
"previewTitle": "Watermark Preview",
"mode": "Mode",
"modeBase": "Base watermark",
"modeCustom": "Custom watermark",
"modeOff": "Off",
"upload": "Upload watermark",
"uploadCta": "PNG/SVG/JPG (max. 3 MB)",
"replace": "Replace watermark",
"uploadHint": "PNG with transparency recommended.",
"placement": "Placement & size",
"size": "Size",
"opacity": "Opacity",
"padding": "Padding",
"offset": "Offset X",
"offsetX": "X-axis",
"offsetY": "Y-axis",
"lockedBranding": "Custom watermark locked by this package. Using base watermark.",
"lockedDisabled": "Watermarks are disabled for this package.",
"errors": {
"noAsset": "Please upload a watermark image first.",
"fileTooLarge": "Watermark must be under 3 MB."
}
},
"tasks": {
"disabledTitle": "Task mode is off for this event",
@@ -1952,6 +2022,98 @@
"pref": {}
},
"events": {
"detail": {
"kpi": {
"tasks": "Active tasks",
"guests": "Guests registered",
"photos": "Images uploaded"
},
"pickEvent": "Select event",
"active": "Active",
"managementTitle": "Event management",
"dateTbd": "Date tbd",
"locationPlaceholder": "Location"
},
"quick": {
"tasks": "Tasks & checklists",
"qr": "QR code layouts",
"images": "Image management",
"guests": "Guest management",
"guestMessages": "Guest messages",
"branding": "Branding & theme",
"photobooth": "Photobooth",
"recap": "Recap & archive"
},
"status": {
"published": "Live",
"draft": "Draft",
"archived": "Archived"
},
"errors": {
"missingSlug": "No event slug provided.",
"missingType": "Event type is missing. Please save the event again in the admin.",
"loadFailed": "Event data could not be loaded.",
"saveFailed": "Event could not be saved.",
"notFoundTitle": "Event not found",
"notFoundBody": "Without a valid identifier we cannot load data. Return to the event list and pick an event there.",
"toggleFailed": "Status could not be updated.",
"checkoutMissing": "Checkout could not be started.",
"checkoutFailed": "Add-on checkout failed."
},
"placeholders": {
"untitled": "Untitled event"
},
"branding": {
"titleShort": "Branding",
"previewTitle": "Guest app preview",
"previewSubtitle": "Current colors & fonts",
"primary": "Primary",
"accent": "Accent",
"colors": "Colors",
"primaryColor": "Primary color",
"accentColor": "Accent color",
"fonts": "Fonts",
"headingFont": "Headline font",
"bodyFont": "Body font",
"logo": "Logo",
"replaceLogo": "Replace logo",
"removeLogo": "Remove",
"logoHint": "Upload a logo to brand guest invites and QR posters.",
"uploadLogo": "Upload logo (max. 1 MB)",
"logoTooLarge": "Logo must be under 1 MB.",
"save": "Save branding",
"saving": "Saving...",
"saveSuccess": "Branding saved.",
"reset": "Reset to defaults",
"fontPicker": "Select font",
"noFonts": "No fonts found."
},
"watermark": {
"tab": "Watermark",
"title": "Watermark",
"previewTitle": "Watermark Preview",
"mode": "Mode",
"modeBase": "Base watermark",
"modeCustom": "Custom watermark",
"modeOff": "Off",
"upload": "Upload watermark",
"uploadCta": "PNG/SVG/JPG (max. 3 MB)",
"replace": "Replace watermark",
"uploadHint": "PNG with transparency recommended.",
"placement": "Placement & size",
"size": "Size",
"opacity": "Opacity",
"padding": "Padding",
"offset": "Offset X",
"offsetX": "X-axis",
"offsetY": "Y-axis",
"lockedBranding": "Custom watermark locked by this package. Using base watermark.",
"lockedDisabled": "Watermarks are disabled for this package.",
"errors": {
"noAsset": "Please upload a watermark image first.",
"fileTooLarge": "Watermark must be under 3 MB."
}
},
"qr": {
"title": "QR Code & Print Layouts",
"heroTitle": "Entrance QR Code",
@@ -2063,5 +2225,57 @@
"empty": "No notifications yet.",
"filterByEvent": "Filter by event",
"unknownEvent": "Event"
},
"guestMessages": {
"title": "Guest messages",
"subtitle": "Send push updates to attendees",
"composeTitle": "Send a message",
"errorLoad": "Messages could not be loaded.",
"errorSend": "Message could not be sent.",
"sendSuccess": "Notification sent to guests.",
"historyTitle": "Recent messages",
"empty": "No guest messages yet.",
"status": {
"active": "Active",
"draft": "Draft",
"archived": "Archived"
},
"audience": {
"all": "All guests",
"guest": "Specific guest"
},
"type": {
"broadcast": "Broadcast",
"support_tip": "Support tip",
"upload_alert": "Upload alert",
"achievement_major": "Achievement",
"photo_activity": "Photo activity",
"feedback_request": "Feedback request"
},
"history": {
"untitled": "Untitled",
"noBody": "No body provided."
},
"form": {
"title": "Title",
"titlePlaceholder": "Gallery reminder, upload nudge, ...",
"message": "Message",
"messagePlaceholder": "Write a short note for your guests.",
"audience": "Audience",
"audienceAll": "All guests",
"audienceGuest": "Specific guest (name or device)",
"guestIdentifier": "Guest name or device ID",
"guestPlaceholder": "e.g., Alex or device token",
"cta": "CTA (optional)",
"ctaLabel": "Button label",
"ctaUrl": "Button link",
"ctaHint": "Both fields are required to add a button.",
"ctaError": "CTA label and link are required together.",
"expiresIn": "Expires in (minutes)",
"priority": "Priority",
"priorityValue": "Priority {{value}}",
"send": "Send notification",
"validation": "Add a title, message, and target guest when needed."
}
}
}