Merge remote-tracking branch 'origin/main' into feat/merge

This commit is contained in:
2026-06-22 19:06:19 +03:30
50 changed files with 962 additions and 215 deletions
+20 -24
View File
@@ -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() {
درباره ما
</h1>
<p className="text-xl leading-relaxed tracking-normal text-muted-foreground max-w-2xl mx-auto">
ما یک گروه متخصص هستیم که در حوزه اینتگریشن و روش‌های نوین یکپارچه‌سازی فعالیت می‌کنیم.
ما یک گروه متخصص هستیم که در حوزه اینتگریشن و روش‌های نوین یکپارچه‌سازی فعالیت می‌کنیم.
هدف ما ارائه راهکارهای هوشمند و کارآمد برای اتصال سیستم‌ها، داده‌ها و فرآیندهای کسب‌وکار است.
</p>
</div>
@@ -32,13 +34,13 @@ export default function AboutPage() {
</h2>
<div className="space-y-4 text-muted-foreground leading-relaxed tracking-normal">
<p>
فیپ یک گروه متخصص است که در حوزه اینتگریشن و روش‌های نوین یکپارچه‌سازی فعالیت می‌کند.
ما با استفاده از تکنولوژی‌های پیشرفته و رویکردهای نوآورانه، به کسب‌وکارها کمک می‌کنیم تا
فیپ یک گروه متخصص است که در حوزه اینتگریشن و روش‌های نوین یکپارچه‌سازی فعالیت می‌کند.
ما با استفاده از تکنولوژی‌های پیشرفته و رویکردهای نوآورانه، به کسب‌وکارها کمک می‌کنیم تا
سیستم‌های خود را به شکلی کارآمد و قابل‌اعتماد بهم متصل کنند.
</p>
<p>
ما در زمینه یکپارچه‌سازی سیستم‌ها، اتوماسیون فرآیندها، ارتباطات چندکاناله و مدیریت داده‌ها
تخصص داریم. با استفاده از روش‌های نوین و ابزارهای پیشرفته، راهکارهای سفارشی برای هر کسب‌وکار
ما در زمینه یکپارچه‌سازی سیستم‌ها، اتوماسیون فرآیندها، ارتباطات چندکاناله و مدیریت داده‌ها
تخصص داریم. با استفاده از روش‌های نوین و ابزارهای پیشرفته، راهکارهای سفارشی برای هر کسب‌وکار
طراحی و پیاده‌سازی می‌کنیم.
</p>
</div>
@@ -56,15 +58,15 @@ export default function AboutPage() {
{/* Mission & Vision */}
<section className="bg-background py-20 md:py-28">
<div className="mx-auto max-w-6xl px-6">
<div className="grid gap-12 md:grid-cols-2">
<div className="grid gap-12 md:grid-cols-2">
<div className="space-y-6 p-8 rounded-2xl border bg-muted/30 transition-all duration-300 hover:shadow-lg hover:-translate-y-1">
<div className="space-y-4">
<h2 className="text-3xl font-bold md:text-4xl leading-tight tracking-normal">
ماموریت ما
</h2>
<p className="leading-relaxed tracking-normal text-muted-foreground text-lg">
ماموریت ما این است که با استفاده از روش‌های نوین اینتگریشن، به کسب‌وکارها کمک کنیم تا
بدون پیچیدگی‌های فنی، سیستم‌های خود را بهم متصل کنند و از قدرت اتوماسیون و ارتباطات هوشمند
ماموریت ما این است که با استفاده از روش‌های نوین اینتگریشن، به کسب‌وکارها کمک کنیم تا
بدون پیچیدگی‌های فنی، سیستم‌های خود را بهم متصل کنند و از قدرت اتوماسیون و ارتباطات هوشمند
بهره‌مند شوند.
</p>
</div>
@@ -75,8 +77,8 @@ export default function AboutPage() {
چشم‌انداز ما
</h2>
<p className="leading-relaxed tracking-normal text-muted-foreground text-lg">
ما می‌خواهیم به گروه پیشرو در حوزه اینتگریشن و روش‌های نوین یکپارچه‌سازی تبدیل شویم.
چشم‌انداز ما این است که هر کسب‌وکاری، از کوچک تا بزرگ، بتواند به راحتی از خدمات ما استفاده کند
ما می‌خواهیم به گروه پیشرو در حوزه اینتگریشن و روش‌های نوین یکپارچه‌سازی تبدیل شویم.
چشم‌انداز ما این است که هر کسب‌وکاری، از کوچک تا بزرگ، بتواند به راحتی از خدمات ما استفاده کند
و به اهداف خود برسد.
</p>
</div>
@@ -193,8 +195,8 @@ export default function AboutPage() {
تیم ما
</h2>
<p className="text-lg text-muted-foreground max-w-2xl mx-auto">
تیم فیپ متشکل از متخصصان با تجربه در حوزه‌های اینتگریشن، فناوری اطلاعات، توسعه نرم‌افزار
و مدیریت کسب‌وکار است. ما با همکاری یکدیگر و استفاده از روش‌های نوین، راهکارهای نوآورانه و
تیم فیپ متشکل از متخصصان با تجربه در حوزه‌های اینتگریشن، فناوری اطلاعات، توسعه نرم‌افزار
و مدیریت کسب‌وکار است. ما با همکاری یکدیگر و استفاده از روش‌های نوین، راهکارهای نوآورانه و
کاربردی برای چالش‌های یکپارچه‌سازی ارائه می‌دهیم.
</p>
</div>
@@ -248,18 +250,12 @@ export default function AboutPage() {
با ما تماس بگیرید تا درباره نیازهای شما صحبت کنیم و بهترین راهکار را پیشنهاد دهیم
</p>
<div className="flex flex-col sm:flex-row gap-4 justify-center">
<a
href="/pricing"
className="inline-flex items-center justify-center rounded-lg bg-primary px-8 py-3 text-base font-medium text-white hover:bg-accent hover:text-foreground transition-colors"
>
مشاهده قیمت‌ها
</a>
<a
href="#contact"
className="inline-flex items-center justify-center rounded-lg border border-primary px-8 py-3 text-base font-medium text-primary hover:bg-accent hover:text-foreground hover:border-accent transition-colors"
>
تماس با ما
</a>
<Button asChild size="lg">
<Link href="/pricing">مشاهده قیمت‌ها</Link>
</Button>
<Button asChild size="lg" variant="outline">
<Link href="#contact">تماس با ما</Link>
</Button>
</div>
</div>
</div>
+8 -7
View File
@@ -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"
/>
</div>
</div>
@@ -160,14 +161,14 @@ export default async function BlogPostPage({ params }: BlogPostPageProps) {
</section>
{relatedPosts.length > 0 && (
<section className="bg-muted border-t border-b">
<div className="mx-auto max-w-6xl p-4">
<h2 className="text-xl text-center mb-6 md:mb-8">
<section className="bg-background border-t pb-16 md:pb-20">
<div className="mx-auto max-w-6xl px-6 pt-10 md:pt-14">
<h2 className="text-xl md:text-2xl text-center mb-8 md:mb-10">
مقالات مرتبط
</h2>
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4">
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6 min-w-0">
{relatedPosts.map((p) => (
<BlogPostCard key={p.id} post={p} variant="tiny" />
<BlogPostCard key={p.id} post={p} variant="related" />
))}
</div>
</div>
+2 -2
View File
@@ -67,7 +67,7 @@ export default async function BlogPage({ searchParams }: BlogPageProps) {
return (
<>
{/* Hero + search & filters — compact */}
{/* Hero + search & filters, compact */}
<section className="bg-background pt-24 pb-6 md:pt-28 md:pb-8">
<div className="mx-auto max-w-3xl px-4 sm:px-6">
<div className="text-center space-y-5">
@@ -98,7 +98,7 @@ export default async function BlogPage({ searchParams }: BlogPageProps) {
aria-label="جستجو در مطالب"
/>
</div>
<Button type="submit" size="default" className="h-9 px-4 shrink-0">
<Button type="submit" className="shrink-0">
جستجو
</Button>
</form>
+5
View File
@@ -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;
}