Compare commits

...

20 Commits

Author SHA1 Message Date
0138064bcc fix(ci): switch network subnet mapping to 10.199.x.x space to guarantee no overlaps on host
All checks were successful
Build & Deploy / 🔍 Prepare (push) Successful in 37s
Build & Deploy / 🧪 QA (push) Successful in 1m6s
Build & Deploy / 🏗️ Build (push) Successful in 2m15s
Build & Deploy / 🚀 Deploy (push) Successful in 26s
Build & Deploy / 🧪 Post-Deploy Verification (push) Successful in 43s
Build & Deploy / 🔔 Notify (push) Successful in 2s
2026-05-28 23:23:23 +02:00
f74df4e8a2 fix(ci): switch network subnet mapping to 192.168.x.x space to avoid overlap with host Docker pools
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 46s
Build & Deploy / 🧪 QA (push) Successful in 1m47s
Build & Deploy / 🏗️ Build (push) Successful in 3m24s
Build & Deploy / 🚀 Deploy (push) Failing after 33s
Build & Deploy / 🧪 Post-Deploy Verification (push) Has been skipped
Build & Deploy / 🔔 Notify (push) Successful in 5s
2026-05-28 23:14:47 +02:00
cf29d0c45a fix(ci): introduce dynamic static subnet mapping to bypass Docker automatic address pool allocation limits
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 50s
Build & Deploy / 🧪 QA (push) Successful in 1m46s
Build & Deploy / 🏗️ Build (push) Successful in 3m21s
Build & Deploy / 🚀 Deploy (push) Failing after 31s
Build & Deploy / 🧪 Post-Deploy Verification (push) Has been skipped
Build & Deploy / 🔔 Notify (push) Successful in 3s
2026-05-28 23:07:09 +02:00
4aebd226f1 fix(ci): replace Buildx with Native Docker Buildkit to run on host with 92.3 GB free space and prevent overlayfs ResourceExhausted limits
All checks were successful
Build & Deploy / 🔍 Prepare (push) Successful in 28s
Build & Deploy / 🧪 QA (push) Successful in 1m48s
Build & Deploy / 🏗️ Build (push) Successful in 3m38s
Build & Deploy / 🧪 Post-Deploy Verification (push) Successful in 53s
Build & Deploy / 🚀 Deploy (push) Successful in 34s
Build & Deploy / 🔔 Notify (push) Successful in 4s
2026-05-28 22:59:12 +02:00
528bf83a67 fix(ci): restore Buildx caching by removing no-cache now that registry cache conflict is resolved
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 26s
Build & Deploy / 🧪 QA (push) Successful in 1m48s
Build & Deploy / 🏗️ Build (push) Failing after 4m2s
Build & Deploy / 🚀 Deploy (push) Has been skipped
Build & Deploy / 🧪 Post-Deploy Verification (push) Has been skipped
Build & Deploy / 🔔 Notify (push) Successful in 4s
2026-05-28 22:51:55 +02:00
05ca944828 fix(ci): use docker system prune on target host to clean stopped containers and unlock networks
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 28s
Build & Deploy / 🧪 QA (push) Successful in 1m49s
Build & Deploy / 🏗️ Build (push) Failing after 4m9s
Build & Deploy / 🚀 Deploy (push) Has been skipped
Build & Deploy / 🧪 Post-Deploy Verification (push) Has been skipped
Build & Deploy / 🔔 Notify (push) Successful in 4s
2026-05-28 22:44:04 +02:00
f2209c4815 fix(ci): bypass Gitea registry layer cache conflict by adding no-cache to build-push-action
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 26s
Build & Deploy / 🧪 QA (push) Successful in 1m49s
Build & Deploy / 🏗️ Build (push) Successful in 4m25s
Build & Deploy / 🚀 Deploy (push) Failing after 30s
Build & Deploy / 🧪 Post-Deploy Verification (push) Has been skipped
Build & Deploy / 🔔 Notify (push) Successful in 4s
2026-05-28 22:35:49 +02:00
ded2aee989 fix(ci): add docker network prune before deployment on target host
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 26s
Build & Deploy / 🧪 QA (push) Successful in 2m2s
Build & Deploy / 🏗️ Build (push) Failing after 4m38s
Build & Deploy / 🚀 Deploy (push) Has been skipped
Build & Deploy / 🧪 Post-Deploy Verification (push) Has been skipped
Build & Deploy / 🔔 Notify (push) Successful in 2s
2026-05-28 22:10:34 +02:00
37ecb81444 feat(legal): write comprehensive B2B AGB and Terms and Conditions pages
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 20s
Build & Deploy / 🧪 QA (push) Successful in 1m25s
Build & Deploy / 🏗️ Build (push) Successful in 2m51s
Build & Deploy / 🚀 Deploy (push) Failing after 24s
Build & Deploy / 🧪 Post-Deploy Verification (push) Has been skipped
Build & Deploy / 🔔 Notify (push) Successful in 2s
2026-05-28 20:26:27 +02:00
343e5a976c fix(ci): remove slow du commands to prevent runner hang
All checks were successful
Build & Deploy / 🔍 Prepare (push) Successful in 27s
Build & Deploy / 🧪 QA (push) Successful in 1m29s
Build & Deploy / 🏗️ Build (push) Successful in 4m27s
Build & Deploy / 🚀 Deploy (push) Successful in 34s
Build & Deploy / 🧪 Post-Deploy Verification (push) Successful in 53s
Build & Deploy / 🔔 Notify (push) Successful in 2s
2026-05-28 17:19:51 +02:00
8817b5d586 fix(ci): replace slow du with fast checks and log truncation to prevent runner hang
Some checks failed
Build & Deploy / 🧪 QA (push) Has been cancelled
Build & Deploy / 🏗️ Build (push) Has been cancelled
Build & Deploy / 🚀 Deploy (push) Has been cancelled
Build & Deploy / 🧪 Post-Deploy Verification (push) Has been cancelled
Build & Deploy / 🔔 Notify (push) Has been cancelled
Build & Deploy / 🔍 Prepare (push) Has been cancelled
2026-05-28 17:17:12 +02:00
fb1e7efd30 fix(ci): refine disk breakdown diagnostics with sh -c to expand wildcards correctly
Some checks failed
Build & Deploy / 🧪 QA (push) Has been cancelled
Build & Deploy / 🏗️ Build (push) Has been cancelled
Build & Deploy / 🚀 Deploy (push) Has been cancelled
Build & Deploy / 🧪 Post-Deploy Verification (push) Has been cancelled
Build & Deploy / 🔔 Notify (push) Has been cancelled
Build & Deploy / 🔍 Prepare (push) Has been cancelled
2026-05-28 17:13:12 +02:00
3a7100d8b0 fix(ci): aggressive buildkit container removal and system prune with volumes to solve ENOSPC
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 22s
Build & Deploy / 🧪 QA (push) Successful in 1m11s
Build & Deploy / 🏗️ Build (push) Failing after 2m45s
Build & Deploy / 🚀 Deploy (push) Has been skipped
Build & Deploy / 🧪 Post-Deploy Verification (push) Has been skipped
Build & Deploy / 🔔 Notify (push) Successful in 2s
2026-05-28 17:08:05 +02:00
50d3d827e8 fix(messen): update trade fair dates and details for 2026
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 20s
Build & Deploy / 🧪 QA (push) Successful in 1m9s
Build & Deploy / 🏗️ Build (push) Failing after 2m57s
Build & Deploy / 🚀 Deploy (push) Has been skipped
Build & Deploy / 🧪 Post-Deploy Verification (push) Has been skipped
Build & Deploy / 🔔 Notify (push) Successful in 2s
2026-05-28 16:42:49 +02:00
79813f5d8a chore(qa): add compare-mdx verification script and finalize parity check
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 24s
Build & Deploy / 🧪 QA (push) Successful in 1m8s
Build & Deploy / 🏗️ Build (push) Failing after 2m50s
Build & Deploy / 🚀 Deploy (push) Has been skipped
Build & Deploy / 🧪 Post-Deploy Verification (push) Has been skipped
Build & Deploy / 🔔 Notify (push) Successful in 2s
2026-05-28 15:04:08 +02:00
4c0ee13d97 fix(en): add missing clearance and trade register certificates to English page
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 20s
Build & Deploy / 🏗️ Build (push) Has been cancelled
Build & Deploy / 🚀 Deploy (push) Has been cancelled
Build & Deploy / 🧪 Post-Deploy Verification (push) Has been cancelled
Build & Deploy / 🔔 Notify (push) Has been cancelled
Build & Deploy / 🧪 QA (push) Has been cancelled
2026-05-28 15:03:05 +02:00
a95fddca56 fix(cta): add backwards-compatible aliases in CallToAction for MDX parameters
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 20s
Build & Deploy / 🧪 QA (push) Successful in 1m8s
Build & Deploy / 🏗️ Build (push) Failing after 2m43s
Build & Deploy / 🚀 Deploy (push) Has been skipped
Build & Deploy / 🧪 Post-Deploy Verification (push) Has been skipped
Build & Deploy / 🔔 Notify (push) Successful in 2s
2026-05-28 14:56:19 +02:00
f110ce9d46 fix(en): add missing href links to Everything from a single source bento grid
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 19s
Build & Deploy / 🧪 QA (push) Successful in 51s
Build & Deploy / 🏗️ Build (push) Has been cancelled
Build & Deploy / 🚀 Deploy (push) Has been cancelled
Build & Deploy / 🧪 Post-Deploy Verification (push) Has been cancelled
Build & Deploy / 🔔 Notify (push) Has been cancelled
2026-05-28 14:55:03 +02:00
68c4a056b7 fix: update trade fair dates to 2026
All checks were successful
Build & Deploy / 🔍 Prepare (push) Successful in 20s
Build & Deploy / 🧪 QA (push) Successful in 1m9s
Build & Deploy / 🏗️ Build (push) Successful in 2m45s
Build & Deploy / 🚀 Deploy (push) Successful in 26s
Build & Deploy / 🧪 Post-Deploy Verification (push) Successful in 46s
Build & Deploy / 🔔 Notify (push) Successful in 2s
2026-05-28 13:43:49 +02:00
57a67ffdf3 feat: refine subpages layout, slugs and B2B copywriting
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 20s
Build & Deploy / 🧪 QA (push) Successful in 1m8s
Build & Deploy / 🏗️ Build (push) Successful in 2m42s
Build & Deploy / 🚀 Deploy (push) Failing after 25s
Build & Deploy / 🧪 Post-Deploy Verification (push) Has been skipped
Build & Deploy / 🔔 Notify (push) Successful in 2s
2026-05-28 13:22:37 +02:00
33 changed files with 633 additions and 260 deletions

