Add calendar-based booking system: accounts, availability, admin calendar

- Customer accounts (separate auth collection) with /konto area
- Availability + AvailabilityOverrides collections driving real slot calculation
- BookingRequests with race-safe confirmation (Postgres advisory lock + transaction)
- Booking emails (request received, admin notify, confirmed, rejected, alternative proposed/accepted, cancelled)
- Confirmed online bookings auto-create a private linked video-call Event
- Custom Payload admin calendar view (month grid + day schedule)
- Wired booking widget into offer pages and /termin-buchen
This commit is contained in:
2026-08-25 16:52:34 +02:00
parent 45261a0461
commit 5d83c0dc1e
11 changed files with 611 additions and 30 deletions
+3 -2
View File
@@ -4,6 +4,7 @@ import { Navbar } from "@/components/Navbar";
import { Footer } from "@/components/Footer";
import { siteConfig } from "@/lib/site";
import { getOffers } from "@/lib/payload/content";
import { getCurrentCustomer } from "@/lib/auth/customer";
import "./globals.css";
// Every page under this layout can read live content from Payload, so the
@@ -45,7 +46,7 @@ export const metadata: Metadata = {
};
export default async function RootLayout({ children }: LayoutProps<"/">) {
const offers = await getOffers();
const [offers, customer] = await Promise.all([getOffers(), getCurrentCustomer()]);
return (
<html
@@ -60,7 +61,7 @@ export default async function RootLayout({ children }: LayoutProps<"/">) {
>
Zum Inhalt springen
</a>
<Navbar offers={offers} />
<Navbar offers={offers} customerName={customer?.name ?? null} />
<main id="main-content" className="flex-1">
{children}
</main>