feat: AI image classification and dynamic fallback assignment
All checks were successful
Build & Deploy / 🔍 Prepare (push) Successful in 44s
Build & Deploy / 🧪 QA (push) Successful in 1m4s
Build & Deploy / 🏗️ Build (push) Successful in 1m54s
Build & Deploy / 🚀 Deploy (push) Successful in 28s
Build & Deploy / 🧪 Post-Deploy Verification (push) Successful in 43s
Build & Deploy / 🔔 Notify (push) Successful in 2s

This commit is contained in:
2026-06-16 14:16:39 +02:00
parent e994d79895
commit f0ba5321bb
17 changed files with 695 additions and 35 deletions

View File

@@ -9,6 +9,7 @@ import { SITE_URL } from '@/lib/schema';
import Image from 'next/image';
import { InteractiveGermanyMap } from '@/components/blocks/InteractiveGermanyMap';
import { defaultLocations, minorLocations } from '@/lib/map-data';
import { getImageForProject } from '@/lib/image-matcher';
interface PageProps {
params: Promise<{
@@ -59,7 +60,7 @@ export default async function ReferenzenOverview(props: { params: Promise<{ loca
if (ref) {
return {
...loc,
featuredImage: ref.frontmatter.featuredImage,
featuredImage: ref.frontmatter.featuredImage || getImageForProject(ref.slug, loc.description),
details: [
ref.frontmatter.client || 'Kunde',
ref.frontmatter.dateString || new Date(ref.frontmatter.date).getFullYear().toString(),
@@ -67,7 +68,10 @@ export default async function ReferenzenOverview(props: { params: Promise<{ loca
};
}
}
return loc;
return {
...loc,
featuredImage: loc.featuredImage || getImageForProject(loc.id, loc.description)
};
});
return (
@@ -99,18 +103,12 @@ export default async function ReferenzenOverview(props: { params: Promise<{ loca
<div className="flex flex-col h-full relative">
{/* Image Section */}
<div className="relative h-64 w-full bg-[#f4f4f5] overflow-hidden shrink-0 border-b border-neutral-100">
{ref.frontmatter.featuredImage ? (
<Image
src={ref.frontmatter.featuredImage}
alt={ref.frontmatter.title}
fill
className="object-cover transition-transform duration-1000 ease-[cubic-bezier(0.16,1,0.3,1)] filter grayscale-[20%]"
/>
) : (
<div className="absolute inset-0 bg-[#f4f4f5] flex items-center justify-center">
<Image src="/assets/logo.png" alt="E-TIB Logo" width={80} height={80} className="opacity-20 grayscale" />
</div>
)}
<Image
src={ref.frontmatter.featuredImage || getImageForProject(ref.slug, enrichedLocations.find(l => l.id === ref.slug)?.description || 'fiber')}
alt={ref.frontmatter.title}
fill
className="object-cover transition-transform duration-1000 ease-[cubic-bezier(0.16,1,0.3,1)] filter grayscale-[20%]"
/>
<div className="absolute inset-0 bg-black/5 transition-colors duration-500" />
{/* Location Badge */}