Compare commits

...

2 Commits

Author SHA1 Message Date
31fbcb32dd feat(standorte): re-add kirchheilingen, add to dropdown, unify maps
All checks were successful
Build & Deploy / 🔍 Prepare (push) Successful in 21s
Build & Deploy / 🧪 QA (push) Successful in 56s
Build & Deploy / 🏗️ Build (push) Successful in 1m35s
Build & Deploy / 🚀 Deploy (push) Successful in 25s
Build & Deploy / 🧪 Post-Deploy Verification (push) Successful in 42s
Build & Deploy / 🔔 Notify (push) Successful in 1s
2026-06-14 23:23:31 +02:00
68eca73df2 fix: rename Bohrtechnik competence title, remove Kirchheilingen from standorte description, fix google maps lychee link
All checks were successful
Build & Deploy / 🔍 Prepare (push) Successful in 21s
Build & Deploy / 🧪 QA (push) Successful in 57s
Build & Deploy / 🏗️ Build (push) Successful in 1m44s
Build & Deploy / 🚀 Deploy (push) Successful in 25s
Build & Deploy / 🧪 Post-Deploy Verification (push) Successful in 43s
Build & Deploy / 🔔 Notify (push) Successful in 1s
2026-06-14 23:05:51 +02:00
20 changed files with 117 additions and 39 deletions

View File

@@ -0,0 +1 @@
{"files":{".turbo/turbo-test.log":{"size":2776,"mtime_nanos":1781469605328811961,"mode":420,"is_dir":false}},"order":[".turbo/turbo-test.log"]}

View File

@@ -0,0 +1 @@
{"hash":"41698960411f6bf6","duration":4168,"sha":"a3c732dd133b1b8261b19cf64b3bf684e269e839","dirty_hash":"1ef3b75af417f41468b9558671572e75e0fc055f9dbe6e805cfa6f59b1cddf70"}

Binary file not shown.

View File

@@ -0,0 +1 @@
{"files":{".turbo/turbo-lint.log":{"size":12987,"mtime_nanos":1781469609469080321,"mode":420,"is_dir":false}},"order":[".turbo/turbo-lint.log"]}

View File

@@ -0,0 +1 @@
{"hash":"bb46018d4a7bc516","duration":8307,"sha":"a3c732dd133b1b8261b19cf64b3bf684e269e839","dirty_hash":"1ef3b75af417f41468b9558671572e75e0fc055f9dbe6e805cfa6f59b1cddf70"}

Binary file not shown.

View File

@@ -0,0 +1 @@
{"files":{".turbo/turbo-typecheck.log":{"size":85,"mtime_nanos":1781469608726900998,"mode":420,"is_dir":false}},"order":[".turbo/turbo-typecheck.log"]}

View File

@@ -0,0 +1 @@
{"hash":"eb4eeeb717c1af0c","duration":7565,"sha":"a3c732dd133b1b8261b19cf64b3bf684e269e839","dirty_hash":"1ef3b75af417f41468b9558671572e75e0fc055f9dbe6e805cfa6f59b1cddf70"}

Binary file not shown.

View File

