Compare commits

..

8 Commits

Author SHA1 Message Date
c4e5b44d5e 2.2.30-rc.8
All checks were successful
Build & Deploy / 🔍 Prepare (push) Successful in 46s
Build & Deploy / 🧪 QA (push) Successful in 1m39s
Build & Deploy / 🏗️ Build (push) Successful in 3m9s
Build & Deploy / 🚀 Deploy (push) Successful in 46s
Build & Deploy / 🧪 Post-Deploy Verification (push) Successful in 1m10s
Build & Deploy / 🔔 Notify (push) Successful in 3s
2026-06-22 13:47:00 +02:00
0378dde328 feat(og): Standardize OG images across all subpages with logo and background 2026-06-22 13:46:50 +02:00
3202139b1e 2.2.30-rc.7
All checks were successful
Build & Deploy / 🔍 Prepare (push) Successful in 38s
Build & Deploy / 🧪 QA (push) Successful in 1m38s
Build & Deploy / 🏗️ Build (push) Successful in 3m12s
Build & Deploy / 🚀 Deploy (push) Successful in 51s
Build & Deploy / 🧪 Post-Deploy Verification (push) Successful in 1m9s
Build & Deploy / 🔔 Notify (push) Successful in 3s
2026-06-22 13:05:39 +02:00
dc5489706d fix(og): Add missing title and description variables 2026-06-22 13:05:33 +02:00
e8b8493740 2.2.30-rc.6
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 38s
Build & Deploy / 🧪 QA (push) Failing after 1m40s
Build & Deploy / 🚀 Deploy (push) Has been skipped
Build & Deploy / 🏗️ Build (push) Has been skipped
Build & Deploy / 🧪 Post-Deploy Verification (push) Has been skipped
Build & Deploy / 🔔 Notify (push) Successful in 2s
2026-06-22 12:49:57 +02:00
ef44ebcf4f 2.2.30-rc.5
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 2m55s
Build & Deploy / 🧪 QA (push) Failing after 1m44s
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-06-22 12:42:55 +02:00
816aef924e 2.2.30-rc.4
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 20m43s
Build & Deploy / 🧪 QA (push) Failing after 1m48s
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 3s
2026-06-22 12:05:04 +02:00
1bd9f26356 style(og): improve spacing, truncate text, and switch to flex layout 2026-06-22 12:04:53 +02:00
7 changed files with 142 additions and 97 deletions

View File

