From 383d8484a63b93ee294cb167bb845319d4a746a4 Mon Sep 17 00:00:00 2001 From: Timo Knuth Date: Tue, 14 Apr 2026 10:30:46 +0200 Subject: [PATCH] feat: implement landing page structure with legal pages, footer, CTA, and domain redirection proxy --- .../app/imprint/ImprintContent.tsx | 71 +++++++ greenlns-landing/app/imprint/page.tsx | 104 ++++------ greenlns-landing/app/layout.tsx | 4 + greenlns-landing/app/page.tsx | 7 + .../app/privacy/PrivacyContent.tsx | 84 ++++++++ greenlns-landing/app/privacy/page.tsx | 117 ++++------- greenlns-landing/app/support/page.tsx | 182 ++++++++++-------- greenlns-landing/app/terms/TermsContent.tsx | 51 +++++ greenlns-landing/app/terms/page.tsx | 62 +++--- greenlns-landing/components/CTA.tsx | 10 +- greenlns-landing/components/Footer.tsx | 62 +++--- greenlns-landing/components/Navbar.tsx | 41 ++-- greenlns-landing/lib/i18n.ts | 6 +- greenlns-landing/proxy.ts | 33 ++++ 14 files changed, 515 insertions(+), 319 deletions(-) create mode 100644 greenlns-landing/app/imprint/ImprintContent.tsx create mode 100644 greenlns-landing/app/privacy/PrivacyContent.tsx create mode 100644 greenlns-landing/app/terms/TermsContent.tsx create mode 100644 greenlns-landing/proxy.ts diff --git a/greenlns-landing/app/imprint/ImprintContent.tsx b/greenlns-landing/app/imprint/ImprintContent.tsx new file mode 100644 index 0000000..ba6fbab --- /dev/null +++ b/greenlns-landing/app/imprint/ImprintContent.tsx @@ -0,0 +1,71 @@ +'use client' + +import Link from 'next/link' +import { useLang } from '@/context/LangContext' +import { siteConfig } from '@/lib/site' + +const CONTENT = { + de: { + title: 'Impressum', + companyLabel: 'Unternehmen', + addressLabel: 'Adresse', + representativeLabel: 'Vertretungsberechtigt', + contactLabel: 'Kontakt', + registryLabel: 'Register', + vatLabel: 'USt-ID', + }, + en: { + title: 'Imprint', + companyLabel: 'Company', + addressLabel: 'Address', + representativeLabel: 'Represented by', + contactLabel: 'Contact', + registryLabel: 'Registry', + vatLabel: 'VAT ID', + }, + es: { + title: 'Aviso Legal', + companyLabel: 'Empresa', + addressLabel: 'Direccion', + representativeLabel: 'Representante', + contactLabel: 'Contacto', + registryLabel: 'Registro', + vatLabel: 'IVA', + }, +} + +export default function ImprintContent() { + const { lang } = useLang() + const c = CONTENT[lang] + + return ( +
+

+ Home / Legal / {c.title} +

+

{c.title}

+
+

+ {c.companyLabel}: {siteConfig.company.legalName} +

+ {siteConfig.company.addressLine1 ? ( +

{c.addressLabel}: {siteConfig.company.addressLine1}

+ ) : null} + {siteConfig.company.addressLine2 ?

{siteConfig.company.addressLine2}

: null} +

{siteConfig.company.country}

+

+ {c.representativeLabel}: {siteConfig.company.representative} +

+

+ {c.contactLabel}: {siteConfig.legalEmail} +

+ {siteConfig.company.registry ? ( +

{c.registryLabel}: {siteConfig.company.registry}

+ ) : null} + {siteConfig.company.vatId ? ( +

{c.vatLabel}: {siteConfig.company.vatId}

+ ) : null} +
+
+ ) +} diff --git a/greenlns-landing/app/imprint/page.tsx b/greenlns-landing/app/imprint/page.tsx index 8dca5a4..37f1315 100644 --- a/greenlns-landing/app/imprint/page.tsx +++ b/greenlns-landing/app/imprint/page.tsx @@ -1,67 +1,37 @@ -'use client' - -import { useLang } from '@/context/LangContext' -import { siteConfig } from '@/lib/site' - -const CONTENT = { - de: { - title: 'Impressum', - companyLabel: 'Unternehmen', - addressLabel: 'Adresse', - representativeLabel: 'Vertretungsberechtigt', - contactLabel: 'Kontakt', - registryLabel: 'Register', - vatLabel: 'USt-ID', - }, - en: { - title: 'Imprint', - companyLabel: 'Company', - addressLabel: 'Address', - representativeLabel: 'Represented by', - contactLabel: 'Contact', - registryLabel: 'Registry', - vatLabel: 'VAT ID', - }, - es: { - title: 'Aviso Legal', - companyLabel: 'Empresa', - addressLabel: 'Direccion', - representativeLabel: 'Representante', - contactLabel: 'Contacto', - registryLabel: 'Registro', - vatLabel: 'IVA', - }, -} - -export default function ImprintPage() { - const { lang } = useLang() - const c = CONTENT[lang] - - return ( -
-

{c.title}

-
-

- {c.companyLabel}: {siteConfig.company.legalName} -

- {siteConfig.company.addressLine1 ? ( -

{c.addressLabel}: {siteConfig.company.addressLine1}

- ) : null} - {siteConfig.company.addressLine2 ?

{siteConfig.company.addressLine2}

: null} -

{siteConfig.company.country}

-

- {c.representativeLabel}: {siteConfig.company.representative} -

-

- {c.contactLabel}: {siteConfig.legalEmail} -

- {siteConfig.company.registry ? ( -

{c.registryLabel}: {siteConfig.company.registry}

- ) : null} - {siteConfig.company.vatId ? ( -

{c.vatLabel}: {siteConfig.company.vatId}

- ) : null} -
-
- ) -} +import type { Metadata } from 'next' +import Navbar from '@/components/Navbar' +import Footer from '@/components/Footer' +import ImprintContent from './ImprintContent' +import { siteConfig } from '@/lib/site' + +const title = 'Imprint' +const description = 'Legal imprint and company contact information for GreenLens.' + +export const metadata: Metadata = { + title, + description, + alternates: { + canonical: '/imprint', + }, + openGraph: { + title: `${title} | GreenLens`, + description, + url: `${siteConfig.domain}/imprint`, + type: 'website', + }, + twitter: { + card: 'summary_large_image', + title: `${title} | GreenLens`, + description, + }, +} + +export default function ImprintPage() { + return ( + <> + + +