From 52f2a7875394e3ee4979f3467077ee1fc0c8d41f Mon Sep 17 00:00:00 2001 From: DanielS Date: Thu, 25 Jun 2026 22:34:14 +0200 Subject: [PATCH] fix: resolve client-side supabase auth session visibility on page.tsx by querying server-side and passing to HomeClient client component --- shop/app/page.tsx | 398 +------------------------------- shop/components/HomeClient.tsx | 402 +++++++++++++++++++++++++++++++++ 2 files changed, 414 insertions(+), 386 deletions(-) create mode 100644 shop/components/HomeClient.tsx diff --git a/shop/app/page.tsx b/shop/app/page.tsx index 6db8bf8..6bedfc0 100644 --- a/shop/app/page.tsx +++ b/shop/app/page.tsx @@ -1,391 +1,17 @@ -"use client" +import { createClient } from '@/lib/supabase/server' +import { HomeClient } from '@/components/HomeClient' -import { useState, useEffect } from 'react' -import { createClient } from '@/lib/supabase/client' -import { Button } from '@/components/ui/button' -import Link from 'next/link' -import { motion } from 'framer-motion' -import { - ArrowRight, - CheckCircle2, - ShoppingCart, - Utensils, - Layers, - Users, - ClipboardList, - Zap, - ArrowUpRight, - ShieldCheck, - Sparkles, - Activity -} from 'lucide-react' +export const dynamic = "force-dynamic" -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 - } - } +export default async function Home() { + let user = null + try { + const supabase = await createClient() + const { data } = await supabase.auth.getUser() + user = data.user + } catch (e) { + console.error("Failed to fetch user in page.tsx:", e) } - const itemVariants = { - hidden: { y: 20, opacity: 0 }, - visible: { - y: 0, - opacity: 1, - transition: { - type: "spring" as const, - stiffness: 100, - damping: 15 - } - } - } - - return ( -
- - {/* 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 -
-
- -
- -
-
- - )} - - -
- - {/* 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. -

-
-
-
- -
GoBD Konformität
-

Konform nach allen aktuellen steuerrechtlichen Anforderungen.

-
-
- -
Same-Day-Bearbeitung
-

Bearbeitung und Erstellung Ihrer Lizenzen noch am selben Werktag.

-
-
- -
Verschlüsselte Keys
-

Sichere Lizenz-Authentifizierung direkt auf der Kasse.

-
-
- -
Partner Support
-

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

-
-
-
-
-
- - {/* Footer */} -
-
-

© 2026 CASPOS GmbH. Alle Rechte vorbehalten.

- -
-
-
- ) + return } \ No newline at end of file diff --git a/shop/components/HomeClient.tsx b/shop/components/HomeClient.tsx new file mode 100644 index 0000000..bc17039 --- /dev/null +++ b/shop/components/HomeClient.tsx @@ -0,0 +1,402 @@ +"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 { motion } from 'framer-motion' +import { type User } from '@supabase/supabase-js' +import { + ArrowRight, + CheckCircle2, + ShoppingCart, + Utensils, + Layers, + Users, + ClipboardList, + Zap, + ArrowUpRight, + ShieldCheck, + Sparkles, + Activity +} from 'lucide-react' + +interface HomeClientProps { + initialUser: User | null +} + +export function HomeClient({ initialUser }: HomeClientProps) { + const [user, setUser] = useState(initialUser) + const [mounted, setMounted] = useState(false) + + useEffect(() => { + setMounted(true) + const supabase = createClient() + + // Listen to client-side auth state changes to stay in sync + const { data: { subscription } } = supabase.auth.onAuthStateChange((event, session) => { + setUser(session?.user ?? null) + }) + + return () => { + subscription.unsubscribe() + } + }, []) + + 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 ( +
+ + {/* 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 +
+
+ +
+ +
+
+ + )} + + +
+ + {/* Grid of modules */} +
+
+ +
+ +
+
+ System-Module +
+

+ Verfügbare CASPOS-Kassen +

+

+ Wählen Sie die passende Kasse für Ihren Kunden aus. +

+
+ +
+ {/* 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. +

+
+
+
+ +
GoBD Konformität
+

Konform nach allen aktuellen steuerrechtlichen Anforderungen.

+
+
+ +
Same-Day-Bearbeitung
+

Bearbeitung und Erstellung Ihrer Lizenzen noch am selben Werktag.

+
+
+ +
Verschlüsselte Keys
+

Sichere Lizenz-Authentifizierung direkt auf der Kasse.

+
+
+ +
Partner Support
+

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

+
+
+
+
+
+ + {/* Footer */} + +
+ ) +}