upgrade to tamagui v2 and guest pwa overhaul

This commit is contained in:
Codex Agent
2026-02-02 13:01:20 +01:00
parent 2e78f3ab8d
commit 7c6e14ffe2
168 changed files with 47462 additions and 8914 deletions

View File

@@ -25,6 +25,7 @@ export const messages: Record<LocaleCode, NestedMessages> = {
offlineReady: 'Offline bereit.',
actions: {
close: 'Schließen',
back: 'Zurück',
loading: 'Lädt...',
},
},
@@ -41,6 +42,7 @@ export const messages: Record<LocaleCode, NestedMessages> = {
tasks: 'Aufgaben',
achievements: 'Erfolge',
gallery: 'Galerie',
share: 'Teilen',
},
header: {
loading: 'Lade Event...',
@@ -57,6 +59,46 @@ export const messages: Record<LocaleCode, NestedMessages> = {
tabUploads: 'Uploads',
tabAll: 'Alle Updates',
emptyStatus: 'Keine Upload-Hinweise oder Wartungen aktiv.',
queueLabel: 'Upload-Warteschlange (offline)',
pendingLabel: 'Uploads in Prüfung',
},
},
appShell: {
fab: {
title: 'Moment erstellen',
},
actions: {
upload: {
label: 'Foto hochladen / aufnehmen',
description: 'Füge einen Moment von deinem Gerät oder der Kamera hinzu.',
},
compass: {
label: 'Kompass',
description: 'Schneller Zugriff auf wichtige Bereiche.',
},
task: {
label: 'Aufgabe starten',
description: 'Wähle eine Mission und halte sie fest.',
},
live: {
label: 'Live Show',
description: 'Sieh den Highlight-Stream in Echtzeit.',
},
slideshow: {
label: 'Diashow',
description: 'Lehn dich zurück und schau dir die Galerie an.',
},
share: {
label: 'Einladung teilen',
description: 'Teile den Event-Link oder QR-Code.',
},
achievements: {
label: 'Erfolge',
description: 'Behalte deine Foto-Serien im Blick.',
},
},
compass: {
capture: 'Aufnehmen',
},
},
liveShowPlayer: {
@@ -252,6 +294,32 @@ export const messages: Record<LocaleCode, NestedMessages> = {
days: 'vor {count} Tagen',
},
},
homeV2: {
rings: {
newUploads: 'Neue Uploads',
topMoments: 'Top-Momente',
},
promptQuest: {
label: 'Prompt-Quest',
title: 'Fang das herzlichste Lachen ein',
subtitle: 'Sammle Punkte und halte die Galerie lebendig.',
ctaStart: 'Prompt starten',
ctaBrowse: 'Aufgaben entdecken',
},
captureReady: {
label: 'Bereit zum Aufnehmen',
title: 'Füge ein Foto zur gemeinsamen Galerie hinzu',
subtitle: 'Schneller Upload aus Kamera oder Galerie.',
cta: 'Foto hochladen',
},
stats: {
uploadsQueued: 'Uploads in Warteschlange',
},
galleryPreview: {
title: 'Galerie-Vorschau',
cta: 'Alle ansehen',
},
},
achievements: {
page: {
title: 'Erfolge',
@@ -312,6 +380,13 @@ export const messages: Record<LocaleCode, NestedMessages> = {
trendingDescription: 'Diese Stimmung taucht gerade besonders oft auf.',
trendingCount: '{count} Fotos mit dieser Stimmung',
},
summary: {
topContributor: 'Top-Gast',
placeholder: 'Teile weiter, um Highlights freizuschalten.',
tasksCompleted: 'Aufgaben erledigt',
photosShared: 'Fotos geteilt',
likesCollected: 'Likes gesammelt',
},
},
tasks: {
page: {
@@ -329,6 +404,9 @@ export const messages: Record<LocaleCode, NestedMessages> = {
inspirationEmptyDescription: 'Sei die/der Erste und lade eins hoch',
inspirationMore: 'Mehr',
inspirationError: 'Fotos konnten nicht geladen werden',
checklist: 'Checkliste',
tips: 'Tipps',
inspirationTitleSecondary: 'Inspiration',
suggestionsEyebrow: 'Mehr Inspiration',
suggestionsTitle: 'Spring direkt zur nächsten Aufgabe',
noTasksAlert: 'Für dieses Event sind derzeit keine Aufgaben hinterlegt.',
@@ -345,6 +423,12 @@ export const messages: Record<LocaleCode, NestedMessages> = {
countOne: '{count} Aufgabe',
countMany: '{count} Aufgaben',
},
progressLabel: 'Quest-Fortschritt',
progressValue: '{count}/{total} Aufgaben erledigt',
},
disabled: {
title: 'Aufgaben sind deaktiviert',
subtitle: 'Dieses Event ist im Foto-Modus.',
},
},
notFound: {
@@ -402,6 +486,16 @@ export const messages: Record<LocaleCode, NestedMessages> = {
badge: {
newPhotos: '{count} neue Fotos',
},
feed: {
title: 'Live-Feed',
description: 'Alle paar Sekunden aktualisiert.',
newUploads: '{count} neue Uploads sind da.',
},
lightbox: {
prev: 'Zurück',
next: 'Weiter',
likes: '{count} Likes',
},
},
share: {
title: 'Geteiltes Foto',
@@ -419,10 +513,62 @@ export const messages: Record<LocaleCode, NestedMessages> = {
whatsapp: 'WhatsApp',
imessage: 'Nachrichten',
copyError: 'Link konnte nicht kopiert werden.',
invite: {
title: 'Gäste einladen',
description: 'Teile den Event-Link oder zeige den QR-Code.',
qrLabel: 'QR anzeigen',
qrAlt: 'Event-QR-Code',
copyLabel: 'Link kopieren',
guestsTitle: 'Gäste',
guestsSubtitle: 'Teile das Event mit deinen Gästen.',
guestsSubtitleEvent: 'Teile {event} mit deinen Gästen.',
send: 'Einladung senden',
},
chips: {
emotion: 'Emotion',
task: 'Aufgabe',
date: 'Aufgenommen',
},
},
uploadQueue: {
title: 'Uploads',
description: 'Warteschlange mit Fortschritt und erneuten Versuchen; Hintergrund-Sync umschalten.',
description: 'Warteschlange mit Fortschritt und erneuten Versuchen.',
summary: '{waiting} wartend · {failed} fehlgeschlagen',
emptyTitle: 'Keine Uploads in der Warteschlange',
emptyDescription: 'Sobald Fotos in der Warteschlange sind, erscheinen sie hier.',
progress: '{progress}%',
actions: {
retryAll: 'Alle erneut versuchen',
clearFinished: 'Erledigte löschen',
},
status: {
uploaded: 'Hochgeladen',
uploading: 'Wird hochgeladen',
failed: 'Fehlgeschlagen',
waiting: 'Wartet',
retries: ' · {count} Versuche',
},
},
uploadV2: {
preview: {
title: 'Live-Vorschau',
subtitle: 'Tippe irgendwo, um zu fokussieren.',
cta: 'Jetzt aufnehmen',
},
tools: {
grid: 'Raster',
flash: 'Blitz',
upload: 'Upload',
},
queue: {
summary: '{waiting} wartend, {sending} sendend',
uploading: 'Upload {name} · {progress}%',
button: 'Warteschlange',
},
errors: {
invalidFile: 'Bitte wähle eine Fotodatei aus.',
eventMissing: 'Event nicht gefunden.',
},
},
pendingUploads: {
title: 'Uploads in Prüfung',
@@ -781,6 +927,7 @@ export const messages: Record<LocaleCode, NestedMessages> = {
offlineReady: 'Offline ready.',
actions: {
close: 'Close',
back: 'Back',
loading: 'Loading...',
},
},
@@ -797,6 +944,7 @@ export const messages: Record<LocaleCode, NestedMessages> = {
tasks: 'Tasks',
achievements: 'Achievements',
gallery: 'Gallery',
share: 'Share',
},
header: {
loading: 'Loading event...',
@@ -813,6 +961,46 @@ export const messages: Record<LocaleCode, NestedMessages> = {
tabUploads: 'Uploads',
tabAll: 'All updates',
emptyStatus: 'No upload status or maintenance active.',
queueLabel: 'Upload queue (offline)',
pendingLabel: 'Pending uploads',
},
},
appShell: {
fab: {
title: 'Create a moment',
},
actions: {
upload: {
label: 'Upload / Take photo',
description: 'Add a moment from your device or camera.',
},
compass: {
label: 'Compass hub',
description: 'Quick jump to key areas.',
},
task: {
label: 'Start a task',
description: 'Pick a challenge and capture it now.',
},
live: {
label: 'Live show',
description: 'See the real-time highlight stream.',
},
slideshow: {
label: 'Slideshow',
description: 'Lean back and watch the gallery roll.',
},
share: {
label: 'Share invite',
description: 'Send the event link or QR code.',
},
achievements: {
label: 'Achievements',
description: 'Track your photo streaks.',
},
},
compass: {
capture: 'Capture',
},
},
liveShowPlayer: {
@@ -1008,6 +1196,32 @@ export const messages: Record<LocaleCode, NestedMessages> = {
days: '{count} days ago',
},
},
homeV2: {
rings: {
newUploads: 'New uploads',
topMoments: 'Top moments',
},
promptQuest: {
label: 'Prompt quest',
title: 'Capture the happiest laugh',
subtitle: 'Earn points and keep the gallery lively.',
ctaStart: 'Start prompt',
ctaBrowse: 'Browse tasks',
},
captureReady: {
label: 'Capture ready',
title: 'Add a photo to the shared gallery',
subtitle: 'Quick add from your camera or device.',
cta: 'Upload / Take photo',
},
stats: {
uploadsQueued: 'Uploads queued',
},
galleryPreview: {
title: 'Gallery preview',
cta: 'View all',
},
},
achievements: {
page: {
title: 'Achievements',
@@ -1068,6 +1282,13 @@ export const messages: Record<LocaleCode, NestedMessages> = {
trendingDescription: 'This mood appears most often right now.',
trendingCount: '{count} photos in this mood',
},
summary: {
topContributor: 'Top guest',
placeholder: 'Keep sharing to unlock highlights.',
tasksCompleted: 'Tasks completed',
photosShared: 'Photos shared',
likesCollected: 'Likes collected',
},
},
tasks: {
page: {
@@ -1085,6 +1306,9 @@ export const messages: Record<LocaleCode, NestedMessages> = {
inspirationEmptyDescription: 'Be the first one to upload!',
inspirationMore: 'More',
inspirationError: 'Photos could not be loaded',
checklist: 'Checklist',
tips: 'Tips',
inspirationTitleSecondary: 'Inspiration',
suggestionsEyebrow: 'More inspiration',
suggestionsTitle: 'Jump straight to the next task',
noTasksAlert: 'No tasks available for this event yet.',
@@ -1101,6 +1325,12 @@ export const messages: Record<LocaleCode, NestedMessages> = {
countOne: '{count} task',
countMany: '{count} tasks',
},
progressLabel: 'Quest progress',
progressValue: '{count}/{total} tasks completed',
},
disabled: {
title: 'Tasks are disabled',
subtitle: 'This event is set to photo-only mode.',
},
},
notFound: {
@@ -1158,6 +1388,16 @@ export const messages: Record<LocaleCode, NestedMessages> = {
badge: {
newPhotos: '{count} new photos',
},
feed: {
title: 'Live feed',
description: 'Updated every few seconds.',
newUploads: '{count} new uploads just landed.',
},
lightbox: {
prev: 'Prev',
next: 'Next',
likes: '{count} likes',
},
},
share: {
title: 'Shared photo',
@@ -1172,10 +1412,62 @@ export const messages: Record<LocaleCode, NestedMessages> = {
expiredDescription: 'This link is no longer available.',
shareText: 'Check out this moment on Fotospiel.',
error: 'Share failed',
invite: {
title: 'Invite guests',
description: 'Share the event link or show the QR code to join.',
qrLabel: 'Show QR',
qrAlt: 'Event QR code',
copyLabel: 'Copy link',
guestsTitle: 'Guests',
guestsSubtitle: 'Share the event with your guests.',
guestsSubtitleEvent: 'Share {event} with your guests.',
send: 'Send invite',
},
chips: {
emotion: 'Emotion',
task: 'Task',
date: 'Captured',
},
},
uploadQueue: {
title: 'Uploads',
description: 'Queue with progress/retry and background sync toggle.',
description: 'Queue with progress and retries.',
summary: '{waiting} waiting · {failed} failed',
emptyTitle: 'No queued uploads',
emptyDescription: 'Once photos are queued, they will appear here.',
progress: '{progress}%',
actions: {
retryAll: 'Retry all',
clearFinished: 'Clear finished',
},
status: {
uploaded: 'Uploaded',
uploading: 'Uploading',
failed: 'Failed',
waiting: 'Waiting',
retries: ' · {count} retries',
},
},
uploadV2: {
preview: {
title: 'Live preview',
subtitle: 'Tap anywhere to focus.',
cta: 'Capture now',
},
tools: {
grid: 'Grid',
flash: 'Flash',
upload: 'Upload',
},
queue: {
summary: '{waiting} waiting, {sending} sending',
uploading: 'Uploading {name} · {progress}%',
button: 'Queue',
},
errors: {
invalidFile: 'Please choose a photo file.',
eventMissing: 'Event not found',
},
},
pendingUploads: {
title: 'Pending uploads',