View File

@@ -64,10 +64,17 @@ jobs:
echo "Pruning Buildkit inside container: $container"
docker exec -i "$container" buildctl prune --all || true
done
echo "Removing buildkit builder containers to clear overlay storage..."
containers=$(docker ps -a --filter "name=buildx_buildkit_builder" -q)
if [ -n "$containers" ]; then
docker rm -f $containers || true
fi
echo "=== Truncating host Docker container log files ==="
docker run --rm -v /:/host-root alpine sh -c "truncate -s 0 /host-root/mnt/HC_Volume_104796416/docker/containers/*/*.log" || true
echo "Purging old build layers, unused volumes and images..."
docker builder prune -a -f || true
docker volume prune -f || true
docker system prune -a -f || true
docker system prune -a -f --volumes || true
echo "=== System Disk Usage After Prune ==="
df -h || true
@@ -213,28 +220,33 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: bash scripts/registry-auth.sh
- name: 🐳 Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: 🔐 Registry Login
run: echo "${{ secrets.REGISTRY_PASS }}" | docker login registry.infra.mintel.me -u "${{ secrets.REGISTRY_USER }}" --password-stdin
- name: 🏗️ Build and Push
uses: docker/build-push-action@v5
with:
context: .
push: true
provenance: false
platforms: linux/amd64
build-args: |
NEXT_PUBLIC_BASE_URL=${{ needs.prepare.outputs.next_public_url }}
NEXT_PUBLIC_TARGET=${{ needs.prepare.outputs.target }}
NEXT_PUBLIC_APP_VERSION=${{ needs.prepare.outputs.image_tag }}
UMAMI_WEBSITE_ID=${{ secrets.UMAMI_WEBSITE_ID || vars.UMAMI_WEBSITE_ID }}
UMAMI_API_ENDPOINT=${{ secrets.UMAMI_API_ENDPOINT || vars.UMAMI_API_ENDPOINT || 'https://analytics.infra.mintel.me' }}
NPM_TOKEN=${{ steps.auth.outputs.working_token }}
NPM_DOMAIN=${{ steps.auth.outputs.working_domain }}
tags: registry.infra.mintel.me/mintel/e-tib.com:${{ needs.prepare.outputs.image_tag }}
secrets: |
"NPM_TOKEN=${{ steps.auth.outputs.working_token }}"
- name: 🏗️ Build and Push (Native Docker Buildkit)
env:
NEXT_PUBLIC_BASE_URL: ${{ needs.prepare.outputs.next_public_url }}
NEXT_PUBLIC_TARGET: ${{ needs.prepare.outputs.target }}
NEXT_PUBLIC_APP_VERSION: ${{ needs.prepare.outputs.image_tag }}
UMAMI_WEBSITE_ID: ${{ secrets.UMAMI_WEBSITE_ID || vars.UMAMI_WEBSITE_ID }}
UMAMI_API_ENDPOINT: ${{ secrets.UMAMI_API_ENDPOINT || vars.UMAMI_API_ENDPOINT || 'https://analytics.infra.mintel.me' }}
NPM_TOKEN: ${{ steps.auth.outputs.working_token }}
NPM_DOMAIN: ${{ steps.auth.outputs.working_domain }}
IMAGE_TAG: ${{ needs.prepare.outputs.image_tag }}
run: |
echo "$NPM_TOKEN" > npm_token.txt
DOCKER_BUILDKIT=1 docker build \
--secret id=NPM_TOKEN,src=npm_token.txt \
--build-arg NEXT_PUBLIC_BASE_URL="$NEXT_PUBLIC_BASE_URL" \
--build-arg NEXT_PUBLIC_TARGET="$NEXT_PUBLIC_TARGET" \
--build-arg NEXT_PUBLIC_APP_VERSION="$IMAGE_TAG" \
--build-arg UMAMI_WEBSITE_ID="$UMAMI_WEBSITE_ID" \
--build-arg UMAMI_API_ENDPOINT="$UMAMI_API_ENDPOINT" \
--build-arg NPM_TOKEN="$NPM_TOKEN" \
--build-arg NPM_DOMAIN="$NPM_DOMAIN" \
-t registry.infra.mintel.me/mintel/e-tib.com:"$IMAGE_TAG" \
.
docker push registry.infra.mintel.me/mintel/e-tib.com:"$IMAGE_TAG"
rm -f npm_token.txt
# ──────────────────────────────────────────────────────────────────────────────
# JOB 4: Deploy
@@ -294,6 +306,19 @@ jobs:
GATEKEEPER_ORIGIN="${NEXT_PUBLIC_BASE_URL}/gatekeeper"
if [[ "$TARGET" == "production" ]]; then
INTERNAL_SUBNET="10.199.10.0/24"
elif [[ "$TARGET" == "testing" ]]; then
INTERNAL_SUBNET="10.199.11.0/24"
elif [[ "$TARGET" == "staging" ]]; then
INTERNAL_SUBNET="10.199.12.0/24"
else
HEX_SHA="${{ needs.prepare.outputs.short_sha }}"
DEC_SHA=$((16#$HEX_SHA))
SUBNET_NUM=$(( 13 + (DEC_SHA % 230) ))
INTERNAL_SUBNET="10.199.${SUBNET_NUM}.0/24"
fi
{
echo "# Generated by CI - $TARGET"
echo "IMAGE_TAG=$IMAGE_TAG"
@@ -330,6 +355,7 @@ jobs:
echo "COMPOSE_PROFILES=$COMPOSE_PROFILES"
echo "AUTH_MIDDLEWARE=$AUTH_MIDDLEWARE"
echo "AUTH_MIDDLEWARE_UNPROTECTED=$AUTH_MIDDLEWARE_UNPROTECTED"
echo "INTERNAL_SUBNET=$INTERNAL_SUBNET"
} > .env.deploy
- name: 🚀 SSH Deploy
@@ -357,6 +383,7 @@ jobs:
scp .env.deploy root@alpha.mintel.me:$SITE_DIR/$ENV_FILE
scp docker-compose.yml root@alpha.mintel.me:$SITE_DIR/docker-compose.yml
ssh root@alpha.mintel.me "docker system prune -f"
ssh root@alpha.mintel.me "cd $SITE_DIR && echo '${{ secrets.REGISTRY_PASS }}' | docker login registry.infra.mintel.me -u '${{ secrets.REGISTRY_USER }}' --password-stdin"
ssh root@alpha.mintel.me "cd $SITE_DIR && docker compose -p '${{ needs.prepare.outputs.project_name }}' --env-file '$ENV_FILE' pull"
ssh root@alpha.mintel.me "cd $SITE_DIR && docker compose -p '${{ needs.prepare.outputs.project_name }}' --env-file '$ENV_FILE' up -d --remove-orphans"

View File

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

View File

@@ -0,0 +1 @@
{"hash":"0864e4a10f76dcaf","duration":6769,"sha":"68c4a056b70ff215c9ef3252506875dfd3ba4eee","dirty_hash":"29197232f806b237725188c5bfe8d43cb2f12f8bb9e0df915eecf0896e2c04a3"}

Binary file not shown.

View File

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

View File

@@ -0,0 +1 @@
{"hash":"7668a73054ba889d","duration":6206,"sha":"68c4a056b70ff215c9ef3252506875dfd3ba4eee","dirty_hash":"29197232f806b237725188c5bfe8d43cb2f12f8bb9e0df915eecf0896e2c04a3"}

Binary file not shown.

View File

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

View File

@@ -0,0 +1 @@
{"hash":"9c3fa4d9e1993aff","duration":2989,"sha":"68c4a056b70ff215c9ef3252506875dfd3ba4eee","dirty_hash":"29197232f806b237725188c5bfe8d43cb2f12f8bb9e0df915eecf0896e2c04a3"}

Binary file not shown.

View File

@@ -1,119 +1,129 @@

> e-tib-nextjs@2.2.12 lint /Volumes/Alpha SSD/Coding/e-tib.com
> eslint .
/Volumes/Alpha SSD/Coding/e-tib.com/app/[locale]/[slug]/page.tsx
1:20 warning 'redirect' is defined but never used @typescript-eslint/no-unused-vars
67:24 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]/blog/[slug]/page.tsx
1:20 warning 'redirect' is defined but never used @typescript-eslint/no-unused-vars
39:24 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]/error.tsx
7:30 warning 'AlertTriangle' is defined but never used @typescript-eslint/no-unused-vars
/Volumes/Alpha SSD/Coding/e-tib.com/app/[locale]/not-found.tsx
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
91: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/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
48:29 warning '_' is assigned a value but never used @typescript-eslint/no-unused-vars
/Volumes/Alpha SSD/Coding/e-tib.com/components/blocks/CertificatesBlock.tsx
6:10 warning 'Button' is defined but never used @typescript-eslint/no-unused-vars
9:10 warning 'FileText' is defined but never used @typescript-eslint/no-unused-vars
77:5 warning Error: Calling setState synchronously within an effect can trigger cascading renders
Effects are intended to synchronize state between React and external systems such as manually updating the DOM, state management libraries, or other platform APIs. In general, the body of an effect should do one or both of the following:
* Update external systems with the latest state from React.
* Subscribe for updates from some external system, calling setState in a callback function when external state changes.
Calling setState synchronously within an effect body causes cascading renders that can hurt performance, and is not recommended. (https://react.dev/learn/you-might-not-need-an-effect).
/Volumes/Alpha SSD/Coding/e-tib.com/components/blocks/CertificatesBlock.tsx:77:5
75 |
76 | useEffect(() => {
> 77 | setIsMounted(true);
| ^^^^^^^^^^^^ Avoid calling setState() directly within an effect
78 | }, []);
79 |
80 | const badgeText = badge || 'Zertifizierungen & Nachweise'; react-hooks/set-state-in-effect
/Volumes/Alpha SSD/Coding/e-tib.com/components/blocks/CompetenceBentoGrid.tsx
53:5 warning Error: Calling setState synchronously within an effect can trigger cascading renders
Effects are intended to synchronize state between React and external systems such as manually updating the DOM, state management libraries, or other platform APIs. In general, the body of an effect should do one or both of the following:
* Update external systems with the latest state from React.
* Subscribe for updates from some external system, calling setState in a callback function when external state changes.
Calling setState synchronously within an effect body causes cascading renders that can hurt performance, and is not recommended. (https://react.dev/learn/you-might-not-need-an-effect).
/Volumes/Alpha SSD/Coding/e-tib.com/components/blocks/CompetenceBentoGrid.tsx:53:5
51 |
52 | useEffect(() => {
> 53 | setIsMounted(true);
| ^^^^^^^^^^^^ Avoid calling setState() directly within an effect
54 | }, []);
55 |
56 | const badge = props.badge || data?.badge || 'Leistungsspektrum'; react-hooks/set-state-in-effect
/Volumes/Alpha SSD/Coding/e-tib.com/components/blocks/HeroVideo.tsx
5:18 warning 'AnimatePresence' is defined but never used @typescript-eslint/no-unused-vars
6:10 warning 'useState' is defined but never used @typescript-eslint/no-unused-vars
6:20 warning 'useEffect' is defined but never used @typescript-eslint/no-unused-vars
45:12 warning 'e' is defined but never used @typescript-eslint/no-unused-vars
/Volumes/Alpha SSD/Coding/e-tib.com/components/blocks/InteractiveGermanyMap.tsx
5:46 warning 'ArrowUpRight' is defined but never used @typescript-eslint/no-unused-vars
147:23 warning 'isNearRight' 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
20:46 warning 'department' is defined but never used. Allowed unused args must match /^_/u @typescript-eslint/no-unused-vars
20:58 warning 'showContact' is assigned a value but never used. Allowed unused args must match /^_/u @typescript-eslint/no-unused-vars
/Volumes/Alpha SSD/Coding/e-tib.com/components/decorations/CorporateBackground.tsx
36:13 warning 'distance' is assigned a value but never used @typescript-eslint/no-unused-vars
/Volumes/Alpha SSD/Coding/e-tib.com/components/home/Hero.tsx
9:39 warning 'useCallback' is defined but never used @typescript-eslint/no-unused-vars
77:6 warning React Hook useEffect has a missing dependency: 'HERO_PLACEHOLDERS'. Either include it or remove the dependency array react-hooks/exhaustive-deps
/Volumes/Alpha SSD/Coding/e-tib.com/components/home/MeetTheTeam.tsx
8:9 warning 'teamT' is assigned a value but never used @typescript-eslint/no-unused-vars
/Volumes/Alpha SSD/Coding/e-tib.com/components/layout/Footer.tsx
4:35 warning 'Accessibility' is defined but never used @typescript-eslint/no-unused-vars
/Volumes/Alpha SSD/Coding/e-tib.com/components/providers/InitialLoader.tsx
5:8 warning 'Image' is defined but never used @typescript-eslint/no-unused-vars
/Volumes/Alpha SSD/Coding/e-tib.com/components/providers/PageTransitionShutter.tsx
6:8 warning 'Image' is defined but never used @typescript-eslint/no-unused-vars
/Volumes/Alpha SSD/Coding/e-tib.com/components/search/AIOrb.tsx
153:13 warning 'breathe' is assigned a value but never used @typescript-eslint/no-unused-vars
212:15 warning 'targetExcite' is assigned a value but never used @typescript-eslint/no-unused-vars
/Volumes/Alpha SSD/Coding/e-tib.com/components/search/AISearchResults.tsx
99:6 warning React Hook useEffect has missing dependencies: 'handleSearch' and 'initialQuery'. Either include them or remove the dependency array react-hooks/exhaustive-deps
/Volumes/Alpha SSD/Coding/e-tib.com/lib/blog.ts
6:7 warning 'BLOG_DIR' is assigned a value but never used @typescript-eslint/no-unused-vars
94:7 warning 'next' is never reassigned. Use 'const' instead prefer-const
95:7 warning 'prev' is never reassigned. Use 'const' instead prefer-const
✖ 38 problems (0 errors, 38 warnings)
0 errors and 2 warnings potentially fixable with the `--fix` option.
> e-tib-nextjs@2.2.12 lint /Volumes/Alpha SSD/Coding/e-tib.com
> eslint .
/Volumes/Alpha SSD/Coding/e-tib.com/app/[locale]/[slug]/page.tsx
1:20 warning 'redirect' is defined but never used @typescript-eslint/no-unused-vars
75:24 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]/blog/[slug]/page.tsx
1:20 warning 'redirect' is defined but never used @typescript-eslint/no-unused-vars
39:24 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]/error.tsx
7:30 warning 'AlertTriangle' is defined but never used @typescript-eslint/no-unused-vars
/Volumes/Alpha SSD/Coding/e-tib.com/app/[locale]/not-found.tsx
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
/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/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
48:29 warning '_' is assigned a value but never used @typescript-eslint/no-unused-vars
/Volumes/Alpha SSD/Coding/e-tib.com/components/blocks/CertificatesBlock.tsx
6:10 warning 'Button' is defined but never used @typescript-eslint/no-unused-vars
9:10 warning 'FileText' is defined but never used @typescript-eslint/no-unused-vars
102:5 warning Error: Calling setState synchronously within an effect can trigger cascading renders
Effects are intended to synchronize state between React and external systems such as manually updating the DOM, state management libraries, or other platform APIs. In general, the body of an effect should do one or both of the following:
* Update external systems with the latest state from React.
* Subscribe for updates from some external system, calling setState in a callback function when external state changes.
Calling setState synchronously within an effect body causes cascading renders that can hurt performance, and is not recommended. (https://react.dev/learn/you-might-not-need-an-effect).
/Volumes/Alpha SSD/Coding/e-tib.com/components/blocks/CertificatesBlock.tsx:102:5
100 |
101 | useEffect(() => {
> 102 | setIsMounted(true);
| ^^^^^^^^^^^^ Avoid calling setState() directly within an effect
103 | }, []);
104 |
105 | const badgeText = badge || 'Zertifizierungen & Nachweise'; react-hooks/set-state-in-effect
/Volumes/Alpha SSD/Coding/e-tib.com/components/blocks/CompetenceBentoGrid.tsx
53:5 warning Error: Calling setState synchronously within an effect can trigger cascading renders
Effects are intended to synchronize state between React and external systems such as manually updating the DOM, state management libraries, or other platform APIs. In general, the body of an effect should do one or both of the following:
* Update external systems with the latest state from React.
* Subscribe for updates from some external system, calling setState in a callback function when external state changes.
Calling setState synchronously within an effect body causes cascading renders that can hurt performance, and is not recommended. (https://react.dev/learn/you-might-not-need-an-effect).
/Volumes/Alpha SSD/Coding/e-tib.com/components/blocks/CompetenceBentoGrid.tsx:53:5
51 |
52 | useEffect(() => {
> 53 | setIsMounted(true);
| ^^^^^^^^^^^^ Avoid calling setState() directly within an effect
54 | }, []);
55 |
56 | const badge = props.badge || data?.badge || 'Leistungsspektrum'; react-hooks/set-state-in-effect
/Volumes/Alpha SSD/Coding/e-tib.com/components/blocks/HeroVideo.tsx
5:18 warning 'AnimatePresence' is defined but never used @typescript-eslint/no-unused-vars
6:10 warning 'useState' is defined but never used @typescript-eslint/no-unused-vars
6:20 warning 'useEffect' is defined but never used @typescript-eslint/no-unused-vars
45:12 warning 'e' is defined but never used @typescript-eslint/no-unused-vars
/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
/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
/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
20:46 warning 'department' is defined but never used. Allowed unused args must match /^_/u @typescript-eslint/no-unused-vars
20:58 warning 'showContact' is assigned a value but never used. Allowed unused args must match /^_/u @typescript-eslint/no-unused-vars
/Volumes/Alpha SSD/Coding/e-tib.com/components/decorations/CorporateBackground.tsx
36:13 warning 'distance' is assigned a value but never used @typescript-eslint/no-unused-vars
/Volumes/Alpha SSD/Coding/e-tib.com/components/home/Hero.tsx
9:39 warning 'useCallback' is defined but never used @typescript-eslint/no-unused-vars
77:6 warning React Hook useEffect has missing dependencies: 'HERO_PLACEHOLDERS' and 't'. Either include them or remove the dependency array react-hooks/exhaustive-deps
/Volumes/Alpha SSD/Coding/e-tib.com/components/home/MeetTheTeam.tsx
8:9 warning 'teamT' is assigned a value but never used @typescript-eslint/no-unused-vars
/Volumes/Alpha SSD/Coding/e-tib.com/components/layout/Footer.tsx
4:35 warning 'Accessibility' is defined but never used @typescript-eslint/no-unused-vars
/Volumes/Alpha SSD/Coding/e-tib.com/components/providers/InitialLoader.tsx
5:8 warning 'Image' is defined but never used @typescript-eslint/no-unused-vars
/Volumes/Alpha SSD/Coding/e-tib.com/components/providers/PageTransitionShutter.tsx
6:8 warning 'Image' is defined but never used @typescript-eslint/no-unused-vars
/Volumes/Alpha SSD/Coding/e-tib.com/components/search/AIOrb.tsx
153:13 warning 'breathe' is assigned a value but never used @typescript-eslint/no-unused-vars
212:15 warning 'targetExcite' is assigned a value but never used @typescript-eslint/no-unused-vars
/Volumes/Alpha SSD/Coding/e-tib.com/components/search/AISearchResults.tsx
100:6 warning React Hook useEffect has missing dependencies: 'handleSearch' and 'initialQuery'. Either include them or remove the dependency array react-hooks/exhaustive-deps
/Volumes/Alpha SSD/Coding/e-tib.com/components/ui/AnimatedCounter.tsx
3:28 warning 'useState' is defined but never used @typescript-eslint/no-unused-vars
/Volumes/Alpha SSD/Coding/e-tib.com/lib/blog.ts
6:7 warning 'BLOG_DIR' is assigned a value but never used @typescript-eslint/no-unused-vars
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)
0 errors and 2 warnings potentially fixable with the `--fix` option.

View File

@@ -1,31 +1,31 @@

> e-tib-nextjs@2.2.12 test /Volumes/Alpha SSD/Coding/e-tib.com
> vitest run --passWithNoTests
[?25l
RUN v4.1.2 /Volumes/Alpha SSD/Coding/e-tib.com
[?2026h
lib/mail/mailer.test.ts [queued]
Test Files 0 passed (2)
Tests 0 passed (0)
Start at 11:47:51
Duration 504ms
[?2026l[?2026h ✓ lib/mail/mailer.test.ts (1 test) 2ms
lib/env.test.ts 0/6
Test Files 1 passed (2)
Tests 1 passed (7)
Start at 11:47:51
Duration 605ms
[?2026l ✓ lib/env.test.ts (6 tests) 3ms
Test Files 2 passed (2)
Tests 7 passed (7)
Start at 11:47:51
Duration 672ms (transform 113ms, setup 0ms, import 222ms, tests 5ms, environment 813ms)
[?25h
> e-tib-nextjs@2.2.12 test /Volumes/Alpha SSD/Coding/e-tib.com
> vitest run --passWithNoTests
 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
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
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
stdout | app/[locale]/referenzen/[slug]/page.test.tsx
[Config] Initializing Toggles: { feedbackEnabled: false }
✓ app/[locale]/referenzen/[slug]/page.test.tsx (1 test) 6ms
 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)

View File

@@ -1,5 +1,4 @@

> e-tib-nextjs@2.2.12 typecheck /Volumes/Alpha SSD/Coding/e-tib.com
> tsc --noEmit
> e-tib-nextjs@2.2.12 typecheck /Volumes/Alpha SSD/Coding/e-tib.com
> tsc --noEmit

View File

@@ -8,8 +8,11 @@ import { useTranslations } from 'next-intl';
export interface CallToActionProps {
title?: string;
description?: string;
text?: string; // Alias for description
ctaLabel?: string;
buttonText?: string; // Alias for ctaLabel
ctaHref?: string;
buttonLink?: string; // Alias for ctaHref
theme?: 'light' | 'dark';
}
@@ -39,9 +42,9 @@ export const CallToAction: React.FC<CallToActionProps> = (props) => {
const t = useTranslations('CallToAction');
const title = props.title || t('title');
const description = props.description || t('description');
const ctaLabel = props.ctaLabel || t('ctaLabel');
const ctaHref = props.ctaHref || t('ctaHref');
const description = props.description || props.text || t('description');
const ctaLabel = props.ctaLabel || props.buttonText || t('ctaLabel');
const ctaHref = props.ctaHref || props.buttonLink || t('ctaHref');
return (
<div className={`py-24 text-center ${isDark ? 'bg-primary-dark text-white' : 'bg-neutral-50 border-t border-neutral-100'}`}>

View File

@@ -7,13 +7,13 @@ import { useLocale } from 'next-intl';
export function DataGridPulse() {
const locale = useLocale();
return (
<div className="relative w-full py-32 bg-[#050B14] overflow-hidden flex flex-col items-center border-y border-primary/20 -mx-[50vw] px-[50vw] mb-16">
<div className="relative w-full py-16 md:py-24 bg-neutral-50 border border-neutral-100/80 overflow-hidden flex flex-col items-center rounded-3xl mb-16 shadow-sm">
{/* Blueprint grid background */}
<div
className="absolute inset-0 opacity-20 pointer-events-none"
className="absolute inset-0 opacity-[0.03] pointer-events-none"
style={{
backgroundImage: 'linear-gradient(#82ED20 1px, transparent 1px), linear-gradient(90deg, #82ED20 1px, transparent 1px)',
backgroundImage: 'linear-gradient(#117C61 1px, transparent 1px), linear-gradient(90deg, #117C61 1px, transparent 1px)',
backgroundSize: '40px 40px'
}}
/>
@@ -21,25 +21,25 @@ export function DataGridPulse() {
{/* Pulsing horizontal lines (Data Flow) */}
<motion.div
animate={{ x: ["-100%", "100%"] }}
transition={{ duration: 3, repeat: Infinity, ease: "linear" }}
className="absolute top-1/3 left-0 w-full h-[2px] bg-gradient-to-r from-transparent via-primary to-transparent opacity-50 blur-[2px]"
transition={{ duration: 5, repeat: Infinity, ease: "linear" }}
className="absolute top-1/3 left-0 w-full h-[2px] bg-gradient-to-r from-transparent via-primary/30 to-transparent blur-[1px]"
/>
<motion.div
animate={{ x: ["100%", "-100%"] }}
transition={{ duration: 4, repeat: Infinity, ease: "linear" }}
className="absolute top-2/3 left-0 w-full h-[2px] bg-gradient-to-r from-transparent via-white to-transparent opacity-30 blur-[2px]"
transition={{ duration: 7, repeat: Infinity, ease: "linear" }}
className="absolute top-2/3 left-0 w-full h-[2px] bg-gradient-to-r from-transparent via-primary/25 to-transparent blur-[1px]"
/>
<div className="relative z-10 w-full max-w-4xl mx-auto flex flex-col items-center text-center">
<h3 className="text-sm font-bold uppercase tracking-widest text-primary mb-6">
<div className="relative z-10 w-full max-w-2xl px-6 mx-auto flex flex-col items-center text-center">
<span className="text-xs md:text-sm font-bold uppercase tracking-widest text-primary mb-4 bg-primary/10 px-3 py-1 rounded-full">
{locale === 'en' ? 'Network Expansion in Numbers' : 'Netzausbau in Zahlen'}
</h3>
</span>
<div className="bg-black/40 backdrop-blur-md p-12 md:p-16 rounded-3xl border border-white/10 shadow-2xl">
<div className="font-mono text-6xl md:text-8xl font-black text-white tracking-tighter mb-4 leading-none" style={{ fontVariantNumeric: 'tabular-nums' }}>
372.161<span className="text-primary text-3xl md:text-5xl ml-2">m</span>
<div className="bg-white/80 backdrop-blur-md p-8 md:p-12 rounded-2xl border border-neutral-200/50 shadow-lg w-full">
<div className="font-mono text-5xl md:text-7xl font-black text-neutral-900 tracking-tighter mb-4 leading-none animate-pulse-slow" style={{ fontVariantNumeric: 'tabular-nums' }}>
372.161<span className="text-primary text-2xl md:text-4xl ml-1 font-sans">m</span>
</div>
<p className="text-white/70 text-lg md:text-xl font-medium max-w-lg mx-auto">
<p className="text-text-secondary text-base md:text-lg font-medium max-w-md mx-auto leading-relaxed">
{locale === 'en'
? 'Cable routes laid since 2023. A massive infrastructure achievement, driven by our own machinery.'
: 'Verlegte Kabeltrassen seit 2023. Eine massive Infrastrukturleistung, getragen von unserem eigenen Maschinenpark.'}

View File

@@ -1,22 +1,59 @@
---
title: "Allgemeine Geschäftsbedingungen"
date: "2024-03-20"
date: "2026-05-28"
excerpt: "Die Allgemeinen Geschäftsbedingungen der E-TIB GmbH für unsere Leistungen und Lieferungen."
---
# Allgemeine Geschäftsbedingungen (AGB)
## 1. Geltungsbereich
Diese Allgemeinen Geschäftsbedingungen gelten für alle Verträge, Lieferungen und sonstigen Leistungen der E-TIB GmbH gegenüber ihren Kunden.
## 1. Geltungsbereich und Vertragsabschluss
1. Diese Allgemeinen Geschäftsbedingungen (AGB) gelten ausschließlich für alle Verträge, Lieferungen und sonstigen Leistungen (einschließlich Planungs-, Ingenieur-, Kabeltiefbau-, Horizontalspülbohrungs- und Glasfasermontageleistungen) der E-TIB GmbH (nachfolgend „E-TIB“ genannt) gegenüber ihren Vertragspartnern (nachfolgend „Kunde“ genannt).
2. Diese AGB gelten ausschließlich im B2B-Verkehr. Sie richten sich ausschließlich an Unternehmer im Sinne des § 14 BGB, juristische Personen des öffentlichen Rechts oder öffentlich-rechtliche Sondervermögen.
3. Entgegenstehende, abweichende oder ergänzende Bedingungen des Kunden werden nicht Vertragsbestandteil, es sei denn, E-TIB stimmt ihrer Geltung ausdrücklich schriftlich zu.
4. Ein Vertrag kommt erst durch die schriftliche Auftragsbestätigung von E-TIB oder durch den tatsächlichen Beginn der Ausführung der Leistungen durch E-TIB zustande.
## 2. Vertragsabschluss
Ein Vertrag kommt erst durch unsere schriftliche Auftragsbestätigung oder durch die Ausführung des Auftrags zustande.
## 2. Leistungsumfang und Mitwirkungspflichten des Kunden
1. Der genaue Umfang der von E-TIB zu erbringenden Leistungen ergibt sich aus dem jeweiligen Angebot bzw. der schriftlichen Auftragsbestätigung und den darin vereinbarten Spezifikationen.
2. Der Kunde ist verpflichtet, E-TIB bei der Erbringung der Leistungen vollumfänglich und auf eigene Kosten zu unterstützen. Dies umfasst insbesondere:
- Die Bereitstellung aller für die Planung und Ausführung erforderlichen Unterlagen, Pläne (insbesondere Sparten- und Leitungspläne), Genehmigungen und behördlichen Freigaben rechtzeitig vor Baubeginn.
- Die genaue und verbindliche Einweisung in die örtlichen Gegebenheiten sowie die genaue Kennzeichnung und Einmessung aller im Arbeitsbereich verlaufenden unterirdischen Leitungen, Rohre, Kanäle und sonstigen Hindernisse.
- Die Sicherstellung des freien und ungehinderten Zugangs zum Baustellengelände sowie die Bereitstellung eventuell erforderlicher Lager- und Einrichtungsflächen.
- Die Bereitstellung von Bauwasser und Baustrom in der erforderlichen Menge und Qualität an den Arbeitsstellen auf Kosten des Kunden.
3. Versäumt der Kunde eine Mitwirkungspflicht oder erteilt fehlerhafte Auskünfte (insbesondere bezüglich der Lage unterirdischer Leitungen), haftet er E-TIB für alle daraus resultierenden Verzögerungen, Mehrkosten und Schäden. E-TIB ist in diesem Fall von der Haftung für Beschädigungen an nicht oder fehlerhaft eingezeichneten Leitungen freigestellt.
## 3. Preise und Zahlungsbedingungen
Alle Preise verstehen sich in Euro zzgl. der gesetzlichen Mehrwertsteuer. Zahlungen sind innerhalb von 14 Tagen nach Rechnungsstellung ohne Abzug zu leisten.
## 3. Ausführungsfristen, Behinderung und Bauverzögerungen
1. Vereinbarte Ausführungsfristen und Termine sind nur dann verbindlich, wenn sie von E-TIB ausdrücklich schriftlich als fix bestätigt wurden.
2. Die Einhaltung der Fristen setzt die rechtzeitige Erfüllung aller Mitwirkungspflichten des Kunden sowie den Eingang vereinbarter Anzahlungen voraus.
3. Leistungsverzögerungen aufgrund höherer Gewalt, Streiks, Aussperrungen, behördlicher Anordnungen oder unvorhersehbarer, von E-TIB nicht zu vertretender Erschwernisse (z. B. extreme Witterungsverhältnisse, unvorhergesehene Bodenklassen wie massiver Fels, unvollständige oder fehlerhafte Spartenpläne des Netzbetreibers) verlängern die Ausführungsfristen um die Dauer der Behinderung zzgl. einer angemessenen Anlaufzeit.
4. Führen unvorhergesehene geologische Hindernisse oder Abweichungen der tatsächlichen Bodenklasse von den vertraglich zugrunde gelegten Bodenklassen zu einem erheblichen Mehraufwand (z. B. bei Horizontalspülbohrungen), ist E-TIB berechtigt, eine angemessene Anpassung der Vergütung sowie der Ausführungsfristen zu verlangen.
## 4. Haftung
Wir haften für Schäden nur bei Vorsatz oder grober Fahrlässigkeit. Die Haftung für leichte Fahrlässigkeit ist ausgeschlossen, sofern keine wesentlichen Vertragspflichten verletzt wurden.
## 4. Abnahme, Gefahrübergang und Gewährleistung
1. Die Abnahme der Leistungen erfolgt unverzüglich nach Fertigstellung. Auf Verlangen von E-TIB sind auch in sich abgeschlossene Teile der Leistung (z. B. fertiggestellte Kabelgräben oder einzelne Bohrabschnitte) separat abzunehmen (Teilabnahme).
2. Nimmt der Kunde die Leistung nicht innerhalb von 12 Werktagen nach schriftlicher Anzeige der Fertigstellung ab, oder nimmt er die Leistung in Benutzung (z. B. durch Inbetriebnahme der verlegten Leitungen), gilt die Abnahme nach Ablauf dieser Frist als erfolgt.
3. Die Gefahr des zufälligen Untergangs und der zufälligen Verschlechterung geht mit der Abnahme bzw. Teilabnahme auf den Kunden über.
4. E-TIB leistet Gewähr nach den gesetzlichen Bestimmungen, soweit nachfolgend nichts anderes vereinbart ist. Die Verjährungsfrist für Mängelansprüche bei Bauwerken und damit zusammenhängenden Planungs- und Überwachungsleistungen beträgt 5 Jahre ab Abnahme. Bei sonstigen Werkleistungen beträgt sie 1 Jahr ab Abnahme.
5. Offensichtliche Mängel müssen E-TIB unverzüglich, spätestens jedoch innerhalb von 5 Werktagen nach Abnahme, schriftlich angezeigt werden. Spätere Mängelrügen sind ausgeschlossen.
## 5. Gerichtsstand
Gerichtsstand für alle Streitigkeiten aus dem Vertragsverhältnis ist Cottbus, sofern der Kunde Kaufmann ist.
## 5. Preise, Abschlagszahlungen und Zahlungsbedingungen
1. Alle Preise verstehen sich in Euro netto zuzüglich der jeweils gültigen gesetzlichen Umsatzsteuer.
2. E-TIB ist berechtigt, dem Baufortschritt entsprechend angemessene Abschlagszahlungen (z. B. nach erbrachten Trassenmetern, Bohrmetern oder abgeschlossenen Planungsphasen) in Rechnung zu stellen. Diese sind innerhalb von 7 Tagen ab Rechnungsdatum ohne Abzug zur Zahlung fällig.
3. Schlussrechnungen sind innerhalb von 14 Tagen nach Rechnungsstellung und Abnahme ohne Abzug zur Zahlung fällig.
4. Bei Zahlungsverzug des Kunden ist E-TIB berechtigt, Verzugszinsen in gesetzlicher Höhe (derzeit 9 Prozentpunkte über dem jeweiligen Basiszinssatz) zu verlangen. Zudem behält sich E-TIB das Recht vor, weitere Arbeiten bis zur vollständigen Begleichung der fälligen Forderungen einzustellen (Leistungsverweigerungsrecht).
## 6. Eigentumsvorbehalt
1. E-TIB behält sich das Eigentum an allen gelieferten und eingebauten Materialien, Kabeln, Rohren und sonstigen Komponenten (Vorbehaltsware) bis zur vollständigen Erfüllung sämtlicher Forderungen aus dem jeweiligen Vertrag vor.
2. Der Kunde ist verpflichtet, die Vorbehaltsware pfleglich zu behandeln und E-TIB unverzüglich über Zugriffe Dritter (z. B. Pfändungen) schriftlich zu informieren.
3. Bei Verbindung oder Vermischung der Vorbehaltsware mit anderen Gegenständen erwirbt E-TIB Miteigentum an der neuen Sache im Verhältnis des Rechnungswertes der Vorbehaltsware zum Wert der anderen verbundenen Gegenstände zum Zeitpunkt der Verbindung.
## 7. Haftung und Haftungsbeschränkungen
1. E-TIB haftet unbeschränkt bei Vorsatz, grober Fahrlässigkeit sowie bei Verletzung von Leben, Körper oder Gesundheit.
2. Bei leicht fahrlässiger Verletzung wesentlicher Vertragspflichten (Kardinalpflichten) ist die Haftung von E-TIB auf den vertragstypischen, vorhersehbaren Schaden begrenzt. Wesentliche Vertragspflichten sind solche, deren Erfüllung die ordnungsgemäße Durchführung des Vertrages überhaupt erst ermöglicht und auf deren Einhaltung der Kunde regelmäßig vertrauen darf.
3. Die Haftung für leichte Fahrlässigkeit bei der Verletzung nicht wesentlicher Vertragspflichten ist ausgeschlossen.
4. E-TIB haftet nicht für Schäden, die auf unvollständigen, veralteten oder ungenauen Spartenplänen des Kunden oder der örtlichen Netzbetreiber beruhen, sofern E-TIB die Unvollständigkeit nicht vorsätzlich oder grob fahrlässig hätte erkennen müssen.
5. Die vorstehenden Haftungsbeschränkungen gelten auch zugunsten der Angestellten, Vertreter und Erfüllungsgehilfen von E-TIB.
## 8. Gerichtsstand und Schlussbestimmungen
1. Es gilt das Recht der Bundesrepublik Deutschland unter Ausschluss des UN-Kaufrechts (CISG).
2. Erfüllungsort für alle Lieferungen und Leistungen sowie Zahlungsort ist der Sitz von E-TIB in Guben.
3. Ausschließlicher Gerichtsstand für alle Streitigkeiten aus oder im Zusammenhang mit diesem Vertragsverhältnis ist Cottbus, sofern der Kunde Kaufmann, juristische Person des öffentlichen Rechts oder ein öffentlich-rechtliches Sondervermögen ist. E-TIB ist jedoch berechtigt, den Kunden auch an dessen allgemeinem Gerichtsstand zu verklagen.
4. Sollte eine Bestimmung dieser AGB unwirksam oder undurchführbar sein oder werden, so wird dadurch die Wirksamkeit der übrigen Bestimmungen nicht berührt. Die unwirksame Bestimmung ist durch eine wirksame Bestimmung zu ersetzen, die dem wirtschaftlichen Zweck der unwirksamen Bestimmung am nächsten kommt.

View File

@@ -19,9 +19,9 @@ layout: "fullBleed"
showFairs={true}
showJobs={false}
fairs={[
{ name: 'Intersolar München', date: '2024 / 2025', type: 'Messe', location: 'München', url: 'https://www.intersolar.de/' },
{ name: 'Windenergietage Linstow', date: '2024 / 2025', type: 'Fachkongress', location: 'Linstow', url: 'https://www.windenergietage.de/' },
{ name: 'Kabel-Workshop Wiesbaden', date: '2024 / 2025', type: 'Fachmesse', location: 'Wiesbaden' }
{ name: 'Intersolar München', date: '23. - 25. Juni 2026', type: 'Messe', location: 'München', url: 'https://www.intersolar.de/' },
{ name: 'Windenergietage Linstow', date: '10. - 12. November 2026', type: 'Fachkongress', location: 'Linstow', url: 'https://www.windenergietage.de/' },
{ name: 'Werkstatt Kabel 2026', date: '24. - 25. November 2026', type: 'Fachtagung', location: 'Wiesbaden' }
]}
/>
</div>

View File

@@ -17,18 +17,18 @@ layout: "fullBleed"
<div className="container px-4 max-w-7xl mx-auto py-16">
<blockquote>
If classic trench construction is out of the question for space, environmental or cost reasons, we rely on the most modern trenchless techniques. We protect nature and minimize restoration costs.
When traditional open-cut excavation is restricted by space, ecological standards, or cost constraints, trenchless engineering becomes the superior choice. We safeguard the environment while driving down surface restoration costs.
</blockquote>
## Maximum Efficiency, Minimal Intervention
## Maximum Efficiency, Minimal Impact
Trenchless line laying is the smartest solution for complex construction projects. This process shows its absolute strengths particularly when crossing highly frequented roads, railway lines, highways or sensitive bodies of water. Traffic continues to flow, nature remains untouched and complex surfaces such as expensive paving or asphalt do not have to be destroyed.
Trenchless utility laying represents the pinnacle of smart infrastructure deployment. This methodology demonstrates its absolute superiority when navigating busy transportation corridors, active rail tracks, highways, or sensitive ecological waterways. By keeping traffic flowing and preserving the natural topography, we completely eliminate the need to break open expensive paved surfaces or asphalt.
## HDD Boreholes and Earth Rockets
## HDD Directional Drilling & Pneumatic Earth Rockets
With our specialized machinery, we master a wide variety of processes. With the **Horizontal Directional Drilling (HDD) process**, we steer the drill head precisely underground. We achieve drilling lengths of up to 250 meters in one piece and can pull in protective pipes with a diameter of up to 400 mm.
Armed with a state-of-the-art, specialized fleet of drilling rigs, we master complex subterranean conditions. Utilizing the **Horizontal Directional Drilling (HDD)** method, we guide the drill head with centimeter-level accuracy beneath obstacles. This enables us to achieve continuous drilling lengths of up to 250 meters in a single run, pulling in high-durability protective conduits with diameters up to 400 mm.
For shorter distances, such as fast and gentle house connections, we use our **earth rockets** (soil displacement method). Here we achieve drilling lengths of up to 15 meters for pipes up to 160 mm in diameter - ideal for leaving front gardens and driveways completely intact.
For localized, rapid deployments—such as residential service connectionswe deploy high-speed **pneumatic earth rockets** (soil displacement). This method allows us to complete under-crossings of up to 15 meters for conduits up to 160 mm in diameter, ensuring pristine driveways, manicured gardens, and pedestrian walks remain completely undisturbed.
<DeepDrillAnimation />
</div>

View File

@@ -17,18 +17,18 @@ layout: "fullBleed"
<div className="container px-4 max-w-7xl mx-auto py-16">
<blockquote>
A life without electricity or high-speed internet is unimaginable today - that is why we lay cables. We build the backbone of the digital society.
Modern life depends entirely on seamless energy and ultra-fast connectivity. By building robust, high-performance physical networks, we lay the groundwork for a truly connected future.
</blockquote>
## The Backbone of Digitalization
## The Digital Backbone: Precision-Driven Fiber Expansion
Fast internet and state-of-the-art telecommunications networks require an absolutely smooth and highly professional network expansion. With highly specialized assembly teams and our own modern fleet of machinery, E-TIB ensures the highest execution quality in nationwide fiber optic expansion.
High-speed fiber optics and next-generation telecommunications networks demand a zero-tolerance approach to execution quality. At E-TIB, we mobilize highly trained technical teams and an advanced, company-owned fleet of machinery to deliver flawless broadband expansion across the country.
## FTTX Expansion from a Single Source
## FTTX Deployment: A Seamless, End-to-End Solution
As a powerful partner for telecommunications providers, we cover every step of physical network creation. We take over the construction of complete empty conduit routes as well as cable and pipe trenches. In addition, we position and build multi-function enclosures at strategic network nodes.
As a trusted, tier-one partner for leading telecommunications and grid providers, we cover the entire physical lifecycle of network creation. From excavating precise cable and utility trenches to laying complete, high-capacity conduit paths, we manage every phase of civil engineering. We also handle the installation and positioning of strategic multi-function enclosures (MFG) at critical network hub points.
Our service does not end with pure civil engineering: We take care of the professional pulling and blowing in of highly sensitive fiber optic and telecommunication cables over long distances and carry out all required cable assemblies. In this way, we guarantee that the digital infrastructure can go into operation safely and performantly.
Our expertise goes far beyond standard civil works. We perform the specialized pulling and pneumatic blowing of highly sensitive fiber optic and telecommunication cables over expansive, complex distances. Combining this with state-of-the-art splicing, testing, and cable assembly, we ensure your digital infrastructure operates with maximum throughput, security, and long-term reliability.
</div>
<ServiceDetailGrid

View File

@@ -114,6 +114,7 @@ description: "E-TIB GmbH is your reliable partner for complex cable routes, hori
description: "Installation of medium and low voltage cables",
tag: "Energy",
size: "large",
href: "/en/cable-civil-engineering",
image: { url: "/assets/photos/DSC01123.JPG", alt: "Cable Construction" }
},
{
@@ -121,6 +122,7 @@ description: "E-TIB GmbH is your reliable partner for complex cable routes, hori
description: "Horizontal directional drilling for trenchless installation",
tag: "Innovation",
size: "medium",
href: "/en/drilling-technology",
image: { url: "/assets/photos/DSC08653.JPG", alt: "Drilling Technology" }
},
{
@@ -128,13 +130,15 @@ description: "E-TIB GmbH is your reliable partner for complex cable routes, hori
description: "Route planning and approval procedures",
tag: "Precision",
size: "small",
href: "/en/planning",
image: { url: "/assets/photos/DJI_0048.JPG", alt: "Planning" }
},
{
title: "Surveying",
description: "Digital as-built documentation",
tag: "Digital",
size: "accent"
size: "accent",
href: "/en/surveying"
}
]}
/>

View File

@@ -17,20 +17,20 @@ layout: "fullBleed"
<div className="container px-4 max-w-7xl mx-auto py-16">
<blockquote>
Everywhere digging and drilling is happening, but unfortunately a lot also goes wrong. We focus on quality, the highest safety standards and legally compliant documentation - so that your construction project does not turn into a cost trap.
While underground grid construction is expanding rapidly, execution quality varies widely. We counter this with elite craftsmanship, strict safety protocols, and ironclad documentation—ensuring your infrastructure project remains an asset, not a liability.
</blockquote>
## Quality instead of a Cost Trap
## Precision over Compromise: Preventing Infrastructure Failures
On many construction sites, cheap providers from abroad are increasingly being used, which often leads to **safety standards and documentation requirements being ignored**. The consequences are severe: accidents, damaged external lines (such as electricity, water and gas) as well as massive construction delays and expensive supplements. A supposed bargain quickly turns out to be a financial burden.
Modern civil engineering is plagued by low-cost contractors who routinely **compromise on safety margins and technical documentation**. The repercussions are severe: catastrophic utility strikes (power, water, gas, telecom), costly project delays, and massive budget overruns. What begins as a low-bid shortcut quickly turns into a financial and legal nightmare.
Particularly for funded infrastructure projects, retrieving the funding is extremely problematic without absolutely seamless, standard-compliant documentation.
Furthermore, public or subsidized infrastructure projects require meticulously structured, standard-compliant documentation. Without flawless records, the release of critical funding and subsidies is regularly delayed or denied.
## Everything from a Single Source
## Integrated Excellence from a Single Source
Thanks to our many years of experience, we identify problems early on and work out safe and satisfactory solutions for our clients in advance. E-TIB GmbH has fully specialized in cable civil engineering.
At E-TIB, we leverage decades of collective expertise to anticipate structural and geological bottlenecks long before the first shovel hits the ground. Our specialization in cable civil engineering guarantees that every deployment runs with absolute precision.
We offer you the complete range of services for the construction of cable routes from a single source - with our own ultra-modern machine fleet and permanent specialist staff from the region. In direct cooperation with our partner office, E-TIB Ingenieurgesellschaft mbH, we can also rule out planning errors at an early stage and sovereignly meet even the most complex documentation requirements.
We deliver turnkey cable routes entirely in-house. Our operations are powered by a cutting-edge fleet of heavy machinery and staffed exclusively by highly trained, permanent regional professionals. Working in close synergy with our sister firm, **E-TIB Ingenieurgesellschaft mbH**, we eliminate planning oversights at the inception phase and effortlessly handle the most complex GIS and administrative documentation requirements in the industry.
<DataGridPulse />
</div>

View File

@@ -27,7 +27,7 @@ layout: "fullBleed"
description: "Classic trench construction and professional laying of medium and low voltage cables.",
tag: "Energy",
size: "large",
href: "/en/kabeltiefbau",
href: "/en/cable-civil-engineering",
image: { url: "/assets/photos/DSC01123.JPG", alt: "Cable Construction" }
},
{
@@ -35,7 +35,7 @@ layout: "fullBleed"
description: "Horizontal directional drilling (HDD) for trenchless, surface-friendly installation.",
tag: "Innovation",
size: "medium",
href: "/en/bohrtechnik",
href: "/en/drilling-technology",
image: { url: "/assets/photos/DSC08653.JPG", alt: "Drilling Technology" }
},
{
@@ -43,7 +43,7 @@ layout: "fullBleed"
description: "Expansion of future-proof broadband networks (FTTX).",
tag: "Communication",
size: "small",
href: "/en/glasfaser",
href: "/en/fiber-optics",
image: { url: "/assets/photos/DSC01129.JPG", alt: "Fiber Optics" }
},
{
@@ -51,7 +51,7 @@ layout: "fullBleed"
description: "Route planning, approval procedures, and precise GIS documentation.",
tag: "Digital",
size: "accent",
href: "/en/planung"
href: "/en/planning"
}
]}
/>

View File

@@ -19,9 +19,9 @@ layout: "fullBleed"
showFairs={true}
showJobs={false}
fairs={[
{ name: 'Intersolar Munich', date: '2024 / 2025', type: 'Fair', location: 'Munich', url: 'https://www.intersolar.de/' },
{ name: 'Wind Energy Days Linstow', date: '2024 / 2025', type: 'Specialist Congress', location: 'Linstow', url: 'https://www.windenergietage.de/' },
{ name: 'Cable Workshop Wiesbaden', date: '2024 / 2025', type: 'Trade Fair', location: 'Wiesbaden' }
{ name: 'Intersolar Munich', date: 'June 2325, 2026', type: 'Fair', location: 'Munich', url: 'https://www.intersolar.de/' },
{ name: 'Wind Energy Days Linstow', date: 'November 1012, 2026', type: 'Specialist Congress', location: 'Linstow', url: 'https://www.windenergietage.de/' },
{ name: 'Werkstatt Kabel 2026', date: 'November 2425, 2026', type: 'Symposium', location: 'Wiesbaden' }
]}
/>
</div>

View File

@@ -17,18 +17,18 @@ layout: "fullBleed"
<div className="container px-4 max-w-7xl mx-auto py-16">
<blockquote>
We offer our clients everything from a single source - from the rough planning of your project idea and cable civil engineering to the construction of your renewable energy project.
We offer our clients unified, end-to-end project orchestration—from raw feasibility mapping to technical execution and grid connection for utility-scale renewable energy assets.
</blockquote>
## Foundation for Project Success
## The Foundation of Project Viability
Solid planning is the crucial foundation for every successful infrastructure project. Projects often fail or are massively delayed because the complexity of civil engineering planning and approval procedures was underestimated. Through our combined competence, you avoid expensive planning errors and frictional losses at the interfaces.
A rigorous engineering layout is the cornerstone of every successful infrastructure initiative. Many large-scale utility projects encounter critical delays or structural failures simply because the nuances of subterranean logistics and regulatory approvals were underestimated. By bridging the gap between design and physical field operations, we proactively mitigate risk, eliminating friction at critical operational interfaces.
Both for the highly topical broadband expansion and for the demanding grid connection of solar or wind projects, absolutely precise and high-quality cable route planning is required. To do this, we inspect the route on site, analyze all potential construction conflicts at an early stage and ensure that all necessary applications for the laying are submitted completely and on time to the authorities.
Whether executing fast-paced broadband fiber rollouts or designing complex grid connections for gigawatt-scale wind and solar farms, precision is mandatory. Our engineering teams perform comprehensive on-site route audits, map potential utility conflicts early, and guarantee all localized regulatory, environmental, and municipal permits are prepared and filed seamlessly.
## Strong Engineering Competence
## Elite Engineering & Technical Advisory
In close cooperation with our specialized partner engineering firm, **E-TIB Ingenieurgesellschaft mbH**, we accompany you through all service phases. Whether structural planning for route optimization, complex approval planning or detailed execution planning - we steer your project from the first feasibility study to successful construction supervision and acceptance.
In strategic partnership with **E-TIB Ingenieurgesellschaft mbH**, we guide your development through every single phase of the project lifecycle. From initial corridor scouting and route optimization to obtaining formal municipal approvals and producing final, field-ready execution plans—we provide the strategic oversight and specialized engineering supervision needed to ensure a flawless handover.
</div>
<ServiceDetailGrid

View File

@@ -1,22 +1,59 @@
---
title: "Terms and Conditions"
date: "2024-03-20"
date: "2026-05-28"
excerpt: "The General Terms and Conditions of E-TIB GmbH for our services and deliveries."
---
# Terms and Conditions (T&C)
## 1. Scope
These General Terms and Conditions apply to all contracts, deliveries, and other services provided by E-TIB GmbH to its customers.
## 1. Scope and Conclusion of Contract
1. These General Terms and Conditions (T&C) apply exclusively to all contracts, deliveries, and other services (including planning, engineering, cable civil engineering, horizontal directional drilling, and fiber optic installation services) provided by E-TIB GmbH (hereinafter referred to as "E-TIB") to its contractual partners (hereinafter referred to as the "Customer").
2. These T&C apply exclusively in B2B transactions. They are directed solely at entrepreneurs within the meaning of Section 14 of the German Civil Code (BGB), legal entities under public law, or special funds under public law.
3. Any conflicting, deviating, or supplementary terms of the Customer shall not become part of the contract unless E-TIB expressly agrees to their validity in writing.
4. A contract is only formed upon written order confirmation by E-TIB or by the actual commencement of execution of the services by E-TIB.
## 2. Conclusion of Contract
A contract is only formed upon our written order confirmation or by the execution of the order.
## 2. Scope of Services and Customer Cooperation
1. The exact scope of the services to be provided by E-TIB results from the respective offer or the written order confirmation and the specifications agreed upon therein.
2. The Customer is obligated to support E-TIB fully and at its own expense in the provision of the services. This includes in particular:
- Providing all documents, plans (in particular utility and pipeline plans), permits, and official approvals required for planning and execution in good time before the start of construction.
- Providing accurate and binding instruction on local conditions as well as precise marking and surveying of all underground cables, pipes, ducts, and other obstacles running in the work area.
- Ensuring free and unhindered access to the construction site and providing any necessary storage and setup areas.
- Providing construction water and electricity in the required quantity and quality at the workplaces at the Customer's expense.
3. If the Customer fails to cooperate or provides incorrect information (especially regarding the location of underground utilities), it shall be liable to E-TIB for all resulting delays, additional costs, and damages. In this case, E-TIB is released from liability for damage to utilities that were not drawn or drawn incorrectly.
## 3. Prices and Payment Terms
All prices are in Euro plus the statutory value-added tax. Payments are to be made within 14 days of the invoice date without any deduction.
## 3. Execution Deadlines, Obstruction, and Construction Delays
1. Agreed execution deadlines and dates are only binding if they have been expressly confirmed as fixed in writing by E-TIB.
2. Compliance with deadlines is subject to the timely fulfillment of all cooperation duties by the Customer and the receipt of agreed down payments.
3. Delays in performance due to force majeure, strikes, lockouts, official orders, or unpredictable difficulties for which E-TIB is not responsible (e.g., extreme weather conditions, unforeseen ground classes such as solid rock, incomplete or incorrect utility plans from the network operator) shall extend the execution periods by the duration of the obstruction plus a reasonable startup time.
4. If unforeseen geological obstacles or deviations in the actual soil class from the contractually assumed soil classes result in a significant additional effort (e.g., in horizontal directional drilling), E-TIB is entitled to demand a reasonable adjustment of the remuneration as well as the execution deadlines.
## 4. Liability
We are liable for damages only in cases of intent or gross negligence. Liability for slight negligence is excluded, provided that no essential contractual obligations have been violated.
## 4. Acceptance, Transfer of Risk, and Warranty
1. Acceptance of the services shall take place immediately after completion. At the request of E-TIB, self-contained parts of the service (e.g., completed cable trenches or individual drilling sections) must be accepted separately (partial acceptance).
2. If the Customer does not accept the service within 12 working days after written notification of completion, or if the Customer puts the service into use (e.g., by operating the laid cables), acceptance shall be deemed to have taken place after this period has expired.
3. The risk of accidental loss and accidental deterioration shall pass to the Customer upon acceptance or partial acceptance.
4. E-TIB provides a warranty in accordance with statutory regulations, unless otherwise agreed below. The limitation period for claims for defects in construction works and related planning and monitoring services is 5 years from acceptance. For other work services, it is 1 year from acceptance.
5. Obvious defects must be reported to E-TIB in writing immediately, but no later than 5 working days after acceptance. Later claims for defects are excluded.
## 5. Jurisdiction
The place of jurisdiction for all disputes arising from the contractual relationship is Cottbus, provided the customer is a merchant.
## 5. Prices, Progress Payments, and Payment Terms
1. All prices are in Euro net plus the applicable statutory value-added tax.
2. E-TIB is entitled to invoice reasonable progress payments in accordance with the progress of construction (e.g., per completed route meter, drilling meter, or completed planning phase). These are due for payment without deduction within 7 days from the invoice date.
3. Final invoices are due for payment without deduction within 14 days after invoicing and acceptance.
4. In the event of default of payment by the Customer, E-TIB is entitled to demand default interest in the statutory amount (currently 9 percentage points above the respective base interest rate). In addition, E-TIB reserves the right to suspend further work until full payment of the outstanding demands (right to refuse performance).
## 6. Retention of Title
1. E-TIB retains ownership of all delivered and installed materials, cables, pipes, and other components (reserved goods) until full satisfaction of all claims under the respective contract.
2. The Customer is obligated to treat the reserved goods with care and to inform E-TIB immediately in writing of any third-party access (e.g., pledges).
3. In the event of combining or mixing the reserved goods with other items, E-TIB shall acquire co-ownership of the new item in the proportion of the invoice value of the reserved goods to the value of the other combined items at the time of combination.
## 7. Liability and Limitations of Liability
1. E-TIB is liable without limitation in cases of intent, gross negligence, as well as for injury to life, body, or health.
2. In the event of a slightly negligent breach of material contractual obligations (cardinal obligations), E-TIB's liability shall be limited to the contract-typical, foreseeable damage. Material contractual obligations are those whose fulfillment makes the proper execution of the contract possible in the first place and on whose compliance the Customer may regularly rely.
3. Liability for slight negligence in the breach of non-essential contractual obligations is excluded.
4. E-TIB is not liable for damages resulting from incomplete, outdated, or inaccurate utility plans provided by the Customer or local network operators, unless E-TIB should have recognized the incompleteness in a grossly negligent or intentional manner.
5. The above limitations of liability also apply in favor of E-TIB's employees, representatives, and vicarious agents.
## 8. Place of Jurisdiction and Final Provisions
1. The law of the Federal Republic of Germany shall apply, to the exclusion of the UN Convention on Contracts for the International Sale of Goods (CISG).
2. The place of performance for all deliveries and services, as well as the place of payment, is E-TIB's registered office in Guben.
3. The exclusive place of jurisdiction for all disputes arising from or in connection with this contract is Cottbus, provided that the Customer is a merchant, a legal entity under public law, or a special fund under public law. E-TIB is, however, also entitled to sue the Customer at its general place of jurisdiction.
4. Should any provision of these T&C be or become invalid or unenforceable, this shall not affect the validity of the remaining provisions. The invalid provision shall be replaced by a valid provision that comes closest to the economic purpose of the invalid provision.

View File

@@ -17,20 +17,20 @@ layout: "fullBleed"
<div className="container px-4 max-w-7xl mx-auto py-16">
<blockquote>
We work with highly precise GPS equipment for the seamless documentation of our clients' projects. For this purpose, we independently develop app integrations to automate surveying.
Leveraging ultra-precise, state-of-the-art GNSS/GPS technology and proprietary app integrations, we automate the surveying process to deliver seamless, real-time documentation.
</blockquote>
## Highest Precision Protects Against Surprises
## Centimeter Precision Prevents Costly Operations
In today's times, legal documentation requirements and strict safety standards are growing rapidly. Many conventional civil engineering companies are hardly able to cleanly meet these highly complex requirements - especially for funded broadband expansion. Missing or incorrect documentation inevitably leads to massive problems during construction acceptance and project financing.
Regulatory documentation mandates and safety benchmarks are expanding rapidly. Traditional civil engineering contractors frequently struggle to meet these highly complex data requirementsespecially under strict public funding frameworks. Neglecting or incorrectly mapping underground routes inevitably triggers major roadblocks during project handovers, audit reviews, and long-term asset management.
We identified this bottleneck early on and proactively specialized in the highly precise surveying and digital documentation of cable routes.
Recognizing this critical bottleneck early, we pro-actively integrated advanced geodetic surveying and digital mapping directly into our core operations.
## Digital Recording at the State of the Art
## Cutting-Edge Digital Twin & GIS Records
With state-of-the-art GPS technology and self-developed digital app integrations, we ensure highly automated, seamless and absolutely legally compliant recording of all laid lines and systems.
Using advanced GNSS/GPS devices and in-house developed digital workflows, we capture the precise physical reality of every conduit and utility in real-time. This automated process generates a highly accurate digital twin of your underground infrastructure.
In addition to classic GPS staking and surveying, we create complete geodatabases for our clients for transparent project accounting and offer seamless 360° photo and video recording of the construction field. In this way, you keep full track of your underground infrastructure at all times.
Beyond classic surveying, staking, and as-built mapping, we construct fully integrated geodatabases for transparent project accounting. We also provide complete, immersive 360° photo and video documentation of the construction area before and after ground-breaking. This ensures you maintain full transparency, legal compliance, and total control over your physical assets.
</div>
<ServiceDetailGrid

View File

@@ -59,6 +59,31 @@ layout: "fullBleed"
pdfUrl: '/assets/certificates/bescheinigung.pdf',
type: 'tax',
date: '13.02.2025',
},
{
title: 'IHK Clearance Certificate',
description: 'Chamber of Industry and Commerce',
type: 'general',
},
{
title: 'HWK Clearance Certificate',
description: 'Chamber of Crafts',
type: 'general',
},
{
title: 'Commercial Register Extract',
description: 'District Court Cottbus',
type: 'general',
},
{
title: 'Trade Registration',
description: 'City of Guben',
type: 'general',
},
{
title: 'Central Trade Register',
description: 'Information from the Register',
type: 'general',
}
]}
/>

View File

@@ -110,6 +110,9 @@ services:
networks:
default:
name: ${PROJECT_NAME:-e-tib}-internal
ipam:
config:
- subnet: ${INTERNAL_SUBNET:-10.199.9.0/24}
infra:
external: true

View File

@@ -9,7 +9,12 @@
"ueber-uns": "ueber-uns",
"agb": "agb",
"start": "start",
"messen": "messen"
"messen": "messen",
"kabeltiefbau": "kabeltiefbau",
"glasfaser": "glasfaser",
"bohrtechnik": "bohrtechnik",
"planung": "planung",
"vermessung": "vermessung"
},
"products": {},
"categories": {}

View File

@@ -9,7 +9,12 @@
"about-us": "ueber-uns",
"terms": "agb",
"start": "start",
"trade-fairs": "messen"
"trade-fairs": "messen",
"cable-civil-engineering": "kabeltiefbau",
"fiber-optics": "glasfaser",
"drilling-technology": "bohrtechnik",
"planning": "planung",
"surveying": "vermessung"
},
"products": {},
"categories": {}

