From 074b4eb5d176c33498e75d4842d246bed39b16c2 Mon Sep 17 00:00:00 2001 From: MBO-Tech-IT Date: Tue, 2 Jun 2026 20:37:27 +0200 Subject: [PATCH] feat: load homepage sections from supabase cms, fix passwort page auth Co-Authored-By: Claude Sonnet 4.6 --- app/admin/passwort/page.tsx | 7 ++- app/page.tsx | 91 +++++++++++++++++++++++++++++++++++-- 2 files changed, 92 insertions(+), 6 deletions(-) diff --git a/app/admin/passwort/page.tsx b/app/admin/passwort/page.tsx index 743efe0..976e81c 100644 --- a/app/admin/passwort/page.tsx +++ b/app/admin/passwort/page.tsx @@ -1,10 +1,13 @@ export const dynamic = 'force-dynamic' import { redirect } from 'next/navigation' -import { getAdminSession } from '@/lib/admin-auth' +import { cookies } from 'next/headers' +import { verifySessionToken } from '@/lib/admin-auth' import PasswortAendern from '@/components/admin/PasswortAendern' export default async function PasswortPage() { - const session = await getAdminSession() + const cookieStore = await cookies() + const token = cookieStore.get('admin_session')?.value + const session = token ? await verifySessionToken(token) : null if (!session) redirect('/admin/login') return ( diff --git a/app/page.tsx b/app/page.tsx index 8f6707a..4000b10 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -1,3 +1,4 @@ +import { createServiceClient } from "@/lib/supabase"; import Header from "@/components/Header"; import Hero from "@/components/Hero"; import TaglineBanner from "@/components/TaglineBanner"; @@ -9,12 +10,73 @@ import PaperlessSection from "@/components/PaperlessSection"; import About from "@/components/About"; import Contact from "@/components/Contact"; import Footer from "@/components/Footer"; +import { GalerieAnzeige } from "@/components/GalerieAnzeige"; + +export const dynamic = "force-dynamic"; + +export default async function Home() { + const supabaseUrl = process.env.NEXT_PUBLIC_SUPABASE_URL ?? ""; + + let hero = null, + badges: { text: string }[] = [], + ueberUns = null, + stats: { wert: string; label: string }[] = [], + galerie: { id: string; storage_path: string; alt_text: string }[] = [], + kontakt = null, + oeffnung: { tag: string; von: string; bis: string }[] = []; + + try { + const db = createServiceClient(); + const [ + heroResult, + badgesResult, + ueberUnsResult, + statsResult, + galerieResult, + kontaktResult, + oeffnungResult, + ] = await Promise.allSettled([ + db.from("hero_content").select("*").limit(1).single(), + db.from("hero_badges").select("*").order("reihenfolge"), + db.from("ueber_uns_content").select("*").limit(1).single(), + db.from("ueber_uns_stats").select("*").order("reihenfolge"), + db.from("galerie_bilder").select("*").order("reihenfolge"), + db.from("kontakt_info").select("*").limit(1).single(), + db.from("kontakt_oeffnungszeiten").select("*").order("reihenfolge"), + ]); + + hero = heroResult.status === "fulfilled" ? heroResult.value.data : null; + badges = badgesResult.status === "fulfilled" ? (badgesResult.value.data ?? []) : []; + ueberUns = ueberUnsResult.status === "fulfilled" ? ueberUnsResult.value.data : null; + stats = statsResult.status === "fulfilled" ? (statsResult.value.data ?? []) : []; + galerie = galerieResult.status === "fulfilled" ? (galerieResult.value.data ?? []) : []; + kontakt = kontaktResult.status === "fulfilled" ? kontaktResult.value.data : null; + oeffnung = oeffnungResult.status === "fulfilled" ? (oeffnungResult.value.data ?? []) : []; + } catch { + // Supabase nicht konfiguriert — Fallback-Werte greifen + } + + const galerieBilder = galerie.map((b) => ({ + id: b.id, + src: `${supabaseUrl}/storage/v1/object/public/galerie-bilder/${b.storage_path}`, + alt: b.alt_text, + })); -export default function Home() { return (
- + 0 ? badges.map((b) => b.text) : undefined} + /> @@ -23,9 +85,30 @@ export default function Home() { - + 0 ? stats : undefined} + /> + {galerieBilder.length > 0 && ( + <> + +
+
+ +
+
+ + )} - + 0 ? oeffnung : undefined} + />
);