import Link from "next/link"; import { getTranslations } from "next-intl/server"; import { ArrowRight, Bot, CalendarRange, Check, CheckCircle2, ClipboardList, Download, EyeOff, FileInput, FileSignature, FolderOpen, KeyRound, Layers, MapPin, Package, Receipt, ScrollText, Siren, Timer, UsersRound, WifiOff, type LucideIcon, } from "lucide-react"; import { CraftviaLogo } from "@/components/brand/craftvia-logo"; import { BRAND } from "@/lib/brand"; import { BoardMockup, FieldMockup, LotseMockup } from "./mockups"; /** * Öffentliche Startseite (Produktseite). Wird von `/` gerendert, solange keine Session besteht; * angemeldete Nutzer leitet die Route auf Dashboard bzw. mobile Ansicht. Alle Texte kommen aus * `messages//marketing.json` — keine Screenshots, die Vorschauen sind Markup (mockups.tsx). */ const FEATURES: { key: string; icon: LucideIcon }[] = [ { key: "orders", icon: ClipboardList }, { key: "board", icon: CalendarRange }, { key: "live", icon: MapPin }, { key: "time", icon: Timer }, { key: "offline", icon: WifiOff }, { key: "reports", icon: FileSignature }, { key: "material", icon: Package }, { key: "billing", icon: Receipt }, { key: "emergency", icon: Siren }, { key: "lotse", icon: Bot }, { key: "documents", icon: FolderOpen }, { key: "imports", icon: FileInput }, ]; const SECURITY: { key: string; icon: LucideIcon }[] = [ { key: "item1", icon: Layers }, { key: "item2", icon: UsersRound }, { key: "item3", icon: KeyRound }, { key: "item4", icon: ScrollText }, { key: "item5", icon: Download }, { key: "item6", icon: EyeOff }, ]; const NAV = ["features", "planning", "mobile", "security", "pricing", "faq"] as const; const FAQ = ["q1", "q2", "q3", "q4", "q5", "q6", "q7", "q8"] as const; const INDUSTRIES = ["shk", "electric", "cooling", "lifts", "windows", "service"] as const; const ctaCls = "inline-flex min-h-12 items-center justify-center gap-2 rounded-lg bg-cta px-5 text-[15px] font-semibold text-cta-foreground hover:brightness-95 focus-visible:outline-2 focus-visible:outline-offset-2"; const outlineCls = "inline-flex min-h-12 items-center justify-center gap-2 rounded-lg border px-5 text-[15px] font-semibold hover:bg-muted focus-visible:outline-2 focus-visible:outline-offset-2"; export async function MarketingHome({ contactEmail }: { contactEmail?: string }) { const t = await getTranslations("marketing"); return (
{t("nav.login")} {t("nav.cta")}
{/* Hero */}

{t("hero.eyebrow")}

{t("hero.title")}

{t("hero.subtitle")}

{t("hero.ctaPrimary")} {t("hero.ctaSecondary")}
    {(["bullet1", "bullet2", "bullet3"] as const).map((k) => (
  • {t(`hero.${k}`)}
  • ))}
{/* Leitgedanken */}

{t("pillars.title")}

{(["one", "two", "three"] as const).map((k) => (

{t(`pillars.${k}.title`)}

{t(`pillars.${k}.text`)}

))}
{/* Funktionen */}

{t("features.title")}

{t("features.sub")}

    {FEATURES.map(({ key, icon: Icon }) => (
  • {t(`features.${key}.title`)}

    {t(`features.${key}.text`)}

  • ))}
{/* Planung */}

{t("planning.eyebrow")}

{t("planning.title")}

{t("planning.text")}

    {(["point1", "point2", "point3", "point4"] as const).map((k) => (
  • {t(`planning.${k}`)}
  • ))}
{/* Baustelle */}

{t("mobile.eyebrow")}

{t("mobile.title")}

{t("mobile.text")}

{t("mobile.offlineNote")}

{/* Lotse */}

{t("lotse.eyebrow")}

{t("lotse.title")}

{t("lotse.text")}

{t("lotse.note")}

{/* Ablauf */}

{t("steps.title")}

    {(["one", "two", "three"] as const).map((k, i) => (
  1. {i + 1}

    {t(`steps.${k}.title`)}

    {t(`steps.${k}.text`)}

  2. ))}
{/* Gewerke */}

{t("industries.title")}

{t("industries.sub")}

    {INDUSTRIES.map((key) => (
  • {t(`industries.${key}`)}
  • ))}
{/* Sicherheit */}

{t("security.eyebrow")}

{t("security.title")}

{t("security.text")}

    {SECURITY.map(({ key, icon: Icon }) => (
  • {t(`security.${key}.title`)}

    {t(`security.${key}.text`)}

  • ))}
{/* Testphase */}

{t("trial.eyebrow")}

{t("trial.title")}

{t("trial.text")}

    {(["point1", "point2", "point3"] as const).map((k) => (
  • {t(`trial.${k}`)}
  • ))}
{t("trial.cta")} {contactEmail && ( {t("trial.secondary")} )}

{t("trial.note")}

{/* Fragen */}

{t("faq.title")}

{FAQ.map((key) => (
{t(`faq.${key}.q`)} +

{t(`faq.${key}.a`)}

))}
{/* Abschluss */}

{t("closing.title")}

{t("closing.text")}

{t("closing.cta")} {t("closing.login")}
); }