--- import { getCollection, render } from 'astro:content'; import { Image } from 'astro:assets'; import BaseLayout from '../../layouts/BaseLayout.astro'; import SourceBadge from '../../components/SourceBadge.astro'; import Backlinks from '../../components/Backlinks.astro'; import { findsReferencing } from '../../lib/backlinks'; import { findHero } from '../../lib/find-hero'; import EditAction from '../../components/EditAction.astro'; import { resolveExternalLink, AFFILIATE_REL, AFFILIATE_DISCLOSURE, } from '../../lib/affiliate'; import { buildOgImage, buildBreadcrumbs, absoluteUrl } from '../../lib/seo'; export async function getStaticPaths() { const items = await getCollection('find'); return items.map((item) => ({ params: { slug: item.id }, props: { item }, })); } const { item } = Astro.props; const { Content } = await render(item); const featuringPosts = await findsReferencing(item.id); const hero = findHero(item.id); const linkLabel = item.data.linkText ?? new URL(item.data.link).hostname.replace(/^www\./, ''); const external = resolveExternalLink(item.data.link); const description = item.data.description ?? item.data.subtitle ?? `A find: ${item.data.name}.`; const canonicalOverride = item.data.promotedTo ? absoluteUrl(`/reviews/${item.data.promotedTo}/`) : undefined; const ogImage = buildOgImage( item.data.promotedTo, 'finds', `${item.data.name} preview image` ); const productSchema: Record = { '@context': 'https://schema.org', '@type': 'Product', '@id': absoluteUrl(`/find/${item.id}/#product`), name: item.data.name, description, url: absoluteUrl(`/find/${item.id}/`), image: ogImage.url, offers: { '@type': 'Offer', url: item.data.link, availability: 'https://schema.org/InStock', }, }; const breadcrumbs = buildBreadcrumbs([ { name: 'Home', url: '/' }, { name: 'Sources', url: '/sources/' }, { name: item.data.name, url: `/find/${item.id}/` }, ]); ---

{hero && ( {item.data.name} )}

{linkLabel} ↗ {external.isAffiliate && Affiliate}

{external.isAffiliate && (

{AFFILIATE_DISCLOSURE}

)} { item.data.promotedTo && ( ) } {import.meta.env.DEV && !item.data.promotedTo && (
)} { item.data.tags.length > 0 && (
{item.data.tags.map((tag) => ( #{tag} ))}
) }

← back