This commit is contained in:
2026-02-05 14:57:24 +03:30
7 changed files with 82 additions and 5 deletions
+4 -4
View File
@@ -111,8 +111,8 @@ export default async function BlogPage({ searchParams }: BlogPageProps) {
<Link
href="/blog"
className={`text-sm rounded-full px-4 py-2 transition-colors ${!categoryId
? "bg-primary text-primary-foreground shadow-sm"
: "bg-muted/80 hover:bg-muted text-muted-foreground hover:text-foreground"
? "bg-primary text-primary-foreground shadow-sm"
: "bg-muted/80 hover:bg-muted text-muted-foreground hover:text-foreground"
}`}
>
همه
@@ -122,8 +122,8 @@ export default async function BlogPage({ searchParams }: BlogPageProps) {
key={cat.id}
href={`/blog${buildQuery({ search, category: String(cat.id), page: 1 })}`}
className={`text-sm rounded-full px-4 py-2 transition-colors ${categoryId === cat.id
? "bg-primary text-primary-foreground shadow-sm"
: "bg-muted/80 hover:bg-muted text-muted-foreground hover:text-foreground"
? "bg-primary text-primary-foreground shadow-sm"
: "bg-muted/80 hover:bg-muted text-muted-foreground hover:text-foreground"
}`}
>
{cat.name}
+73
View File
@@ -0,0 +1,73 @@
import Link from "next/link";
import Image from "next/image";
import { Calendar, Clock, ArrowLeft } from "lucide-react";
import { Card, CardContent, CardFooter, CardHeader } from "@/components/ui/card";
interface BlogCardProps {
slug: string;
title: string;
excerpt: string;
date: string;
readTime: string;
category: string;
image: string;
}
export function BlogCard({
slug,
title,
excerpt,
date,
readTime,
category,
image,
}: BlogCardProps) {
return (
<Link href={`/blog/${slug}`} className="group block h-full">
<Card className="h-full flex flex-col overflow-hidden transition-all duration-300 hover:shadow-lg hover:-translate-y-1 dark:border-transparent">
{/* Image with 3:2 aspect ratio */}
<div className="relative aspect-[3/2] w-full overflow-hidden bg-muted">
<Image
src={image}
alt={title}
fill
className="object-cover transition-transform duration-300 group-hover:scale-105"
sizes="(max-width: 768px) 100vw, (max-width: 1024px) 50vw, 33vw"
/>
{/* Category Badge */}
<div className="absolute top-4 right-4">
<span className="inline-flex items-center px-3 py-1 rounded-full text-xs font-medium bg-primary/90 text-primary-foreground backdrop-blur-sm">
{category}
</span>
</div>
</div>
<CardHeader className="flex-1 flex flex-col">
<h3 className="text-xl font-bold leading-tight tracking-normal group-hover:text-primary transition-colors line-clamp-2">
{title}
</h3>
</CardHeader>
<CardContent className="flex-1">
<p className="text-muted-foreground leading-relaxed tracking-normal line-clamp-3 text-sm">
{excerpt}
</p>
</CardContent>
<CardFooter className="flex items-center justify-between gap-4 text-xs text-muted-foreground border-t pt-4">
<div className="flex items-center gap-2">
<Calendar className="size-4" />
<span>{date}</span>
</div>
<div className="flex items-center gap-2">
<Clock className="size-4" />
<span>{readTime} دقیقه</span>
</div>
</CardFooter>
</Card>
</Link>
);
}
+1
View File
@@ -14,6 +14,7 @@ const menuItems = [
{ name: 'راه حل‌ها', href: '/solutions' },
{ name: 'بلاگ', href: '/blog' },
{ name: 'قیمت‌گذاری', href: '/pricing' },
{ name: 'وبلاگ', href: '/blog' },
]
function isLinkActive(pathname: string, href: string): boolean {
+1 -1
View File
@@ -26,7 +26,7 @@ export const LogoIcon = ({
}) => {
return (
<Image
src="/assets/feeplogo.svg"
src="/assets/feep-Logo.svg"
alt="Logo"
width={50}
height={50}
+3
View File
@@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="50" height="50" viewBox="0 0 50 50">
<image id="ChatGPT_Image_Feb_5_2026_02_12_42_PM" data-name="ChatGPT Image Feb 5, 2026, 02_12_42 PM" x="11" y="9" width="30" height="32" xlink:href="data:img/png;base64,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"/>
</svg>

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 KiB