diff --git a/app/(app)/(legal)/imprint/page.tsx b/app/(app)/(legal)/imprint/page.tsx deleted file mode 100644 index 29fd55d..0000000 --- a/app/(app)/(legal)/imprint/page.tsx +++ /dev/null @@ -1,110 +0,0 @@ -/** - * @file app/(legal)/imprint/page.tsx - * @description Server component rendering the imprint/legal notice page tailored to the app layout design. - */ - -import AppFooter from "@/components/layout/AppFooter"; -import { AppHeader } from "@/components/layout/AppHeader"; - -export default async function ImprintPage() { - return ( -
- -
- {/* Information pursuant to § 5 DDG */} -
-

- // Information Pursuant to § 5 - DDG -

-
-

André Kempf

-

Full-Stack Web Developer

-

Großschneidersweg 2a

-

76149 Karlsruhe, Germany

-
-

- Also responsible for content pursuant to § 18 Abs. 2 MStV. -

-
- - {/* Contact */} -
-

- // Contact -

-
-

- Email:{" "} - - dev@andre-kempf.com - -

-
-
- - {/* Disclaimer */} -
-

- // Disclaimer & Legal Notes -

-
-

- Liability for Content -

-

- As a service provider, I am responsible for my own content on - these pages according to general laws pursuant to § 7 Abs. 1 DDG. - However, according to §§ 8 to 10 DDG, I am not obligated to - monitor transmitted or stored third-party information or to - investigate circumstances that indicate illegal activity. -

-
-
-

- Liability for Links -

-

- My website contains links to external third-party websites over - whose content I have no control. Therefore, I cannot accept any - liability for these external contents. The respective provider or - operator of the pages is always responsible for the content of the - linked pages. -

-
-
-

Copyright

-

- The content and works created on these pages are subject to German - copyright law. Duplication, processing, distribution, or any form - of commercialization beyond the scope of copyright law require the - prior written consent of the author or creator. -

-
-
- - {/* Dispute Resolution */} -
-

- // Dispute Resolution -

-

- The European Commission provides a platform for online dispute - resolution (OS):{" "} - - https://ec.europa.eu/consumers/odr/ - - .
I am neither willing nor obligated to participate in dispute - resolution proceedings before a consumer arbitration board. -

-
-
- -
- ); -} diff --git a/app/(app)/(legal)/privacy/page.tsx b/app/(app)/(legal)/privacy/page.tsx deleted file mode 100644 index d01ff8f..0000000 --- a/app/(app)/(legal)/privacy/page.tsx +++ /dev/null @@ -1,135 +0,0 @@ -/** - * @file app/(legal)/privacy/page.tsx - * @description Server component rendering the privacy policy page tailored to the app layout design. - */ - -import AppFooter from "@/components/layout/AppFooter"; -import { AppHeader } from "@/components/layout/AppHeader"; - -export default async function PrivacyPage() { - return ( -
- -
- {/* Overview */} -
-

- // Data Protection at a Glance -

-
-

- General Information -

-

- The following notes provide a simple overview of what happens to - your personal data when you visit this website. Personal data is - any data that can be used to personally identify you. -

-
-
-

- Data Collection on This Website -

-

- Data processing on this website is carried out by the website - operator. Your data is collected when you provide it to us, or - automatically by our IT systems when you visit the site. -

-
-
- - {/* Responsible Party */} -
-

- // Responsible Party - (Controller) -

-

- The controller responsible for data processing on this website is: -

-
-

André Kempf

-

Großschneidersweg 2a

-

76149 Karlsruhe, Germany

-

- Email:{" "} - - dev@andre-kempf.com - -

-
-
- - {/* Hosting & Server Log Files */} -
-

- // Hosting & Server - Infrastructure -

-

- This website is hosted externally on web servers operated by Netcup - GmbH. Personal data processed on this website is stored on the - host's secure servers. -

-

- The hosting provider automatically processes technical access data - in server environment variables necessary to establish a stable - connection and deliver page assets securely. -

-
- - {/* Server Analytics */} -
-

- // Server Analytics & - Privacy-First Tracking -

-

- To evaluate website reach and optimize user experience, this website - processes minimal access metrics (e.g., total daily views, coarse - device category, and daily visitor counts). -

-
-

- // Key privacy guarantees: -

-
    -
  • - No Cookies: We do not - store cookies or local storage identifiers on your device. -
  • -
  • - Anonymized IPs: IP - addresses are instantly hashed with a daily salt and never - stored in plain text. -
  • -
  • - Zero Third Parties:{" "} - Analytics data is processed locally on our own server and never - shared with external tracking services. -
  • -
-
-

- The legal basis for this processing is our legitimate interest in - maintaining and optimizing our online portfolio (Art. 6(1)(f) GDPR). -

-
- - {/* Your Rights */} -
-

- // Your Rights -

-

- You have the right at any time to receive information free of charge - about the origin, recipient, and purpose of your stored personal - data. You also have a right to request the correction or deletion of - this data. -

-
-
- -
- ); -} diff --git a/app/(app)/legal/imprint/page.tsx b/app/(app)/legal/imprint/page.tsx new file mode 100644 index 0000000..2bb8a9d --- /dev/null +++ b/app/(app)/legal/imprint/page.tsx @@ -0,0 +1,100 @@ +/** + * @file app/(app)/legal/imprint/page.tsx + * @description Server component rendering the imprint/legal notice page tailored to the app layout design. + */ + +/** Renders the imprint page containing legal information and statutory disclosures. */ +export default function ImprintPage() { + return ( +
+ {/* Information pursuant to § 5 DDG */} +
+

+ // Information Pursuant to § 5 + DDG +

+
+

André Kempf

+

Full-Stack Web Developer

+

Großschneidersweg 2a

+

76149 Karlsruhe, Germany

+
+

+ Also responsible for content pursuant to § 18 Abs. 2 MStV. +

+
+ + {/* Contact */} +
+

+ // Contact +

+
+

+ Email:{" "} + + dev@andre-kempf.com + +

+
+
+ + {/* Disclaimer */} +
+

+ // Disclaimer & Legal Notes +

+
+

Liability for Content

+

+ As a service provider, I am responsible for my own content on these + pages according to general laws pursuant to § 7 Abs. 1 DDG. However, + according to §§ 8 to 10 DDG, I am not obligated to monitor + transmitted or stored third-party information or to investigate + circumstances that indicate illegal activity. +

+
+
+

Liability for Links

+

+ My website contains links to external third-party websites over + whose content I have no control. Therefore, I cannot accept any + liability for these external contents. The respective provider or + operator of the pages is always responsible for the content of the + linked pages. +

+
+
+

Copyright

+

+ The content and works created on these pages are subject to German + copyright law. Duplication, processing, distribution, or any form of + commercialization beyond the scope of copyright law require the + prior written consent of the author or creator. +

+
+
+ + {/* Dispute Resolution */} +
+

+ // Dispute Resolution +

+

+ The European Commission provides a platform for online dispute + resolution (OS):{" "} + + https://ec.europa.eu/consumers/odr/ + + .
I am neither willing nor obligated to participate in dispute + resolution proceedings before a consumer arbitration board. +

+
+
+ ); +} diff --git a/app/(app)/legal/page.tsx b/app/(app)/legal/page.tsx new file mode 100644 index 0000000..3e3920a --- /dev/null +++ b/app/(app)/legal/page.tsx @@ -0,0 +1,37 @@ +/** + * @file app/(app)/legal/page.tsx + * @description Legal page component handling tabbed navigation between imprint and privacy policy views. + */ + +"use client"; + +import { useSearchParams } from "next/navigation"; +import { AppHeader } from "@/components/layout/AppHeader"; +import ImprintPage from "./imprint/page"; +import PrivacyPage from "./privacy/page"; +import AppFooter from "@/components/layout/AppFooter"; + +/** Renders the legal section layout with tab-based toggling between imprint and privacy notices. */ +export default function LegalPage() { + const searchParams = useSearchParams(); + + const tabParam = searchParams.get("tab"); + const activeTab: "imprint" | "privacy" = + tabParam === "privacy" ? "privacy" : "imprint"; + + return ( +
+ + + {/* Content Area */} +
+ {activeTab === "imprint" ? : } +
+ + +
+ ); +} diff --git a/app/(app)/legal/privacy/page.tsx b/app/(app)/legal/privacy/page.tsx new file mode 100644 index 0000000..46fc0be --- /dev/null +++ b/app/(app)/legal/privacy/page.tsx @@ -0,0 +1,124 @@ +/** + * @file app/(app)/legal/privacy/page.tsx + * @description Server component rendering the privacy policy page tailored to the app layout design. + */ + +/** Renders the privacy policy page detailing data protection and privacy practices. */ +export default function PrivacyPage() { + return ( +
+ {/* Overview */} +
+

+ // Data Protection at a Glance +

+
+

General Information

+

+ The following notes provide a simple overview of what happens to + your personal data when you visit this website. Personal data is any + data that can be used to personally identify you. +

+
+
+

Data Collection on This Website

+

+ Data processing on this website is carried out by the website + operator. Your data is collected when you provide it to us, or + automatically by our IT systems when you visit the site. +

+
+
+ + {/* Responsible Party */} +
+

+ // Responsible Party (Controller) +

+

+ The controller responsible for data processing on this website is: +

+
+

André Kempf

+

Großschneidersweg 2a

+

76149 Karlsruhe, Germany

+

+ Email:{" "} + + dev@andre-kempf.com + +

+
+
+ + {/* Hosting & Server Log Files */} +
+

+ // Hosting & Server + Infrastructure +

+

+ This website is hosted externally on web servers operated by Netcup + GmbH. Personal data processed on this website is stored on the + host's secure servers. +

+

+ The hosting provider automatically processes technical access data in + server environment variables necessary to establish a stable + connection and deliver page assets securely. +

+
+ + {/* Server Analytics */} +
+

+ // Server Analytics & + Privacy-First Tracking +

+

+ To evaluate website reach and optimize user experience, this website + processes minimal access metrics (e.g., total daily views, coarse + device category, and daily visitor counts). +

+
+

+ // Key privacy guarantees: +

+
    +
  • + No Cookies: We do not + store cookies or local storage identifiers on your device. +
  • +
  • + Anonymized IPs: IP + addresses are instantly hashed with a daily salt and never stored + in plain text. +
  • +
  • + Zero Third Parties:{" "} + Analytics data is processed locally on our own server and never + shared with external tracking services. +
  • +
+
+

+ The legal basis for this processing is our legitimate interest in + maintaining and optimizing our online portfolio (Art. 6(1)(f) GDPR). +

+
+ + {/* Your Rights */} +
+

+ // Your Rights +

+

+ You have the right at any time to receive information free of charge + about the origin, recipient, and purpose of your stored personal data. + You also have a right to request the correction or deletion of this + data. +

+
+
+ ); +} diff --git a/lib/legal.ts b/lib/legal.ts index 6e03d39..21a76a5 100644 --- a/lib/legal.ts +++ b/lib/legal.ts @@ -7,8 +7,12 @@ import { FileText, ShieldCheck } from "lucide-react"; /** List of legal navigation links with their corresponding route paths and icon identifiers. */ export const LEGAL_LINKS = [ - { name: "Imprint", href: "/imprint", iconName: "FileText" }, - { name: "Privacy Policy", href: "/privacy", iconName: "ShieldCheck" }, + { name: "Imprint", href: "/legal?tab=imprint", iconName: "FileText" }, + { + name: "Privacy Policy", + href: "/legal?tab=privacy", + iconName: "ShieldCheck", + }, ] as const; /** Mapping object linking string identifiers to their respective Lucide icon components. */