119
scripts/compare-mdx.js Normal file
View File

@@ -0,0 +1,119 @@
import fs from 'fs';
import path from 'path';
// Mapping of German slugs to English slugs (based on messages/en.json)
const slugMapping = {
'agb.mdx': 'terms.mdx',
'bohrtechnik.mdx': 'bohrtechnik.mdx', // Mapped via Slugs.pages
'datenschutz.mdx': 'privacy-policy.mdx',
'glasfaser.mdx': 'glasfaser.mdx', // Mapped via Slugs.pages
'home.mdx': 'home.mdx',
'impressum.mdx': 'imprint.mdx',
'kabeltiefbau.mdx': 'kabeltiefbau.mdx', // Mapped via Slugs.pages
'karriere.mdx': 'karriere.mdx',
'kompetenzen.mdx': 'kompetenzen.mdx',
'messen.mdx': 'messen.mdx',
'planung.mdx': 'planung.mdx', // Mapped via Slugs.pages
'team.mdx': 'team.mdx',
'ueber-uns.mdx': 'ueber-uns.mdx',
'vermessung.mdx': 'vermessung.mdx', // Mapped via Slugs.pages
'zertifikate.mdx': 'zertifikate.mdx'
};
const DE_DIR = './content/de';
const EN_DIR = './content/en';
function extractComponents(content) {
// Regex to match MDX/JSX components like <HeroSection ... /> or <HeroSection>...</HeroSection>
const componentRegex = /<([A-Z][a-zA-Z0-9]+)/g;
const components = [];
let match;
while ((match = componentRegex.exec(content)) !== null) {
components.push(match[1]);
}
return components;
}
function verifyParity() {
console.log('🔍 Starting MDX Component Parity Verification...');
let hasError = false;
for (const [deFile, enFile] of Object.entries(slugMapping)) {
const dePath = path.join(DE_DIR, deFile);
const enPath = path.join(EN_DIR, enFile);
if (!fs.existsSync(dePath)) {
console.error(`❌ German file missing: ${dePath}`);
hasError = true;
continue;
}
if (!fs.existsSync(enPath)) {
console.error(`❌ English file missing: ${enPath}`);
hasError = true;
continue;
}
const deContent = fs.readFileSync(dePath, 'utf-8');
const enContent = fs.readFileSync(enPath, 'utf-8');
const deComponents = extractComponents(deContent);
const enComponents = extractComponents(enContent);
// Assert length and names match in sequence
const deComponentsStr = deComponents.join(', ');
const enComponentsStr = enComponents.join(', ');
if (deComponentsStr !== enComponentsStr) {
console.error(`❌ Component mismatch in ${deFile}${enFile}`);
console.error(` DE Components: [${deComponentsStr}]`);
console.error(` EN Components: [${enComponentsStr}]`);
hasError = true;
} else {
console.log(`${deFile}${enFile} matched perfectly [${deComponentsStr}]`);
}
}
// Also verify subfolders like referenzen
const deRefsDir = path.join(DE_DIR, 'referenzen');
const enRefsDir = path.join(EN_DIR, 'referenzen');
if (fs.existsSync(deRefsDir) && fs.existsSync(enRefsDir)) {
const deRefFiles = fs.readdirSync(deRefsDir).filter(f => f.endsWith('.mdx'));
for (const refFile of deRefFiles) {
const dePath = path.join(deRefsDir, refFile);
const enPath = path.join(enRefsDir, refFile);
if (fs.existsSync(enPath)) {
const deContent = fs.readFileSync(dePath, 'utf-8');
const enContent = fs.readFileSync(enPath, 'utf-8');
const deComponents = extractComponents(deContent);
const enComponents = extractComponents(enContent);
const deComponentsStr = deComponents.join(', ');
const enComponentsStr = enComponents.join(', ');
if (deComponentsStr !== enComponentsStr) {
console.error(`❌ Component mismatch in referenzen/${refFile}`);
console.error(` DE Components: [${deComponentsStr}]`);
console.error(` EN Components: [${enComponentsStr}]`);
hasError = true;
} else {
console.log(`✅ referenzen/${refFile} matched perfectly [${deComponentsStr}]`);
}
} else {
console.error(`❌ English reference file missing: ${enPath}`);
hasError = true;
}
}
}
if (hasError) {
console.error('\n❌ Parity verification failed.');
process.exit(1);
} else {
console.log('\n🎉 ALL MDX pages are 100% structurally identical in both German and English!');
}
}
verifyParity();