@@ -1,7 +1,7 @@
import { ImageResponse } from 'next/og'; import { ImageResponse } from 'next/og';
import { getPageBySlug } from '@/lib/pages'; import { getPageBySlug } from '@/lib/pages';
import { OGImageTemplate } from '@/components/OGImageTemplate'; import { OGImageTemplate } from '@/components/OGImageTemplate';
import { getOgFonts, OG_IMAGE_SIZE } from '@/lib/og-helper'; import { getOgFonts, getOgBackground, getOgLogo, OG_IMAGE_SIZE } from '@/lib/og-helper';
export const size = OG_IMAGE_SIZE; export const size = OG_IMAGE_SIZE;
export const contentType = 'image/png'; export const contentType = 'image/png';
@@ -20,12 +20,16 @@ export default async function Image({
} }
const fonts = await getOgFonts(); const fonts = await getOgFonts();
const bg = getOgBackground();
const logo = getOgLogo();
return new ImageResponse( return new ImageResponse(
<OGImageTemplate <OGImageTemplate
title={pageData.frontmatter.title} title="Die Experten für Kabelnetzbau"
description={pageData.frontmatter.excerpt} description={`${pageData.frontmatter.title}`}
label="Information" label="Information"
image={bg}
logo={logo}
/>, />,
{ {
...OG_IMAGE_SIZE, ...OG_IMAGE_SIZE,

View File

@@ -1,7 +1,7 @@
import { ImageResponse } from 'next/og'; import { ImageResponse } from 'next/og';
import { getPostBySlug } from '@/lib/blog'; import { getPostBySlug } from '@/lib/blog';
import { OGImageTemplate } from '@/components/OGImageTemplate'; import { OGImageTemplate } from '@/components/OGImageTemplate';
import { getOgFonts, OG_IMAGE_SIZE } from '@/lib/og-helper'; import { getOgFonts, getOgBackground, getOgLogo, OG_IMAGE_SIZE } from '@/lib/og-helper';
import { SITE_URL } from '@/lib/schema'; import { SITE_URL } from '@/lib/schema';
export const size = OG_IMAGE_SIZE; export const size = OG_IMAGE_SIZE;
@@ -52,13 +52,16 @@ export default async function Image({
if (featuredImage) { if (featuredImage) {
base64Image = await fetchImageAsBase64(featuredImage); base64Image = await fetchImageAsBase64(featuredImage);
} }
const bg = getOgBackground();
const logo = getOgLogo();
return new ImageResponse( return new ImageResponse(
<OGImageTemplate <OGImageTemplate
title={post.frontmatter.title} title="Die Experten für Kabelnetzbau"
description={post.frontmatter.excerpt} description={`${post.frontmatter.title}`}
label={post.frontmatter.category || 'Blog'} label={post.frontmatter.category || 'Blog'}
image={base64Image || featuredImage} image={base64Image || featuredImage || bg}
logo={logo}
/>, />,
{ {
...OG_IMAGE_SIZE, ...OG_IMAGE_SIZE,

View File

@@ -1,7 +1,7 @@
import { ImageResponse } from 'next/og'; import { ImageResponse } from 'next/og';
import { getTranslations } from 'next-intl/server'; import { getTranslations } from 'next-intl/server';
import { OGImageTemplate } from '@/components/OGImageTemplate'; import { OGImageTemplate } from '@/components/OGImageTemplate';
import { getOgFonts, OG_IMAGE_SIZE } from '@/lib/og-helper'; import { getOgFonts, getOgBackground, getOgLogo, OG_IMAGE_SIZE } from '@/lib/og-helper';
export const size = OG_IMAGE_SIZE; export const size = OG_IMAGE_SIZE;
export const contentType = 'image/png'; export const contentType = 'image/png';
@@ -11,9 +11,17 @@ export default async function Image({ params }: { params: Promise<{ locale: stri
const { locale } = await params; const { locale } = await params;
const t = await getTranslations({ locale, namespace: 'Blog.meta' }); const t = await getTranslations({ locale, namespace: 'Blog.meta' });
const fonts = await getOgFonts(); const fonts = await getOgFonts();
const bg = getOgBackground();
const logo = getOgLogo();
return new ImageResponse( return new ImageResponse(
<OGImageTemplate title={t('title')} description={t('description')} label="Blog" />, <OGImageTemplate
title="Die Experten für Kabelnetzbau"
description={t('title')}
label="Blog"
image={bg}
logo={logo}
/>,
{ {
...OG_IMAGE_SIZE, ...OG_IMAGE_SIZE,
fonts, fonts,

View File

@@ -1,7 +1,7 @@
import { ImageResponse } from 'next/og'; import { ImageResponse } from 'next/og';
import { getTranslations } from 'next-intl/server'; import { getTranslations } from 'next-intl/server';
import { OGImageTemplate } from '@/components/OGImageTemplate'; import { OGImageTemplate } from '@/components/OGImageTemplate';
import { getOgFonts, OG_IMAGE_SIZE } from '@/lib/og-helper'; import { getOgFonts, getOgBackground, getOgLogo, OG_IMAGE_SIZE } from '@/lib/og-helper';
export const size = OG_IMAGE_SIZE; export const size = OG_IMAGE_SIZE;
export const contentType = 'image/png'; export const contentType = 'image/png';
@@ -11,12 +11,22 @@ export default async function Image({ params }: { params: Promise<{ locale: stri
const { locale } = await params; const { locale } = await params;
const t = await getTranslations({ locale, namespace: 'Contact' }); const t = await getTranslations({ locale, namespace: 'Contact' });
const fonts = await getOgFonts(); const fonts = await getOgFonts();
const bg = getOgBackground();
const logo = getOgLogo();
const title = t('meta.title') || t('title'); let title = t('meta.title') || t('title');
const description = t('meta.description') || t('subtitle'); if (title.startsWith('E-TIB GmbH | ')) {
title = title.substring('E-TIB GmbH | '.length);
}
return new ImageResponse( return new ImageResponse(
<OGImageTemplate title={title} description={description} label="Contact" />, <OGImageTemplate
title="Die Experten für Kabelnetzbau"
description={title}
label="Contact"
image={bg}
logo={logo}
/>,
{ {
...OG_IMAGE_SIZE, ...OG_IMAGE_SIZE,
fonts, fonts,

View File

@@ -10,14 +10,20 @@ export const runtime = 'nodejs';
export default async function Image({ params }: { params: Promise<{ locale: string }> }) { export default async function Image({ params }: { params: Promise<{ locale: string }> }) {
const { locale } = await params; const { locale } = await params;
const t = await getTranslations({ locale, namespace: 'Index.meta' }); const t = await getTranslations({ locale, namespace: 'Index.meta' });
let pageTitle = t('title');
if (pageTitle.startsWith('E-TIB GmbH | ')) {
pageTitle = pageTitle.substring('E-TIB GmbH | '.length);
}
const fonts = await getOgFonts(); const fonts = await getOgFonts();
const bg = getOgBackground(); const bg = getOgBackground();
const logo = getOgLogo(); const logo = getOgLogo();
return new ImageResponse( return new ImageResponse(
<OGImageTemplate <OGImageTemplate
title={t('title')} title="Die Experten für Kabelnetzbau"
description={t('description')} description={pageTitle}
label="Kabelnetzbau & Infrastruktur" label="Kabelnetzbau & Infrastruktur"
image={bg} image={bg}
logo={logo} logo={logo}

View File

@@ -86,7 +86,20 @@ export function OGImageTemplate({
}} }}
/> />
<div style={{ display: 'flex', flexDirection: 'column', position: 'relative', zIndex: 10 }}> {/* Main Content Wrapper */}
<div
style={{
display: 'flex',
flexDirection: 'column',
justifyContent: 'space-between',
height: '100%',
width: '100%',
position: 'relative',
zIndex: 10,
}}
>
{/* Top: Text Content */}
<div style={{ display: 'flex', flexDirection: 'column' }}>
{/* Label / Category */} {/* Label / Category */}
{label && ( {label && (
<div <div
@@ -95,8 +108,8 @@ export function OGImageTemplate({
fontWeight: 700, fontWeight: 700,
color: primaryGreen, color: primaryGreen,
textTransform: 'uppercase', textTransform: 'uppercase',
letterSpacing: '0.3em', letterSpacing: '0.25em',
marginBottom: '32px', marginBottom: '24px',
display: 'flex', display: 'flex',
}} }}
> >
@@ -107,12 +120,12 @@ export function OGImageTemplate({
{/* Title */} {/* Title */}
<div <div
style={{ style={{
fontSize: title.length > 40 ? '64px' : '82px', fontSize: '72px',
fontWeight: 700, fontWeight: 700,
color: 'white', color: 'white',
lineHeight: '1.05', lineHeight: '1.1',
maxWidth: '950px', maxWidth: '900px',
marginBottom: '40px', marginBottom: '24px',
display: 'flex', display: 'flex',
letterSpacing: '-0.02em', letterSpacing: '-0.02em',
}} }}
@@ -124,25 +137,25 @@ export function OGImageTemplate({
{description && ( {description && (
<div <div
style={{ style={{
fontSize: '32px', fontSize: '36px',
color: 'rgba(255,255,255,0.7)', color: 'rgba(255,255,255,0.85)',
maxWidth: '850px', maxWidth: '850px',
lineHeight: '1.4', lineHeight: '1.4',
display: 'flex', display: '-webkit-box',
WebkitLineClamp: 3,
WebkitBoxOrient: 'vertical',
overflow: 'hidden',
fontWeight: 400, fontWeight: 400,
}} }}
> >
{description.length > 160 ? description.substring(0, 157) + '...' : description} {description}
</div> </div>
)} )}
</div> </div>
{/* Brand Footer */} {/* Bottom: Brand Footer */}
<div <div
style={{ style={{
position: 'absolute',
bottom: '80px',
left: '80px',
display: 'flex', display: 'flex',
alignItems: 'center', alignItems: 'center',
}} }}
@@ -152,7 +165,7 @@ export function OGImageTemplate({
<img <img
src={logo} src={logo}
alt="E-TIB GmbH" alt="E-TIB GmbH"
height="48" height="56"
style={{ marginRight: '24px', objectFit: 'contain' }} style={{ marginRight: '24px', objectFit: 'contain' }}
/> />
) : ( ) : (
@@ -181,6 +194,7 @@ export function OGImageTemplate({
</div> </div>
)} )}
</div> </div>
</div>
{/* Primary Green Brand Strip */} {/* Primary Green Brand Strip */}
<div <div

View File

@@ -138,7 +138,7 @@
"prepare": "husky", "prepare": "husky",
"preinstall": "npx only-allow pnpm" "preinstall": "npx only-allow pnpm"
}, },
"version": "2.2.30-rc.3", "version": "2.2.30-rc.8",
"pnpm": { "pnpm": {
"onlyBuiltDependencies": [ "onlyBuiltDependencies": [
"@parcel/watcher", "@parcel/watcher",