From 843d61cd5da9351bc1a490e465531d16202759a0 Mon Sep 17 00:00:00 2001 From: Marc Mintel Date: Fri, 15 May 2026 21:07:25 +0200 Subject: [PATCH] feat: overhaul competence pages, unify brand colors, and polish site integrity - Rewrote all 5 competence pages (Kabeltiefbau, Bohrtechnik, Glasfaser, Planung, Vermessung) with factual data from references - Unified brand colors: replaced toxic neon green with brand-aligned teal (#10a379) - Fixed ReferencesSlider injection in dynamic MDX pages - Enhanced Footer with icon parity, improved branding placement, and unified hover effects - Refined Header with 3D micro-animations and improved dropdown visibility - Fixed localized tracking API (rewrites for /stats/api/send) - Resolved ReferenceErrors in InteractiveGermanyMap and Header state management - Cleaned reference titles and truncated metadata in lists --- app/[locale]/[slug]/page.tsx | 7 + app/[locale]/error.tsx | 145 ++++++++++++---- app/[locale]/not-found.tsx | 159 +++++++++++++----- app/[locale]/page.tsx | 19 ++- app/[locale]/referenzen/[slug]/page.tsx | 11 +- app/[locale]/referenzen/page.tsx | 14 +- components/OGImageTemplate.tsx | 2 +- components/blocks/InteractiveGermanyMap.tsx | 10 +- components/blocks/JobListingBlock.tsx | 8 +- components/blocks/ReferencesSlider.tsx | 8 +- components/layout/Footer.tsx | 81 +++++---- components/layout/Header.tsx | 61 ++++--- .../blog/moderne-verfahren-kabeltiefbau.mdx | 30 ---- content/de/bohrtechnik.mdx | 35 +++- content/de/glasfaser.mdx | 37 +++- content/de/home.mdx | 40 +---- content/de/kabeltiefbau.mdx | 40 +++-- content/de/kompetenzen.mdx | 2 +- content/de/messen.mdx | 75 +-------- content/de/planung.mdx | 45 +++-- content/de/referenzen/boerde.mdx | 6 +- content/de/referenzen/bomlitz.mdx | 12 +- content/de/referenzen/eisenhuettenstadt.mdx | 6 +- content/de/referenzen/forst.mdx | 6 +- content/de/referenzen/goerne.mdx | 6 +- content/de/referenzen/spreewald.mdx | 10 +- content/de/vermessung.mdx | 42 +++-- .../blog/modern-methods-civil-engineering.mdx | 30 ---- content/en/bohrtechnik.mdx | 60 +++++++ content/en/glasfaser.mdx | 60 +++++++ content/en/home.mdx | 40 +---- content/en/kabeltiefbau.mdx | 61 +++++++ content/en/karriere.mdx | 132 +++++++++------ content/en/kompetenzen.mdx | 121 ++++++++++--- content/en/messen.mdx | 34 ++-- content/en/planung.mdx | 62 +++++++ content/en/referenzen/boerde.mdx | 16 +- content/en/referenzen/bomlitz.mdx | 20 +-- content/en/referenzen/eisenhuettenstadt.mdx | 28 +-- content/en/referenzen/forst.mdx | 22 +-- content/en/referenzen/goerne.mdx | 28 +-- content/en/referenzen/spreewald.mdx | 26 ++- content/en/ueber-uns.mdx | 62 +------ content/en/vermessung.mdx | 60 +++++++ lib/map-data.ts | 24 +-- next.config.mjs | 4 + styles/globals.css | 8 +- 47 files changed, 1125 insertions(+), 690 deletions(-) delete mode 100644 content/de/blog/moderne-verfahren-kabeltiefbau.mdx delete mode 100644 content/en/blog/modern-methods-civil-engineering.mdx create mode 100644 content/en/bohrtechnik.mdx create mode 100644 content/en/glasfaser.mdx create mode 100644 content/en/kabeltiefbau.mdx create mode 100644 content/en/planung.mdx create mode 100644 content/en/vermessung.mdx diff --git a/app/[locale]/[slug]/page.tsx b/app/[locale]/[slug]/page.tsx index 25decb21a..19a8db08b 100644 --- a/app/[locale]/[slug]/page.tsx +++ b/app/[locale]/[slug]/page.tsx @@ -165,6 +165,13 @@ export default async function Page(props: { params: Promise<{ locale: string; sl const pageMdxComponents = { ...mdxComponents, InteractiveGermanyMap: (props: any) => , + HomeReferencesSlider: (props: any) => ({ + id: r.slug, + slug: r.slug, + title: r.frontmatter.title, + category: r.frontmatter.category || 'Projekt', + image: r.frontmatter.featuredImage + }))} />, }; return ( diff --git a/app/[locale]/error.tsx b/app/[locale]/error.tsx index c147013de..263741341 100644 --- a/app/[locale]/error.tsx +++ b/app/[locale]/error.tsx @@ -3,8 +3,9 @@ import { useEffect } from 'react'; import { useTranslations } from 'next-intl'; import { getAppServices } from '@/lib/services/create-services'; -import { Container, Button, Heading } from '@/components/ui'; -import Scribble from '@/components/Scribble'; +import { Button, Heading } from '@/components/ui'; +import { Terminal, Activity, AlertTriangle, RefreshCw, Home, ShieldAlert } from 'lucide-react'; +import { motion } from 'framer-motion'; export default function Error({ error, @@ -16,6 +17,9 @@ export default function Error({ const t = useTranslations('Error'); useEffect(() => { + // Force standard solid header + document.body.setAttribute('data-header-variant', 'standard'); + // Treat "Failed to find Server Action" as a deployment sync issue and reload if (error?.message?.includes('Failed to find Server Action')) { window.location.reload(); @@ -30,64 +34,131 @@ export default function Error({ digest: error?.digest, }); - // Force solid header - document.body.setAttribute('data-force-solid-header', 'true'); return () => { - document.body.removeAttribute('data-force-solid-header'); + document.body.removeAttribute('data-header-variant'); }; }, [error]); return ( - <> -
- {/* Deep Tech Grid Background */} -
- - {/* Glowing Orb */} -
+
+ {/* Industrial Blueprint Background */} +
+
+
+
-
-
- {/* Inner Shimmer */} -
- -
-

+ {/* Decorative Technical Annotations */} +
+
+ System_Core_Access :: Restricted +
+
+ Protocol_Failure :: Type_500 +
+
+
+
+ + {/* Background Glow */} +
+ +
+ {/* The "Broken" Machine Visual */} +
+ +

+ 500 -

-
-
+ {/* Glitch Layers */} + 500 + 500 + +

+ + {/* Warning Overlay */} +
+ + + +
+ +
+ +
+ {/* Main Content */} +
+
+ + CRITICAL_SYSTEM_OVERRIDE :: ACTIVE
-
- - SYSTEM PROTOCOL: CRITICAL ERROR -
- - + {t('title')} -

+

{t('description')}

-
- -
- - {/* Decorative Base Line */} -
-
+ + {/* Technical Log Terminal */} +
+
+
+
+
+
+
+
+
TERMINAL_OUTPUT
+
+
+
[SYSTEM] Initializing recovery protocol...
+
[ERROR] Connection timeout at node 0x7F
+
[INFO] Request ID: {error?.digest || '0xDEADBEEF'}
+
[INFO] Timestamp: {new Date().toISOString()}
+
[INFO] Trace: {error?.message?.slice(0, 40)}...
+
_ Waiting for user input...
+
+
+ +
Status: Handshake_Failed
+
+
- +
); } + diff --git a/app/[locale]/not-found.tsx b/app/[locale]/not-found.tsx index 0d7db3b0d..4557bf857 100644 --- a/app/[locale]/not-found.tsx +++ b/app/[locale]/not-found.tsx @@ -1,70 +1,145 @@ -import { getTranslations } from 'next-intl/server'; -import { Container, Button, Heading } from '@/components/ui'; -import Scribble from '@/components/Scribble'; +'use client'; + +import { useEffect } from 'react'; +import { useTranslations } from 'next-intl'; +import { Button, Heading } from '@/components/ui'; +import { Terminal, Search, Home, Mail, Activity, Cpu } from 'lucide-react'; +import { motion } from 'framer-motion'; import ClientNotFoundTracker from '@/components/analytics/ClientNotFoundTracker'; -export default async function NotFound() { - console.log('--- NOT FOUND RENDERED ---'); - const t = await getTranslations('Error.notFound'); +export default function NotFound() { + const t = useTranslations('Error.notFound'); - // Suggested URL logic removed along with Payload CMS - let suggestedUrl = null; - let suggestedLang = null; + useEffect(() => { + // Force standard solid header + document.body.setAttribute('data-header-variant', 'standard'); + return () => { + document.body.removeAttribute('data-header-variant'); + }; + }, []); return ( - <> -