38
tests/legal-pages.test.ts Normal file
View File

@@ -0,0 +1,38 @@
import { describe, it, expect } from 'vitest';
import fs from 'fs';
import path from 'path';
describe('Legal Pages Content Validation', () => {
const deAgbPath = path.join(process.cwd(), 'content', 'de', 'agb.mdx');
const enTermsPath = path.join(process.cwd(), 'content', 'en', 'terms.mdx');
it('should contain highly professional B2B sections in German AGB', () => {
const content = fs.readFileSync(deAgbPath, 'utf8');
expect(content).toContain('title: "Allgemeine Geschäftsbedingungen"');
expect(content).toContain('## 1. Geltungsbereich und Vertragsabschluss');
expect(content).toContain('## 2. Leistungsumfang und Mitwirkungspflichten');
expect(content).toContain('## 3. Ausführungsfristen, Behinderung und Bauverzögerungen');
expect(content).toContain('## 4. Abnahme, Gefahrübergang und Gewährleistung');
expect(content).toContain('## 5. Preise, Abschlagszahlungen und Zahlungsbedingungen');
expect(content).toContain('## 6. Eigentumsvorbehalt');
expect(content).toContain('## 7. Haftung und Haftungsbeschränkungen');
expect(content).toContain('## 8. Gerichtsstand und Schlussbestimmungen');
expect(content).toContain('Cottbus');
});
it('should contain professional corresponding B2B sections in English Terms', () => {
const content = fs.readFileSync(enTermsPath, 'utf8');
expect(content).toContain('title: "Terms and Conditions"');
expect(content).toContain('## 1. Scope and Conclusion of Contract');
expect(content).toContain('## 2. Scope of Services and Customer Cooperation');
expect(content).toContain('## 3. Execution Deadlines, Obstruction, and Construction Delays');
expect(content).toContain('## 4. Acceptance, Transfer of Risk, and Warranty');
expect(content).toContain('## 5. Prices, Progress Payments, and Payment Terms');
expect(content).toContain('## 6. Retention of Title');
expect(content).toContain('## 7. Liability and Limitations of Liability');
expect(content).toContain('## 8. Place of Jurisdiction and Final Provisions');
expect(content).toContain('Cottbus');
});
});

