diff --git a/apps/website/src/components/BlogPostCard.astro b/apps/website/src/components/BlogPostCard.astro
index 2731fcc55..eed6fb29a 100644
--- a/apps/website/src/components/BlogPostCard.astro
+++ b/apps/website/src/components/BlogPostCard.astro
@@ -10,6 +10,13 @@ interface Props {
const { title, description, pubDate, slug, tags = [], heroImage } = Astro.props;
+// Cards sit in a three-column grid, so a post with five or six tags cannot show
+// them all inline. The first few render as chips; the rest collapse into a "+N"
+// chip whose tooltip lists the hidden tags. The featured card shows every tag.
+const MAX_VISIBLE_TAGS = 3;
+const visibleTags = tags.slice(0, MAX_VISIBLE_TAGS);
+const hiddenTags = tags.slice(MAX_VISIBLE_TAGS);
+
const formattedDate = pubDate.toLocaleDateString('en-US', {
year: 'numeric',
month: 'short',
@@ -31,23 +38,28 @@ const formattedDate = pubDate.toLocaleDateString('en-US', {
/>
)}
-