fix: english translation parity, remove hallucinated map projects, fix next.config syntax
Some checks failed
Build & Deploy / 🔍 Prepare (push) Failing after 1m10s
CI - Lint, Typecheck & Test / quality-assurance (pull_request) Failing after 1m11s
Build & Deploy / 🧪 QA (push) Has been skipped
Build & Deploy / 🏗️ Build (push) Has been skipped
Build & Deploy / 🚀 Deploy (push) Has been skipped
Build & Deploy / 🧪 Post-Deploy Verification (push) Has been skipped
Build & Deploy / 🔔 Notify (push) Successful in 32s

This commit is contained in:
2026-05-13 13:25:46 +02:00
parent 66f28d8af2
commit 8fcd68cf19
6 changed files with 145 additions and 90 deletions

View File

@@ -2,7 +2,19 @@
import * as React from 'react';
import { motion, useScroll, useTransform } from 'framer-motion';
import { Building2, Compass, Layers, Drill, ArrowDownToLine, Wrench } from 'lucide-react';
import { Building2, Compass, Layers, ArrowDownToLine, Wrench, Factory, Zap, MapPin, CheckCircle2 } from 'lucide-react';
const iconMap: Record<string, React.ElementType> = {
Building2,
Compass,
Layers,
ArrowDownToLine,
Wrench,
Factory,
Zap,
MapPin,
CheckCircle2
};
const defaultMilestones = [
{
@@ -10,28 +22,28 @@ const defaultMilestones = [
year: '2015',
title: 'Gründung E-TIB GmbH',
desc: 'Ausführung elektrischer Infrastrukturprojekte, Kabelbau und Horizontalspülbohrungen.',
icon: Building2,
iconName: 'Building2',
},
{
date: '04.02.2019',
year: '2019',
title: 'Gründung E-TIB Ingenieurgesellschaft',
desc: 'Genehmigungs- und Ausführungsplanung, komplexe Querungen sowie Netzanschlussplanung.',
icon: Compass,
iconName: 'Compass',
},
{
date: '14.11.2019',
year: '2019',
title: 'Gründung E-TIB Verwaltung GmbH',
desc: 'Zentrale Dienste, Erwerb, Vermietung, Verpachtung und Verwaltung von Immobilien und Maschinen.',
icon: Layers,
iconName: 'Layers',
},
{
date: '21.10.2025',
year: '2025',
title: 'Gründung E-TIB Bohrtechnik GmbH',
desc: 'Spezialisierung auf präzise Horizontalspülbohrungen in allen Bodenklassen.',
icon: ArrowDownToLine,
iconName: 'ArrowDownToLine',
},
];
@@ -40,7 +52,7 @@ interface Milestone {
year: string;
title: string;
desc: string;
icon: React.ElementType;
iconName: string;
}
interface CompanyTimelineProps {
@@ -94,7 +106,7 @@ export function CompanyTimeline({
<div className="space-y-16 md:space-y-24">
{milestones.map((milestone, i) => {
const isEven = i % 2 === 0;
const Icon = milestone.icon;
const Icon = iconMap[milestone.iconName] || Building2;
return (
<motion.div

View File

@@ -2,26 +2,26 @@
import React, { useState } from 'react';
import { motion, AnimatePresence } from 'framer-motion';
import { MapPin, CheckCircle2, Factory, Zap } from 'lucide-react';
import { MapPin, Factory, Zap, CheckCircle2 } from 'lucide-react';
import Image from 'next/image';
interface Location {
export interface Location {
id: string;
name: string;
type: 'hq' | 'branch' | 'project';
x: number; // percentage from left
y: number; // percentage from top
description?: string;
x: number;
y: number;
description: string;
details?: string[];
}
const locations: Location[] = [
const defaultLocations: Location[] = [
{
id: 'guben',
name: 'Guben (Hauptsitz)',
type: 'hq',
x: 85, // approx East (adjusted to be inside map)
y: 48, // approx Middle
x: 85,
y: 48,
description: 'E-TIB GmbH Holding & Bohrtechnik GmbH',
details: ['Zentrale Steuerung', 'Kabelleitungstiefbau', 'Maschinenpark'],
},
@@ -29,47 +29,37 @@ const locations: Location[] = [
id: 'buelstedt',
name: 'Bülstedt (Ingenieurgesellschaft)',
type: 'branch',
x: 37, // approx North-West
y: 25, // approx North
x: 37,
y: 25,
description: 'E-TIB Ingenieurgesellschaft mbH',
details: ['Planung & Projektierung', 'Vermessung', 'Dokumentation'],
},
// Dummy Projects
{
id: 'project-1',
name: '110kV Trasse München',
type: 'project',
x: 58,
y: 85,
description: 'Horizontalspülbohrung & Netzanbindung',
},
{
id: 'project-2',
name: 'Solarpark Hamburg',
type: 'project',
x: 45,
y: 18,
description: 'Komplexe Querung unter Gewässer',
},
{
id: 'project-3',
name: 'Windpark NRW',
type: 'project',
x: 20,
y: 50,
description: 'Kabelpflugarbeiten & LWL',
},
{
id: 'project-4',
name: 'Trassenausbau Leipzig',
type: 'project',
x: 65,
y: 55,
description: 'Infrastrukturausbau',
}
];
export function InteractiveGermanyMap() {
interface Stat {
value: string;
suffix?: string;
label: string;
}
interface InteractiveGermanyMapProps {
badge?: string;
title?: React.ReactNode;
description?: string;
stats?: Stat[];
locations?: Location[];
}
export function InteractiveGermanyMap({
badge = 'Einsatzgebiete',
title = <>Deutschlandweit<br/>für Sie im Einsatz.</>,
description = 'Von unseren strategischen Standorten in Guben und Bülstedt steuern und realisieren wir komplexe Infrastrukturprojekte im gesamten Bundesgebiet.',
stats = [
{ value: '100', suffix: '%', label: 'Überregionale Reichweite' },
{ value: '2', suffix: '+', label: 'Operative Standorte' },
],
locations = defaultLocations
}: InteractiveGermanyMapProps) {
const [activeLocation, setActiveLocation] = useState<Location | null>(null);
const hq = locations.find((l) => l.type === 'hq');
@@ -89,37 +79,30 @@ export function InteractiveGermanyMap() {
<div className="xl:col-span-5 text-white z-20">
<div className="inline-flex items-center gap-2 px-3 py-1.5 rounded-full bg-primary/10 border border-primary/20 text-primary text-xs font-bold uppercase tracking-wider mb-8">
<MapPin className="w-4 h-4" />
<span>Einsatzgebiete</span>
<span>{badge}</span>
</div>
<h3 className="font-heading text-4xl lg:text-5xl xl:text-6xl font-extrabold mb-6 leading-[1.1] text-transparent bg-clip-text bg-gradient-to-r from-white to-white/70 break-words [hyphens:auto]">
Deutschlandweit<br/>für Sie im Einsatz.
{title}
</h3>
<p className="text-white/60 text-lg mb-12 leading-relaxed">
Von unseren strategischen Standorten in Guben und Bülstedt steuern und realisieren wir komplexe Infrastrukturprojekte im gesamten Bundesgebiet.
{description}
</p>
{/* Industrial Stats Grid */}
<div className="grid grid-cols-2 gap-4">
<div className="bg-white/5 border border-white/10 rounded-2xl p-6 backdrop-blur-md relative overflow-hidden group">
<div className="absolute inset-0 bg-gradient-to-br from-primary/10 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-500" />
<div className="relative z-10">
<div className="text-4xl font-extrabold text-white mb-1 flex items-baseline gap-1">
100<span className="text-xl text-primary">%</span>
{stats.map((stat, i) => (
<div key={i} className="bg-white/5 border border-white/10 rounded-2xl p-6 backdrop-blur-md relative overflow-hidden group">
<div className="absolute inset-0 bg-gradient-to-br from-primary/10 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-500" />
<div className="relative z-10">
<div className="text-4xl font-extrabold text-white mb-1 flex items-baseline gap-1">
{stat.value}<span className="text-xl text-primary">{stat.suffix}</span>
</div>
<div className="text-sm text-white/50 font-medium">{stat.label}</div>
</div>
<div className="text-sm text-white/50 font-medium">Überregionale Reichweite</div>
</div>
</div>
<div className="bg-white/5 border border-white/10 rounded-2xl p-6 backdrop-blur-md relative overflow-hidden group">
<div className="absolute inset-0 bg-gradient-to-br from-primary/10 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-500" />
<div className="relative z-10">
<div className="text-4xl font-extrabold text-white mb-1 flex items-baseline gap-1">
2<span className="text-xl text-primary">+</span>
</div>
<div className="text-sm text-white/50 font-medium">Operative Standorte</div>
</div>
</div>
))}
</div>
</div>