- {post.primary_author?.name || "Unknown Author"}
+ {post.primary_author?.twitter ? (
+
+ {post.primary_author.name || "Unknown Author"}
+
+ ) : (
+ post.primary_author?.name || "Unknown Author"
+ )}
{formattedDate} • {post.reading_time} min read
diff --git a/apps/website/app/[locale]/blog/components/BlogPostCard.tsx b/apps/website/app/[locale]/blog/components/BlogPostCard.tsx
new file mode 100644
index 0000000..9b38222
--- /dev/null
+++ b/apps/website/app/[locale]/blog/components/BlogPostCard.tsx
@@ -0,0 +1,94 @@
+"use client";
+
+import type { Post } from "@/lib/ghost";
+import Image from "next/image";
+import Link from "next/link";
+
+interface BlogPostCardProps {
+ post: Post;
+ locale: string;
+}
+
+export function BlogPostCard({ post, locale }: BlogPostCardProps) {
+ const formattedDate = new Date(post.published_at).toLocaleDateString(locale, {
+ year: "numeric",
+ month: "long",
+ day: "numeric",
+ });
+
+ return (
+
+
+ {post.feature_image && (
+
+
+
+ )}
+
+
+ {post.title}
+
+
+ {post.custom_excerpt || post.excerpt}
+
+
+
+
in
+
{post.primary_tag?.name || "General"}
+
•
+
{post.reading_time} min read
+
•
+
{formattedDate}
+
+
+
+
+ );
+}
diff --git a/apps/website/app/[locale]/blog/page.tsx b/apps/website/app/[locale]/blog/page.tsx
index ab7328e..2481da7 100644
--- a/apps/website/app/[locale]/blog/page.tsx
+++ b/apps/website/app/[locale]/blog/page.tsx
@@ -102,7 +102,7 @@ function BlogPostCard({ post, locale }: { post: Post; locale: string }) {
className="group block hover:bg-muted p-4 rounded-lg"
>
- {post.feature_image && (
+ {post.feature_image ? (
+ ) : (
+
+
+
)}
@@ -123,15 +132,42 @@ function BlogPostCard({ post, locale }: { post: Post; locale: string }) {
{post.primary_author?.profile_image && (
-
+ {post.primary_author.twitter ? (
+
+
+
+ ) : (
+
+ )}
)}
-
{post.primary_author?.name || "Unknown Author"}
+ {post.primary_author?.twitter ? (
+
+ {post.primary_author.name || "Unknown Author"}
+
+ ) : (
+
{post.primary_author?.name || "Unknown Author"}
+ )}
in
{post.primary_tag?.name || "General"}
diff --git a/apps/website/lib/ghost.ts b/apps/website/lib/ghost.ts
index 35eca37..5bbb16c 100644
--- a/apps/website/lib/ghost.ts
+++ b/apps/website/lib/ghost.ts
@@ -66,6 +66,7 @@ export interface Post {
slug: string;
profile_image: string | null;
bio: string | null;
+ twitter: string | null;
};
authors?: Array<{
id: string;
diff --git a/apps/website/public/default.jpg b/apps/website/public/default.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..71334962e5abacd9f730458060d844c290cbfa2a
GIT binary patch
literal 7520
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
literal 0
HcmV?d00001