From e93cf7805cce3cd77aa1eadc74b966ffcecd3fb1 Mon Sep 17 00:00:00 2001 From: DanielS Date: Thu, 25 Jun 2026 22:25:11 +0200 Subject: [PATCH] feat: modernize landing page design, localize login/forgot password forms, and add public privacy/imprint pages --- shop/app/datenschutz/page.tsx | 59 +++ shop/app/impressum/page.tsx | 69 ++++ shop/app/page.tsx | 461 ++++++++++++++++++----- shop/components/NavbarClient.tsx | 2 +- shop/components/forgot-password-form.tsx | 26 +- shop/components/login-form.tsx | 18 +- shop/components/order-wizard.tsx | 2 +- shop/lib/supabase/proxy.ts | 2 + 8 files changed, 525 insertions(+), 114 deletions(-) create mode 100644 shop/app/datenschutz/page.tsx create mode 100644 shop/app/impressum/page.tsx diff --git a/shop/app/datenschutz/page.tsx b/shop/app/datenschutz/page.tsx new file mode 100644 index 0000000..8082157 --- /dev/null +++ b/shop/app/datenschutz/page.tsx @@ -0,0 +1,59 @@ +import Link from 'next/link' +import { ArrowLeft, Lock } from 'lucide-react' +import { Button } from '@/components/ui/button' + +export default function Datenschutz() { + return ( +
+
+ + + + +
+
+ +
+

+ Datenschutzerklärung +

+

Informationen über die Verarbeitung Ihrer personenbezogenen Daten.

+
+ +
+ +
+
+

1. Datenschutz auf einen Blick

+

+ Wir nehmen den Schutz Ihrer persönlichen Daten sehr ernst. Personenbezogene Daten werden auf dieser Webseite nur im technisch notwendigen Umfang erhoben und verarbeitet. Die nachfolgenden Erklärungen geben Ihnen einen Überblick darüber, wie wir diesen Schutz gewährleisten und welche Art von Daten zu welchem Zweck erhoben werden. +

+
+ +
+

2. Verantwortliche Stelle

+

+ Verantwortlich für die Datenverarbeitung auf dieser Website ist die CASPOS GmbH (Anschrift siehe Impressum). +

+
+ +
+

3. Datenerfassung auf unserer Website

+

+ Ihre Daten werden zum einen dadurch erhoben, dass Sie uns diese mitteilen. Hierbei kann es sich z. B. um Daten handeln, die Sie in ein Kontakt- oder Bestellformular eingeben. Andere Daten werden automatisch beim Besuch der Website durch unsere IT-Systeme erfasst. Das sind vor allem technische Daten (z. B. Internetbrowser, Betriebssystem oder Uhrzeit des Seitenaufrufs). +

+
+ +
+

4. Ihre Rechte

+

+ Sie haben jederzeit das Recht, unentgeltlich Auskunft über Herkunft, Empfänger und Zweck Ihrer gespeicherten personenbezogenen Daten zu erhalten. Sie haben außerdem ein Recht, die Berichtigung, Sperrung oder Löschung dieser Daten zu verlangen. +

+
+
+
+
+ ) +} diff --git a/shop/app/impressum/page.tsx b/shop/app/impressum/page.tsx new file mode 100644 index 0000000..9a17c8b --- /dev/null +++ b/shop/app/impressum/page.tsx @@ -0,0 +1,69 @@ +import Link from 'next/link' +import { ArrowLeft, Shield } from 'lucide-react' +import { Button } from '@/components/ui/button' + +export default function Impressum() { + return ( +
+
+ + + + +
+
+ +
+

+ Impressum +

+

Angaben gemäß § 5 TMG.

+
+ +
+ +
+
+

CASPOS GmbH

+

+ Musterstraße 123
+ 12345 Musterstadt +

+
+ +
+

Vertreten durch:

+

Max Mustermann (Geschäftsführer)

+
+ +
+

Kontakt:

+

+ Telefon: +49 (0) 123 456789
+ E-Mail: info@caspos.de +

+
+ +
+

Registereintrag:

+

+ Eintragung im Handelsregister.
+ Registergericht: Amtsgericht Musterstadt
+ Registernummer: HRB 12345 +

+
+ +
+

Umsatzsteuer-ID:

+

+ Umsatzsteuer-Identifikationsnummer gemäß §27 a Umsatzsteuergesetz:
+ DE 123456789 +

+
+
+
+
+ ) +} diff --git a/shop/app/page.tsx b/shop/app/page.tsx index 7214425..6db8bf8 100644 --- a/shop/app/page.tsx +++ b/shop/app/page.tsx @@ -1,110 +1,391 @@ +"use client" + +import { useState, useEffect } from 'react' +import { createClient } from '@/lib/supabase/client' import { Button } from '@/components/ui/button' import Link from 'next/link' -import { ArrowRight, CheckCircle2, ShoppingCart, Utensils, Layers } from 'lucide-react' -import { Navbar } from '@/components/Navbar' +import { motion } from 'framer-motion' +import { + ArrowRight, + CheckCircle2, + ShoppingCart, + Utensils, + Layers, + Users, + ClipboardList, + Zap, + ArrowUpRight, + ShieldCheck, + Sparkles, + Activity +} from 'lucide-react' export default function Home() { + const [user, setUser] = useState(null) + const [mounted, setMounted] = useState(false) + + useEffect(() => { + setMounted(true) + const supabase = createClient() + supabase.auth.getUser().then(({ data: { user } }) => { + setUser(user) + }) + }, []) + + const containerVariants = { + hidden: { opacity: 0 }, + visible: { + opacity: 1, + transition: { + staggerChildren: 0.15 + } + } + } + + const itemVariants = { + hidden: { y: 20, opacity: 0 }, + visible: { + y: 0, + opacity: 1, + transition: { + type: "spring" as const, + stiffness: 100, + damping: 15 + } + } + } + return ( - <> - {/* Hero Section: Zielgerichtet auf Lizenzen */} -
-
-
-
-
-
- CASPOS Lizenz-Management-Server +
+ + {/* Background Decorative Animated Blobs */} +
+ + +
+ + {/* Hero Section */} +
+ + {/* Badge */} + + + + + CASPOS Lizenz-Order-Portal + + + {/* Headline */} +
+ + POS Software Lizenzen & Module + + + Erwerben und verwalten Sie digitale Lizenzen für CASPOS Kassensysteme. + Sofortige Aktivierung und automatische Bereitstellung für Ihre Kunden. + +
+ + {/* Hero CTAs */} + + + + + + + + + + {/* Quick Access Actions Bar */} + {mounted && user && ( + +
+ {/* Card border glow decoration */} +
+

+ Mein Dashboard Schnellzugriff +

+ +
+ + +
+
+ +
+
+ Kundenliste + Kunden & Lizenzen verwalten +
+
+ +
+ + + + +
+
+ +
+
+ Bestellungen + Aufträge & Status einsehen +
+
+ +
+ +
-

- POS Software Lizenzen & Module -

-

- Erwerben und verwalten Sie digitale Lizenzen für CASPOS Kassensysteme. Sofortige Aktivierung und automatische Bereitstellung für Ihre Kunden. + + )} + + +

+ + {/* Grid of modules */} +
+
+ +
+ +
+
+ System-Module +
+

+ Verfügbare System-Module +

+

+ Wählen Sie das passende Modul für das Kassensystem Ihres Kunden. +

+
+ +
+ {/* Card 1 */} + + {/* Highlight line hover effect */} +
+
+
+ +
+

Handel & ERP

+

+ Erweiterungen für Handelskassen, Bestandsführung und vollwertige Warenwirtschaftssysteme (ERP). +

+
+ + + {/* Card 2 */} + + {/* Highlight line hover effect */} +
+
+
+ +
+

Gastronomie

+

+ Lizenzen für mobiles Bestellen (Orderman), digitale Küchen-Monitore und interaktive Abhol-Boards. +

+
+ + + {/* Card 3 */} + + {/* Highlight line hover effect */} +
+
+
+ +
+

Hybride Systeme

+

+ Das Beste aus beiden Welten. Nahtlose Kombination von Handel- und Gastronomie-Funktionalitäten. +

+
+ +
+
+
+ + {/* Stepper info */} +
+
+
+
+ Ablauf +
+

+ Wie funktioniert die Bereitstellung? +

+
+ +
+ {/* Connection line for Desktop */} +
+ +
+ {/* Step 1 */} +
+
+ 1 +
+

Kunde wählen

+

+ Gewünschten Kunden auswählen, der die Lizenz erhalten soll. +

+
+ + {/* Step 2 */} +
+
+ 2 +
+

Lizenz wählen

+

+ Gewünschte Lizenzen für den Kunden auswählen und den Bestellung abschließen. +

+
+ + {/* Step 3 */} +
+
+ 3 +
+

Live gehen

+

+ Nach dem Erhalt der Lizenz Live gehen. +

+
+
+
+
+
+ + {/* Core values / Features list */} +
+
+
+
+
+ Sicherheit & Stabilität +
+

+ Verlässliche Plattform für Lizenz-Aktivierungen +

+

+ Unsere Kassenlösungen sind GoBD-konform und offline-fähig. Über den Lizenz-Management-Server werden alle Lizenzen und Module verschlüsselt übertragen und sind innerhalb weniger Millisekunden auf der Kasse aktiv.

- - {/* High-Contrast Buttons (Light/Dark Ready) */} -
- - - - - - -
-
-
-
- - {/* Feature Grid: Aufgeteilt nach echten POS-Modulen */} -
-
-
- - {/* Modul 1 */} -
-
- +
+
+ +
GoBD Konformität
+

Konform nach allen aktuellen steuerrechtlichen Anforderungen.

-

Handel & ERP

-

Erweiterungen für Handelskassen, Bestandsführung und vollwertige Warenwirtschaftssysteme (ERP).

-
- - {/* Modul 2 */} -
-
- +
+ +
Same-Day-Bearbeitung
+

Bearbeitung und Erstellung Ihrer Lizenzen noch am selben Werktag.

-

Gastronomie

-

Lizenzen für mobiles Bestellen (Orderman), digitale Küchen-Monitore und interaktive Abhol-Boards.

-
- - {/* Modul 3 */} -
-
- +
+ +
Verschlüsselte Keys
+

Sichere Lizenz-Authentifizierung direkt auf der Kasse.

+
+
+ +
Partner Support
+

Schnelle Hilfe und kompetente Ansprechpartner für Händler.

-

Hybride Systeme

-

Das beste aus beiden Welten. Handel mit Gastronomie und umgekehrt.

-
- -
-
-
- - {/* Kurze Info-Sektion für Partner / Händler */} -
-
-

Wie funktioniert die Bereitstellung?

-
-
- -

1. Lizenz wählen: Gewünschtes POS-Modul im Shop selektieren.

-
-
- -

2. Kunde zuweisen: Lizenz direkt einem Kunden-Account zuordnen.

-
-
- -

3. Live gehen: Lizenz-Key (`.key`) wird sofort serverseitig aktiviert.

{/* Footer */} -
-

© 2026 CASPOS GmbH. Alle Rechte vorbehalten.

- +
+
+

© 2026 CASPOS GmbH. Alle Rechte vorbehalten.

+ +
- +
) } \ No newline at end of file diff --git a/shop/components/NavbarClient.tsx b/shop/components/NavbarClient.tsx index a721a90..3b111c3 100644 --- a/shop/components/NavbarClient.tsx +++ b/shop/components/NavbarClient.tsx @@ -98,7 +98,7 @@ export function NavbarClient({ user, role = "partner" }: NavbarClientProps) { <>
- CASPOS Store + CASPOS Shop Demo diff --git a/shop/components/forgot-password-form.tsx b/shop/components/forgot-password-form.tsx index c515b91..f25bc7a 100644 --- a/shop/components/forgot-password-form.tsx +++ b/shop/components/forgot-password-form.tsx @@ -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 ? ( - Check Your Email - Password reset instructions sent + E-Mails prüfen + Link zum Zurücksetzen gesendet

- 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.

) : ( - Reset Your Password + Passwort zurücksetzen - 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.
- + setEmail(e.target.value)} @@ -79,16 +79,16 @@ export function ForgotPasswordForm({
{error &&

{error}

}
- Already have an account?{" "} + Bereits ein Konto vorhanden?{" "} - Login + Anmelden
diff --git a/shop/components/login-form.tsx b/shop/components/login-form.tsx index 6c45c33..681e310 100644 --- a/shop/components/login-form.tsx +++ b/shop/components/login-form.tsx @@ -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({
- Login + Anmelden - Enter your email below to login to your account + Geben Sie Ihre E-Mail-Adresse und Ihr Passwort ein, um sich anzumelden.
- + setEmail(e.target.value)} @@ -86,12 +86,12 @@ export function LoginForm({
- + - Forgot your password? + Passwort vergessen?
{error}

}
diff --git a/shop/components/order-wizard.tsx b/shop/components/order-wizard.tsx index 68196b3..a6b52f2 100644 --- a/shop/components/order-wizard.tsx +++ b/shop/components/order-wizard.tsx @@ -964,7 +964,7 @@ export function OrderWizard({ )}

Mit dem Klick auf „Kostenpflichtig bestellen" akzeptieren Sie unsere AGB und die{' '} - + Datenschutzerklärung .

diff --git a/shop/lib/supabase/proxy.ts b/shop/lib/supabase/proxy.ts index 9d74ad2..4117729 100644 --- a/shop/lib/supabase/proxy.ts +++ b/shop/lib/supabase/proxy.ts @@ -53,6 +53,8 @@ export async function updateSession(request: NextRequest) { if ( request.nextUrl.pathname !== "/" && + request.nextUrl.pathname !== "/impressum" && + request.nextUrl.pathname !== "/datenschutz" && !user && !request.nextUrl.pathname.startsWith("/login") && !request.nextUrl.pathname.startsWith("/auth")