feat: extend event toolkit and polish guest pwa

This commit is contained in:
Codex Agent
2025-10-28 18:28:22 +01:00
parent f29067f570
commit a7bbf230fd
45 changed files with 3809 additions and 351 deletions

View File

@@ -36,6 +36,36 @@
"lowCredits": "Auffüllen empfohlen"
}
},
"readiness": {
"title": "Bereit für den Eventstart",
"description": "Erledige diese Schritte, damit Gäste ohne Reibung loslegen können.",
"pending": "Noch offen",
"complete": "Erledigt",
"items": {
"event": {
"title": "Event angelegt",
"hint": "Lege dein erstes Event an oder öffne dein jüngstes Event."
},
"tasks": {
"title": "Aufgaben kuratiert",
"hint": "Weise passende Aufgaben zu oder aktiviere den Foto-Modus ohne Aufgaben."
},
"qr": {
"title": "QR-Einladung erstellt",
"hint": "Erstelle eine QR-Einladung und lade die Drucklayouts herunter."
},
"package": {
"title": "Paket aktiv",
"hint": "Wähle ein Paket, das zu eurem Umfang passt."
}
},
"actions": {
"createEvent": "Event erstellen",
"openTasks": "Tasks öffnen",
"openQr": "QR-Einladungen",
"openPackages": "Pakete ansehen"
}
},
"quickActions": {
"title": "Schnellaktionen",
"description": "Starte durch mit den wichtigsten Aktionen.",

View File

@@ -147,7 +147,9 @@
"errors": {
"missingSlug": "Kein Event-Slug angegeben.",
"load": "Event-Tasks konnten nicht geladen werden.",
"assign": "Tasks konnten nicht zugewiesen werden."
"assign": "Tasks konnten nicht zugewiesen werden.",
"photoOnlyEnable": "Foto-Modus konnte nicht aktiviert werden.",
"photoOnlyDisable": "Foto-Modus konnte nicht deaktiviert werden."
},
"alerts": {
"notFoundTitle": "Event nicht gefunden",
@@ -169,6 +171,147 @@
"medium": "Mittel",
"high": "Hoch",
"urgent": "Dringend"
},
"modes": {
"title": "Aufgaben & Foto-Modus",
"photoOnlyHint": "Der Foto-Modus ist aktiv. Gäste können Fotos hochladen, sehen aber keine Aufgaben.",
"tasksHint": "Aufgaben werden in der Gäste-App angezeigt. Deaktiviere sie für einen reinen Foto-Modus.",
"photoOnly": "Foto-Modus",
"tasks": "Aufgaben aktiv",
"switchLabel": "Foto-Modus aktivieren",
"updating": "Einstellung wird gespeichert ..."
},
"toolkit": {
"titleFallback": "Event-Day Toolkit",
"subtitle": "Behalte Uploads, Aufgaben und QR-Einladungen am Eventtag im Blick.",
"errors": {
"missingSlug": "Kein Event-Slug angegeben.",
"loadFailed": "Toolkit konnte nicht geladen werden.",
"feedbackFailed": "Feedback konnte nicht gesendet werden."
},
"actions": {
"backToEvent": "Zurück zum Event",
"moderate": "Fotos moderieren",
"manageTasks": "Tasks öffnen",
"refresh": "Aktualisieren"
},
"alerts": {
"errorTitle": "Fehler",
"attention": "Achtung",
"noTasks": "Noch keine Aufgaben zugewiesen aktiviere ein Paket oder lege Aufgaben fest.",
"noInvites": "Es gibt keine aktiven QR-Einladungen. Erstelle eine Einladung, um Gäste in die App zu holen.",
"pendingPhotos": "Es warten Fotos auf Moderation. Prüfe die Uploads, bevor sie live gehen."
},
"metrics": {
"uploadsTotal": "Uploads gesamt",
"uploads24h": "Uploads (24h)",
"pendingPhotos": "Unmoderierte Fotos",
"activeInvites": "Aktive Einladungen",
"engagementMode": "Modus",
"modePhotoOnly": "Foto-Modus",
"modeTasks": "Aufgaben"
},
"pending": {
"title": "Wartende Fotos",
"subtitle": "Moderationsempfehlung für neue Uploads.",
"cta": "Zur Moderation",
"empty": "Aktuell warten keine Fotos auf Freigabe.",
"unknownUploader": "Unbekannter Gast",
"uploadedAt": "Hochgeladen:",
"statusPending": "Status: Prüfung ausstehend"
},
"invites": {
"title": "QR-Einladungen",
"subtitle": "Aktive Links und Layouts im Blick behalten.",
"activeCount": "{{count}} aktiv",
"totalCount": "{{count}} gesamt",
"empty": "Noch keine QR-Einladungen erstellt.",
"statusActive": "Aktiv",
"statusInactive": "Inaktiv",
"manage": "Einladungen verwalten"
},
"tasks": {
"title": "Aktive Aufgaben",
"subtitle": "Motiviere Gäste mit klaren Aufgaben & Highlights.",
"summary": "{{completed}} von {{total}} erledigt",
"empty": "Noch keine Aufgaben zugewiesen.",
"manage": "Tasks verwalten",
"completed": "Erledigt",
"open": "Offen"
},
"recent": {
"title": "Neueste Uploads",
"subtitle": "Ein Blick auf die letzten Fotos der Gäste.",
"empty": "Noch keine freigegebenen Fotos vorhanden."
},
"feedback": {
"title": "Wie hilfreich ist dieses Toolkit?",
"subtitle": "Dein Feedback hilft uns, den Eventtag noch besser zu begleiten.",
"positive": "Hilfreich",
"neutral": "Ganz okay",
"negative": "Verbesserungsbedarf",
"placeholder": "Erzähle uns kurz, was dir gefallen hat oder was fehlt …",
"disclaimer": "Dein Feedback wird vertraulich behandelt und hilft uns beim Feinschliff.",
"submit": "Feedback senden",
"thanksTitle": "Danke!",
"thanksDescription": "Wir haben dein Feedback erhalten.",
"badge": "Angepasst"
}
},
"customizer": {
"title": "QR-Einladung anpassen",
"description": "Passe Layout, Texte, Farben und Logo deiner Einladungskarten an.",
"layout": "Layout",
"selectLayout": "Layout auswählen",
"headline": "Überschrift",
"subtitle": "Unterzeile",
"descriptionLabel": "Beschreibung",
"badgeLabel": "Badge",
"instructionsHeading": "Anleitungstitel",
"instructionsLabel": "Hinweistexte",
"addInstruction": "Hinweis hinzufügen",
"removeInstruction": "Entfernen",
"linkHeading": "Link-Titel",
"linkLabel": "Link",
"ctaLabel": "Call-to-Action",
"colors": {
"accent": "Akzentfarbe",
"text": "Textfarbe",
"background": "Hintergrund",
"secondary": "Sekundärfarbe",
"badge": "Badge-Farbe"
},
"logo": {
"label": "Logo",
"hint": "PNG oder SVG, max. 1 MB. Wird oben rechts platziert.",
"remove": "Logo entfernen"
},
"preview": {
"title": "Vorschau",
"hint": "Farben und Texte, wie sie im Layout erscheinen. Speichere, um neue PDFs/SVGs zu erhalten."
},
"actions": {
"save": "Speichern",
"cancel": "Abbrechen",
"reset": "Zurücksetzen"
},
"badge": "Angepasst",
"actionLabel": "Layout anpassen",
"errors": {
"logoTooLarge": "Das Logo darf maximal 1 MB groß sein.",
"noLayout": "Bitte wähle ein Layout aus."
},
"defaults": {
"badgeLabel": "Digitale Gästebox",
"instructionsHeading": "So funktioniert's",
"linkHeading": "Alternative zum Einscannen",
"ctaLabel": "Scan mich & starte direkt",
"instructions": [
"QR-Code scannen",
"Profil anlegen",
"Fotos teilen"
]
}
}
},
"collections": {
@@ -316,4 +459,4 @@
}
}
}
}
}

