Compare commits

...

10 Commits

Author SHA1 Message Date
a983696153 chore(ci): also purge hidden files in /opt/hostedtoolcache to reclaim disk space
All checks were successful
Build & Deploy / 🔍 Prepare (push) Successful in 18s
Build & Deploy / 🧪 QA (push) Successful in 1m4s
Build & Deploy / 🏗️ Build (push) Successful in 2m54s
Build & Deploy / 🚀 Deploy (push) Successful in 25s
Build & Deploy / 🧪 Post-Deploy Verification (push) Successful in 46s
Build & Deploy / 🔔 Notify (push) Successful in 4s
2026-05-18 14:46:27 +02:00
6908964df5 chore(ci): purge /opt/hostedtoolcache in maintenance step to free disk space
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-18 14:45:46 +02:00
159587f545 chore(ci): make docker cleanup robust against hangs and log system disk usage
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 18s
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-18 14:45:05 +02:00
c02b49644e chore(ci): log disk usage and add aggressive docker system volume prune
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-18 14:42:42 +02:00
313fa14c56 chore(ci): use aggressive docker system prune to resolve runner disk space issues
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 17s
Build & Deploy / 🧪 QA (push) Successful in 59s
Build & Deploy / 🏗️ Build (push) Failing after 1m13s
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-18 14:39:36 +02:00
052be7d1c9 fix(referenzen): add cleanLocation helper to resolve compilation and linting errors
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 18s
Build & Deploy / 🧪 QA (push) Successful in 59s
Build & Deploy / 🏗️ Build (push) Failing after 1m15s
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-18 14:36:30 +02:00
aef10f706c fix(pipeline): pass dynamic NPM_DOMAIN to docker build to prevent 404s, fix reference badge location cleaning, and enable glowing border on map
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 18s
Build & Deploy / 🧪 QA (push) Failing after 59s
Build & Deploy / 🏗️ Build (push) Has been skipped
Build & Deploy / 🚀 Deploy (push) Has been skipped
Build & Deploy / 🧪 Post-Deploy Verification (push) Has been skipped
Build & Deploy / 🔔 Notify (push) Successful in 2s
2026-05-18 11:58:35 +02:00
35d9650626 fix(types): fix typescript errors breaking the pipeline
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 18s
Build & Deploy / 🧪 QA (push) Successful in 59s
Build & Deploy / 🏗️ Build (push) Failing after 1m19s
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-17 15:41:49 +02:00
140cb012df chore(content): align career benefits exactly with legacy reference promises
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 19s
Build & Deploy / 🧪 QA (push) Failing after 1m0s
Build & Deploy / 🏗️ Build (push) Has been skipped
Build & Deploy / 🚀 Deploy (push) Has been skipped
Build & Deploy / 🧪 Post-Deploy Verification (push) Has been skipped
Build & Deploy / 🔔 Notify (push) Successful in 2s
2026-05-15 22:52:45 +02:00
e1c9720eeb refactor: remove Karriere link from header navigation
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 21s
Build & Deploy / 🧪 QA (push) Failing after 1m16s
Build & Deploy / 🏗️ Build (push) Has been skipped
Build & Deploy / 🚀 Deploy (push) Has been skipped
Build & Deploy / 🧪 Post-Deploy Verification (push) Has been skipped
Build & Deploy / 🔔 Notify (push) Successful in 1s
2026-05-15 22:49:32 +02:00
24 changed files with 215 additions and 26 deletions

View File

