die tenant admin oauth authentifizierung wurde implementiert und funktioniert jetzt. Zudem wurde das marketing frontend dashboard implementiert.

This commit is contained in:
Codex Agent
2025-11-04 16:14:17 +01:00
parent 92e64c361a
commit fe380689fb
63 changed files with 4239 additions and 1142 deletions

View File

@@ -1,8 +1,17 @@
import AuthLayoutTemplate from '@/layouts/auth/auth-simple-layout';
export default function AuthLayout({ children, title, description, ...props }: { children: React.ReactNode; title: string; description: string }) {
interface AuthLayoutProps {
children: React.ReactNode;
title: string;
description: string;
name?: string;
logoSrc?: string;
logoAlt?: string;
}
export default function AuthLayout({ children, title, description, name, logoSrc, logoAlt }: AuthLayoutProps) {
return (
<AuthLayoutTemplate title={title} description={description} {...props}>
<AuthLayoutTemplate title={title} description={description} name={name} logoSrc={logoSrc} logoAlt={logoAlt}>
{children}
</AuthLayoutTemplate>
);

View File

@@ -1,6 +1,6 @@
import AppLogoIcon from '@/components/app-logo-icon';
import { Button } from '@/components/ui/button';
import { home, packages } from '@/routes';
import { useLocalizedRoutes } from '@/hooks/useLocalizedRoutes';
import { Link } from '@inertiajs/react';
import { Sparkles, Camera, ShieldCheck } from 'lucide-react';
import { type PropsWithChildren } from 'react';
@@ -10,10 +10,14 @@ interface AuthLayoutProps {
name?: string;
title?: string;
description?: string;
logoSrc?: string;
logoAlt?: string;
}
export default function AuthSimpleLayout({ children, title, description }: PropsWithChildren<AuthLayoutProps>) {
export default function AuthSimpleLayout({ children, title, description, name, logoSrc, logoAlt }: PropsWithChildren<AuthLayoutProps>) {
const { t } = useTranslation('auth');
const { localizedPath } = useLocalizedRoutes();
const brandLabel = name ?? 'Fotospiel';
const highlights = [
{
@@ -85,7 +89,7 @@ export default function AuthSimpleLayout({ children, title, description }: Props
<p>{t('login.hero_footer.subline', 'Entdecke unsere Packages und erlebe Fotospiel live.')}</p>
</div>
<Button asChild variant="secondary" className="h-10 rounded-full bg-white px-5 text-sm font-semibold text-gray-900 shadow-md shadow-white/30 transition hover:bg-white/90">
<Link href={packages()}>{t('login.hero_footer.cta', 'Packages entdecken')}</Link>
<Link href={localizedPath('/packages')}>{t('login.hero_footer.cta', 'Packages entdecken')}</Link>
</Button>
</div>
</div>
@@ -94,12 +98,19 @@ export default function AuthSimpleLayout({ children, title, description }: Props
<div className="absolute inset-x-0 top-0 h-1 bg-gradient-to-r from-pink-400 via-fuchsia-400 to-sky-400" aria-hidden />
<div className="relative z-10 flex flex-col gap-8">
<div className="flex flex-col items-center gap-4 text-center">
<Link href={home()} className="group flex flex-col items-center gap-3 font-medium">
<span className="flex h-12 w-12 items-center justify-center rounded-2xl bg-gradient-to-br from-[#ff8ab4] to-[#a855f7] shadow-lg shadow-pink-400/40 transition duration-300 group-hover:scale-105">
<AppLogoIcon className="size-8 fill-white" aria-hidden />
</span>
<span className="text-2xl font-semibold font-display text-gray-900 dark:text-white">Fotospiel</span>
<span className="sr-only">{title}</span>
<Link href={localizedPath('/')} className="group flex flex-col items-center gap-3 font-medium">
{logoSrc ? (
<img
src={logoSrc}
alt={logoAlt ?? brandLabel}
className="h-16 w-auto transition duration-300 group-hover:scale-105"
/>
) : (
<span className="flex h-12 w-12 items-center justify-center rounded-2xl bg-gradient-to-br from-[#ff8ab4] to-[#a855f7] shadow-lg shadow-pink-400/40 transition duration-300 group-hover:scale-105">
<AppLogoIcon className="size-8 fill-white" aria-hidden />
</span>
)}
<span className="text-2xl font-semibold font-display text-gray-900 dark:text-white">{brandLabel}</span>
</Link>
<div className="space-y-2">