View File

@@ -36,6 +36,36 @@
"lowCredits": "Top up recommended"
}
},
"readiness": {
"title": "Ready for event day",
"description": "Complete these steps so guests can join without friction.",
"pending": "Pending",
"complete": "Done",
"items": {
"event": {
"title": "Event created",
"hint": "Create your first event or open the most recent one."
},
"tasks": {
"title": "Tasks curated",
"hint": "Assign fitting tasks or enable the photo-only mode."
},
"qr": {
"title": "QR invite live",
"hint": "Create a QR invite and download the print layouts."
},
"package": {
"title": "Package active",
"hint": "Pick the package that matches your scope."
}
},
"actions": {
"createEvent": "Create event",
"openTasks": "Open tasks",
"openQr": "QR invites",
"openPackages": "View packages"
}
},
"quickActions": {
"title": "Quick actions",
"description": "Jump straight to the most important actions.",

View File

@@ -147,7 +147,9 @@
"errors": {
"missingSlug": "No event slug provided.",
"load": "Event tasks could not be loaded.",
"assign": "Tasks could not be assigned."
"assign": "Tasks could not be assigned.",
"photoOnlyEnable": "Photo-only mode could not be enabled.",
"photoOnlyDisable": "Photo-only mode could not be disabled."
},
"alerts": {
"notFoundTitle": "Event not found",
@@ -169,6 +171,147 @@
"medium": "Medium",
"high": "High",
"urgent": "Urgent"
},
"modes": {
"title": "Tasks & photo mode",
"photoOnlyHint": "Photo-only mode is active. Guests can upload photos but wont see tasks.",
"tasksHint": "Tasks are visible in the guest app. Switch to photo-only for uploads without prompts.",
"photoOnly": "Photo-only",
"tasks": "Tasks active",
"switchLabel": "Enable photo-only mode",
"updating": "Saving setting ..."
},
"toolkit": {
"titleFallback": "Event-Day Toolkit",
"subtitle": "Stay on top of uploads, tasks, and invites while your event is live.",
"errors": {
"missingSlug": "No event slug provided.",
"loadFailed": "Toolkit could not be loaded.",
"feedbackFailed": "Feedback could not be sent."
},
"actions": {
"backToEvent": "Back to event",
"moderate": "Moderate photos",
"manageTasks": "Open tasks",
"refresh": "Refresh"
},
"alerts": {
"errorTitle": "Error",
"attention": "Heads-up",
"noTasks": "No tasks assigned yet pick a package or curate prompts.",
"noInvites": "There are no active QR invites. Create one to welcome guests.",
"pendingPhotos": "Photos are waiting for moderation. Review uploads before publishing."
},
"metrics": {
"uploadsTotal": "Total uploads",
"uploads24h": "Uploads (24h)",
"pendingPhotos": "Pending moderation",
"activeInvites": "Active invites",
"engagementMode": "Mode",
"modePhotoOnly": "Photo mode",
"modeTasks": "Tasks"
},
"pending": {
"title": "Waiting photos",
"subtitle": "Moderation suggestions for new uploads.",
"cta": "Go to moderation",
"empty": "No photos waiting for review right now.",
"unknownUploader": "Unknown guest",
"uploadedAt": "Uploaded:",
"statusPending": "Status: awaiting review"
},
"invites": {
"title": "QR invites",
"subtitle": "Keep an eye on links and brandable layouts.",
"activeCount": "{{count}} active",
"totalCount": "{{count}} total",
"empty": "No QR invites yet.",
"statusActive": "Active",
"statusInactive": "Inactive",
"manage": "Manage invites"
},
"tasks": {
"title": "Active tasks",
"subtitle": "Motivate guests with clear prompts and highlights.",
"summary": "{{completed}} of {{total}} done",
"empty": "No tasks assigned yet.",
"manage": "Manage tasks",
"completed": "Done",
"open": "Open"
},
"recent": {
"title": "Latest uploads",
"subtitle": "A quick glance at freshly approved photos.",
"empty": "No approved photos yet."
},
"feedback": {
"title": "How helpful is this toolkit?",
"subtitle": "Your input helps us fine-tune the event-day experience.",
"positive": "Helpful",
"neutral": "Okay",
"negative": "Needs work",
"placeholder": "Let us know what worked well or what youre missing …",
"disclaimer": "Well keep your feedback private and use it to improve the product.",
"submit": "Send feedback",
"thanksTitle": "Thank you!",
"thanksDescription": "Weve received your feedback.",
"badge": "Custom"
}
},
"customizer": {
"title": "Customize QR invite",
"description": "Adjust layout, texts, colors, and logo for your printable invite.",
"layout": "Layout",
"selectLayout": "Select layout",
"headline": "Headline",
"subtitle": "Sub headline",
"descriptionLabel": "Description",
"badgeLabel": "Badge",
"instructionsHeading": "Instructions heading",
"instructionsLabel": "Hints",
"addInstruction": "Add hint",
"removeInstruction": "Remove",
"linkHeading": "Link title",
"linkLabel": "Link",
"ctaLabel": "Call to action",
"colors": {
"accent": "Accent colour",
"text": "Text colour",
"background": "Background",
"secondary": "Secondary colour",
"badge": "Badge colour"
},
"logo": {
"label": "Logo",
"hint": "PNG or SVG, max. 1 MB. Appears in the top right corner.",
"remove": "Remove logo"
},
"preview": {
"title": "Preview",
"hint": "Visual reference for colours and texts. Save to generate new PDFs/SVGs."
},
"actions": {
"save": "Save",
"cancel": "Cancel",
"reset": "Reset"
},
"badge": "Custom",
"actionLabel": "Customize layout",
"errors": {
"logoTooLarge": "Logo must not exceed 1 MB.",
"noLayout": "Please select a layout."
},
"defaults": {
"badgeLabel": "Digital guest box",
"instructionsHeading": "How it works",
"linkHeading": "Alternative link",
"ctaLabel": "Scan and get started",
"instructions": [
"Scan the QR code",
"Create your profile",
"Share your photos"
]
}
}
},
"collections": {
@@ -316,4 +459,4 @@
}
}
}
}
}