diff --git a/app/[slug]/page.tsx b/app/[slug]/page.tsx index bd1fbe6..4806b77 100644 --- a/app/[slug]/page.tsx +++ b/app/[slug]/page.tsx @@ -253,7 +253,7 @@ export default async function BlogPostPage({ params }: PageProps) { className="h-11 w-11 shrink-0 overflow-hidden rounded-full ring-1 ring-neutral-200 transition-colors hover:ring-neutral-400 dark:ring-neutral-800 dark:hover:ring-neutral-600" > {post.author} { expect(fm.tags).toEqual(["a", "b"]); expect(fm.keywords).toEqual(["solo"]); }); + + it("reads the avatar field and leaves it empty by default", () => { + expect( + toFrontmatter({ title: "T", avatar: "/logo/opencode-logo-dark.png" }, "t") + .avatar, + ).toBe("/logo/opencode-logo-dark.png"); + expect(toFrontmatter({ title: "T" }, "t").avatar).toBeUndefined(); + }); }); describe("estimateReadingTime", () => { diff --git a/lib/content/parse.ts b/lib/content/parse.ts index 2d61301..05a2c0f 100644 --- a/lib/content/parse.ts +++ b/lib/content/parse.ts @@ -118,6 +118,7 @@ export function toFrontmatter( updatedAt: data.updatedAt ? String(data.updatedAt) : undefined, author: String(data.author ?? "ossium"), authorUrl: data.authorUrl ? String(data.authorUrl) : "https://ossium.in", + avatar: data.avatar ? String(data.avatar) : undefined, featured: Boolean(data.featured), draft: Boolean(data.draft), image: data.image ? String(data.image) : undefined, diff --git a/lib/content/types.ts b/lib/content/types.ts index 17e9cbf..194f44b 100644 --- a/lib/content/types.ts +++ b/lib/content/types.ts @@ -25,6 +25,8 @@ export interface PostFrontmatter { updatedAt?: string; author: string; authorUrl?: string; + /** Author avatar image path (defaults to the ossium logo when absent) */ + avatar?: string; featured?: boolean; draft?: boolean; /** Optional cover image path or absolute URL */ diff --git a/public/logo/opencode-logo-dark.png b/public/logo/opencode-logo-dark.png new file mode 100644 index 0000000..cf868c8 Binary files /dev/null and b/public/logo/opencode-logo-dark.png differ