View File

@@ -0,0 +1,55 @@
import { describe, it, expect } from 'vitest';
import fs from 'fs';
import path from 'path';
describe('Messen Content and Translations', () => {
const deMessenPath = path.join(process.cwd(), 'content', 'de', 'messen.mdx');
const enMessenPath = path.join(process.cwd(), 'content', 'en', 'messen.mdx');
it('should have updated German trade fair dates and names for 2026', () => {
const content = fs.readFileSync(deMessenPath, 'utf8');
// 1. Intersolar München
expect(content).toContain("name: 'Intersolar München'");
expect(content).toContain("date: '23. - 25. Juni 2026'");
expect(content).toContain("type: 'Messe'");
expect(content).toContain("location: 'München'");
// 2. Windenergietage Linstow
expect(content).toContain("name: 'Windenergietage Linstow'");
expect(content).toContain("date: '10. - 12. November 2026'");
expect(content).toContain("type: 'Fachkongress'");
expect(content).toContain("location: 'Linstow'");
// 3. Werkstatt Kabel 2026 (No "Kabel-Workshop")
expect(content).not.toContain("Kabel-Workshop");
expect(content).toContain("name: 'Werkstatt Kabel 2026'");
expect(content).toContain("date: '24. - 25. November 2026'");
expect(content).toContain("type: 'Fachtagung'");
expect(content).toContain("location: 'Wiesbaden'");
});
it('should have updated English trade fair dates and names for 2026', () => {
const content = fs.readFileSync(enMessenPath, 'utf8');
// 1. Intersolar Munich
expect(content).toContain("name: 'Intersolar Munich'");
expect(content).toContain("date: 'June 2325, 2026'");
expect(content).toContain("type: 'Fair'");
expect(content).toContain("location: 'Munich'");
// 2. Wind Energy Days Linstow
expect(content).toContain("name: 'Wind Energy Days Linstow'");
expect(content).toContain("date: 'November 1012, 2026'");
expect(content).toContain("type: 'Specialist Congress'");
expect(content).toContain("location: 'Linstow'");
// 3. Werkstatt Kabel 2026 (No "Cable Workshop" or "Kabel Workshop")
expect(content).not.toContain("Cable Workshop");
expect(content).not.toContain("Kabel Workshop");
expect(content).toContain("name: 'Werkstatt Kabel 2026'");
expect(content).toContain("date: 'November 2425, 2026'");
expect(content).toContain("type: 'Symposium'");
expect(content).toContain("location: 'Wiesbaden'");
});
});