diff --git a/app/[locale]/layout.tsx b/app/[locale]/layout.tsx
index 6c6fb20..e328642 100644
--- a/app/[locale]/layout.tsx
+++ b/app/[locale]/layout.tsx
@@ -13,6 +13,7 @@ const inter = Inter({
subsets: ["latin"],
display: "swap",
variable: "--font-inter",
+ weight: ["400", "700", "800"], // Explicit weights to optimize download
});
export const metadata: Metadata = {
@@ -129,7 +130,7 @@ export default async function RootLayout({
}
// Track server-side (initial load)
- serverServices.analytics.trackPageview("/");
+ // serverServices.analytics.trackPageview("/"); // Removed to avoid double-tracking and incorrect path reporting
return (
diff --git a/components/HomeContent.tsx b/components/HomeContent.tsx
index 135bdcd..5e607f3 100644
--- a/components/HomeContent.tsx
+++ b/components/HomeContent.tsx
@@ -16,6 +16,23 @@ import { Reveal } from "./Reveal";
import { TechBackground } from "./TechBackground";
import { useTranslations } from "next-intl";
+import dynamic from "next/dynamic";
+
+const PortfolioSection = dynamic(() =>
+ import("./sections/PortfolioSection").then((mod) => mod.PortfolioSection),
+);
+const ExpertiseSection = dynamic(() =>
+ import("./sections/ExpertiseSection").then((mod) => mod.ExpertiseSection),
+);
+const TechnicalSpecsSection = dynamic(() =>
+ import("./sections/TechnicalSpecsSection").then(
+ (mod) => mod.TechnicalSpecsSection,
+ ),
+);
+const CTASection = dynamic(() =>
+ import("./sections/CTASection").then((mod) => mod.CTASection),
+);
+
export default function Home() {
const t = useTranslations("Index");
@@ -74,7 +91,7 @@ export default function Home() {
fill
className="object-cover"
priority
- quality={90}
+ quality={75}
/>
@@ -127,272 +144,11 @@ export default function Home() {
- {/* Portfolio Section */}
-
-
-
-
-
-
-
- {t("portfolio.tag")}
-
-
- {t("portfolio.title")}
-
-
- {t("portfolio.description")}
-
-
-
- {t("portfolio.link")}{" "}
-
-
-
-
-
- {[
- {
- icon:
,
- title: t("portfolio.items.beratung.title"),
- desc: t("portfolio.items.beratung.desc"),
- },
- {
- icon:
,
- title: t("portfolio.items.begleitung.title"),
- desc: t("portfolio.items.begleitung.desc"),
- },
- {
- icon:
,
- title: t("portfolio.items.beschaffung.title"),
- desc: t("portfolio.items.beschaffung.desc"),
- },
- ].map((item, i) => (
-
-
-
-
- {item.icon}
-
-
- {item.title}
-
-
- {item.desc}
-
-
-
- ))}
-
-
-
-
- {/* Expertise Section */}
-
-
-
-
-
-
-
-
-
-
-
- {t("expertise.tag")}
-
-
- {t("expertise.title")}
-
-
- {t("expertise.description")}
-
-
-
- {t.raw("expertise.groups").map((item: string, i: number) => (
-
-
-
- ))}
-
-
-
-
-
-
- {/* Technical Specs Section */}
-
-
-
-
-
-
- {/* Data Stream Effect */}
-
-
-
-
-
- {t("specs.tag")}
-
-
- {t("specs.title")}
-
-
-
-
- {[
- {
- label: t("specs.items.kabel.label"),
- value: t("specs.items.kabel.value"),
- desc: t("specs.items.kabel.desc"),
- },
- {
- label: t("specs.items.spannung.label"),
- value: t("specs.items.spannung.value"),
- desc: t("specs.items.spannung.desc"),
- },
- {
- label: t("specs.items.technologie.label"),
- value: t("specs.items.technologie.value"),
- desc: t("specs.items.technologie.desc"),
- },
- ].map((item, i) => (
-
-
-
-
- {item.label}
-
-
- {item.value}
-
-
{item.desc}
-
-
- ))}
-
-
-
-
- {/* CTA Section */}
-
-
- {/* Decorative Background Elements */}
-
-
-
-
-
-
-
- {/* Corner Accents */}
-
-
-
-
-
-
-
-
-
-
-
- {t("cta.title")}
-
-
- {t("cta.subtitle")}
-
-
-
-
-
-
-
+ {/* Dynamic Sections */}
+
+
+
+
);
}
diff --git a/components/sections/CTASection.tsx b/components/sections/CTASection.tsx
new file mode 100644
index 0000000..f73a044
--- /dev/null
+++ b/components/sections/CTASection.tsx
@@ -0,0 +1,102 @@
+"use client";
+
+import React from "react";
+import { m } from "framer-motion";
+import { Reveal } from "../Reveal";
+import { Counter } from "../Counter";
+import { TechBackground } from "../TechBackground";
+import { Button } from "../Button";
+import { useTranslations } from "next-intl";
+
+export const CTASection = () => {
+ const t = useTranslations("Index");
+
+ return (
+
+
+ {/* Decorative Background Elements */}
+
+
+
+
+
+
+
+ {/* Corner Accents */}
+
+
+
+
+
+
+
+
+
+
+
+ {t("cta.title")}
+
+
+ {t("cta.subtitle")}
+
+
+
+
+
+
+
+ );
+};
diff --git a/components/sections/ExpertiseSection.tsx b/components/sections/ExpertiseSection.tsx
new file mode 100644
index 0000000..b65bca0
--- /dev/null
+++ b/components/sections/ExpertiseSection.tsx
@@ -0,0 +1,64 @@
+"use client";
+
+import React from "react";
+import Image from "next/image";
+import { CheckCircle2 } from "lucide-react";
+import { Reveal } from "../Reveal";
+import { Counter } from "../Counter";
+import { TechBackground } from "../TechBackground";
+import { useTranslations } from "next-intl";
+
+export const ExpertiseSection = () => {
+ const t = useTranslations("Index");
+
+ return (
+
+
+
+
+
+
+
+
+
+
+
+ {t("expertise.tag")}
+
+
+ {t("expertise.title")}
+
+
+ {t("expertise.description")}
+
+
+
+ {t.raw("expertise.groups").map((item: string, i: number) => (
+
+
+
+ ))}
+
+
+
+
+
+ );
+};
diff --git a/components/sections/PortfolioSection.tsx b/components/sections/PortfolioSection.tsx
new file mode 100644
index 0000000..2aac6f2
--- /dev/null
+++ b/components/sections/PortfolioSection.tsx
@@ -0,0 +1,80 @@
+"use client";
+
+import React from "react";
+import Link from "next/link";
+import { ChevronRight, Zap, Shield, BarChart3 } from "lucide-react";
+import { Reveal } from "../Reveal";
+import { Counter } from "../Counter";
+import { TechBackground } from "../TechBackground";
+import { useTranslations } from "next-intl";
+
+export const PortfolioSection = () => {
+ const t = useTranslations("Index");
+
+ return (
+
+
+
+
+
+
+
+ {t("portfolio.tag")}
+
+
+ {t("portfolio.title")}
+
+
+ {t("portfolio.description")}
+
+
+
+ {t("portfolio.link")}{" "}
+
+
+
+
+
+ {[
+ {
+ icon:
,
+ title: t("portfolio.items.beratung.title"),
+ desc: t("portfolio.items.beratung.desc"),
+ },
+ {
+ icon:
,
+ title: t("portfolio.items.begleitung.title"),
+ desc: t("portfolio.items.begleitung.desc"),
+ },
+ {
+ icon:
,
+ title: t("portfolio.items.beschaffung.title"),
+ desc: t("portfolio.items.beschaffung.desc"),
+ },
+ ].map((item, i) => (
+
+
+
+
+ {item.icon}
+
+
+ {item.title}
+
+
+ {item.desc}
+
+
+
+ ))}
+
+
+
+ );
+};
diff --git a/components/sections/TechnicalSpecsSection.tsx b/components/sections/TechnicalSpecsSection.tsx
new file mode 100644
index 0000000..68921e5
--- /dev/null
+++ b/components/sections/TechnicalSpecsSection.tsx
@@ -0,0 +1,76 @@
+"use client";
+
+import React from "react";
+import Image from "next/image";
+import { Reveal } from "../Reveal";
+import { Counter } from "../Counter";
+import { TechBackground } from "../TechBackground";
+import { useTranslations } from "next-intl";
+
+export const TechnicalSpecsSection = () => {
+ const t = useTranslations("Index");
+
+ return (
+
+
+
+
+
+
+ {/* Data Stream Effect */}
+
+
+
+
+
+ {t("specs.tag")}
+
+
+ {t("specs.title")}
+
+
+
+
+ {[
+ {
+ label: t("specs.items.kabel.label"),
+ value: t("specs.items.kabel.value"),
+ desc: t("specs.items.kabel.desc"),
+ },
+ {
+ label: t("specs.items.spannung.label"),
+ value: t("specs.items.spannung.value"),
+ desc: t("specs.items.spannung.desc"),
+ },
+ {
+ label: t("specs.items.technologie.label"),
+ value: t("specs.items.technologie.value"),
+ desc: t("specs.items.technologie.desc"),
+ },
+ ].map((item, i) => (
+
+
+
+
+ {item.label}
+
+
+ {item.value}
+
+
{item.desc}
+
+
+ ))}
+
+
+
+ );
+};
diff --git a/public/assets/logo.png b/public/assets/logo.png
index 7252cc1..f7bcbbb 100644
Binary files a/public/assets/logo.png and b/public/assets/logo.png differ
diff --git a/public/media/cables/hs-kabel.png b/public/media/cables/hs-kabel.png
index 2e0f7b9..532cf61 100644
Binary files a/public/media/cables/hs-kabel.png and b/public/media/cables/hs-kabel.png differ
diff --git a/public/media/laying/contact-hero.jpg b/public/media/laying/contact-hero.jpg
index 2a65484..06a9a01 100644
Binary files a/public/media/laying/contact-hero.jpg and b/public/media/laying/contact-hero.jpg differ
diff --git a/sentry.client.config.ts b/sentry.client.config.ts
index b071947..c95319b 100644
--- a/sentry.client.config.ts
+++ b/sentry.client.config.ts
@@ -4,7 +4,7 @@ import { config } from "./lib/config";
if (config.errors.glitchtip.enabled) {
Sentry.init({
dsn: config.errors.glitchtip.dsn,
- tracesSampleRate: 1.0,
+ tracesSampleRate: 0.1,
debug: config.isDevelopment,
environment: config.target || "production",
// Use the proxy path defined in config