feat: modernize landing page design, localize login/forgot password forms, and add public privacy/imprint pages
All checks were successful
Staging Build / build (push) Successful in 2m42s
All checks were successful
Staging Build / build (push) Successful in 2m42s
This commit is contained in:
@@ -98,7 +98,7 @@ export function NavbarClient({ user, role = "partner" }: NavbarClientProps) {
|
||||
<>
|
||||
<header className="px-4 lg:px-6 h-16 flex items-center justify-between border-b border-white/5 backdrop-blur-md sticky top-0 z-50 bg-[#020617]/85">
|
||||
<Link className="flex items-center justify-center gap-2 group" href="/">
|
||||
<span className="font-bold text-xl tracking-tighter text-white">CASPOS Store</span>
|
||||
<span className="font-bold text-xl tracking-tighter text-white">CASPOS Shop</span>
|
||||
<DemoWrapper>
|
||||
<span className="text-[10px] bg-amber-500/20 text-amber-400 px-2 py-0.5 rounded-full font-semibold uppercase tracking-wider border border-amber-500/30">
|
||||
Demo
|
||||
|
||||
@@ -33,7 +33,7 @@ export function ForgotPasswordForm({
|
||||
await resetPassword(email);
|
||||
setSuccess(true);
|
||||
} catch (error: unknown) {
|
||||
setError(error instanceof Error ? error.message : "An error occurred");
|
||||
setError(error instanceof Error ? error.message : "Ein Fehler ist aufgetreten.");
|
||||
} finally {
|
||||
setIsLoading(false);
|
||||
}
|
||||
@@ -44,34 +44,34 @@ export function ForgotPasswordForm({
|
||||
{success ? (
|
||||
<Card>
|
||||
<CardHeader>
|
||||
<CardTitle className="text-2xl">Check Your Email</CardTitle>
|
||||
<CardDescription>Password reset instructions sent</CardDescription>
|
||||
<CardTitle className="text-2xl">E-Mails prüfen</CardTitle>
|
||||
<CardDescription>Link zum Zurücksetzen gesendet</CardDescription>
|
||||
</CardHeader>
|
||||
<CardContent>
|
||||
<p className="text-sm text-muted-foreground">
|
||||
If you registered using your email and password, you will receive
|
||||
a password reset email.
|
||||
Wenn Sie sich mit E-Mail und Passwort registriert haben, erhalten Sie
|
||||
in Kürze eine E-Mail zum Zurücksetzen Ihres Passworts.
|
||||
</p>
|
||||
</CardContent>
|
||||
</Card>
|
||||
) : (
|
||||
<Card>
|
||||
<CardHeader>
|
||||
<CardTitle className="text-2xl">Reset Your Password</CardTitle>
|
||||
<CardTitle className="text-2xl">Passwort zurücksetzen</CardTitle>
|
||||
<CardDescription>
|
||||
Type in your email and we'll send you a link to reset your
|
||||
password
|
||||
Geben Sie Ihre E-Mail-Adresse ein. Wir senden Ihnen einen Link,
|
||||
um Ihr Passwort zurückzusetzen.
|
||||
</CardDescription>
|
||||
</CardHeader>
|
||||
<CardContent>
|
||||
<form onSubmit={handleForgotPassword}>
|
||||
<div className="flex flex-col gap-6">
|
||||
<div className="grid gap-2">
|
||||
<Label htmlFor="email">Email</Label>
|
||||
<Label htmlFor="email">E-Mail</Label>
|
||||
<Input
|
||||
id="email"
|
||||
type="email"
|
||||
placeholder="m@example.com"
|
||||
placeholder="name@beispiel.de"
|
||||
required
|
||||
value={email}
|
||||
onChange={(e) => setEmail(e.target.value)}
|
||||
@@ -79,16 +79,16 @@ export function ForgotPasswordForm({
|
||||
</div>
|
||||
{error && <p className="text-sm text-red-500">{error}</p>}
|
||||
<Button type="submit" className="w-full" disabled={isLoading}>
|
||||
{isLoading ? "Sending..." : "Send reset email"}
|
||||
{isLoading ? "Wird gesendet..." : "Link senden"}
|
||||
</Button>
|
||||
</div>
|
||||
<div className="mt-4 text-center text-sm">
|
||||
Already have an account?{" "}
|
||||
Bereits ein Konto vorhanden?{" "}
|
||||
<Link
|
||||
href="/auth/login"
|
||||
className="underline underline-offset-4"
|
||||
>
|
||||
Login
|
||||
Anmelden
|
||||
</Link>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
@@ -44,7 +44,7 @@ export function LoginForm({
|
||||
try {
|
||||
const res = await signIn(email, password);
|
||||
if (!res.success) {
|
||||
setError(res.error || "An error occurred");
|
||||
setError(res.error || "Ein Fehler ist aufgetreten.");
|
||||
return;
|
||||
}
|
||||
if (nextParam) {
|
||||
@@ -55,7 +55,7 @@ export function LoginForm({
|
||||
router.push("/my-customers");
|
||||
}
|
||||
} catch (error: unknown) {
|
||||
setError(error instanceof Error ? error.message : "An error occurred");
|
||||
setError(error instanceof Error ? error.message : "Ein Fehler ist aufgetreten.");
|
||||
} finally {
|
||||
setIsLoading(false);
|
||||
}
|
||||
@@ -65,20 +65,20 @@ export function LoginForm({
|
||||
<div className={cn("flex flex-col gap-6", className)} {...props}>
|
||||
<Card>
|
||||
<CardHeader>
|
||||
<CardTitle className="text-2xl">Login</CardTitle>
|
||||
<CardTitle className="text-2xl">Anmelden</CardTitle>
|
||||
<CardDescription>
|
||||
Enter your email below to login to your account
|
||||
Geben Sie Ihre E-Mail-Adresse und Ihr Passwort ein, um sich anzumelden.
|
||||
</CardDescription>
|
||||
</CardHeader>
|
||||
<CardContent>
|
||||
<form onSubmit={handleLogin}>
|
||||
<div className="flex flex-col gap-6">
|
||||
<div className="grid gap-2">
|
||||
<Label htmlFor="email">Email</Label>
|
||||
<Label htmlFor="email">E-Mail</Label>
|
||||
<Input
|
||||
id="email"
|
||||
type="email"
|
||||
placeholder="m@example.com"
|
||||
placeholder="name@beispiel.de"
|
||||
required
|
||||
value={email}
|
||||
onChange={(e) => setEmail(e.target.value)}
|
||||
@@ -86,12 +86,12 @@ export function LoginForm({
|
||||
</div>
|
||||
<div className="grid gap-2">
|
||||
<div className="flex items-center">
|
||||
<Label htmlFor="password">Password</Label>
|
||||
<Label htmlFor="password">Passwort</Label>
|
||||
<Link
|
||||
href="/auth/forgot-password"
|
||||
className="ml-auto inline-block text-sm underline-offset-4 hover:underline"
|
||||
>
|
||||
Forgot your password?
|
||||
Passwort vergessen?
|
||||
</Link>
|
||||
</div>
|
||||
<Input
|
||||
@@ -114,7 +114,7 @@ export function LoginForm({
|
||||
)}
|
||||
{error && <p className="text-sm text-red-500">{error}</p>}
|
||||
<Button type="submit" className="w-full" disabled={isLoading}>
|
||||
{isLoading ? "Logging in..." : "Login"}
|
||||
{isLoading ? "Wird angemeldet..." : "Anmelden"}
|
||||
</Button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
@@ -964,7 +964,7 @@ export function OrderWizard({
|
||||
)}
|
||||
<p className="text-xs text-slate-500 italic">
|
||||
Mit dem Klick auf „Kostenpflichtig bestellen" akzeptieren Sie unsere AGB und die{' '}
|
||||
<a href="https://caspos.de/datenschutz/" target="_blank" rel="noopener noreferrer" className="underline hover:text-slate-400">
|
||||
<a href="/datenschutz" target="_blank" rel="noopener noreferrer" className="underline hover:text-slate-400">
|
||||
Datenschutzerklärung
|
||||
</a>.
|
||||
</p>
|
||||
|
||||
Reference in New Issue
Block a user