feat: load homepage sections from supabase cms, fix passwort page auth
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
3eeea27b92
commit
074b4eb5d1
|
|
@ -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 (
|
||||
|
|
|
|||
91
app/page.tsx
91
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 (
|
||||
<main className="min-h-screen bg-[#f0f4f8] dark:bg-[#18212f]">
|
||||
<Header />
|
||||
<Hero />
|
||||
<Hero
|
||||
eyebrowText={hero?.eyebrow_text}
|
||||
headline1={hero?.headline1}
|
||||
subtext1={hero?.subtext1}
|
||||
subtext2={hero?.subtext2}
|
||||
cta1Text={hero?.cta1_text}
|
||||
cta1Href={hero?.cta1_href}
|
||||
cta2Text={hero?.cta2_text}
|
||||
cta2Href={hero?.cta2_href}
|
||||
bgImagePath={hero?.bg_image_path}
|
||||
badges={badges.length > 0 ? badges.map((b) => b.text) : undefined}
|
||||
/>
|
||||
<TaglineBanner />
|
||||
<StatsBar />
|
||||
<Services />
|
||||
|
|
@ -23,9 +85,30 @@ export default function Home() {
|
|||
<DataSovereignty />
|
||||
<TaglineBanner />
|
||||
<Technologies />
|
||||
<About />
|
||||
<About
|
||||
eyebrowText={ueberUns?.eyebrow_text}
|
||||
absatz1={ueberUns?.absatz1}
|
||||
absatz2={ueberUns?.absatz2}
|
||||
stats={stats.length > 0 ? stats : undefined}
|
||||
/>
|
||||
{galerieBilder.length > 0 && (
|
||||
<>
|
||||
<TaglineBanner />
|
||||
<Contact />
|
||||
<section className="py-16 px-4 sm:px-6 lg:px-8">
|
||||
<div className="max-w-7xl mx-auto">
|
||||
<GalerieAnzeige bilder={galerieBilder} />
|
||||
</div>
|
||||
</section>
|
||||
</>
|
||||
)}
|
||||
<TaglineBanner />
|
||||
<Contact
|
||||
telefon={kontakt?.telefon}
|
||||
email={kontakt?.email}
|
||||
adresseZeile1={kontakt?.adresse_zeile1}
|
||||
adresseZeile2={kontakt?.adresse_zeile2}
|
||||
oeffnungszeiten={oeffnung.length > 0 ? oeffnung : undefined}
|
||||
/>
|
||||
<Footer />
|
||||
</main>
|
||||
);
|
||||
|
|
|
|||
Loading…
Reference in New Issue