diff --git a/.env.example b/.env.example
index d8f292f7..db14d044 100644
--- a/.env.example
+++ b/.env.example
@@ -4,3 +4,12 @@ WORDPRESS_HOSTNAME="wordpress.com"
# If using the revalidate plugin
# You can generate by running `openssl rand -base64 32` in the terminal
WORDPRESS_WEBHOOK_SECRET="your-secret-key-here"
+
+# Terminannahme (server-only, niemals im Browser verwenden)
+APPOINTMENT_API_TOKEN="your-appointment-api-token"
+APPOINTMENT_SMTP_HOST="smtp.example.de"
+APPOINTMENT_SMTP_USER="termin@example.de"
+APPOINTMENT_SMTP_PASSWORD="your-smtp-password"
+
+# Öffentliche kanonische URL
+NEXT_PUBLIC_SITE_URL="https://www.fahrschule-bz-ucar.de"
diff --git a/app/api/appointments/route.ts b/app/api/appointments/route.ts
new file mode 100644
index 00000000..66eb6c89
--- /dev/null
+++ b/app/api/appointments/route.ts
@@ -0,0 +1,22 @@
+import { NextResponse } from "next/server";
+
+const requiredFields = ["name", "email", "phone", "license", "date"] as const;
+
+export async function POST(request: Request) {
+ const payload = (await request.json().catch(() => null)) as Record | null;
+ if (!payload || requiredFields.some((field) => typeof payload[field] !== "string" || !payload[field])) {
+ return NextResponse.json({ message: "Bitte fülle alle Pflichtfelder aus." }, { status: 400 });
+ }
+
+ // TODO: WordPress REST endpoint, SMTP and calendar credentials belong in server-only env vars.
+ // Example boundary: POST `${WORDPRESS_URL}/wp-json/bz-ucar/v1/appointments`.
+ if (!process.env.WORDPRESS_URL || !process.env.APPOINTMENT_API_TOKEN) {
+ return NextResponse.json(
+ { message: "Die Terminannahme ist noch nicht konfiguriert. Bitte ruf uns direkt an: 030 123 45 67." },
+ { status: 503 },
+ );
+ }
+
+ // TODO: Send the validated payload to WordPress, notify via SMTP and persist admin tracking ID.
+ return NextResponse.json({ message: "Anfrage erfolgreich übermittelt." }, { status: 202 });
+}
diff --git a/app/datenschutz/page.tsx b/app/datenschutz/page.tsx
new file mode 100644
index 00000000..d8d606cc
--- /dev/null
+++ b/app/datenschutz/page.tsx
@@ -0,0 +1,3 @@
+export default function Datenschutz() {
+ return
Datenschutzerklärung
Hier informieren wir dich darüber, welche personenbezogenen Daten bei einer Terminanfrage verarbeitet werden.
Platzhalter für die finale Datenschutzerklärung: Bitte vor dem Livegang durch eine rechtlich geprüfte Fassung und die tatsächlichen WordPress-, SMTP- und Kalenderanbieter ersetzen.
Vertreten durch: [Name der verantwortlichen Person]
Telefon: [Telefonnummer] E-Mail: [E-Mail-Adresse]
Hinweis: Diese Platzhalter müssen vor dem produktiven Start mit den vollständigen Anbieterangaben ergänzt werden.
;
+}
diff --git a/app/layout.tsx b/app/layout.tsx
index 2fc94497..b445a8c0 100644
--- a/app/layout.tsx
+++ b/app/layout.tsx
@@ -17,9 +17,11 @@ const font = FontSans({
});
export const metadata: Metadata = {
- title: "WordPress & Next.js Starter by 9d8",
- description:
- "A starter template for Next.js with WordPress as a headless CMS.",
+ title: {
+ default: "Fahrschule Bz Ucar | Sicher ans Ziel",
+ template: "%s | Fahrschule Bz Ucar",
+ },
+ description: siteConfig.site_description,
metadataBase: new URL(siteConfig.site_domain),
alternates: {
canonical: "/",
@@ -32,7 +34,7 @@ export default function RootLayout({
children: React.ReactNode;
}) {
return (
-
+
-
404 - Page Not Found
+
404 – Seite nicht gefunden
- Sorry, the page you are looking for does not exist.
+ Die gesuchte Seite existiert leider nicht.
diff --git a/app/page.tsx b/app/page.tsx
index c6290b24..43d58ba5 100644
--- a/app/page.tsx
+++ b/app/page.tsx
@@ -1,146 +1,83 @@
-// Craft Imports
-import { Section, Container, Prose } from "@/components/craft";
-
-// Next.js Imports
import Link from "next/link";
+import { ArrowDownRight, ArrowRight, Check, MessageCircle } from "lucide-react";
+import { BookingForm } from "@/components/home/booking-form";
+import { HeroScene } from "@/components/home/hero-scene";
+
+const courses = [
+ { number: "01", title: "Klasse B", description: "Dein Weg zum Pkw-Führerschein. Klar strukturiert, flexibel geplant und mit modernen Ausbildungsfahrzeugen.", tone: "lime" },
+ { number: "02", title: "Klasse A", description: "Mehr Freiheit auf zwei Rädern. Sicher trainieren, selbstbewusst starten und jede Kurve genießen.", tone: "coral" },
+ { number: "03", title: "Klasse BE", description: "Mehr Möglichkeiten im Alltag und Beruf. Anhänger fahren lernen, ohne Stress und mit System.", tone: "blue" },
+];
-// Icons
-import { File, Pen, Tag, Diamond, User, Folder } from "lucide-react";
-import { WordPressIcon } from "@/components/icons/wordpress";
-import { NextJsIcon } from "@/components/icons/nextjs";
+const benefits = [
+ { title: "Persönliche Begleitung", text: "Wir kennen deinen Namen, deinen Fortschritt und dein Ziel." },
+ { title: "Dein Rhythmus", text: "Theorie und Fahrstunden passen in deinen Alltag." },
+ { title: "Sicher lernen", text: "Ruhige Erklärungen, moderne Fahrzeuge und klare Schritte." },
+];
-// This page is using the craft.tsx component and design system
export default function Home() {
return (
-
-
-
-
-
- );
-}
+
+
+
+
+
+
+ Fahrschule Bz Ucar.
+
+
+ Führerscheine
+ Informationen
+ Kontakt
+
+ Anfrage senden
+
+
+
+
Fahrschule in Berlin
+
Fahr los. Wachs über dich hinaus.
+
Dein Führerschein ist mehr als ein Stück Papier. Er ist der Moment, in dem du selbst entscheidest, wohin es geht.
+
+ Probestunde buchen
+ 4.9 aus 180+ Bewertungen
+
+
+
+
+
Nächster SchrittKontakt
+
+
+
+
-// This is just some example TSX
-const ToDelete = () => {
- return (
-
-
-
Headless WordPress built with the Next.js
+
+
+ 12+ Jahre ErfahrungFlexible FahrstundenModerne FahrzeugeBerlin & Umgebung
+
+
-
- This is next-wp,
- created as a way to build WordPress sites with Next.js at rapid speed.
- This starter is designed with{" "}
- shadcn/ui,{" "}
- craft-ds, and Tailwind CSS. Use{" "}
- brijr/components to build your
- site with prebuilt components. The data fetching and typesafety is
- handled in lib/wordpress.ts and{" "}
- lib/wordpress.d.ts.
-
-
+
+
+
Dein Weg
Welcher Führerschein passt zu dir?
Wir finden gemeinsam die passende Ausbildung für deine Ziele und deinen Alltag.