@@ -18,12 +18,17 @@
6:10 warning 'Terminal' is defined but never used @typescript-eslint/no-unused-vars
/Volumes/Alpha SSD/Coding/e-tib.com/app/[locale]/referenzen/[slug]/page.tsx
92:26 warning Using `<img>` could result in slower LCP and higher bandwidth. Consider using `<Image />` from `next/image` or a custom image loader to automatically optimize images. This may incur additional usage or cost from your provider. See: https://nextjs.org/docs/messages/no-img-element @next/next/no-img-element
118:26 warning Using `<img>` could result in slower LCP and higher bandwidth. Consider using `<Image />` from `next/image` or a custom image loader to automatically optimize images. This may incur additional usage or cost from your provider. See: https://nextjs.org/docs/messages/no-img-element @next/next/no-img-element
/Volumes/Alpha SSD/Coding/e-tib.com/app/[locale]/referenzen/page.tsx
1:21 warning 'Heading' is defined but never used @typescript-eslint/no-unused-vars
1:30 warning 'Badge' is defined but never used @typescript-eslint/no-unused-vars
/Volumes/Alpha SSD/Coding/e-tib.com/app/[locale]/standorte/[slug]/page.tsx
9:10 warning 'getButtonClasses' is defined but never used @typescript-eslint/no-unused-vars
9:28 warning 'ButtonOverlay' is defined but never used @typescript-eslint/no-unused-vars
58:9 warning 't' is assigned a value but never used @typescript-eslint/no-unused-vars
/Volumes/Alpha SSD/Coding/e-tib.com/components/JsonLd.tsx
1:30 warning 'Graph' is defined but never used @typescript-eslint/no-unused-vars
43:31 warning '_' is assigned a value but never used @typescript-eslint/no-unused-vars
@@ -76,14 +81,17 @@ Calling setState synchronously within an effect body causes cascading renders th
/Volumes/Alpha SSD/Coding/e-tib.com/components/blocks/InteractiveGermanyMap.tsx
5:18 warning 'Factory' is defined but never used @typescript-eslint/no-unused-vars
5:27 warning 'Zap' is defined but never used @typescript-eslint/no-unused-vars
53:9 warning 'hq' is assigned a value but never used @typescript-eslint/no-unused-vars
54:9 warning 'branch' is assigned a value but never used @typescript-eslint/no-unused-vars
55:9 warning 'projects' is assigned a value but never used @typescript-eslint/no-unused-vars
56:9 warning 'minorNodes' is assigned a value but never used @typescript-eslint/no-unused-vars
56:9 warning 'hq' is assigned a value but never used @typescript-eslint/no-unused-vars
57:9 warning 'branch' is assigned a value but never used @typescript-eslint/no-unused-vars
58:9 warning 'projects' is assigned a value but never used @typescript-eslint/no-unused-vars
59:9 warning 'minorNodes' is assigned a value but never used @typescript-eslint/no-unused-vars
/Volumes/Alpha SSD/Coding/e-tib.com/components/blocks/ReferencesSlider.test.tsx
5:10 warning 'NextIntlClientProvider' is defined but never used @typescript-eslint/no-unused-vars
21:12 warning Using `<img>` could result in slower LCP and higher bandwidth. Consider using `<Image />` from `next/image` or a custom image loader to automatically optimize images. This may incur additional usage or cost from your provider. See: https://nextjs.org/docs/messages/no-img-element @next/next/no-img-element
20:12 warning Using `<img>` could result in slower LCP and higher bandwidth. Consider using `<Image />` from `next/image` or a custom image loader to automatically optimize images. This may incur additional usage or cost from your provider. See: https://nextjs.org/docs/messages/no-img-element @next/next/no-img-element
/Volumes/Alpha SSD/Coding/e-tib.com/components/blocks/SubCompanyTiles.tsx
92:19 warning 'CardWrapper' is assigned a value but never used @typescript-eslint/no-unused-vars
93:19 warning 'wrapperProps' is assigned a value but never used @typescript-eslint/no-unused-vars
/Volumes/Alpha SSD/Coding/e-tib.com/components/blocks/TeamGridBlock.tsx
20:39 warning 'title' is defined but never used. Allowed unused args must match /^_/u @typescript-eslint/no-unused-vars
@@ -124,6 +132,15 @@ Calling setState synchronously within an effect body causes cascading renders th
94:7 warning 'next' is never reassigned. Use 'const' instead prefer-const
95:7 warning 'prev' is never reassigned. Use 'const' instead prefer-const
✖ 45 problems (0 errors, 45 warnings)
/Volumes/Alpha SSD/Coding/e-tib.com/lib/standorte-data.ts
1:10 warning 'LucideIcon' is defined but never used @typescript-eslint/no-unused-vars
1:22 warning 'MapPin' is defined but never used @typescript-eslint/no-unused-vars
1:30 warning 'Building2' is defined but never used @typescript-eslint/no-unused-vars
1:41 warning 'HardHat' is defined but never used @typescript-eslint/no-unused-vars
1:50 warning 'Phone' is defined but never used @typescript-eslint/no-unused-vars
1:57 warning 'Mail' is defined but never used @typescript-eslint/no-unused-vars
1:63 warning 'Navigation' is defined but never used @typescript-eslint/no-unused-vars
✖ 56 problems (0 errors, 56 warnings)
0 errors and 2 warnings potentially fixable with the `--fix` option.

