import { ImageResponse } from "next/og"; import { tripService } from "@/server/services/trip.service"; import { formatRupiah } from "@/lib/utils"; import { formatTripCalendarDateRangeLong } from "@/lib/trip-dates"; import { siteConfig } from "@/lib/site"; export const alt = `${siteConfig.name} โ€” Open Trip & Aktivitas Bareng`; export const size = { width: 1200, height: 630 }; export const contentType = "image/png"; export default async function TripOgImage({ params, }: { params: Promise<{ id: string }>; }) { const { id } = await params; let trip; try { trip = await tripService.getTripById(id); } catch { return new ImageResponse( (
{siteConfig.name}
), { ...size } ); } const cover = trip.images[0]?.url; const dateLabel = formatTripCalendarDateRangeLong(trip.date, trip.endDate); const price = formatRupiah(trip.price); return new ImageResponse( (
{cover && ( // eslint-disable-next-line @next/next/no-img-element )}
{/* Top: brand badge */}
๐Ÿค Open Trip Bareng
{/* Middle: title + destination */}
40 ? 64 : 76, fontWeight: 800, letterSpacing: -2, lineHeight: 1.05, display: "flex", maxWidth: 1050, }} > {trip.title}
๐Ÿ“ {trip.destination} ยท {trip.location}
{/* Bottom: date / price / brand */}
๐Ÿ“… {dateLabel}
Mulai {price} / orang
Se Trip
{siteConfig.slogan}
), { ...size } ); }