diff --git a/app/about/page.tsx b/app/about/page.tsx index 20233de..0102172 100644 --- a/app/about/page.tsx +++ b/app/about/page.tsx @@ -3,6 +3,8 @@ export const metadata = { description: "فیپ یک گروه متخصص در حوزه اینتگریشن و روش‌های نوین یکپارچه‌سازی. ماموریت، چشم‌انداز و ارزش‌های ما.", }; +import { Button } from "@/components/ui/button"; +import Link from "next/link"; export default function AboutPage() { return ( @@ -15,7 +17,7 @@ export default function AboutPage() { درباره ما

- ما یک گروه متخصص هستیم که در حوزه اینتگریشن و روش‌های نوین یکپارچه‌سازی فعالیت می‌کنیم. + ما یک گروه متخصص هستیم که در حوزه اینتگریشن و روش‌های نوین یکپارچه‌سازی فعالیت می‌کنیم. هدف ما ارائه راهکارهای هوشمند و کارآمد برای اتصال سیستم‌ها، داده‌ها و فرآیندهای کسب‌وکار است.

@@ -32,13 +34,13 @@ export default function AboutPage() {

- فیپ یک گروه متخصص است که در حوزه اینتگریشن و روش‌های نوین یکپارچه‌سازی فعالیت می‌کند. - ما با استفاده از تکنولوژی‌های پیشرفته و رویکردهای نوآورانه، به کسب‌وکارها کمک می‌کنیم تا + فیپ یک گروه متخصص است که در حوزه اینتگریشن و روش‌های نوین یکپارچه‌سازی فعالیت می‌کند. + ما با استفاده از تکنولوژی‌های پیشرفته و رویکردهای نوآورانه، به کسب‌وکارها کمک می‌کنیم تا سیستم‌های خود را به شکلی کارآمد و قابل‌اعتماد بهم متصل کنند.

- ما در زمینه یکپارچه‌سازی سیستم‌ها، اتوماسیون فرآیندها، ارتباطات چندکاناله و مدیریت داده‌ها - تخصص داریم. با استفاده از روش‌های نوین و ابزارهای پیشرفته، راهکارهای سفارشی برای هر کسب‌وکار + ما در زمینه یکپارچه‌سازی سیستم‌ها، اتوماسیون فرآیندها، ارتباطات چندکاناله و مدیریت داده‌ها + تخصص داریم. با استفاده از روش‌های نوین و ابزارهای پیشرفته، راهکارهای سفارشی برای هر کسب‌وکار طراحی و پیاده‌سازی می‌کنیم.

@@ -56,15 +58,15 @@ export default function AboutPage() { {/* Mission & Vision */}
-
+

ماموریت ما

- ماموریت ما این است که با استفاده از روش‌های نوین اینتگریشن، به کسب‌وکارها کمک کنیم تا - بدون پیچیدگی‌های فنی، سیستم‌های خود را بهم متصل کنند و از قدرت اتوماسیون و ارتباطات هوشمند + ماموریت ما این است که با استفاده از روش‌های نوین اینتگریشن، به کسب‌وکارها کمک کنیم تا + بدون پیچیدگی‌های فنی، سیستم‌های خود را بهم متصل کنند و از قدرت اتوماسیون و ارتباطات هوشمند بهره‌مند شوند.

@@ -75,8 +77,8 @@ export default function AboutPage() { چشم‌انداز ما

- ما می‌خواهیم به گروه پیشرو در حوزه اینتگریشن و روش‌های نوین یکپارچه‌سازی تبدیل شویم. - چشم‌انداز ما این است که هر کسب‌وکاری، از کوچک تا بزرگ، بتواند به راحتی از خدمات ما استفاده کند + ما می‌خواهیم به گروه پیشرو در حوزه اینتگریشن و روش‌های نوین یکپارچه‌سازی تبدیل شویم. + چشم‌انداز ما این است که هر کسب‌وکاری، از کوچک تا بزرگ، بتواند به راحتی از خدمات ما استفاده کند و به اهداف خود برسد.

@@ -193,8 +195,8 @@ export default function AboutPage() { تیم ما

- تیم فیپ متشکل از متخصصان با تجربه در حوزه‌های اینتگریشن، فناوری اطلاعات، توسعه نرم‌افزار - و مدیریت کسب‌وکار است. ما با همکاری یکدیگر و استفاده از روش‌های نوین، راهکارهای نوآورانه و + تیم فیپ متشکل از متخصصان با تجربه در حوزه‌های اینتگریشن، فناوری اطلاعات، توسعه نرم‌افزار + و مدیریت کسب‌وکار است. ما با همکاری یکدیگر و استفاده از روش‌های نوین، راهکارهای نوآورانه و کاربردی برای چالش‌های یکپارچه‌سازی ارائه می‌دهیم.

@@ -248,18 +250,12 @@ export default function AboutPage() { با ما تماس بگیرید تا درباره نیازهای شما صحبت کنیم و بهترین راهکار را پیشنهاد دهیم

- - مشاهده قیمت‌ها - - - تماس با ما - + +
diff --git a/app/blog/[slug]/page.tsx b/app/blog/[slug]/page.tsx index c98f32b..5f9575d 100644 --- a/app/blog/[slug]/page.tsx +++ b/app/blog/[slug]/page.tsx @@ -6,7 +6,7 @@ import { getPostBySlug, getFeaturedImageUrl, getRelatedPosts } from "@/lib/wp-ap import { formatDateShamsi } from "@/lib/format-date"; import { ChevronRight } from "lucide-react"; import type { CollapseBlockPayload, BlockquoteBlockPayload, TipBlockPayload } from "@/lib/blog-blocks"; -import { parseContentHeadings, getReadingTimeMinutes } from "@/lib/blog-utils"; +import { parseContentHeadings, getReadingTimeMinutes, formatAuthorName } from "@/lib/blog-utils"; import { BlogToc } from "@/components/blog-toc"; import { BlogPostMeta } from "@/components/blog-post-meta"; import { BlogCollapseSection } from "@/components/blog-collapse-section"; @@ -71,7 +71,7 @@ export default async function BlogPostPage({ params }: BlogPostPageProps) { const modifiedDate = post.modified ? formatDateShamsi(post.modified) : null; - const authorName = post._embedded?.author?.[0]?.name ?? null; + const authorName = formatAuthorName(post._embedded?.author?.[0]?.name); const thumbnailUrl = getFeaturedImageUrl(post, "full"); const media = post._embedded?.["wp:featuredmedia"]?.[0]; const altText = media?.alt_text || post.title?.rendered?.replace(/<[^>]*>/g, "") || ""; @@ -94,6 +94,7 @@ export default async function BlogPostPage({ params }: BlogPostPageProps) { className="object-cover" quality={100} priority + sizes="(max-width: 768px) 100vw, 1024px" /> @@ -160,14 +161,14 @@ export default async function BlogPostPage({ params }: BlogPostPageProps) {
{relatedPosts.length > 0 && ( -
-
-

+
+
+

مقالات مرتبط

-
+
{relatedPosts.map((p) => ( - + ))}
diff --git a/app/blog/page.tsx b/app/blog/page.tsx index 6c74565..46984a9 100644 --- a/app/blog/page.tsx +++ b/app/blog/page.tsx @@ -67,7 +67,7 @@ export default async function BlogPage({ searchParams }: BlogPageProps) { return ( <> - {/* Hero + search & filters — compact */} + {/* Hero + search & filters, compact */}
@@ -98,7 +98,7 @@ export default async function BlogPage({ searchParams }: BlogPageProps) { aria-label="جستجو در مطالب" />
- diff --git a/app/globals.css b/app/globals.css index 5f16bc1..7e75f14 100644 --- a/app/globals.css +++ b/app/globals.css @@ -295,4 +295,9 @@ .wp-block-image { @apply rounded-md overflow-hidden shadow-sm; +} + +.blog-content img { + @apply w-full h-auto; + image-rendering: auto; } \ No newline at end of file diff --git a/components/blog-blockquote.tsx b/components/blog-blockquote.tsx index 9315b23..c16eb62 100644 --- a/components/blog-blockquote.tsx +++ b/components/blog-blockquote.tsx @@ -25,7 +25,7 @@ export function BlogBlockquote({ payload }: BlogBlockquoteProps) { {citation ? (
- — {citation} + {citation}
) : null} diff --git a/components/blog-card.tsx b/components/blog-card.tsx index b8c9be2..925a7fc 100644 --- a/components/blog-card.tsx +++ b/components/blog-card.tsx @@ -32,7 +32,8 @@ export function BlogCard({ alt={title} fill className="object-cover transition-transform duration-300 group-hover:scale-105" - sizes="(max-width: 768px) 100vw, (max-width: 1024px) 50vw, 33vw" + quality={100} + sizes="(max-width: 768px) 100vw, (max-width: 1024px) 50vw, 400px" /> {/* Category Badge */}
diff --git a/components/blog-post-card.tsx b/components/blog-post-card.tsx index f1b35bc..daf9534 100644 --- a/components/blog-post-card.tsx +++ b/components/blog-post-card.tsx @@ -4,12 +4,13 @@ import { ImageIcon, User } from "lucide-react"; import { Card, CardHeader, CardTitle, CardContent } from "@/components/ui/card"; import { getFeaturedImageUrl, type WpPost } from "@/lib/wp-api"; import { formatDateShamsi } from "@/lib/format-date"; +import { formatAuthorName } from "@/lib/blog-utils"; function stripHtml(html: string): string { return html.replace(/<[^>]*>/g, "").trim(); } -type BlogPostCardVariant = "default" | "tiny"; +type BlogPostCardVariant = "default" | "tiny" | "related"; export function BlogPostCard({ post, @@ -20,9 +21,57 @@ export function BlogPostCard({ }) { const excerpt = stripHtml(post.excerpt.rendered) || stripHtml(post.content.rendered).slice(0, 160); const modifiedDate = post.modified ? formatDateShamsi(post.modified) : null; - const authorName = post._embedded?.author?.[0]?.name ?? null; + const authorName = formatAuthorName(post._embedded?.author?.[0]?.name); const thumbnailUrl = getFeaturedImageUrl(post, "full"); + if (variant === "related") { + return ( + + + + {thumbnailUrl ? ( +
+ +
+ ) : ( +
+ +
+ )} +
+

+ {post.title.rendered} +

+
+ {authorName && ( + + + {authorName} + + )} + {modifiedDate && ( + + )} +
+
+
+
+ + ); + } + if (variant === "tiny") { return ( @@ -35,7 +84,8 @@ export function BlogPostCard({ alt="" fill className="object-cover" - sizes="(max-width: 640px) 100vw, (max-width: 1024px) 50vw, 33vw" + quality={100} + sizes="(max-width: 640px) 100vw, (max-width: 1024px) 50vw, 400px" />
) : ( @@ -82,7 +132,7 @@ export function BlogPostCard({ className="object-cover" quality={100} priority - sizes="(max-width: 640px) 100vw, (max-width: 1024px) 50vw, 350px" + sizes="(max-width: 640px) 100vw, (max-width: 1024px) 50vw, 400px" />
) : ( diff --git a/components/blog-post-meta.tsx b/components/blog-post-meta.tsx index 00a956e..d07d486 100644 --- a/components/blog-post-meta.tsx +++ b/components/blog-post-meta.tsx @@ -140,7 +140,6 @@ export function BlogPostMeta({
-

+

فیپ یک گروه متخصص است که در حوزه اینتگریشن و روش‌های نوین یکپارچه‌سازی فعالیت می‌کند.{" "} - + ما با استفاده از تکنولوژی‌های پیشرفته و رویکردهای نوآورانه {" "} به کسب‌وکارها کمک می‌کنیم تا سیستم‌های خود را به شکلی کارآمد و قابل‌اعتماد بهم متصل کنند.

-

+

ما در زمینه یکپارچه‌سازی سیستم‌ها، اتوماسیون فرآیندها، ارتباطات چندکاناله و مدیریت داده‌ها تخصص داریم. با استفاده از روش‌های نوین و ابزارهای پیشرفته، راهکارهای سفارشی برای هر کسب‌وکار طراحی و پیاده‌سازی می‌کنیم که به آن‌ها امکان می‌دهد تا از قدرت اتوماسیون و ارتباطات هوشمند بهره‌مند شوند.

- ماموریت ما این است که با استفاده از روش‌های نوین اینتگریشن، به کسب‌وکارها کمک کنیم تا + ماموریت ما این است که با استفاده از روش‌های نوین اینتگریشن، به کسب‌وکارها کمک کنیم تا بدون پیچیدگی‌های فنی، سیستم‌های خود را بهم متصل کنند و به اهداف خود برسند.

diff --git a/components/features-12.tsx b/components/features-12.tsx index d8c1d0b..8dddba7 100644 --- a/components/features-12.tsx +++ b/components/features-12.tsx @@ -20,22 +20,29 @@ export default function Features() { type ImageKey = "item-1" | "item-2" | "item-3" | "item-4"; const [activeItem, setActiveItem] = useState("item-1"); + const sectionImage = (filename: string) => + `/assets/main-pic/4section/${encodeURIComponent(filename)}`; + const images = { "item-1": { - image: "/assets/main-pic/4section/Systems Integration.jpg", - alt: "System integration", + image: sectionImage("Systems Integration.jpg"), + imageDark: sectionImage("Systems Integration-dark.jpg"), + alt: "یکپارچه‌سازی سیستم‌ها", }, "item-2": { - image: "/assets/main-pic/4section/Powerful Management panels.jpg", - alt: "Management panels", + image: sectionImage("Powerful Management panels.jpg"), + imageDark: sectionImage("Powerful Management panels-dark.jpg"), + alt: "پنل‌های مدیریتی قدرتمند", }, "item-3": { - image: "/assets/main-pic/4section/Interaction with Social Networks.jpg", - alt: "Social media integration", + image: sectionImage("Interaction with Social Networks.jpg"), + imageDark: sectionImage("Interaction with Social Networks_dark.jpg"), + alt: "تعامل با شبکه‌های اجتماعی", }, "item-4": { - image: "/assets/main-pic/4section/Process Automation.jpg", - alt: "Process automation", + image: sectionImage("Process Automation.jpg"), + imageDark: sectionImage("Process Automation-dark.jpg"), + alt: "اتوماسیون فرآیندها", }, }; @@ -113,33 +120,48 @@ export default function Features() { -
-
-
- - - {images[activeItem].alt} - - +
+
+
+
+ + + {images[activeItem].alt} + {images[activeItem].alt} + + +
+
-
diff --git a/components/hero-section.tsx b/components/hero-section.tsx index 2061510..83f6005 100644 --- a/components/hero-section.tsx +++ b/components/hero-section.tsx @@ -72,9 +72,11 @@ export default function HeroSection() { background @@ -121,9 +123,7 @@ export default function HeroSection() { as="p" className="mx-auto mt-8 max-w-2xl text-balance text-base md:text-lg leading-relaxed tracking-normal" > - داده‌ها، کاربران و فرآیندهای شما را از هر پلتفرمی (وب، CRM، تلگرام، سرویس‌های سفارشی) به‌صورت سریع، دقیق و امن یکپارچه کنید. - - فرآیندهای کسب‌وکاری شما با سرعت به هم متصل می‌شوند. + با ابزارهای یکپارچه‌سازی، اتوماسیون و ارتباطات ما، داده‌ها، کاربران و فرآیندهای کسب‌وکارتان را از هر سیستم یا پلتفرمی، از وب‌سایت و CRM تا تلگرام و سرویس‌های سفارشی، دقیق، سریع و قابل اعتماد به هم متصل کنید. -
-
-
- - اتصال به سایر سیستم ها - - - +
+
+

+ یکپارچه با ابزارهای محبوب +

+

+ اتصال به سایر سیستم‌ها +

-
- + +
+ + + -
- - - -
+ +
+ +
+ + مشاهده همه یکپارچه‌سازی‌ها + +
diff --git a/components/login-form.tsx b/components/login-form.tsx index a772f59..2046779 100644 --- a/components/login-form.tsx +++ b/components/login-form.tsx @@ -61,10 +61,7 @@ export function LoginForm({ /> - @@ -72,11 +69,7 @@ export function LoginForm({ یا ادامه با -

@@ -174,10 +174,10 @@ export default function Pricing() { ما آماده‌ایم تا بر اساس نیازهای شما بهترین پیشنهاد را ارائه دهیم.

- -
diff --git a/components/scroll-to-top.tsx b/components/scroll-to-top.tsx index 157226c..a05e2cf 100644 --- a/components/scroll-to-top.tsx +++ b/components/scroll-to-top.tsx @@ -41,11 +41,11 @@ export function ScrollToTop({ className }: { className?: string }) { )} > diff --git a/components/theme-toggle.tsx b/components/theme-toggle.tsx index 38f8aca..7355ae3 100644 --- a/components/theme-toggle.tsx +++ b/components/theme-toggle.tsx @@ -18,8 +18,7 @@ export function ThemeToggle() { return (