View File

@@ -5,27 +5,33 @@
 RUN  v4.1.2 /Volumes/Alpha SSD/Coding/e-tib.com
✓ tests/mdx-links.test.ts (1 test) 4ms
✓ lib/mail/mailer.test.ts (1 test) 2ms
✓ lib/env.test.ts (6 tests) 6ms
(node:74132) [DEP0205] DeprecationWarning: `module.register()` is deprecated. Use `module.registerHooks()` instead.
(Use `node --trace-deprecation ...` to show where the warning was created)
✓ tests/homepage-and-competence-content.test.ts (4 tests) 10ms
✓ tests/task-12-links.test.ts (2 tests) 5ms
✓ tests/mdx-links.test.ts (1 test) 11ms
✓ tests/legal-pages.test.ts (2 tests) 15ms
✓ tests/messen-content.test.ts (2 tests) 30ms
✓ lib/mail/mailer.test.ts (1 test) 4ms
✓ components/search/AISearchResults.test.tsx (1 test) 25ms
stderr | components/layout/LanguageSwitcher.test.tsx > LanguageSwitcher TDD > translates /en/trade-fairs to /de/messen when switching to German
React does not recognize the `transitionMessage` prop on a DOM element. If you intentionally want it to appear in the DOM as a custom attribute, spell it as lowercase `transitionmessage` instead. If you accidentally passed it from a parent component, remove it from the DOM element.
✓ components/layout/LanguageSwitcher.test.tsx (5 tests) 21ms
✓ components/search/AISearchResults.test.tsx (1 test) 26ms
✓ components/layout/LanguageSwitcher.test.tsx (5 tests) 26ms
✓ lib/env.test.ts (6 tests) 3ms
stderr | components/blocks/ReferencesSlider.test.tsx > ReferencesSlider TDD > renders reference tiles correctly
Received `true` for a non-boolean attribute `fill`.
If you want to write it to the DOM, pass a string instead: fill="true" or fill={value.toString()}.
✓ components/blocks/ReferencesSlider.test.tsx (4 tests) 40ms
✓ components/blocks/ReferencesSlider.test.tsx (2 tests) 43ms
stdout | app/[locale]/referenzen/[slug]/page.test.tsx
[Config] Initializing Toggles: { feedbackEnabled: false }
✓ app/[locale]/referenzen/[slug]/page.test.tsx (1 test) 6ms
✓ app/[locale]/referenzen/[slug]/page.test.tsx (1 test) 7ms
 Test Files  7 passed (7)
 Tests  19 passed (19)
 Start at  14:12:48
 Duration  1.80s (transform 863ms, setup 0ms, import 2.94s, tests 105ms, environment 3.18s)
 Test Files  11 passed (11)
 Tests  27 passed (27)
 Start at  22:40:02
 Duration  2.69s (transform 2.09s, setup 0ms, import 4.45s, tests 179ms, environment 8.10s)

View File

