import React from 'react'; import { ArrowRight, Camera, Clock3, Heart, MessageCircle, Moon, QrCode, ShieldCheck, Sparkles, SunMedium, Wand2, } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { cn } from '@/lib/utils'; import { LanguageSwitcher } from '../components/LanguageSwitcher'; import { FrostedSurface } from '../components/tenant'; import { ADMIN_DEFAULT_AFTER_LOGIN_PATH, ADMIN_LOGIN_PATH } from '../constants'; import { encodeReturnTo, resolveReturnTarget } from '../lib/returnTo'; import { navigateToHref } from '../lib/navigation'; const heroStats = [ { label: 'Events begleitet', value: '2.100+' }, { label: 'Fotos kuratiert', value: '680k' }, { label: 'Mission Cards live', value: '120+' }, ]; const featureCards = [ { icon: Sparkles, badge: 'Welcome Flow', title: 'Geführte Einrichtung', description: 'Ein roter Faden von eurer ersten Mission bis zum Event-Branding. Alles läuft dort, wo ihr später auch Events steuert.', }, { icon: QrCode, badge: 'Gäste einladen', title: 'Links & QR-Cards teilen', description: 'Mit einem Fingertipp entstehen Einladungslinks, QR-Codes und TWA-Links für Android & iOS – ganz ohne App Store Hürden.', }, { icon: Camera, badge: 'Live Galerie', title: 'Moderieren wie im Dashboard', description: 'Markiert Highlights, ordnet Emotions oder sperrt Fotos – exakt die Tools aus dem Event Admin, nur mit Willkommens-Glow.', }, ]; const timelineSteps = [ { title: 'Mission Cards wählen', description: 'Kuratiert Aufgaben, die eure Gäste ins Erzählen bringen. Jeder Schritt speichert automatisch.', }, { title: 'Event Branding festlegen', description: 'Farben, Story, Cover – alles in einer Ansicht. Vorschau zeigt sofort, wie der Gastzugang wirkt.', }, { title: 'Link teilen & feiern', description: 'QR-Code oder Link verschicken, fertig. Gäste landen direkt in eurer Galerie und können ohne Login starten.', }, ]; const supportHighlights = [ { icon: ShieldCheck, title: 'Datenschutz-ready', description: 'Keine versteckten Tracker, DSGVO-konformes Hosting und Kontrolle, wer Fotos sieht.', }, { icon: Clock3, title: 'Offline nutzbar', description: 'Uploads puffern automatisch, falls das WLAN in der Location aussetzt.', }, { icon: MessageCircle, title: 'Crew an eurer Seite', description: 'Direkter Chat zum Fotospiel-Team – aus der App heraus oder via hallo@fotospiel.de.', }, ]; export default function WelcomeTeaserPage() { const [isRedirecting, setIsRedirecting] = React.useState(false); const [mode, setMode] = React.useState<'dark' | 'light'>('dark'); const isLightMode = mode === 'light'; const flowSectionRef = React.useRef(null); React.useEffect(() => { document.body.classList.add('tenant-admin-theme', 'tenant-admin-welcome-theme'); return () => { document.body.classList.remove('tenant-admin-theme', 'tenant-admin-welcome-theme'); }; }, []); React.useEffect(() => { document.body.classList.toggle('tenant-admin-welcome-light', isLightMode); document.body.classList.toggle('tenant-admin-welcome-dark', !isLightMode); }, [isLightMode]); const theme = React.useMemo( () => ({ rootBackground: isLightMode ? 'bg-gradient-to-br from-rose-50 via-white to-sky-50 text-slate-900' : 'bg-slate-950 text-white', aurora: isLightMode ? 'bg-[radial-gradient(ellipse_at_top,_rgba(255,179,205,0.55),_transparent_55%),radial-gradient(ellipse_at_bottom,_rgba(148,187,233,0.45),_transparent_60%)]' : 'bg-[radial-gradient(ellipse_at_top,_rgba(255,137,170,0.25),_transparent_60%),radial-gradient(ellipse_at_bottom,_rgba(99,102,241,0.25),_transparent_62%)]', overlay: isLightMode ? 'bg-gradient-to-br from-white/85 via-rose-50/70 to-sky-50/70' : 'bg-gradient-to-br from-slate-950/95 via-slate-950/80 to-[#150b1f]/90', headerBadge: isLightMode ? 'border-rose-100 bg-white text-rose-500' : 'border-white/30 bg-white/5 text-white', headerSubtitle: isLightMode ? 'text-slate-600' : 'text-white/70', heroEyebrow: isLightMode ? 'text-rose-500' : 'text-rose-200', heroTitle: isLightMode ? 'text-slate-900' : 'text-white', heroBody: isLightMode ? 'text-slate-600' : 'text-white/75', ghostButton: isLightMode ? 'text-slate-700 hover:bg-slate-100' : 'text-white/80 hover:bg-white/10', statCard: isLightMode ? 'border-rose-100/70 bg-white/90 text-slate-900 shadow-rose-100/50' : 'border-white/15 bg-white/10 text-white shadow-rose-500/30', featureCard: isLightMode ? 'border-rose-100 bg-white text-slate-900 shadow-rose-100/40' : 'border-white/15 bg-white/10 text-white shadow-slate-900/40', timelineCard: isLightMode ? 'border-slate-200 bg-white text-slate-900' : 'border-white/15 bg-white/5 text-white', timelineDescription: isLightMode ? 'text-slate-600' : 'text-white/70', supportCard: isLightMode ? 'border-slate-200 bg-white text-slate-900' : 'border-white/15 bg-white/10 text-white', supportDescription: isLightMode ? 'text-slate-600' : 'text-white/70', ctaSurface: isLightMode ? 'border-slate-200 bg-white text-slate-900' : 'border-white/15 bg-white/10 text-white', ctaDetail: isLightMode ? 'text-slate-600' : 'text-white/70', footer: isLightMode ? 'border-t border-slate-200/80 bg-white/70 text-slate-500' : 'border-t border-white/10 bg-black/20 text-white/60', }), [isLightMode] ); const toggleMode = React.useCallback(() => { setMode((prev) => (prev === 'dark' ? 'light' : 'dark')); }, []); const handleLoginRedirect = React.useCallback(() => { if (isRedirecting) { return; } setIsRedirecting(true); const params = new URLSearchParams(window.location.search); const rawReturnTo = params.get('return_to'); const { finalTarget, encodedFinal } = resolveReturnTarget(rawReturnTo, ADMIN_DEFAULT_AFTER_LOGIN_PATH); const target = new URL(ADMIN_LOGIN_PATH, window.location.origin); target.searchParams.set('return_to', encodedFinal ?? encodeReturnTo(finalTarget)); const nextHref = `${target.pathname}${target.search}`; navigateToHref(nextHref); }, [isRedirecting]); const handleScrollToFlow = React.useCallback(() => { flowSectionRef.current?.scrollIntoView({ behavior: 'smooth', block: 'start' }); }, []); return (
Event Admin · Fotospiel

Euer mobiles Kontrollzentrum für Events, Workshops und Feiern

Willkommen im Event-Kontrollzentrum

Alles für eure Gästegeschichte in einer App

Der neue Startscreen begrüßt euch wie eine mobile App, führt euch in den Welcome Flow und lässt euch jederzeit zurück ins Dashboard springen, sobald ihr bereit seid.

{heroStats.map((stat) => (

{stat.value}

{stat.label}

))}
Fotospiel Event Admin
Heute Live
{['Mission Pack auswählen', 'Event Branding finalisieren', 'Einladungslink teilen'].map((item) => (

{item}

Welcome Flow

))}
Live Moments +28
{[ { title: 'Anna lädt 6 Fotos hoch', subtitle: 'Event · Gartenpalast' }, { title: 'Max reagiert auf Mission „Emotionen“', subtitle: 'Tasks · Emotion Board' }, { title: 'QR-Link 124x gescannt', subtitle: 'Einladungen · Photobooth' }, ].map((entry) => (

{entry.title}

{entry.subtitle}

))}
{featureCards.map((feature) => (
{feature.badge}

{feature.title}

{feature.description}

))}

Guided Journey

So leitet euch der Welcome Flow

{timelineSteps.map((step, index) => (
{index + 1}

{step.title}

{step.description}

))}
Mobile Greeting Neu

Fühlt sich an wie eine native App

Mit großen Touch-Flächen, Animationen und frosted Cards wirkt der Startscreen wie die mobile Version des Event Admins – perfekt für TWA und Capacitor Builds.

CTA

Event Admin öffnen

Leitet direkt zum OAuth Login

Scroll Action

Journey ansehen

Smooth Scroll bis zur Timeline

{supportHighlights.map((support) => (

{support.title}

{support.description}

))}

Bereit?

Wechselt ins Dashboard, sobald euer Flow steht.

Alle Schritte lassen sich später direkt aus dem Event Admin wieder öffnen.

); }