mirror of
https://github.com/zenlm/zen-blog.git
synced 2026-11-02 03:17:06 +00:00
The home now says who makes Zen LM, Zoo Labs Foundation, a 501(c)(3) non-profit, the two jobs it is chosen for, that Zen 6 and Zen 6 Flash are available now, and that Zen 7 is a research preview with a link to request access. The footer names the foundation, and "Qwen" leaves the site keywords. Posts marked "upstream: true" carry data-upstream on their page, card and read-more link, and scripts/check-zen.mjs fails the build when a name from zen.upstream shows anywhere else. The build stops measuring remote images: fumadocs fetched every one to read its size, and a single host answering 403 failed the build.
44 lines
1.4 KiB
TypeScript
44 lines
1.4 KiB
TypeScript
import Link from "next/link";
|
|
import Image from "next/image";
|
|
|
|
interface BlogCardProps {
|
|
url: string;
|
|
title: string;
|
|
description: string;
|
|
date: string;
|
|
thumbnail?: string;
|
|
upstream?: boolean;
|
|
showRightBorder?: boolean;
|
|
}
|
|
|
|
export function BlogCard({ url, title, description, date, thumbnail, upstream }: BlogCardProps) {
|
|
return (
|
|
<Link
|
|
href={url}
|
|
data-upstream={upstream ? "" : undefined}
|
|
className="group flex flex-col rounded-xl border border-border/50 bg-neutral-900/30 hover:bg-neutral-800/40 hover:border-border transition-all overflow-hidden"
|
|
>
|
|
{thumbnail && (
|
|
<div className="relative w-full h-44 overflow-hidden">
|
|
<Image
|
|
src={thumbnail}
|
|
alt={title}
|
|
fill
|
|
className="object-cover transition-transform duration-300 group-hover:scale-105"
|
|
sizes="(max-width: 768px) 100vw, (max-width: 1200px) 50vw, 33vw"
|
|
/>
|
|
</div>
|
|
)}
|
|
<div className="p-5 flex flex-col gap-2 flex-1">
|
|
<h3 className="text-base font-semibold text-foreground group-hover:text-foreground/90 leading-snug">
|
|
{title}
|
|
</h3>
|
|
<p className="text-sm text-muted-foreground leading-relaxed line-clamp-2 flex-1">
|
|
{description}
|
|
</p>
|
|
<time className="text-xs text-muted-foreground/60 mt-1">{date}</time>
|
|
</div>
|
|
</Link>
|
|
);
|
|
}
|