diff --git a/src/app/blog/[id]/page.tsx b/src/app/blog/[id]/page.tsx index e31fb6e..9cdde17 100644 --- a/src/app/blog/[id]/page.tsx +++ b/src/app/blog/[id]/page.tsx @@ -96,3 +96,31 @@ export async function generateStaticParams() { return slugs.map((slug) => ({ params: { id: slug } })); } + +export async function generateMetadata({ params }: { params: { id: string } }) { + const { query, schema } = q("*") + .filterByType("post") + .filter(`slug.current == "${params.id}"`) + .grab$({ + title: q.string(), + subtitle: q.string(), + publishedAt: q.date(), + mainImage: q("mainImage").grabOne$("asset->url", q.string().optional()), + }) + .slice(0, 1); + + const post = schema.parse(await client.fetch(query))[0]; + + return { + title: post.title, + description: post.subtitle, + image: post.mainImage, + date: post.publishedAt, + openGraph: { + type: "article", + publishedTime: post.publishedAt, + title: post.title, + description: post.subtitle, + }, + }; +} diff --git a/src/app/projects/[id]/page.tsx b/src/app/projects/[id]/page.tsx index 034f292..be371f3 100644 --- a/src/app/projects/[id]/page.tsx +++ b/src/app/projects/[id]/page.tsx @@ -99,3 +99,36 @@ export async function generateStaticParams() { }, })); } + +export async function generateMetadata({ + params, +}: { + params: { slug: string }; +}) { + const { query: projectQuery, schema: projectSchema } = q("*") + .filterByType("project") + .filter(`slug.current == "${params.slug}"`) + .grab$({ + title: q.string(), + subtitle: q.string(), + slug: q.slug("slug"), + publishedAt: q.date(), + content: q.string(), + mainImage: q("mainImage").grabOne$("asset->url", q.string().optional()), + }); + + const project = projectSchema.parse(await client.fetch(projectQuery))[0]; + + return { + title: project.title, + description: project.subtitle, + image: project.mainImage, + date: project.publishedAt, + openGraph: { + type: "article", + publishedDate: project.publishedAt, + title: project.title, + description: project.subtitle, + }, + }; +}