From ce1a73f2bcc7f4ca4547a0ef31d7d77a1d4163be Mon Sep 17 00:00:00 2001 From: Marc Mintel Date: Fri, 16 Jan 2026 21:47:58 +0100 Subject: [PATCH] clone init --- app/[locale]/[slug]/page.tsx | 36 + app/[locale]/blog/[slug]/page.tsx | 48 + app/[locale]/blog/page.tsx | 51 + app/[locale]/contact/page.tsx | 89 + app/[locale]/layout.tsx | 31 + app/[locale]/page.tsx | 182 + app/[locale]/products/[...slug]/page.tsx | 84 + app/[locale]/team/page.tsx | 57 + components/Footer.tsx | 60 + components/Header.tsx | 54 + components/ProductTechnicalData.tsx | 97 + components/ui.tsx | 71 + ...r-mit-der-richtigen-kabelinfrastruktur.mdx | 187 + ...neuerbare-energien-im-jahr-2025-wissen.mdx | 130 + ...raft-und-solar-jetzt-bei-uns-bestellen.mdx | 69 + ...-des-fundamentes-moderner-energienetze.mdx | 90 + ...-sparen-sie-sich-unnoetige-rueckfragen.mdx | 212 + ...giewende-herausforderungen-und-chancen.mdx | 107 + ...ginnt-unter-der-erde-und-zwar-mit-plan.mdx | 186 + ...der-schluessel-zur-richtigen-kabelwahl.mdx | 160 + ...ie-grundlage-der-kabelzuverlaessigkeit.mdx | 356 + ...r-tun-muessen-um-das-ziel-zu-erreichen.mdx | 154 + ...klz-im-adressbuch-der-windenergie-2025.mdx | 54 + ...eue-staerke-im-bereich-financial-sales.mdx | 138 + ...n-windparks-was-lohnt-sich-langfristig.mdx | 220 + ...frastruktur-der-kabel-boom-steht-bevor.mdx | 79 + ...2y-mittelspannungskabel-energieprojekt.mdx | 279 + ...ileiter-mittelspannungskabel-lieferbar.mdx | 129 + ...itung-ein-schritt-zur-energiewende-ist.mdx | 145 + ...eln-nachhaltigkeit-im-windkraftprojekt.mdx | 106 + ...icht-ein-blick-hinter-die-schlagzeilen.mdx | 131 + ...meln-unfallfrei-und-effizient-arbeiten.mdx | 175 + ...e-kabel-fuer-ihr-naechstes-projekt-aus.mdx | 57 + ...energiewirtschaft-in-naher-zukunft-aus.mdx | 186 + ...-geheime-held-der-gruenen-energie-sind.mdx | 120 + ...tremen-belastungen-standhalten-muessen.mdx | 161 + ...es-kabel-aus-finden-sie-es-hier-heraus.mdx | 153 + ...on-nieder-bis-hoechstspannung-erklaert.mdx | 259 + ...t-und-erneuerbare-energien-vorantreibt.mdx | 135 + ...von-klz-unsere-neue-website-ist-online.mdx | 115 + ...s-drei-typische-kabelherausforderungen.mdx | 266 + ...k-unser-solarkabel-zur-intersolar-2025.mdx | 306 + ...ly-with-the-right-cable-infrastructure.mdx | 233 + ...nfrastructure-the-cable-boom-is-coming.mdx | 88 + ...ed-the-key-to-choosing-the-right-cable.mdx | 216 + ...ty-the-foundation-of-cable-reliability.mdx | 339 + ...rations-and-accident-free-environments.mdx | 113 + ...hat-we-need-to-do-to-achieve-this-goal.mdx | 240 + ...s-which-is-worthwhile-in-the-long-term.mdx | 230 + ...ion-for-a-successful-energy-transition.mdx | 318 + ...alities-of-green-energy-transformation.mdx | 64 + ...ruction-three-typical-cable-challenges.mdx | 193 + ...stry-will-look-like-in-the-near-future.mdx | 212 + ...rgy-starts-underground-and-with-a-plan.mdx | 186 + ...ability-and-renewable-energies-forward.mdx | 85 + ...etly-power-the-green-energy-revolution.mdx | 242 + ...-the-right-cable-for-your-next-project.mdx | 39 + ...ugh-a-deeper-dive-behind-the-headlines.mdx | 247 + ...z-in-the-directory-of-wind-energy-2025.mdx | 29 + ...nductor-medium-voltage-cable-available.mdx | 129 + ...-sustainability-in-wind-power-projects.mdx | 176 + ...-k-our-solar-cable-for-intersolar-2025.mdx | 212 + ...the-backbone-of-modern-energy-networks.mdx | 125 + ...wind-power-and-solar-order-from-us-now.mdx | 71 + ...w-to-save-yourself-unnecessary-queries.mdx | 213 + ...-know-about-renewable-energies-in-2025.mdx | 67 + ...-future-of-klz-our-new-website-is-live.mdx | 95 + ...akes-a-first-class-cable-find-out-here.mdx | 110 + ...-low-to-extra-high-voltage-explained-2.mdx | 228 + ...he-ideal-cable-for-your-energy-project.mdx | 271 + ...on-cables-must-withstand-extreme-loads.mdx | 205 + data/excel/high-voltage.xlsx | Bin 0 -> 14939 bytes data/excel/low-voltage-KM.xlsx | Bin 0 -> 72603 bytes data/excel/medium-voltage-KM.xlsx | Bin 0 -> 72226 bytes data/excel/solar-cables.xlsx | Bin 0 -> 48852 bytes data/pages/de/agbs.mdx | 86 + data/pages/de/blog.mdx | 13 + data/pages/de/danke.mdx | 36 + data/pages/de/datenschutz.mdx | 45 + data/pages/de/impressum.mdx | 26 + data/pages/de/kontakt.mdx | 100 + data/pages/de/produkte.mdx | 12 + data/pages/de/start.mdx | 199 + data/pages/de/team.mdx | 118 + data/pages/en/blog.mdx | 13 + data/pages/en/contact.mdx | 100 + data/pages/en/corporate-3-landing-2.mdx | 99 + data/pages/en/legal-notice.mdx | 26 + data/pages/en/privacy-policy.mdx | 34 + data/pages/en/products.mdx | 12 + data/pages/en/team.mdx | 58 + data/pages/en/terms.mdx | 86 + data/pages/en/thanks.mdx | 15 + data/products/de/h1z2z2-k.mdx | 247 + data/products/de/n2x2y-2.mdx | 833 ++ data/products/de/n2xfk2y.mdx | 261 + data/products/de/n2xfkld2y.mdx | 231 + data/products/de/n2xs2y-2.mdx | 966 ++ data/products/de/n2xsf2y-2.mdx | 398 + data/products/de/n2xsfl2y-2.mdx | 925 ++ data/products/de/n2xsfl2y.mdx | 925 ++ data/products/de/n2xsy-2.mdx | 961 ++ data/products/de/n2xy-2.mdx | 885 ++ data/products/de/na2x2y-2.mdx | 807 + data/products/de/na2xfk2y.mdx | 264 + data/products/de/na2xfkld2y.mdx | 243 + data/products/de/na2xs2y-2.mdx | 1110 ++ data/products/de/na2xsf2y-2.mdx | 1092 ++ data/products/de/na2xsfl2y-2.mdx | 1128 ++ data/products/de/na2xsfl2y.mdx | 1128 ++ data/products/de/na2xsy-2.mdx | 1141 ++ data/products/de/na2xy-2.mdx | 885 ++ data/products/de/nay2y-2.mdx | 885 ++ data/products/de/naycwy-2.mdx | 807 + data/products/de/nayy-2.mdx | 1093 ++ data/products/de/ny2y-2.mdx | 508 + data/products/de/nycwy-2.mdx | 716 + data/products/de/nyy-2.mdx | 1366 ++ data/products/en/h1z2z2-k.mdx | 247 + data/products/en/n2x2y.mdx | 833 ++ data/products/en/n2xfk2y.mdx | 265 + data/products/en/n2xfkld2y.mdx | 231 + data/products/en/n2xs2y.mdx | 966 ++ data/products/en/n2xsf2y.mdx | 398 + data/products/en/n2xsfl2y-3.mdx | 925 ++ data/products/en/n2xsfl2y.mdx | 925 ++ data/products/en/n2xsy.mdx | 961 ++ data/products/en/n2xy.mdx | 885 ++ data/products/en/na2x2y.mdx | 807 + data/products/en/na2xfk2y.mdx | 264 + data/products/en/na2xfkld2y.mdx | 243 + data/products/en/na2xs2y.mdx | 1110 ++ data/products/en/na2xsf2y.mdx | 1092 ++ data/products/en/na2xsfl2y-3.mdx | 1128 ++ data/products/en/na2xsfl2y.mdx | 1128 ++ data/products/en/na2xsy.mdx | 1141 ++ data/products/en/na2xy.mdx | 885 ++ data/products/en/nay2y.mdx | 885 ++ data/products/en/naycwy.mdx | 807 + data/products/en/nayy.mdx | 1093 ++ data/products/en/ny2y.mdx | 508 + data/products/en/nycwy.mdx | 716 + data/products/en/nyy.mdx | 1366 ++ i18n/request.ts | 16 + lib/blog.ts | 57 + lib/excel-products.ts | 8 +- lib/mdx.ts | 44 + lib/pages.ts | 34 + messages/de.json | 25 + messages/en.json | 25 + middleware.ts | 14 + next-env.d.ts | 5 + next.config.mjs | 19 + package-lock.json | 12186 ++++++++++++++++ package.json | 8 +- scripts/migrate-blog-to-mdx.ts | 88 + scripts/migrate-pages-to-mdx.ts | 79 + scripts/migrate-products-to-mdx.ts | 144 + scripts/pdf/model/excel-index.ts | 8 +- styles/globals.css | 113 + 160 files changed, 64257 insertions(+), 9 deletions(-) create mode 100644 app/[locale]/[slug]/page.tsx create mode 100644 app/[locale]/blog/[slug]/page.tsx create mode 100644 app/[locale]/blog/page.tsx create mode 100644 app/[locale]/contact/page.tsx create mode 100644 app/[locale]/layout.tsx create mode 100644 app/[locale]/page.tsx create mode 100644 app/[locale]/products/[...slug]/page.tsx create mode 100644 app/[locale]/team/page.tsx create mode 100644 components/Footer.tsx create mode 100644 components/Header.tsx create mode 100644 components/ProductTechnicalData.tsx create mode 100644 components/ui.tsx create mode 100644 data/blog/de/100-erneuerbare-energie-nur-mit-der-richtigen-kabelinfrastruktur.mdx create mode 100644 data/blog/de/das-muessen-sie-ueber-erneuerbare-energien-im-jahr-2025-wissen.mdx create mode 100644 data/blog/de/die-besten-erdkabel-fuer-windkraft-und-solar-jetzt-bei-uns-bestellen.mdx create mode 100644 data/blog/de/die-kunst-der-kabellogistik-der-transport-des-fundamentes-moderner-energienetze.mdx create mode 100644 data/blog/de/die-perfekte-kabelanfrage-so-sparen-sie-sich-unnoetige-rueckfragen.mdx create mode 100644 data/blog/de/erkenntnisse-ueber-die-gruene-energiewende-herausforderungen-und-chancen.mdx create mode 100644 data/blog/de/gruene-energie-beginnt-unter-der-erde-und-zwar-mit-plan.mdx create mode 100644 data/blog/de/kabelabkuerzungen-entschluesselt-der-schluessel-zur-richtigen-kabelwahl.mdx create mode 100644 data/blog/de/kabeltrommelqualitaet-die-grundlage-der-kabelzuverlaessigkeit.mdx create mode 100644 data/blog/de/klimaneutral-bis-2050-was-wir-tun-muessen-um-das-ziel-zu-erreichen.mdx create mode 100644 data/blog/de/klz-im-adressbuch-der-windenergie-2025.mdx create mode 100644 data/blog/de/klz-waechst-weiter-neue-staerke-im-bereich-financial-sales.mdx create mode 100644 data/blog/de/kostenvergleich-kupfer-vs-aluminiumkabel-in-windparks-was-lohnt-sich-langfristig.mdx create mode 100644 data/blog/de/milliarden-paket-fuer-infrastruktur-der-kabel-boom-steht-bevor.mdx create mode 100644 data/blog/de/n2xsf2y-mittelspannungskabel-energieprojekt.mdx create mode 100644 data/blog/de/na2xsf2y-dreileiter-mittelspannungskabel-lieferbar.mdx create mode 100644 data/blog/de/netzausbau-2025-warum-jede-neue-leitung-ein-schritt-zur-energiewende-ist.mdx create mode 100644 data/blog/de/recycling-von-kabeltrommeln-nachhaltigkeit-im-windkraftprojekt.mdx create mode 100644 data/blog/de/reicht-windenergie-wirklich-nicht-ein-blick-hinter-die-schlagzeilen.mdx create mode 100644 data/blog/de/sicherheit-bei-kabeltrommeln-unfallfrei-und-effizient-arbeiten.mdx create mode 100644 data/blog/de/so-waehlen-sie-das-richtige-kabel-fuer-ihr-naechstes-projekt-aus.mdx create mode 100644 data/blog/de/von-smart-bis-nachhaltig-so-sieht-die-energiewirtschaft-in-naher-zukunft-aus.mdx create mode 100644 data/blog/de/warum-die-richtigen-kabel-der-geheime-held-der-gruenen-energie-sind.mdx create mode 100644 data/blog/de/warum-windpark-netzanschlusskabel-extremen-belastungen-standhalten-muessen.mdx create mode 100644 data/blog/de/was-macht-ein-erstklassiges-kabel-aus-finden-sie-es-hier-heraus.mdx create mode 100644 data/blog/de/welche-kabel-fuer-windkraft-unterschiede-von-nieder-bis-hoechstspannung-erklaert.mdx create mode 100644 data/blog/de/wie-die-kabelbranche-nachhaltigkeit-und-erneuerbare-energien-vorantreibt.mdx create mode 100644 data/blog/de/willkommen-in-der-zukunft-von-klz-unsere-neue-website-ist-online.mdx create mode 100644 data/blog/de/windparkbau-im-fokus-drei-typische-kabelherausforderungen.mdx create mode 100644 data/blog/de/zukunft-sichern-mit-h1z2z2-k-unser-solarkabel-zur-intersolar-2025.mdx create mode 100644 data/blog/en/100-renewable-energy-only-with-the-right-cable-infrastructure.mdx create mode 100644 data/blog/en/billion-euro-package-for-infrastructure-the-cable-boom-is-coming.mdx create mode 100644 data/blog/en/cable-abbreviations-decoded-the-key-to-choosing-the-right-cable.mdx create mode 100644 data/blog/en/cable-drum-quality-the-foundation-of-cable-reliability.mdx create mode 100644 data/blog/en/cable-drum-safety-ensuring-smooth-operations-and-accident-free-environments.mdx create mode 100644 data/blog/en/climate-neutral-by-2050-what-we-need-to-do-to-achieve-this-goal.mdx create mode 100644 data/blog/en/cost-comparison-copper-vs-aluminum-cables-in-wind-farms-which-is-worthwhile-in-the-long-term.mdx create mode 100644 data/blog/en/expanding-the-grid-by-2025-building-the-foundation-for-a-successful-energy-transition.mdx create mode 100644 data/blog/en/eye-opening-realities-of-green-energy-transformation.mdx create mode 100644 data/blog/en/focus-on-wind-farm-construction-three-typical-cable-challenges.mdx create mode 100644 data/blog/en/from-smart-to-sustainable-this-is-what-the-energy-industry-will-look-like-in-the-near-future.mdx create mode 100644 data/blog/en/green-energy-starts-underground-and-with-a-plan.mdx create mode 100644 data/blog/en/how-the-cable-industry-is-driving-sustainability-and-renewable-energies-forward.mdx create mode 100644 data/blog/en/how-the-right-cables-quietly-power-the-green-energy-revolution.mdx create mode 100644 data/blog/en/how-to-choose-the-right-cable-for-your-next-project.mdx create mode 100644 data/blog/en/is-wind-energy-really-enough-a-deeper-dive-behind-the-headlines.mdx create mode 100644 data/blog/en/klz-in-the-directory-of-wind-energy-2025.mdx create mode 100644 data/blog/en/na2xsf2y-three-conductor-medium-voltage-cable-available.mdx create mode 100644 data/blog/en/recycling-of-cable-drums-sustainability-in-wind-power-projects.mdx create mode 100644 data/blog/en/securing-the-future-with-h1z2z2-k-our-solar-cable-for-intersolar-2025.mdx create mode 100644 data/blog/en/the-art-of-cable-logistics-moving-the-backbone-of-modern-energy-networks.mdx create mode 100644 data/blog/en/the-best-underground-cables-for-wind-power-and-solar-order-from-us-now.mdx create mode 100644 data/blog/en/the-perfect-cable-inquiry-how-to-save-yourself-unnecessary-queries.mdx create mode 100644 data/blog/en/this-what-you-need-to-know-about-renewable-energies-in-2025.mdx create mode 100644 data/blog/en/welcome-to-the-future-of-klz-our-new-website-is-live.mdx create mode 100644 data/blog/en/what-makes-a-first-class-cable-find-out-here.mdx create mode 100644 data/blog/en/which-cables-for-wind-power-differences-from-low-to-extra-high-voltage-explained-2.mdx create mode 100644 data/blog/en/why-the-n2xsf2y-is-the-ideal-cable-for-your-energy-project.mdx create mode 100644 data/blog/en/why-wind-farm-grid-connection-cables-must-withstand-extreme-loads.mdx create mode 100644 data/excel/high-voltage.xlsx create mode 100644 data/excel/low-voltage-KM.xlsx create mode 100644 data/excel/medium-voltage-KM.xlsx create mode 100644 data/excel/solar-cables.xlsx create mode 100644 data/pages/de/agbs.mdx create mode 100644 data/pages/de/blog.mdx create mode 100644 data/pages/de/danke.mdx create mode 100644 data/pages/de/datenschutz.mdx create mode 100644 data/pages/de/impressum.mdx create mode 100644 data/pages/de/kontakt.mdx create mode 100644 data/pages/de/produkte.mdx create mode 100644 data/pages/de/start.mdx create mode 100644 data/pages/de/team.mdx create mode 100644 data/pages/en/blog.mdx create mode 100644 data/pages/en/contact.mdx create mode 100644 data/pages/en/corporate-3-landing-2.mdx create mode 100644 data/pages/en/legal-notice.mdx create mode 100644 data/pages/en/privacy-policy.mdx create mode 100644 data/pages/en/products.mdx create mode 100644 data/pages/en/team.mdx create mode 100644 data/pages/en/terms.mdx create mode 100644 data/pages/en/thanks.mdx create mode 100644 data/products/de/h1z2z2-k.mdx create mode 100644 data/products/de/n2x2y-2.mdx create mode 100644 data/products/de/n2xfk2y.mdx create mode 100644 data/products/de/n2xfkld2y.mdx create mode 100644 data/products/de/n2xs2y-2.mdx create mode 100644 data/products/de/n2xsf2y-2.mdx create mode 100644 data/products/de/n2xsfl2y-2.mdx create mode 100644 data/products/de/n2xsfl2y.mdx create mode 100644 data/products/de/n2xsy-2.mdx create mode 100644 data/products/de/n2xy-2.mdx create mode 100644 data/products/de/na2x2y-2.mdx create mode 100644 data/products/de/na2xfk2y.mdx create mode 100644 data/products/de/na2xfkld2y.mdx create mode 100644 data/products/de/na2xs2y-2.mdx create mode 100644 data/products/de/na2xsf2y-2.mdx create mode 100644 data/products/de/na2xsfl2y-2.mdx create mode 100644 data/products/de/na2xsfl2y.mdx create mode 100644 data/products/de/na2xsy-2.mdx create mode 100644 data/products/de/na2xy-2.mdx create mode 100644 data/products/de/nay2y-2.mdx create mode 100644 data/products/de/naycwy-2.mdx create mode 100644 data/products/de/nayy-2.mdx create mode 100644 data/products/de/ny2y-2.mdx create mode 100644 data/products/de/nycwy-2.mdx create mode 100644 data/products/de/nyy-2.mdx create mode 100644 data/products/en/h1z2z2-k.mdx create mode 100644 data/products/en/n2x2y.mdx create mode 100644 data/products/en/n2xfk2y.mdx create mode 100644 data/products/en/n2xfkld2y.mdx create mode 100644 data/products/en/n2xs2y.mdx create mode 100644 data/products/en/n2xsf2y.mdx create mode 100644 data/products/en/n2xsfl2y-3.mdx create mode 100644 data/products/en/n2xsfl2y.mdx create mode 100644 data/products/en/n2xsy.mdx create mode 100644 data/products/en/n2xy.mdx create mode 100644 data/products/en/na2x2y.mdx create mode 100644 data/products/en/na2xfk2y.mdx create mode 100644 data/products/en/na2xfkld2y.mdx create mode 100644 data/products/en/na2xs2y.mdx create mode 100644 data/products/en/na2xsf2y.mdx create mode 100644 data/products/en/na2xsfl2y-3.mdx create mode 100644 data/products/en/na2xsfl2y.mdx create mode 100644 data/products/en/na2xsy.mdx create mode 100644 data/products/en/na2xy.mdx create mode 100644 data/products/en/nay2y.mdx create mode 100644 data/products/en/naycwy.mdx create mode 100644 data/products/en/nayy.mdx create mode 100644 data/products/en/ny2y.mdx create mode 100644 data/products/en/nycwy.mdx create mode 100644 data/products/en/nyy.mdx create mode 100644 i18n/request.ts create mode 100644 lib/blog.ts create mode 100644 lib/mdx.ts create mode 100644 lib/pages.ts create mode 100644 messages/de.json create mode 100644 messages/en.json create mode 100644 middleware.ts create mode 100644 next-env.d.ts create mode 100644 next.config.mjs create mode 100644 package-lock.json create mode 100644 scripts/migrate-blog-to-mdx.ts create mode 100644 scripts/migrate-pages-to-mdx.ts create mode 100644 scripts/migrate-products-to-mdx.ts create mode 100644 styles/globals.css diff --git a/app/[locale]/[slug]/page.tsx b/app/[locale]/[slug]/page.tsx new file mode 100644 index 00000000..4932c1ca --- /dev/null +++ b/app/[locale]/[slug]/page.tsx @@ -0,0 +1,36 @@ +import { notFound } from 'next/navigation'; +import { MDXRemote } from 'next-mdx-remote/rsc'; +import { getPostBySlug } from '@/lib/blog'; + +interface PageProps { + params: { + locale: string; + slug: string; + }; +} + +export default async function StandardPage({ params: { locale, slug } }: PageProps) { + const page = await getPostBySlug(slug, locale); // Reusing blog logic for now as structure is same + + // If not found in blog, try pages directory (we need to implement getPageBySlug) + // Actually, let's implement getPageBySlug in lib/mdx.ts or similar + + // For now, let's assume we use a unified loader or separate. + // Let's use a separate loader for pages. + + const { getPageBySlug } = await import('@/lib/pages'); + const pageData = await getPageBySlug(slug, locale); + + if (!pageData) { + notFound(); + } + + return ( +
+

{pageData.frontmatter.title}

+
+ +
+
+ ); +} diff --git a/app/[locale]/blog/[slug]/page.tsx b/app/[locale]/blog/[slug]/page.tsx new file mode 100644 index 00000000..9b11898e --- /dev/null +++ b/app/[locale]/blog/[slug]/page.tsx @@ -0,0 +1,48 @@ +import { notFound } from 'next/navigation'; +import { MDXRemote } from 'next-mdx-remote/rsc'; +import { getPostBySlug } from '@/lib/blog'; + +interface BlogPostProps { + params: { + locale: string; + slug: string; + }; +} + +export default async function BlogPost({ params: { locale, slug } }: BlogPostProps) { + const post = await getPostBySlug(slug, locale); + + if (!post) { + notFound(); + } + + return ( +
+
+
+ {new Date(post.frontmatter.date).toLocaleDateString(locale, { + year: 'numeric', + month: 'long', + day: 'numeric' + })} +
+

+ {post.frontmatter.title} +

+ {post.frontmatter.featuredImage && ( +
+ {post.frontmatter.title} +
+ )} +
+ +
+ +
+
+ ); +} diff --git a/app/[locale]/blog/page.tsx b/app/[locale]/blog/page.tsx new file mode 100644 index 00000000..c30db6b3 --- /dev/null +++ b/app/[locale]/blog/page.tsx @@ -0,0 +1,51 @@ +import Link from 'next/link'; +import { getAllPosts } from '@/lib/blog'; +import { useTranslations } from 'next-intl'; + +interface BlogIndexProps { + params: { + locale: string; + }; +} + +export default async function BlogIndex({ params: { locale } }: BlogIndexProps) { + const posts = await getAllPosts(locale); + + return ( +
+

Blog

+ +
+ {posts.map((post) => ( + +
+ {post.frontmatter.featuredImage && ( +
+ {post.frontmatter.title} +
+ )} +
+
+ {new Date(post.frontmatter.date).toLocaleDateString(locale)} +
+

+ {post.frontmatter.title} +

+

+ {post.frontmatter.excerpt} +

+ + Read more → + +
+
+ + ))} +
+
+ ); +} diff --git a/app/[locale]/contact/page.tsx b/app/[locale]/contact/page.tsx new file mode 100644 index 00000000..55361e45 --- /dev/null +++ b/app/[locale]/contact/page.tsx @@ -0,0 +1,89 @@ +import { useTranslations } from 'next-intl'; +import { Section, Container, Button } from '@/components/ui'; + +export default function ContactPage() { + const t = useTranslations('Navigation'); // Reusing navigation translations for now + + return ( +
+
+ +
+

Get in Touch

+

+ Have questions about our products or need a custom solution? We're here to help. +

+
+ +
+ {/* Contact Info */} +
+
+

Contact Information

+
+

+ + + + + + Raiffeisenstraße 22
+ 73630 Remshalden
+ Germany +
+

+

+ + + + +49 881 92537298 +

+

+ + + + info@klz-vertriebs-gmbh.com +

+
+
+ +
+

Business Hours

+
    +
  • + Monday - Friday + 8:00 AM - 5:00 PM +
  • +
  • + Saturday - Sunday + Closed +
  • +
+
+
+ + {/* Contact Form Placeholder */} +
+

Send us a message

+
+
+ + +
+
+ + +
+
+ + +
+ +
+
+
+
+
+
+ ); +} diff --git a/app/[locale]/layout.tsx b/app/[locale]/layout.tsx new file mode 100644 index 00000000..4cfdffe6 --- /dev/null +++ b/app/[locale]/layout.tsx @@ -0,0 +1,31 @@ +import {NextIntlClientProvider} from 'next-intl'; +import {getMessages} from 'next-intl/server'; +import '../../styles/globals.css'; +import Header from '@/components/Header'; +import Footer from '@/components/Footer'; + +export default async function LocaleLayout({ + children, + params: {locale} +}: { + children: React.ReactNode; + params: {locale: string}; +}) { + // Providing all messages to the client + // side is the easiest way to get started + const messages = await getMessages(); + + return ( + + + +
+
+ {children} +
+