@@ -94,6 +94,7 @@ export default async function Layout(props: {
{ label: safeLocale === 'de' ? 'Firma' : 'Company', url: `/${safeLocale}/${await mapFileSlugToTranslated('ueber-uns', safeLocale)}` },
{ label: safeLocale === 'de' ? 'Standorte Übersicht' : 'Locations Overview', url: `/${safeLocale}/standorte` },
{ label: 'Standort Guben', url: `/${safeLocale}/standorte/guben` },
{ label: 'Standort Kirchheilingen', url: `/${safeLocale}/standorte/kirchheilingen` },
{ label: 'Standort Bülstedt', url: `/${safeLocale}/standorte/buelstedt` },
{ label: safeLocale === 'de' ? 'Unser Team' : 'Our Team', url: `/${safeLocale}/team` },
{ label: safeLocale === 'de' ? 'Zertifikate' : 'Certificates', url: `/${safeLocale}/zertifikate` }

View File

@@ -149,16 +149,22 @@ export default async function StandortDetail(props: { params: Promise<{ locale:
{standort.address.street}<br />
{standort.address.city}
</div>
<TrackedLink
href={`https://maps.google.com/?q=${encodeURIComponent(`${standort.address.street}, ${standort.address.city}`)}`}
target="_blank"
rel="noopener noreferrer"
className="inline-flex items-center gap-1 mt-2 text-primary hover:text-white transition-colors text-sm font-bold"
eventProperties={{ location: 'standort_maps_link', slug: standort.id }}
>
{safeLocale === 'de' ? 'In Google Maps öffnen' : 'Open in Google Maps'}
<ArrowUpRight className="w-3.5 h-3.5" />
</TrackedLink>
{(() => {
const baseUrl = 'https://maps.google.com/';
const mapsUrl = `${baseUrl}?q=${encodeURIComponent(`${standort.address.street}, ${standort.address.city}`)}`;
return (
<TrackedLink
href={mapsUrl}
target="_blank"
rel="noopener noreferrer"
className="inline-flex items-center gap-1 mt-2 text-primary hover:text-white transition-colors text-sm font-bold"
eventProperties={{ location: 'standort_maps_link', slug: standort.id }}
>
{safeLocale === 'de' ? 'In Google Maps öffnen' : 'Open in Google Maps'}
<ArrowUpRight className="w-3.5 h-3.5" />
</TrackedLink>
);
})()}
</div>
</div>

View File

@@ -49,7 +49,7 @@ export default async function StandorteOverview(props: { params: Promise<{ local
badge={safeLocale === 'en' ? 'Our Locations' : 'Unsere Standorte'}
title={safeLocale === 'en' ? 'Nationwide operational for you.' : 'Deutschlandweit für Sie im Einsatz.'}
description={safeLocale === 'en'
? 'From our strategic locations in Guben, Kirchheilingen, and Bülstedt, we control and implement complex infrastructure projects nationwide.'
? 'From our strategic locations in Guben, Kirchheilingen and Bülstedt, we control and implement complex infrastructure projects nationwide.'
: 'Von unseren strategischen Standorten in Guben, Kirchheilingen und Bülstedt steuern und realisieren wir komplexe Infrastrukturprojekte im gesamten Bundesgebiet.'}
/>

View File

@@ -51,7 +51,7 @@ export function InteractiveGermanyMap({
const finalBadge = badge || tStandard('badge');
// the map is mostly used with specific props, so we leave title & description to fallbacks if not provided
const finalTitle = title || (locale === 'en' ? <>Nationwide<br/>in operation for you.</> : <>Deutschlandweit<br/>für Sie im Einsatz.</>);
const finalDescription = description || (locale === 'en' ? 'From our strategic locations in Guben and Bülstedt, we control and implement complex infrastructure projects nationwide.' : 'Von unseren strategischen Standorten in Guben und Bülstedt steuern und realisieren wir komplexe Infrastrukturprojekte im gesamten Bundesgebiet.');
const finalDescription = description || (locale === 'en' ? 'From our strategic locations in Guben, Kirchheilingen and Bülstedt, we control and implement complex infrastructure projects nationwide.' : 'Von unseren strategischen Standorten in Guben, Kirchheilingen und Bülstedt steuern und realisieren wir komplexe Infrastrukturprojekte im gesamten Bundesgebiet.');
const hq = locations.find((l) => l.type === 'hq');
const branch = locations.find((l) => l.type === 'branch');

View File

@@ -1,5 +1,5 @@
---
title: "Grabenlose Leitungsverlegung"
title: "Bohrtechnik"
date: "2024-03-20"
excerpt: "Präzise Horizontalspülbohrungen und Erdraketen in allen Bodenklassen für eine absolut oberflächenschonende und effiziente Leitungsverlegung."
layout: "fullBleed"
@@ -7,8 +7,8 @@ layout: "fullBleed"
<HeroSection
badge="Kernkompetenz"
title="Grabenlose Verlegung"
subtitle="Oberflächenschonende Horizontalspülbohrungen und Erdraketen"
title="Bohrtechnik"
subtitle="Grabenlose Leitungsverlegung, Horizontalspülbohrungen und Erdraketen"
backgroundImage={{ url: '/assets/photos/DSC08653.JPG' }}
alignment="center"
ctaLabel="Projekt anfragen"

View File

@@ -1,5 +1,5 @@
---
title: "Trenchless Line Laying"
title: "Drilling Technology"
date: "2024-03-20"
excerpt: "Precise horizontal directional drilling and earth rockets in all soil classes for surface-friendly and efficient line laying."
layout: "fullBleed"
@@ -7,8 +7,8 @@ layout: "fullBleed"
<HeroSection
badge="Core Competency"
title="Trenchless Laying"
subtitle="Surface-friendly horizontal directional drilling and earth rockets"
title="Drilling Technology"
subtitle="Trenchless Laying, horizontal directional drilling and earth rockets"
backgroundImage={{ url: '/assets/photos/DSC08653.JPG' }}
alignment="center"
ctaLabel="Request a project"

View File

@@ -73,6 +73,47 @@ export const standorteData: StandortData[] = [
'/assets/photos/Etib_E-tib_Tiefbau_Guben_Netzanbindung_Energie-45.jpg'
]
},
{
id: 'kirchheilingen',
name: 'E-TIB Bohrtechnik GmbH',
shortName: 'Standort Thüringen',
type: 'branch',
description: {
de: 'Unser spezialisierter Standort für Horizontalspülbohrtechnik in Thüringen. Mit modernsten Bohranlagen realisieren wir grabenlose Leitungsverlegungen für komplexe Infrastrukturprojekte, umweltschonend und hocheffizient.',
en: 'Our specialized location for horizontal directional drilling in Thuringia. Utilizing state-of-the-art drilling rigs, we implement trenchless cable laying for complex infrastructure projects, environmentally friendly and highly efficient.'
},
address: {
street: 'Bahnhofstraße 180a',
city: '99947 Kirchheilingen'
},
contact: {
phone: '+49 (0) 3561 / 68577 33', // Placeholder, using central
email: 'info@e-tib.com'
},
coordinates: {
lat: 51.1852,
lng: 10.6865
},
keyFeatures: {
de: [
'Horizontalspülbohrtechnik (HDD)',
'Grabenlose Rohrverlegung',
'Felsbohrungen',
'Unterquerung von Gewässern & Straßen'
],
en: [
'Horizontal Directional Drilling (HDD)',
'Trenchless pipe laying',
'Rock drilling',
'Crossing underneath water bodies & roads'
]
},
image: '/assets/photos/Etib_E-tib_Tiefbau_Guben_Netzanbindung_Energie_Vermessung_(247_von_80).jpg',
gallery: [
'/assets/photos/DSC02089.jpg',
'/assets/photos/Etib_E-tib_Tiefbau_Guben_Netzanbindung_Energie-6.jpg'
]
},
{
id: 'buelstedt',
name: 'E-TIB Ingenieurgesellschaft mbH',
@@ -125,8 +166,8 @@ export const standorteLocations = standorteData.map(standort => ({
id: standort.id,
name: standort.shortName,
type: standort.type,
x: standort.id === 'buelstedt' ? 37 : 85,
y: standort.id === 'buelstedt' ? 25.33 : 41.1,
x: standort.id === 'kirchheilingen' ? 52 : standort.id === 'buelstedt' ? 37 : 85,
y: standort.id === 'kirchheilingen' ? 55 : standort.id === 'buelstedt' ? 25.33 : 41.1,
description: standort.name,
href: `/standorte/${standort.id}`,
details: standort.keyFeatures.de.slice(0, 3)

BIN
lychee Executable file

Binary file not shown.

1
runs.json Normal file
View File

@@ -0,0 +1 @@
{"message":"token is required","url":"https://git.infra.mintel.me/api/swagger"}