@@ -43,9 +43,20 @@ jobs:
- name: 🧹 Maintenance (High Density Cleanup)
shell: bash
run: |
echo "=== System Disk Usage ==="
df -h || true
echo "=== Tool Cache Usage ==="
du -sh /opt/hostedtoolcache/* || true
du -sh /opt/hostedtoolcache/.[!.]* || true
echo "Purging old tool caches..."
rm -rf /opt/hostedtoolcache/* || true
rm -rf /opt/hostedtoolcache/.[!.]* || true
echo "Purging old build layers and dangling images..."
docker image prune -f
docker builder prune -f --filter "until=24h"
docker builder prune -a -f || true
docker image prune -a -f || true
docker system prune -f || true
echo "=== System Disk Usage After Prune ==="
df -h || true
- name: Checkout repository
uses: actions/checkout@v4
@@ -207,6 +218,7 @@ jobs:
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 }}"

View File

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

View File

@@ -0,0 +1 @@
{"hash":"85340b254e0f10f1","duration":6595,"sha":"35d9650626b56a727e9c1981308145cb7b2f28aa","dirty_hash":"9cc3e16c40a10f42f7a963333e800e1384f047b1f387b18b5f37769c34f36609"}

Binary file not shown.

View File

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

View File

@@ -0,0 +1 @@
{"hash":"32905076da5f4894","duration":4492,"sha":"35d9650626b56a727e9c1981308145cb7b2f28aa","dirty_hash":"58f8ebc92a0452cbb0a09c5ebe800385fcc42ff82fee098bb7d6c8828bc526f0"}

BIN
.turbo/cache/32905076da5f4894.tar.zst vendored Normal file

Binary file not shown.

View File

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

View File

@@ -0,0 +1 @@
{"hash":"7e2629942c881f80","duration":1855,"sha":"35d9650626b56a727e9c1981308145cb7b2f28aa","dirty_hash":"58f8ebc92a0452cbb0a09c5ebe800385fcc42ff82fee098bb7d6c8828bc526f0"}

BIN
.turbo/cache/7e2629942c881f80.tar.zst vendored Normal file

Binary file not shown.

View File

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

View File

@@ -0,0 +1 @@
{"hash":"85340b254e0f10f1","duration":5252,"sha":"35d9650626b56a727e9c1981308145cb7b2f28aa","dirty_hash":"58f8ebc92a0452cbb0a09c5ebe800385fcc42ff82fee098bb7d6c8828bc526f0"}

BIN
.turbo/cache/85340b254e0f10f1.tar.zst vendored Normal file

Binary file not shown.

119
.turbo/turbo-lint.log Normal file
View File

@@ -0,0 +1,119 @@

> 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.

31
.turbo/turbo-test.log Normal file
View File

@@ -0,0 +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

View File

@@ -0,0 +1,5 @@

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

View File

@@ -20,13 +20,15 @@ ENV CI=true
COPY pnpm-lock.yaml package.json .npmrc* ./
COPY patches* ./patches/
ARG NPM_DOMAIN=git.infra.mintel.me
# Configure private registry and install dependencies
RUN --mount=type=cache,id=pnpm,target=/pnpm/store \
--mount=type=secret,id=NPM_TOKEN \
if [ -f /run/secrets/NPM_TOKEN ]; then \
export NPM_TOKEN=$(cat /run/secrets/NPM_TOKEN); \
echo "@mintel:registry=https://git.infra.mintel.me/api/packages/mmintel/npm" > .npmrc; \
echo "//git.infra.mintel.me/api/packages/mmintel/npm/:_authToken=${NPM_TOKEN}" >> .npmrc; \
echo "@mintel:registry=https://${NPM_DOMAIN}/api/packages/mmintel/npm" > .npmrc; \
echo "//${NPM_DOMAIN}/api/packages/mmintel/npm/:_authToken=${NPM_TOKEN}" >> .npmrc; \
fi && \
pnpm install --no-frozen-lockfile && \
rm -f .npmrc

View File

@@ -169,7 +169,7 @@ export default async function Page(props: { params: Promise<{ locale: string; sl
id: r.slug,
slug: r.slug,
title: r.frontmatter.title,
category: r.frontmatter.category || 'Projekt',
category: Array.isArray(r.frontmatter.category) ? r.frontmatter.category[0] : (r.frontmatter.category || 'Projekt'),
image: r.frontmatter.featuredImage
}))} />,
};

View File

@@ -100,10 +100,6 @@ export default async function Layout(props: {
label: safeLocale === 'de' ? 'Referenzen' : 'References',
url: `/${safeLocale}/referenzen`
},
{
label: safeLocale === 'de' ? 'Karriere' : 'Careers',
url: `/${safeLocale}/${await mapFileSlugToTranslated('karriere', safeLocale)}`
},
{
label: safeLocale === 'de' ? 'Messen' : 'Events',
url: `/${safeLocale}/${await mapFileSlugToTranslated('messen', safeLocale)}`

View File

@@ -34,6 +34,17 @@ export async function generateMetadata({ params }: PageProps): Promise<Metadata>
};
}
function cleanLocation(location?: string): string {
if (!location) return '';
// Remove 5 digit postal codes
let cleaned = location.replace(/\b\d{5}\b/g, '');
// Clean up multiple spaces, slashes and commas
cleaned = cleaned.replace(/\s*,\s*/g, ', ').replace(/\s*\/\s*/g, ' / ').trim();
// Remove leading/trailing slash/comma residues
cleaned = cleaned.replace(/^[,/\s]+|[,/\s]+$/g, '').trim();
return cleaned || location;
}
export default async function ReferenzenOverview(props: { params: Promise<{ locale: string }> }) {
const { locale } = await props.params;
setRequestLocale(locale);
@@ -60,10 +71,9 @@ export default async function ReferenzenOverview(props: { params: Promise<{ loca
});
return (
<div className="flex flex-col min-h-screen bg-neutral-50 pb-16 md:pb-24">
<div className="flex flex-col min-h-screen bg-neutral-50 pb-16 md:pb-24 pt-24 md:pt-32">
{/* Map Hero Section */}
<InteractiveGermanyMap
isHero={true}
badge="Unsere Referenzen"
title={<>Erfolgreich umgesetzte<br/>Projekte.</>}
description="Vom Breitbandausbau bis zur komplexen 110kV-Trasse: Ein Auszug unserer bundesweiten Projekte, bei denen wir Infrastruktur für die Zukunft geschaffen haben. Entdecken Sie unsere Standorte."
@@ -104,7 +114,7 @@ export default async function ReferenzenOverview(props: { params: Promise<{ loca
<div className="absolute top-4 left-4 z-10">
<span className="bg-white/95 backdrop-blur-md text-neutral-dark px-3 py-1.5 rounded-sm text-[10px] font-bold uppercase tracking-widest flex items-center gap-1.5 shadow-sm border border-neutral-200">
<MapPin className="w-3 h-3 text-primary" />
{ref.frontmatter.location}
{cleanLocation(ref.frontmatter.location)}
</span>
</div>
</div>

View File

@@ -93,7 +93,7 @@ export function CertificatesBlock({ badge, title, description, certificates = de
const itemVariants = {
hidden: { opacity: 0, y: 20 },
show: { opacity: 1, y: 0, transition: { duration: 0.5, ease: 'easeOut' } },
show: { opacity: 1, y: 0, transition: { duration: 0.5, ease: 'easeOut' as const } },
};
if (!isMounted) {

View File

@@ -24,73 +24,73 @@ layout: "fullBleed"
{
id: "region",
title: "Spannende Bauvorhaben",
description: "Einsatz bei interessanten regionalen und überregionalen Projekten.",
description: "Einsatz bei regionalen und überregionalen Bauvorhaben.",
icon: "region"
},
{
id: "contract",
title: "Unbefristeter Vertrag",
description: "Sicherer Arbeitsplatz durch einen unbefristeten Arbeitsvertrag in Vollzeit.",
description: "Sicherer, unbefristeter Arbeitsvertrag in Vollzeit.",
icon: "contract"
},
{
id: "money",
title: "Faire Vergütung",
description: "Leistungsbezogene, überdurchschnittliche und faire Bezahlung.",
description: "Leistungsbezogene und faire Vergütung für Ihre Arbeit.",
icon: "money"
},
{
id: "allowance",
title: "Tägliche Auslöse",
description: "Wir zahlen eine steuerfreie Auslöse von bis zu 30,00 EUR pro Arbeitstag.",
description: "Auslöse von bis zu 30,00 EUR pro Arbeitstag.",
icon: "allowance"
},
{
id: "vacation",
title: "31 Tage Urlaub",
description: "31 Tage Jahresurlaub sowie zusätzliches Urlaubsgeld zur Erholung.",
description: "31 Tage Jahresurlaub sowie zusätzliches Urlaubsgeld.",
icon: "vacation"
},
{
id: "clothes",
title: "Premium Arbeitskleidung",
description: "Hochwertige Engelbert-Strauss Arbeitskleidung wird komplett gestellt.",
title: "Marken-Arbeitskleidung",
description: "Bereitstellung von hochwertiger Engelbert-Strauss Arbeitskleidung.",
icon: "clothes"
},
{
id: "card",
title: "Zusatzzahlungen",
description: "Monatliche Boni über eine persönliche MasterCard.",
description: "Monatliche Zusatzzahlungen über eine persönliche MasterCard.",
icon: "card"
},
{
id: "retirement",
title: "Altersvorsorge",
description: "Attraktive Zuzahlung im Rahmen der betrieblichen Altersvorsorge.",
description: "Zuzahlung im Rahmen der betrieblichen Altersvorsorge.",
icon: "retirement"
},
{
id: "education",
title: "Weiterbildung",
description: "Individuelle Entwicklungs- und Aufstiegsmöglichkeiten im Unternehmen.",
description: "Individuelle Weiterbildungs- und Entwicklungsmöglichkeiten.",
icon: "education"
},
{
id: "car",
title: "Firmenfahrzeug",
description: "Stellung eines Fahrzeugs zur betrieblichen Nutzung und r Baustellen.",
description: "Stellung eines Fahrzeugs zur betrieblichen Nutzung und Fahrten zur Baustelle.",
icon: "car"
},
{
id: "team",
title: "Intensive Einarbeitung",
description: "Professionelles Onboarding in einem hilfsbereiten und engagierten Team.",
description: "Entsprechende Einarbeitung in einem engagierten Team.",
icon: "team"
},
{
id: "family",
title: "Familiäres Klima",
description: "Starker Zusammenhalt durch regelmäßige betrieblich organisierte Events.",
description: "Familiäres Betriebsklima mit betrieblich organisierten Veranstaltungen.",
icon: "family"
}
]}

View File

@@ -9,6 +9,7 @@ export interface ReferenceFrontmatter {
dateString?: string;
featuredImage?: string | null;
location: string;
category?: string | string[];
}
export interface ReferenceData {

5
test-build-env.js Normal file
View File

@@ -0,0 +1,5 @@
const val = process.env.NEXT_PUBLIC_APP_VERSION;
console.log("val is:", val);
if (val) {
console.log("replace:", val.replace(/^v/, ''));
}