This commit is contained in:
2026-09-16 08:47:12 +03:30
parent 16cba4492a
commit 116864c838
18 changed files with 859 additions and 605 deletions
+8 -56
View File
@@ -33,7 +33,6 @@ function LinkedInIcon({ className = 'w-4 h-4' }: { className?: string }) {
interface BoardMember {
name: string;
role: string;
title: string;
image: string;
linkedin?: string;
email?: string;
@@ -41,28 +40,19 @@ interface BoardMember {
const boardMembers: BoardMember[] = [
{
name: 'نام و نام‌خانوادگی عضو ۱',
name: 'علی صالح ابوالقاسمی',
role: 'رئیس هیئت مدیره',
title: 'دکتری مدیریت فناوری اطلاعات',
image: '/images/team/member-1.jpg',
linkedin: 'https://linkedin.com',
email: 'board1@company.ir'
},
{
name: 'نام و نام‌خانوادگی عضو ۲',
role: 'مدیرعامل و عضو هیئت مدیره',
title: 'کارشناس ارشد مهندسی نرم‌افزار',
name: 'علی گلشنی',
role: 'عضو هیئت مدیره',
image: '/images/team/member-2.jpg',
linkedin: 'https://linkedin.com',
email: 'board2@company.ir'
},
{
name: 'نام و نام‌خانوادگی عضو ۳',
role: 'نایب‌رئیس هیئت مدیره',
title: 'کارشناس ارشد مدیریت سیستم‌ها',
name: 'فراز فیروزبخت',
role: 'عضو هیئت مدیره',
image: '/images/team/member-3.jpg',
linkedin: 'https://linkedin.com',
email: 'board3@company.ir'
}
];
@@ -80,7 +70,7 @@ export default function AboutPage() {
<section className="space-y-12">
{/* ردیف اصلی Hero */}
<div className="grid grid-cols-1 lg:grid-cols-12 gap-10 items-center">
<div className="grid grid-cols-1 lg:grid-cols-12 gap-10 items-center pt-20">
{/* سمت راست: بیانیه مأموریت و توضیحات */}
<motion.div
@@ -89,18 +79,9 @@ export default function AboutPage() {
transition={{ duration: 0.5 }}
className="lg:col-span-7 space-y-6"
>
{/* تگ وضعیت سیستم */}
<div className="inline-flex items-center gap-2.5 px-3.5 py-1.5 rounded-full bg-indigo-950/40 border border-indigo-500/30 text-indigo-300 font-mono text-xs shadow-inner">
<span className="relative flex h-2 w-2">
<span className="animate-ping absolute inline-flex h-full w-full rounded-full bg-emerald-400 opacity-75"></span>
<span className="relative inline-flex rounded-full h-2 w-2 bg-emerald-500"></span>
</span>
<span className="tracking-wide">Enterprise FinTech & System Engineering</span>
</div>
{/* تیتر با افکت گرادیان نوری */}
<h1 className="text-3xl sm:text-5xl font-black tracking-tight leading-[1.2] text-white">
توسعه زیرساخت‌های نرم‌افزاری مقیاس‌پذیر و <span className="text-transparent bg-clip-text bg-gradient-to-l from-indigo-400 via-sky-300 to-white">امنیت‌محور بانکی</span>
توسعه زیرساخت‌های <span className="text-transparent bg-clip-text bg-gradient-to-l from-indigo-400 via-sky-300 to-white">نرم افزاری</span>
</h1>
{/* متن معرفی */}
@@ -222,8 +203,7 @@ export default function AboutPage() {
{/* ۲. اعضای هیئت مدیره */}
<section className="space-y-10">
<div className="space-y-1 border-b border-gray-800/80 pb-4">
<h2 className="text-2xl font-bold text-white tracking-tight">ارکان راهبری و هیئت مدیره</h2>
<p className="text-xs text-gray-500 font-mono uppercase tracking-wider">Leadership & Governance</p>
<h2 className="text-2xl font-bold text-white tracking-tight">اعضای هیئت مدیره</h2>
</div>
<div className="grid grid-cols-1 md:grid-cols-3 gap-6">
@@ -262,34 +242,6 @@ export default function AboutPage() {
<span className="text-xs font-medium text-indigo-400 mt-1">
{member.role}
</span>
<p className="text-[12px] text-gray-500 mt-1.5 font-mono">
{member.title}
</p>
{/* لینک‌های ارتباطی */}
<div className="flex items-center gap-2 mt-4 pt-3 border-t border-gray-800/60 w-full justify-center text-gray-400">
{member.linkedin && (
<a
href={member.linkedin}
target="_blank"
rel="noopener noreferrer"
className="p-1.5 rounded-lg hover:text-white hover:bg-gray-800/80 transition-colors"
title="پروفایل لینکدین"
>
<LinkedInIcon className="w-4 h-4" />
</a>
)}
{member.email && (
<a
href={`mailto:${member.email}`}
className="p-1.5 rounded-lg hover:text-white hover:bg-gray-800/80 transition-colors"
title="ارسال ایمیل"
>
<Mail className="w-4 h-4" />
</a>
)}
</div>
</motion.div>
))}
</div>
+11 -20
View File
@@ -20,7 +20,7 @@ import {
// دسته‌بندی‌های فنی پروژه
const projectCategories = [
{ id: 'core-banking', label: 'سامانه‌ها و ماژول‌های بانکی', icon: Server },
{ id: 'core-banking', label: ' سامانه ها و ماژول ها ', icon: Server },
{ id: 'db-optimization', label: 'پایگاه‌داده و مقیاس‌پذیری', icon: Database },
{ id: 'ai-engine', label: 'هوش مصنوعی و پردازش اسناد', icon: Cpu },
{ id: 'custom-platform', label: 'داشبوردها و سامانه‌های عملیاتی', icon: Layers }
@@ -81,15 +81,7 @@ export default function ContactPage() {
{/* ۱. Hero Section */}
<section className="text-center max-w-3xl mx-auto space-y-5">
<motion.div
initial={{ opacity: 0, y: -10 }}
animate={{ opacity: 1, y: 0 }}
transition={{ duration: 0.4 }}
className="inline-flex items-center gap-2 px-3.5 py-1.5 rounded-full bg-indigo-950/40 border border-indigo-500/30 text-indigo-300 font-mono text-xs shadow-inner"
>
<Terminal className="w-3.5 h-3.5 text-indigo-400" />
<span>KICKOFF & COLLABORATION TERMINAL</span>
</motion.div>
<motion.h1
initial={{ opacity: 0, y: 10 }}
@@ -97,10 +89,9 @@ export default function ContactPage() {
transition={{ duration: 0.5, delay: 0.1 }}
className="text-3xl sm:text-5xl font-black tracking-tight leading-[1.2] text-white"
>
آغاز یک همکاری مهندسی، <br />
<span className="text-transparent bg-clip-text bg-gradient-to-l from-indigo-400 via-sky-300 to-white">
پایدار و فراتر از مقیاس
</span>
<h1 className="mb-5 text-3xl font-extrabold tracking-tight text-white md:text-5xl pt-20">
آغاز یک <span className="text-transparent bg-clip-text bg-gradient-to-r from-indigo-400 via-cyan-400 to-emerald-400">همکاری</span>
</h1>
</motion.h1>
<motion.p
@@ -109,7 +100,7 @@ export default function ContactPage() {
transition={{ duration: 0.5, delay: 0.2 }}
className="text-gray-400 text-sm sm:text-base leading-relaxed"
>
آماده هم‌افزایی فنی جهت طراحی و اجرای ماژول‌های با پرفورمنس بالا، بازطراحی زیرساخت‌های قدیمی و راهکارهای یکپارچه سازمانی.
آماده هم‌افزایی فنی جهت طراحی و اجرای ماژول‌های با پرفورمنس بالا، بازطراحی زیرساخت‌های قدیمی و راهکارهای یکپارچه
</motion.p>
</section>
@@ -142,7 +133,7 @@ export default function ContactPage() {
{/* انتخاب نوع پروژه */}
<div className="space-y-3">
<label className="block text-xs font-mono text-gray-400">
// ۰۱. نوع پروژه و قلمرو فنی:
نوع پروژه و قلمرو فنی:
</label>
<div className="grid grid-cols-1 sm:grid-cols-2 gap-3">
{projectCategories.map((cat) => {
@@ -269,7 +260,7 @@ export default function ContactPage() {
</div>
<div>
<span className="block text-[11px] text-gray-500 font-mono">DIRECT INBOX</span>
<span className="text-gray-300 font-mono select-all">engineering@domain.ir</span>
<span className="text-gray-300 font-mono select-all">zharfanovin@gmail.com</span>
</div>
</div>
@@ -279,7 +270,7 @@ export default function ContactPage() {
</div>
<div>
<span className="block text-[11px] text-gray-500 font-mono">TECHNICAL LINE</span>
<span className="text-gray-300 font-mono dir-ltr">+98 (21) 8800-0000</span>
<span className="text-gray-300 font-mono dir-ltr">28427192</span>
</div>
</div>
@@ -289,7 +280,7 @@ export default function ContactPage() {
</div>
<div>
<span className="block text-[11px] text-gray-500 font-mono">LOCATION</span>
<span className="text-gray-300 leading-relaxed">تهران، نارمک، پردیس نوآوری</span>
<span className="text-gray-300 leading-relaxed">شریعی/میرمطهری/پلاک 14</span>
</div>
</div>
</div>
@@ -338,7 +329,7 @@ export default function ContactPage() {
{/* Footer ساده و هماهنگ */}
<footer className="border-t border-gray-900 py-6 text-center text-xs text-gray-600 font-mono">
SYSTEM ENGINEERING // ENTERPRISE ARCHITECTURE
ژرفا نواوری داده و آینده
</footer>
</div>
);
+1 -1
View File
@@ -1,7 +1,7 @@
import CtaBanner from "@/components/banner/CtaBanner";
import HeroSection from "@/components/features/home/hero-section";
import ProjectsSection from "@/components/features/projects/projects-section";
import { ServicesBentoGrid } from "@/components/features/services/services-bento-grid";
import ServicesBentoGrid from "@/components/features/services/services-bento-grid";
import { Footer } from "@/components/shared/footer";
+99 -78
View File
@@ -6,11 +6,7 @@ import Header from "@/components/shared/header";
import Footer from "@/components/shared/footer";
import {
ExternalLink,
GitBranch,
CheckCircle2,
Workflow,
ShieldCheck,
Database,
Terminal
} from "lucide-react";
@@ -22,60 +18,106 @@ interface ProjectItem {
highlights: string[];
techStack: string[];
status: string;
image?: string; // آدرس تصویر پروژه
}
const projectsData: ProjectItem[] = [
{
id: 1,
title: "سامانه یکپارچه پرتال و اینترانت بانکی",
category: "سیستم‌های سازمانی و اینترانت",
description: "طراحی و توسعه معماری متمرکز جهت مدیریت احراز هویت، کارتابل سازمانی، ماژول‌های آماری و دسترسی‌پذیری بالا برای پرسنل شعب.",
title: "مرکز تماس هوشمند",
category: "هوش مصنوعی و تحلیل داده‌های صوتی",
description: "پلتفرم تحلیل مکالمات صوتی مرکز تماس مبتنی بر STT و LLM جهت ارزیابی خودکار عملکرد کارشناسان، سنجش احساسات مشتری و استخراج KPIهای سازمانی.",
highlights: [
"مدیریت سطوح دسترسی پیچیده (RBAC) و احراز هویت متمرکز",
"معماری ماژولار کارتابل با پشتیبانی از صف‌های پردازشی سنگین",
"یکپارچه‌سازی با هسته سامانه‌های بانکی (Core Banking)"
"تبدیل خودکار و دقیق گفتار به متن (Speech-to-Text) با پشتیبانی تخصصی از زبان فارسی",
"ارزیابی خودکار شاخص‌های عملکردی (KPI)، لحن، ادب و پایبندی به اسکریپت سازمانی",
"تحلیل احساسات (Sentiment Analysis) و خلاصه‌سازی هوشمند مکالمات جهت ثبت در CRM",
"یکپارچه‌سازی کامل با زیرساخت‌های VoIP / Asterisk و پایپ‌لاین‌های پردازش صوت"
],
techStack: ["Laravel 11", "PostgreSQL", "Redis", "Filament", "Docker"],
status: "Production / Enterprise"
techStack: [
"Python",
"FastAPI",
"Whisper / STT",
"LLM / LangChain",
"PostgreSQL",
"Redis",
"Docker"
],
status: "Production / AI Solution",
image: "/image/aicall2.png" // مسیر تصویر دلخواه خود را اینجا وارد کنید
},
{
id: 2,
title: "سامانه هوشمند مدیریت شیفت و پرسنل بانکی",
category: "پلتفرم عملیاتی و لجستیک",
description: "پیاده‌سازی موتور تخصیص خودکار شیفت‌ها، مدیریت جایگزینی و اعلان‌های آنی جهت بهینه‌سازی توزیع نیروی انسانی در شبکه شعب.",
title: "پلتفرم هوشمند تمرینات ورزشی نیوفیت",
category: "سلامت، فیتنس و تحلیل داده‌های ورزشی",
description: "سامانه جامع و هوشمند صدور برنامه‌های تمرینی اختصاصی مبتنی بر ارزیابی دقیق فاکتورهای بیومتریک و سبک زندگی کاربران، همراه با سیستم زمان‌بندی داینامیک و ارائه‌دهنده محتوای چندرسانه‌ای آموزشی.",
highlights: [
"الگوریتم زمان‌بندی پویا جهت پیشگیری از تداخل کاری",
"سیستم اعلان‌های بلادرنگ (Real-time WebSockets)",
"گزارش‌گیری تحلیلی با بازدهی بالا و کشینگ چندلایه‌ای"
"موتور ارزیابی و پروفایلینگ پیشرفته کاربر (قد، وزن، سابقه تمرینی، سطح استرس، شاخص فعالیت روزانه و اهداف فردی)",
"تولید خودکار و هوشمند برنامه‌های تمرینی شخصی‌سازی‌شده متناسب با محیط تمرین (خانه / باشگاه) و اهداف ورزشی",
"سیستم زمان‌بندی منعطف و تقویم داینامیک جهت مدیریت روزها، ساعات و فازبندی جلسات تمرینی",
"طراحی هوشمند متغیرهای تمرین شامل ساختار ست‌بندی، الگوهای بارگذاری و توصیه‌های تکنیکی و بیومکانیکی هر حرکت",
"پایگاه داده چندرسانه‌ای بهینه‌سازی‌شده برای استریم روان ویدیوهای آموزشی اجرای صحیح حرکات و نکات کلیدی"
],
techStack: ["FastAPI", "Python", "PostgreSQL", "Redis", "React"],
status: "Deployed"
techStack: [
"Flutter / React Native",
"FastAPI / Python",
"PostgreSQL",
"Redis",
"Object Storage / CDN",
"Docker"
],
status: "Production / Mobile Application",
image: "/image/neo.png" // مسیر تصویر دلخواه خود را اینجا وارد کنید
},
{
id: 3,
title: "پایپ‌لاین رویدادمحور و موتور پردازش داده (TMS & Store)",
category: "معماری توزیع‌شده و میکروسرویس",
description: "طراحی زیرساخت پردازش غیرهمگام رویدادها جهت مدیریت دوره‌های آموزشی سازمانی و ثبت سفارشات درون‌سازمانی با تضمین تحویل پیام.",
title: "دستیار هوشمند فروش و پشتیبانی",
category: "هوش مصنوعی، RAG و عامل‌های هوشمند (AI Agents)",
description: "سامانه دستیار هوشمند سازمانی مبتنی بر معماری RAG و عامل‌های گفتگومحور؛ مسلط به کل محتوای وب‌سایت، محصولات و مستندات جهت افزایش نرخ تبدیل فروش و کاهش ۷۰ درصدی تیکت‌های پشتیبانی.",
highlights: [
"به‌کارگیری Kafka و RabbitMQ برای انتشار و مصرف پیام‌ها",
"طراحی الگوهای Idempotency و Circuit Breaker در ارتباطات",
"کاهش لیتنسی پردازش داده‌های حجیم به زیر ۵۰ میلی‌ثانیه"
"پیاده‌سازی معماری پیشرفته RAG (Retrieval-Augmented Generation) با سینک خودکار کاتالوگ و صفحات",
"عامل هوشمند فروش (Sales Agent) جهت هدایت رفتار کاربر به سبد خرید و افزایش Conversion Rate",
"کاهش بیش از ۷۰ درصدی بار تیکت‌های پشتیبانی با پاسخ‌دهی بلادرنگ، بدون Hallucination و مستند به داده‌های سازمان",
"یکپارچه‌سازی از طریق Webhook / API با سیستم‌های انبارداری و سفارشات (Live Stock / Order Status)",
"نصب و تعبیه بسیار سریع در وب‌سایت‌ها تنها از طریق یک Script Tag سبک"
],
techStack: ["Laravel", "Kafka", "RabbitMQ", "Docker", "CI/CD"],
status: "Microservices"
techStack: [
"Python",
"FastAPI",
"LangChain / LlamaIndex",
"Qdrant / Vector DB",
"OpenAI / Local LLMs",
"Redis",
"Docker"
],
status: "Production / AI Solution",
image: "/image/payai.png" // مسیر تصویر دلخواه خود را اینجا وارد کنید
},
{
id: 4,
title: "موتور جستجوی معنایی و پایگاه دانش برداری (RAG)",
category: "سیستم‌های مبتنی بر هوش مصنوعی",
description: "طراحی و استقرار پایپ‌لاین تولید و نمایه‌سازی بردارهای متنی مستندات بانکی جهت پرسش‌وپاسخ هوشمند و بازیابی دقیق اسناد سازمانی.",
title: "معلم و دستیار آموزشی هوشمند",
category: "هوش مصنوعی، RAG و فناوری‌های آموزشی (EdTech)",
description: "پلتفرم جامع آموزش تعاملی و یادگیری شخصی‌سازی‌شده مبتنی بر معماری RAG و پردازش صوت دوطرفه؛ مسلط بر کتب درسی رسمی جهت رفع توهم هوش مصنوعی (Zero Hallucination)، طراحی آزمون، تصحیح خودکار و تولید درسنامه.",
highlights: [
"ذخیره‌سازی و کوئری‌گیری پرسرعت با Qdrant Vector Database",
"استراتژی Chunking بهینه‌شده برای اسناد فارسی و اصطلاحات تخصصی",
"اتصال امن به مدل‌های زبانی محلی بدون خروج داده‌های محرمانه"
"پیاده‌سازی معماری RAG بر روی متون کتب درسی رسمی با ارجاع دقیق به سرفصل‌ها و پاراگراف‌ها جهت جلوگیری از Hallucination",
"موتور هوشمند تولید آزمون‌های تستی و تشریحی در سه سطح دشواری با سناریوهای شب امتحان",
"تصحیح تحلیلی پاسخ‌های تشریحی دانش‌آموز با تحلیل گام‌به‌گام و ارائه فیدبک مفهومی مبتنی بر رفرنس کتاب",
"تعامل صوتی دوطرفه (Voice-Enabled) با موتورهای تبدیل متن به گفتار (TTS) و گفتار به متن فارسی (STT)",
"ماژول خلاصه‌سازی خودکار فصول، تولید درسنامه‌های ساختاریافته و استخراج نکات کلیدی شب امتحان",
"معماری مقیاس‌پذیر و ماژولار جهت مدیریت پیک ترافیک و درخواست‌های همزمان در ایام امتحانات"
],
techStack: ["Python", "FastAPI", "Qdrant", "PostgreSQL", "Docker"],
status: "R&D / Production"
techStack: [
"Python",
"FastAPI",
"LangChain / LlamaIndex",
"Qdrant / Milvus (Vector DB)",
"Whisper / STT & TTS",
"OpenAI / Local LLMs",
"PostgreSQL",
"Redis",
"Docker"
],
status: "Production / AI Solution",
image: "/image/student2.png" // مسیر تصویر دلخواه خود را اینجا وارد کنید
}
];
@@ -96,16 +138,11 @@ export default function ProjectsPage() {
transition={{ duration: 0.6 }}
className="mx-auto max-w-3xl"
>
<div className="inline-flex items-center gap-2 px-3 py-1 mb-4 rounded-full bg-indigo-950/40 border border-indigo-500/30 text-indigo-400 text-xs font-mono">
<GitBranch className="w-3.5 h-3.5" />
<span>پروژه‌ها و سیستم‌های مقیاس‌پذیر</span>
</div>
<h1 className="mb-5 text-3xl font-extrabold tracking-tight text-white md:text-5xl">
معماری نرم‌افزار، <span className="text-transparent bg-clip-text bg-gradient-to-r from-indigo-400 via-cyan-400 to-emerald-400">سامانه‌های سازمانی</span> و بک‌اند
<h1 className="mb-5 text-3xl font-extrabold tracking-tight text-white md:text-5xl pt-20">
معماری نرم‌افزار <span className="text-transparent bg-clip-text bg-gradient-to-r from-indigo-400 via-cyan-400 to-emerald-400">سامانه‌های سازمانی</span>
</h1>
<p className="text-sm md:text-base text-gray-400 leading-relaxed max-w-2xl mx-auto">
نمونه‌ای از سیستم‌های تحت وب، میکروسرویس‌ها و پایپ‌لاین‌های مقیاس‌پذیر که با تمرکز بر امنیت، کارایی بالا و پایداری شبکه توسعه یافته‌اند.
نمونه‌ای از سیستم‌های تحت وب، میکروسرویس‌ها و پایپ‌لاین‌های مقیاس‌پذیر با تمرکز بر امنیت
</p>
</motion.div>
</section>
@@ -181,7 +218,7 @@ export default function ProjectsPage() {
</div>
</motion.div>
{/* ستون کارت سیستم */}
{/* ستون تصویر سیستم */}
<motion.div
initial={{ opacity: 0, x: isEven ? -40 : 40 }}
whileInView={{ opacity: 1, x: 0 }}
@@ -190,6 +227,7 @@ export default function ProjectsPage() {
className="w-full lg:w-[46%]"
>
<div className="relative rounded-2xl border border-gray-800 bg-gray-900/50 p-6 backdrop-blur-md shadow-2xl hover:border-gray-700 transition-colors">
{/* هدر پنجره */}
<div className="flex items-center justify-between border-b border-gray-800/80 pb-3 mb-4">
<div className="flex items-center gap-1.5">
<div className="w-2.5 h-2.5 rounded-full bg-rose-500/80" />
@@ -198,41 +236,24 @@ export default function ProjectsPage() {
</div>
<div className="text-[11px] font-mono text-gray-500 flex items-center gap-1">
<Terminal className="w-3.5 h-3.5 text-indigo-400" />
<span>system://node.svc_0{project.id}</span>
<span>preview://node.svc_0{project.id}</span>
</div>
</div>
<div className="space-y-3 font-mono text-xs">
<div className="p-3 rounded-lg bg-gray-950/70 border border-gray-800/60">
<div className="text-gray-500 text-[10px] mb-1">سطح دسترس‌پذیری و امنیت:</div>
<div className="text-emerald-400 flex items-center gap-1.5 font-sans">
<ShieldCheck className="w-3.5 h-3.5" />
<span>High Availability • Multi-layer Auth</span>
{/* قاب تصویر پروژه */}
<div className="relative w-full aspect-[16/10] overflow-hidden rounded-xl border border-gray-800/60 bg-gray-950/80 group">
{project.image ? (
<img
src={project.image}
alt={project.title}
className="w-full h-full object-cover object-center transition-transform duration-500 group-hover:scale-105"
/>
) : (
<div className="w-full h-full flex flex-col items-center justify-center text-gray-600 font-mono text-xs gap-2">
<Terminal className="w-6 h-6 text-gray-700" />
<span>No Preview Available</span>
</div>
</div>
<div className="grid grid-cols-2 gap-2">
<div className="p-2.5 rounded-lg bg-gray-950/70 border border-gray-800/60">
<div className="text-gray-500 text-[10px] flex items-center gap-1 mb-1">
<Database className="w-3 h-3 text-indigo-400" />
<span>دیتابیس / کش</span>
</div>
<div className="text-gray-300 font-semibold text-[11px]">PostgreSQL + Redis</div>
</div>
<div className="p-2.5 rounded-lg bg-gray-950/70 border border-gray-800/60">
<div className="text-gray-500 text-[10px] flex items-center gap-1 mb-1">
<Workflow className="w-3 h-3 text-cyan-400" />
<span>جریان پیام‌ها</span>
</div>
<div className="text-indigo-300 font-semibold text-[11px]">Async Queues</div>
</div>
</div>
<div className="p-3 rounded-lg bg-gray-950/70 border border-gray-800/60 text-gray-400 text-[11px] leading-relaxed" dir="ltr">
<span className="text-indigo-400">$</span> runtime.optimize(--workers=8 --cache=redis)
<br />
<span className="text-emerald-500 font-bold">✓</span> status: operational [200 OK]
</div>
)}
</div>
</div>
</motion.div>
@@ -251,11 +272,11 @@ export default function ProjectsPage() {
آماده پیاده‌سازی و توسعه سیستم‌های پیچیده
</h3>
<p className="text-xs md:text-sm text-gray-400 leading-relaxed">
اگر نیاز به مشاوره معماری نرم‌افزار، مقیاس‌پذیری سرویس‌ها یا پیاده‌سازی ماژول‌های اینترانت و سازمانی دارید، در ارتباط باشید.
اگر نیاز به مشاوره معماری نرم‌افزار، مقیاس‌پذیری سرویس‌ها یا پیاده‌سازی ماژول‌های اینترانت و سازمانی دارید
</p>
<div className="pt-2">
<a
href="mailto:contact@example.com"
href="/contact"
className="inline-flex items-center gap-2 px-6 py-2.5 rounded-lg bg-indigo-600 hover:bg-indigo-500 text-white text-xs font-semibold shadow-lg shadow-indigo-600/30 transition-all hover:scale-105"
>
<span>شروع همکاری فنی</span>
+4 -14
View File
@@ -133,23 +133,15 @@ export default function ServicesPage() {
{/* ۱. Hero Section */}
<section className="text-center max-w-3xl mx-auto space-y-6">
<motion.div
initial={{ opacity: 0, y: -10 }}
animate={{ opacity: 1, y: 0 }}
transition={{ duration: 0.4 }}
className="inline-flex items-center gap-2 px-3.5 py-1.5 rounded-full bg-indigo-950/40 border border-indigo-500/30 text-indigo-300 font-mono text-xs shadow-inner"
>
<Zap className="w-3.5 h-3.5 text-indigo-400" />
<span>Engineering Capabilities & Solutions</span>
</motion.div>
<motion.h1
initial={{ opacity: 0, y: 10 }}
animate={{ opacity: 1, y: 0 }}
transition={{ duration: 0.5, delay: 0.1 }}
className="text-3xl sm:text-5xl font-black tracking-tight leading-[1.2] text-white"
className="text-3xl sm:text-5xl font-black tracking-tight leading-[1.2] text-white pt-30"
>
خدمات تخصصی <span className="text-transparent bg-clip-text bg-gradient-to-l from-indigo-400 via-sky-300 to-white">مهندسی سیستم</span> و راهکارهای مالی
خدمات تخصصی <span className="text-transparent bg-clip-text bg-gradient-to-l from-indigo-400 via-sky-300 to-white">مهندسی سیستم</span>
</motion.h1>
<motion.p
@@ -158,11 +150,9 @@ export default function ServicesPage() {
transition={{ duration: 0.5, delay: 0.2 }}
className="text-gray-400 text-sm sm:text-base leading-relaxed"
>
ارائه خدمات یکپارچه نرم‌افزاری در مقیاس سازمانی، از معماری پایگاه‌های داده با تراکنش بالا تا طراحی زیرساخت‌های پایدار و امنیت‌محور بانکی.
ارائه خدمات یکپارچه نرم‌افزاری در مقیاس سازمانی، از معماری پایگاه‌های داده با تراکنش بالا تا طراحی زیرساخت‌های پایدار
</motion.p>
</section>
{/* ۲. Engineering Workflow Highlight */}
<motion.div
initial={{ opacity: 0, scale: 0.98 }}
animate={{ opacity: 1, scale: 1 }}
+85
View File
@@ -0,0 +1,85 @@
'use client';
import React from 'react';
import { motion } from 'framer-motion';
import { CheckCircle2 } from 'lucide-react';
// ۱. تعریف Type برای داده‌های ورودی کامپوننت
// این همان اینترفیس ServiceItem از فایل اصلی شماست
export interface ServiceItem {
id: string;
title: string;
subtitle: string;
icon: React.ElementType;
color: string;
description: string;
capabilities: string[];
techStack: string[];
}
// ۲. تعریف Props کامپوننت کارت
interface ServiceCardProps {
service: ServiceItem;
index: number; // برای تأخیر انیمیشن
}
const ServiceCard: React.FC<ServiceCardProps> = ({ service, index }) => {
const Icon = service.icon;
return (
<motion.div
initial={{ opacity: 0, y: 15 }}
animate={{ opacity: 1, y: 0 }}
transition={{ duration: 0.35, delay: index * 0.08 }}
className="group relative flex flex-col justify-between p-6 rounded-2xl bg-gray-900/30 border border-gray-800/80 hover:border-indigo-500/30 hover:bg-gray-900/50 transition-all duration-300"
>
{/* Header Card */}
<div>
<div className="flex items-center justify-between mb-5">
<div className={`w-11 h-11 rounded-xl border flex items-center justify-center transition-transform group-hover:scale-105 ${service.color}`}>
<Icon className="w-5 h-5" />
</div>
<span className="font-mono text-[11px] text-gray-500 font-bold tracking-wider">
{service.id}
</span>
</div>
<h3 className="text-base font-bold text-white group-hover:text-indigo-200 transition-colors mb-1">
{service.title}
</h3>
<p className="text-[11px] font-mono text-gray-500 mb-3 uppercase tracking-wide">
{service.subtitle}
</p>
<p className="text-xs text-gray-400 leading-relaxed mb-5 text-justify">
{service.description}
</p>
{/* Capabilities List */}
<div className="space-y-2 mb-6 pt-4 border-t border-gray-800/60">
<span className="text-[11px] font-mono text-gray-400 font-semibold block">قابلیت‌های کلیدی:</span>
{service.capabilities.map((cap, i) => (
<div key={i} className="flex items-start gap-2 text-xs text-gray-300">
<CheckCircle2 className="w-3.5 h-3.5 text-indigo-400 shrink-0 mt-0.5" />
<span>{cap}</span>
</div>
))}
</div>
</div>
{/* Tech Stack Footer */}
<div className="pt-4 border-t border-gray-800/60 flex flex-wrap gap-1.5">
{service.techStack.map((tech) => (
<span
key={tech}
className="text-[10px] font-mono px-2.5 py-1 rounded bg-gray-950 border border-gray-800 text-gray-400 group-hover:border-gray-700 transition-colors"
>
{tech}
</span>
))}
</div>
</motion.div>
);
};
export default ServiceCard;
+20
View File
@@ -0,0 +1,20 @@
'use client';
import React from 'react';
import ServiceCard, { type ServiceItem } from './ServiceCard'; // ایمپورت کامپوننت کارت و تایپ آن
interface ServicesGridProps {
services: ServiceItem[];
}
const ServicesGrid: React.FC<ServicesGridProps> = ({ services }) => {
return (
<section className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
{services.map((service, index) => (
<ServiceCard key={service.id} service={service} index={index} />
))}
</section>
);
};
export default ServicesGrid;
+46 -49
View File
@@ -2,13 +2,31 @@
import React from "react";
import { motion } from "framer-motion";
import { ExternalLink, LucideIcon } from "lucide-react";
// تنظیمات انیمیشن نرم برای Framer Motion
const customEase: [number, number, number, number] = [0.16, 1, 0.3, 1];
export default function CtaBanner() {
// اینترفیس پراپ‌ها
interface CallToActionProps {
title?: string;
description?: string;
buttonText?: string;
buttonLink?: string;
Icon?: LucideIcon;
}
export default function CallToAction({
title = "آماده پیاده‌سازی و توسعه سیستم‌های پیچیده",
description = "اگر نیاز به مشاوره معماری نرم‌افزار، مقیاس‌پذیری سرویس‌ها یا پیاده‌سازی ماژول‌های اینترانت و سازمانی دارید، در ارتباط باشید.",
buttonText = "شروع همکاری فنی",
buttonLink = "mailto:contact@example.com",
Icon = ExternalLink,
}: CallToActionProps) {
return (
// بخش اصلی با کنترلر موس و افکت Spotlight بدون تغییر باقی می‌ماند
<section
className="relative py-28 md:py-36 px-4 md:px-8 bg-gray-950 overflow-hidden flex items-center justify-center"
className="relative py-20 px-6 bg-gray-950 overflow-hidden flex items-center justify-center"
onMouseMove={(e) => {
const { currentTarget, clientX, clientY } = e;
const { left, top } = currentTarget.getBoundingClientRect();
@@ -16,63 +34,42 @@ export default function CtaBanner() {
currentTarget.style.setProperty("--mouse-y", `${clientY - top}px`);
}}
>
{/* ========================================================
پس‌زمینه کاملاً منطبق با سکشن Projects
======================================================== */}
{/* افکت Spotlight */}
{/* افکت‌های پس‌زمینه (Spotlight و Grid) بدون تغییر */}
<div className="pointer-events-none absolute -inset-px opacity-50 before:absolute before:inset-0 before:bg-[radial-gradient(800px_circle_at_var(--mouse-x)_var(--mouse-y),rgba(255,255,255,0.06),transparent_40%)]" />
{/* پترن گرید ۲۴ پیکسلی خاکستری */}
<div className="pointer-events-none absolute inset-0 bg-[linear-gradient(to_right,#80808012_1px,transparent_1px),linear-gradient(to_bottom,#80808012_1px,transparent_1px)] bg-[size:24px_24px]" />
<div className="relative z-10 max-w-4xl w-full mx-auto">
<div className="relative z-10 max-w-5xl w-full mx-auto">
{/* کارت اصلی با انیمیشن و استایل رنگ جدید */}
<motion.div
initial={{ opacity: 0, y: 25, scale: 0.98 }}
whileInView={{ opacity: 1, y: 0, scale: 1 }}
viewport={{ once: true, margin: "-50px" }}
transition={{ duration: 0.8, ease: customEase }}
className="group relative rounded-3xl bg-neutral-900/50 border border-white/10 overflow-hidden backdrop-blur-md p-8 md:p-16 flex flex-col items-center text-center transition-colors hover:bg-neutral-900/70"
// تغییرات اصلی در این خط اعمال شده است
className="relative rounded-2xl border border-gray-800 bg-gradient-to-b from-gray-900/80 to-gray-950 p-8 md:p-12 text-center overflow-hidden shadow-2xl"
>
{/* هاله محو نوری پشت متن */}
<div className="pointer-events-none absolute -top-24 left-1/2 -translate-x-1/2 w-96 h-48 bg-white/[0.04] rounded-full blur-3xl" />
{/* تیتر اصلی با گرادیانت هماهنگ با متون Projects */}
<motion.h2
initial={{ opacity: 0, y: 15 }}
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true }}
transition={{ duration: 0.7, delay: 0.1, ease: customEase }}
className="text-3xl sm:text-4xl md:text-5xl lg:text-6xl font-bold tracking-tight leading-[1.25] text-white max-w-2xl mb-8"
>
آماده خلق یک{" "}
<span className="text-neutral-500">شاهکار دیجیتال</span> هستید؟
</motion.h2>
{/* دکمه اکشن */}
<motion.div
initial={{ opacity: 0, y: 12 }}
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true }}
transition={{ duration: 0.7, delay: 0.2, ease: customEase }}
>
<button className="relative group/btn inline-flex items-center justify-center gap-3 px-8 py-4 rounded-full font-semibold text-gray-950 text-base md:text-lg bg-white hover:bg-neutral-200 active:scale-[0.98] transition-all duration-300 shadow-[0_0_25px_rgba(255,255,255,0.15)] hover:shadow-[0_0_35px_rgba(255,255,255,0.25)]">
<span className="tracking-tight">شروع همکاری</span>
<svg
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
strokeWidth={2.2}
stroke="currentColor"
className="w-5 h-5 transition-transform duration-300 group-hover/btn:-translate-x-1.5"
{/* افکت نوری جدید جایگزین شده است */}
<div className="absolute top-0 right-0 w-64 h-64 bg-indigo-500/10 rounded-full blur-3xl pointer-events-none" />
{/* محتوای داخلی */}
<div className="relative z-10 max-w-2xl mx-auto space-y-4">
<h3 className="text-2xl md:text-3xl font-bold text-white">
{title}
</h3>
{/* استایل متن توضیحات به‌روز شد */}
<p className="text-xs md:text-sm text-gray-400 leading-relaxed">
{description}
</p>
<div className="pt-2">
<a
href={buttonLink}
className="inline-flex items-center gap-2 px-6 py-2.5 rounded-lg bg-indigo-600 hover:bg-indigo-500 text-white text-xs font-semibold shadow-lg shadow-indigo-600/30 transition-all hover:scale-105"
>
<path
strokeLinecap="round"
strokeLinejoin="round"
d="M10.5 19.5L3 12m0 0l7.5-7.5M3 12h18"
/>
</svg>
</button>
</motion.div>
<span>{buttonText}</span>
{Icon && <Icon className="w-3.5 h-3.5" />}
</a>
</div>
</div>
</motion.div>
</div>
</section>
+44
View File
@@ -0,0 +1,44 @@
import React from "react";
import { ExternalLink, LucideIcon } from "lucide-react";
// تعریف تایپ‌ها برای انعطاف‌پذیری کامپوننت (پراپ‌های اختیاری)
interface CallToActionProps {
title?: string;
description?: string;
buttonText?: string;
buttonLink?: string;
Icon?: LucideIcon;
}
export default function Sectionbanner({
title = "آماده پیاده‌سازی و توسعه سیستم‌های پیچیده",
description = "اگر نیاز به مشاوره معماری نرم‌افزار، مقیاس‌پذیری سرویس‌ها یا پیاده‌سازی ماژول‌های اینترانت و سازمانی دارید، در ارتباط باشید.",
buttonText = "شروع همکاری فنی",
buttonLink = "mailto:contact@example.com",
Icon = ExternalLink,
}: CallToActionProps) {
return (
<section className="relative px-6 pb-20">
<div className="mx-auto max-w-5xl rounded-2xl border border-gray-800 bg-gradient-to-b from-gray-900/80 to-gray-950 p-8 md:p-12 text-center relative overflow-hidden shadow-2xl">
<div className="absolute top-0 right-0 w-64 h-64 bg-indigo-500/10 rounded-full blur-3xl pointer-events-none" />
<div className="relative z-10 max-w-2xl mx-auto space-y-4">
<h3 className="text-2xl md:text-3xl font-bold text-white">
{title}
</h3>
<p className="text-xs md:text-sm text-gray-400 leading-relaxed">
{description}
</p>
<div className="pt-2">
<a
href={buttonLink}
className="inline-flex items-center gap-2 px-6 py-2.5 rounded-lg bg-indigo-600 hover:bg-indigo-500 text-white text-xs font-semibold shadow-lg shadow-indigo-600/30 transition-all hover:scale-105"
>
<span>{buttonText}</span>
{Icon && <Icon className="w-3.5 h-3.5" />}
</a>
</div>
</div>
</div>
</section>
);
}
+6 -2
View File
@@ -2,6 +2,7 @@
import { useRef } from "react";
import { motion, Variants, useScroll, useTransform } from "framer-motion";
import Link from "next/link";
// تعریف Variants با انیمیشن‌های نرم‌تر و روان‌تر
const containerVariants: Variants = {
@@ -104,12 +105,15 @@ export default function Hero() {
variants={itemVariants}
className="mt-8 flex justify-center gap-4"
>
<button className="px-6 py-2 rounded-md bg-blue-600 text-white font-medium hover:bg-blue-700 transition-colors">
<Link href="/contact"> <button className="px-6 py-2 rounded-md bg-blue-600 text-white font-medium hover:bg-blue-700 transition-colors">
شروع همکاری
</button>
</Link>
<Link href="/project">
<button className="px-6 py-2 rounded-md border border-neutral-700 text-neutral-300 font-medium hover:bg-neutral-800 transition-colors">
مشاهده نمونه کارها
پروژه ها
</button>
</Link>
</motion.div>
</motion.div>
</section>
+306 -98
View File
@@ -1,134 +1,342 @@
"use client";
import { motion } from "framer-motion";
import Image from "next/image";
import { useState } from "react";
import { motion, AnimatePresence } from "framer-motion";
import {
Landmark,
Banknote,
BarChart3,
ShieldCheck,
Workflow,
BadgeCheck,
Terminal,
ArrowLeft,
} from "lucide-react";
// دیتای تستی پروژه‌ها (می‌توانید با دیتای واقعی جایگزین کنید)
const projects = [
type ProjectStatus = "در حال بهره‌برداری" | "در حال توسعه" | "فاز آزمایشی";
interface Project {
id: string;
title: string;
domain: string;
status: ProjectStatus;
description: string;
stack: string[];
metrics: { label: string; value: string }[];
hasDetails: boolean;
Icon: typeof Landmark;
image: string;
}
const customEase: [number, number, number, number] = [0.16, 1, 0.3, 1];
const projects: Project[] = [
{
id: 1,
title: "سیستم مدیریت مالی فراز",
category: "نرم‌افزار سازمانی",
description: "یک پلتفرم یکپارچه برای مدیریت منابع مالی سازمان‌ها با داشبوردهای تحلیلی در لحظه.",
image: "/project-1.jpg", // این عکس‌ها را در پوشه public قرار دهید
color: "from-blue-500/20 to-purple-500/20",
id: "core-banking-report",
title: "دستیار آموزشی و معلم هوشمند",
domain: "آموزشی / سازمانی",
status: "در حال بهره‌برداری",
description:
"این سیستم به جای ارائه پاسخ‌های عمومی، تمامی کتب درسی را در پایگاه دانش خود بلعیده و پردازش کرده است. نتیجه؟ یک معلم خصوصی بی‌نقص که ۲۴ ساعته در دسترس است، دقیقا بر اساس متن کتاب درسی آموزش می‌دهد، امتحان می‌گیرد، تصحیح می‌کند و با دانش‌آموز به صورت صوتی صحبت می‌کند.",
stack: ["Next.js", "TTS", "RAG", "Voice-Enabled Learning", "Speech-to-Text"],
metrics: [
{ label: "زمان تولید گزارش شبانه", value: "۴ دقیقه" },
{ label: "حجم پردازش روزانه", value: "۲.۱ میلیون رکورد" },
],
hasDetails: true,
Icon: Landmark,
image: "/image/student2.png",
},
{
id: 2,
title: "اپلیکیشن سلامت‌جو",
category: "اپلیکیشن موبایل",
description: "سیستم نوبت‌دهی و پایش سلامت بیماران با قابلیت یکپارچه‌سازی با گجت‌های پوشیدنی.",
image: "/project-2.jpg",
color: "from-emerald-500/20 to-teal-500/20",
id: "treasury-dashboard",
title: "دستیار هوشمند فروش و پشتیبانی",
domain: "سازمانی / مالی",
status: "در حال بهره‌برداری",
description:
"راهکاری نوین برای کسب‌وکارهای آنلاین است که شکاف میان کاربر و محتوای سایت شما را پر می‌کند. این سیستم با خزش (Crawling) و ایندکس‌گذاری هوشمند تمامی صفحات وب‌سایت شما، به یک متخصصِ تمام‌عیار تبدیل می‌شود که تمامی محصولات، خدمات، قیمت‌ها و مستندات شما را می‌شناسد.",
stack: ["Next.js", "TypeScript", "NestJS", "Redis", "SQL Server"],
metrics: [
{ label: "کاربر همزمان", value: "۳۵۰+" },
{ label: "Uptime سه‌ماهه", value: "۹۹.۹۵٪" },
],
hasDetails: true,
Icon: Banknote,
image: "/image/payai.png",
},
{
id: 3,
title: "پلتفرم فروشگاهی نوین‌شاپ",
category: "تجارت الکترونیک",
description: "فروشگاه‌ساز ابری با معماری میکروسرویس و قابلیت مقیاس‌پذیری بالا برای ترافیک‌های سنگین.",
image: "/project-3.jpg",
color: "from-orange-500/20 to-red-500/20",
id: "fraud-detection",
title: "مرکز تماس هوشمند",
domain: "بانکی / پشتیبانی",
status: "در حال توسعه",
description:
"«مرکز تماس هوشمند» فراتر از یک سیستم ضبط مکالمه است. این پلتفرم با استفاده از فناوری‌های پیشرفته Speech-to-Text (STT) و LLM، تمامی تماس‌های ورودی و خروجی مرکز تماس شما را تحلیل کرده و شاخص‌های کلیدی عملکرد (KPI) را به صورت خودکار استخراج می‌کند.",
stack: ["Python", "FastAPI", "PostgreSQL", "Kafka", "Docker"],
metrics: [
{ label: "زمان امتیازدهی هر تراکنش", value: "< ۴۰ میلی‌ثانیه" },
{ label: "هشدارهای نادرست", value: "کاهش ۳۱٪" },
],
hasDetails: true,
Icon: ShieldCheck,
image: "/image/aicall2.png",
},
{
id: 4,
title: "اتوماسیون اداری هوشمند",
category: "هوش مصنوعی",
description: "سامانه اتوماسیون مبتنی بر هوش مصنوعی برای دسته‌بندی خودکار نامه‌ها و ارجاعات.",
image: "/project-4.jpg",
color: "from-indigo-500/20 to-blue-500/20",
id: "bpm-automation",
title: "اپلیکیشن ورزشی نئوفیت",
domain: "ورزشی / آموزشی",
status: "در حال بهره‌برداری",
description:
"دستیار هوشمند شما برای رسیدن به تناسب اندام ایده‌آل است. این اپلیکیشن با تحلیل دقیق ویژگی‌های جسمانی، سبک زندگی و شرایط محیطی، برنامه تمرینی کاملاً اختصاصی برای شما تدوین می‌کند. با نیوفیت، می‌توانید زمان و مکان تمرین را به سادگی تعیین کنید.",
stack: ["Next.js", "Node.js", "PostgreSQL", "RabbitMQ"],
metrics: [
{ label: "فرایند فعال", value: "۱۲ فرایند" },
{ label: "کاهش زمان تأییدیه", value: "۴۵٪" },
],
hasDetails: true,
Icon: Workflow,
image: "/image/neo.png",
},
];
// منحنی انیمیشن لوکس (همان که در Hero استفاده کردیم)
const customEase: [number, number, number, number] = [0.16, 1, 0.3, 1];
/** کامپوننت تصویر پروژه */
function ProjectImage({ project, index }: { project: Project; index: number }) {
return (
<div
className="relative h-40 md:h-44 overflow-hidden border-b border-white/5 bg-neutral-950/60 group"
aria-hidden="true"
>
<img
src={project.image}
alt={project.title}
className="w-full h-full object-cover opacity-60 transition-transform duration-700 group-hover:scale-105 group-hover:opacity-80"
/>
<div className="absolute inset-0 bg-gradient-to-t from-neutral-900/90 via-neutral-900/20 to-transparent" />
</div>
);
}
function StatusBadge({ status }: { status: ProjectStatus }) {
const tone =
status === "در حال بهره‌برداری"
? "border-emerald-400/25 bg-emerald-400/10 text-emerald-300"
: status === "در حال توسعه"
? "border-indigo-400/25 bg-indigo-400/10 text-indigo-300"
: "border-amber-400/25 bg-amber-400/10 text-amber-300";
return (
<span
className={`inline-flex items-center gap-1.5 rounded-full border px-2.5 py-1 text-[11px] font-medium ${tone}`}
>
{status === "در حال بهره‌برداری" && (
<BadgeCheck className="h-3 w-3" aria-hidden="true" />
)}
{status}
</span>
);
}
export default function Projects() {
const [activeId, setActiveId] = useState<string>(projects[0].id);
const activeProject =
projects.find((p) => p.id === activeId) ?? projects[0];
const activeIndex = projects.findIndex((p) => p.id === activeProject.id);
return (
<section
className="relative min-h-screen py-32 flex flex-col items-center justify-center overflow-hidden bg-gray-950"
onMouseMove={(e) => {
const { currentTarget, clientX, clientY } = e;
const { left, top } = currentTarget.getBoundingClientRect();
currentTarget.style.setProperty("--mouse-x", `${clientX - left}px`);
currentTarget.style.setProperty("--mouse-y", `${clientY - top}px`);
}}
id="projects"
className="relative py-24 md:py-32 bg-gray-950"
aria-labelledby="projects-heading"
>
{/* افکت Spotlight و Grid (دقیقا مشابه Hero) */}
<div className="pointer-events-none absolute -inset-px opacity-50 before:absolute before:inset-0 before:bg-[radial-gradient(800px_circle_at_var(--mouse-x)_var(--mouse-y),rgba(255,255,255,0.06),transparent_40%)]" />
<div className="pointer-events-none absolute inset-0 bg-[linear-gradient(to_right,#80808012_1px,transparent_1px),linear-gradient(to_bottom,#80808012_1px,transparent_1px)] bg-[size:24px_24px]" />
<div className="pointer-events-none absolute inset-0 bg-[linear-gradient(to_right,#80808010_1px,transparent_1px),linear-gradient(to_bottom,#80808010_1px,transparent_1px)] bg-[size:24px_24px]" />
<div className="z-10 w-full max-w-7xl mx-auto px-4 md:px-8">
{/* هدر بخش پروژه‌ها */}
<div className="mb-20 md:mb-32">
<div className="relative z-10 w-full max-w-7xl mx-auto px-4 md:px-8">
{/* هدر سکشن */}
<div className="mb-12 md:mb-16">
<motion.h2
id="projects-heading"
initial={{ opacity: 0, y: 20 }}
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true, margin: "-100px" }}
transition={{ duration: 1, ease: customEase }}
className="text-4xl md:text-6xl font-bold tracking-tight text-white mb-6"
viewport={{ once: true, margin: "-80px" }}
transition={{ duration: 0.9, delay: 0.05, ease: customEase }}
className="text-2xl md:text-4xl font-bold tracking-tight text-white mb-5"
>
خلق تجربه‌های <span className="text-neutral-500">ماندگار.</span>
خلق ارزش از مسیر فناوری <span className="text-indigo-400"></span>
</motion.h2>
<motion.p
initial={{ opacity: 0, y: 20 }}
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true, margin: "-100px" }}
transition={{ duration: 1, delay: 0.1, ease: customEase }}
className="text-lg md:text-xl text-neutral-400 max-w-2xl"
viewport={{ once: true, margin: "-80px" }}
transition={{ duration: 0.9, delay: 0.1, ease: customEase }}
className="text-base md:text-lg text-neutral-400 max-w-2xl leading-relaxed"
>
برخی از پروژه‌های منتخب ما که با تمرکز بر کارایی، زیبایی و معماری قدرتمند توسعه یافته‌اند.
نگاهی به محصولاتی که مسیر رشد کسب‌وکارها را هموار کردند
</motion.p>
</div>
{/* گرید پروژه‌ها */}
<div className="grid grid-cols-1 md:grid-cols-2 gap-6 md:gap-8">
{projects.map((project, index) => (
<motion.div
key={project.id}
initial={{ opacity: 0, y: 40 }}
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true, margin: "-100px" }}
transition={{
duration: 1.2,
delay: index * 0.15, // انیمیشن آبشاری برای کارت‌ها
ease: customEase,
}}
className="group relative rounded-3xl bg-neutral-900/50 border border-white/5 overflow-hidden backdrop-blur-sm transition-colors hover:bg-neutral-900/80"
>
{/* بخش تصویر (بالای کارت) */}
<div className={`relative h-64 md:h-80 w-full overflow-hidden bg-gradient-to-br ${project.color}`}>
{/*
نکته: برای استفاده از Image در Next.js، کامنت زیر را بردارید و عکس‌ها را در فولدر public بگذارید.
در اینجا موقتاً از یک گرادیانت به عنوان جایگزین عکس استفاده شده است تا خطا نگیرید.
*/}
{/* <Image
src={project.image}
alt={project.title}
fill
className="object-cover object-center transition-transform duration-700 group-hover:scale-105"
/> */}
{/* یک المان تزئینی به جای عکس واقعی (موقتی) */}
<div className="absolute inset-0 flex items-center justify-center text-white/20 font-bold text-3xl transition-transform duration-700 group-hover:scale-105">
تصویر پروژه
</div>
</div>
{/* ── نمای Master-Detail ── */}
<motion.div
initial={{ opacity: 0, y: 32 }}
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true, margin: "-80px" }}
transition={{ duration: 0.9, ease: customEase }}
className="grid grid-cols-1 lg:grid-cols-[320px_1fr] gap-5 md:gap-6 items-stretch"
role="tablist"
aria-label="فهرست پروژه‌ها"
>
{/* ── Master: فهرست پروژه‌ها ── */}
<div
className="flex flex-col rounded-2xl border border-white/10 bg-neutral-900/50 overflow-hidden"
dir="rtl"
>
<div className="flex items-center gap-2 border-b border-white/5 bg-neutral-950/60 px-4 py-3">
<Terminal className="h-4 w-4 text-indigo-400" aria-hidden="true" />
<span
className="font-mono text-[11px] text-neutral-400 tracking-wider"
dir="ltr"
>
پروژه‌ها
</span>
</div>
{/* بخش محتوا (پایین کارت) */}
<div className="p-8">
<div className="text-xs font-semibold tracking-wider text-neutral-500 mb-3 uppercase">
{project.category}
</div>
<h3 className="text-2xl font-bold text-neutral-100 mb-3 group-hover:text-white transition-colors">
{project.title}
</h3>
<p className="text-neutral-400 leading-relaxed text-sm md:text-base">
{project.description}
</p>
<ul className="flex flex-col p-2 gap-1.5">
{projects.map((project, index) => {
const isActive = project.id === activeProject.id;
return (
<li key={project.id}>
<button
type="button"
role="tab"
id={`project-tab-${project.id}`}
aria-selected={isActive}
aria-controls={`project-panel-${project.id}`}
onClick={() => setActiveId(project.id)}
className={`group w-full text-right rounded-xl border px-3.5 py-3.5 transition-all duration-300 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[lab(44.0605%_29.0279_-86.0352_/_0.6)] focus-visible:ring-offset-2 focus-visible:ring-offset-gray-950 ${
isActive
? "border-[lab(44.0605%_29.0279_-86.0352_/_0.4)] bg-[lab(44.0605%_29.0279_-86.0352_/_0.1)]"
: "border-transparent hover:border-white/10 hover:bg-neutral-950/50"
}`}
>
<div className="flex items-center gap-3">
<span
className={`flex h-8 w-8 shrink-0 items-center justify-center rounded-lg border font-mono text-[10px] transition-colors ${
isActive
? "border-[lab(44.0605%_29.0279_-86.0352_/_0.4)] bg-[lab(44.0605%_29.0279_-86.0352_/_0.15)] text-[lab(44.0605%_29.0279_-86.0352)]"
: "border-white/10 bg-neutral-950/60 text-neutral-500 group-hover:text-neutral-300"
}`}
dir="ltr"
>
{String(index + 1).padStart(2, "0")}
</span>
<div className="min-w-0 flex-1">
<div
className={`truncate text-sm font-semibold transition-colors ${
isActive
? "text-white"
: "text-neutral-200 group-hover:text-white"
}`}
>
{project.title}
</div>
</motion.div>
))}
</div>
<div className="mt-0.5 truncate font-mono text-[10px] uppercase tracking-wider text-neutral-500">
{project.domain}
</div>
</div>
<span
aria-hidden="true"
className={`h-1.5 w-1.5 shrink-0 rounded-full transition-all ${
isActive
? "bg-[lab(44.0605%_29.0279_-86.0352)] shadow-[0_0_8px_2px_lab(44.0605%_29.0279_-86.0352_/_0.5)]"
: "bg-white/15"
}`}
/>
</div>
</button>
</li>
);
})}
</ul>
<div className="mt-auto border-t border-white/5 bg-neutral-950/60 px-4 py-3">
<span className="font-mono text-[10px] text-neutral-600" dir="ltr">
ژرفا نوآوری داده و آینده
</span>
</div>
</div>
{/* ── Detail: پنل پیش‌نمایش ── */}
<div
role="tabpanel"
id={`project-panel-${activeProject.id}`}
aria-labelledby={`project-tab-${activeProject.id}`}
className="min-w-0"
>
<AnimatePresence mode="wait">
<motion.article
key={activeProject.id}
initial={{ opacity: 0, y: 20 }}
animate={{ opacity: 1, y: 0 }}
exit={{ opacity: 0, y: -16 }}
transition={{ duration: 0.45, ease: customEase }}
className="group relative flex flex-col h-full rounded-2xl border border-white/10 bg-neutral-900/50 overflow-hidden"
>
<ProjectImage project={activeProject} index={activeIndex} />
<div className="flex flex-col flex-1 p-6 md:p-7">
<div className="flex flex-wrap items-center justify-between gap-2 mb-4">
<span className="font-mono text-[11px] uppercase tracking-wider text-neutral-500">
{activeProject.domain}
</span>
<StatusBadge status={activeProject.status} />
</div>
<h3 className="text-lg md:text-xl font-bold text-neutral-100 mb-2.5 transition-colors group-hover:text-white">
{activeProject.title}
</h3>
<p className="text-sm text-neutral-400 leading-relaxed mb-5">
{activeProject.description}
</p>
<ul
className="flex flex-wrap gap-1.5 mb-5"
aria-label="استک فنی پروژه"
>
{activeProject.stack.map((tech) => (
<li
key={tech}
dir="ltr"
className="rounded-md border border-white/10 bg-neutral-950/60 px-2 py-1 font-mono text-[11px] text-neutral-300"
>
{tech}
</li>
))}
</ul>
<dl className="mt-auto grid grid-cols-2 gap-3 mb-5">
{activeProject.metrics.map((m) => (
<div
key={m.label}
className="rounded-lg border border-white/5 bg-neutral-950/40 px-3 py-2.5"
>
<dt className="text-[11px] text-neutral-500 leading-snug">
{m.label}
</dt>
<dd
className="mt-1 text-sm font-semibold text-indigo-300"
dir="auto"
>
{m.value}
</dd>
</div>
))}
</dl>
{/* دکمه جزئیات پروژه به صورت همیشگی برای همه موارد */}
</div>
</motion.article>
</AnimatePresence>
</div>
</motion.div>
</div>
</section>
);
@@ -2,312 +2,254 @@
import React from "react";
import { motion, useMotionTemplate, useMotionValue } from "framer-motion";
import {
Server,
Terminal,
Database,
ShieldCheck,
Cpu,
Layers,
ArrowUpLeft,
Zap,
Lock
import {
Server,
Terminal,
Database,
ShieldCheck,
Cpu,
Layers,
ArrowUpLeft,
Zap,
Lock
} from "lucide-react";
// ==========================================
// 1. کامپوننت کارت با افکت ردیابی نور موس
// ==========================================
interface SpotlightCardProps {
children: React.ReactNode;
className?: string;
children: React.ReactNode;
className?: string;
}
function SpotlightCard({ children, className = "" }: SpotlightCardProps) {
const mouseX = useMotionValue(0);
const mouseY = useMotionValue(0);
const mouseX = useMotionValue(0);
const mouseY = useMotionValue(0);
function handleMouseMove({ currentTarget, clientX, clientY }: React.MouseEvent) {
const { left, top } = currentTarget.getBoundingClientRect();
mouseX.set(clientX - left);
mouseY.set(clientY - top);
}
function handleMouseMove({ currentTarget, clientX, clientY }: React.MouseEvent) {
const { left, top } = currentTarget.getBoundingClientRect();
mouseX.set(clientX - left);
mouseY.set(clientY - top);
}
return (
<div
onMouseMove={handleMouseMove}
className={`group relative overflow-hidden rounded-2xl border border-white/10 bg-neutral-900/50 p-6 md:p-8 backdrop-blur-xl transition-all duration-300 hover:border-white/20 hover:shadow-2xl hover:shadow-black/40 ${className}`}
>
{/* بازتاب نور داخلی موس در سطح هر کارت */}
<motion.div
className="pointer-events-none absolute -inset-px rounded-2xl opacity-0 transition-opacity duration-300 group-hover:opacity-100"
style={{
background: useMotionTemplate`
radial-gradient(
450px circle at ${mouseX}px ${mouseY}px,
rgba(255, 255, 255, 0.06),
transparent 80%
)
`,
}}
/>
<div className="relative z-10 flex h-full flex-col justify-between">
{children}
</div>
</div>
);
return (
<div
onMouseMove={handleMouseMove}
className={`group relative overflow-hidden rounded-2xl border border-white/10 bg-neutral-900/50 p-6 md:p-8 backdrop-blur-xl transition-all duration-300 hover:border-blue-600 hover:shadow-2xl hover:shadow-black/40 hover:scale-[1.02] ${className}`}
>
<motion.div
className="pointer-events-none absolute -inset-px rounded-2xl opacity-0 transition-opacity duration-300 group-hover:opacity-100"
style={{
background: useMotionTemplate`
radial-gradient(
450px circle at ${mouseX}px ${mouseY}px,
rgba(59, 130, 246, 0.1),
transparent 80%
)
`,
}}
/>
<div className="relative z-10 flex h-full flex-col justify-between">
{children}
</div>
</div>
);
}
// ==========================================
// 2. بخش اصلی Bento Grid خدمات
// ==========================================
export function ServicesBentoGrid() {
return (
<section
className="relative overflow-hidden py-24 md:py-32 bg-gray-950 text-white"
onMouseMove={(e) => {
const { currentTarget, clientX, clientY } = e;
const { left, top } = currentTarget.getBoundingClientRect();
currentTarget.style.setProperty("--mouse-x", `${clientX - left}px`);
currentTarget.style.setProperty("--mouse-y", `${clientY - top}px`);
}}
>
{/* ۱. الگوی گرید پس‌زمینه کاملاً یکدست و بدون سایه/محوشدگی بالا و پایین */}
<div
className="pointer-events-none absolute inset-0 opacity-70"
style={{
backgroundImage: `linear-gradient(to right, #80808012 1px, transparent 1px), linear-gradient(to bottom, #80808012 1px, transparent 1px)`,
backgroundSize: "24px 24px",
}}
/>
return (
<section
className="relative overflow-hidden bg-gray-950 py-24 text-white md:py-32"
onMouseMove={(e) => {
const { currentTarget, clientX, clientY } = e;
const { left, top } = currentTarget.getBoundingClientRect();
currentTarget.style.setProperty("--mouse-x", `${clientX - left}px`);
currentTarget.style.setProperty("--mouse-y", `${clientY - top}px`);
}}
>
{/* Grid background */}
<div
className="pointer-events-none absolute inset-0 opacity-70"
style={{
backgroundImage: `linear-gradient(to right, #80808012 1px, transparent 1px), linear-gradient(to bottom, #80808012 1px, transparent 1px)`,
backgroundSize: "24px 24px",
}}
/>
{/* Mouse light background */}
<div
className="pointer-events-none absolute inset-0 opacity-60 transition-opacity duration-300"
style={{
background: `radial-gradient(750px circle at var(--mouse-x, 50%) var(--mouse-y, 50%), rgba(255, 255, 255, 0.04), transparent 40%)`,
}}
/>
{/* ۲. افکت نوری موس (Global Spotlight) در سطح سکشن */}
<div
className="pointer-events-none absolute inset-0 transition-opacity duration-300 opacity-60"
style={{
background: `radial-gradient(750px circle at var(--mouse-x, 50%) var(--mouse-y, 50%), rgba(255, 255, 255, 0.04), transparent 40%)`,
}}
/>
{/* ۳. محتوای گرید */}
<div className="container relative z-10 mx-auto max-w-7xl px-4 md:px-6">
{/* Section Header */}
<div className="flex flex-col items-start md:items-end justify-between gap-6 pb-16 md:flex-row border-b border-white/10">
<div className="max-w-2xl space-y-3">
<div className="inline-flex items-center gap-2 rounded-full border border-white/10 bg-white/[0.04] px-3.5 py-1 text-xs font-mono text-neutral-300 backdrop-blur-md">
<Zap className="h-3.5 w-3.5 text-amber-400" />
<span>CAPABILITIES & ARCHITECTURE</span>
</div>
<h2 className="text-3xl font-extrabold tracking-tight md:text-4xl lg:text-5xl text-white">
توسعه زیرساخت و معماری مقیاس‌پذیر
</h2>
<p className="text-sm md:text-base text-neutral-400 leading-relaxed font-light">
طراحی، استقرار و بهینه‌سازی سرویس‌های توزیع‌شده سازمانی با حداکثر پایداری و امنیت تراکنش‌ها.
</p>
</div>
<div className="flex items-center gap-3 text-xs font-mono text-neutral-400 bg-neutral-900/70 px-4 py-2 rounded-xl border border-white/10 backdrop-blur-md">
<span className="flex h-2 w-2 rounded-full bg-emerald-500 animate-pulse" />
<span>SYSTEM STATUS: OPERATIONAL</span>
</div>
</div>
{/* Bento Grid (6 Cards) */}
<div className="mt-12 grid grid-cols-1 gap-6 md:grid-cols-2 lg:grid-cols-3">
{/* Card 1: Distributed Core Systems */}
<SpotlightCard>
<div>
<div className="flex items-center justify-between">
<div className="flex h-11 w-11 items-center justify-center rounded-xl bg-blue-500/10 text-blue-400 border border-blue-500/20 shadow-inner">
<Server className="h-5 w-5" />
<div className="container relative z-10 mx-auto max-w-7xl px-4 md:px-6">
{/* بخش عنوان که به وسط چین منتقل شده است */}
<div className="flex flex-col items-center justify-center gap-8 pb-16 text-center">
<div className="flex flex-col items-center gap-3">
<span className="inline-block rounded-full bg-blue-600/10 px-3 py-1 text-sm font-semibold text-blue-400">
خدمات تخصصی
</span>
<h2 className="text-3xl font-bold tracking-tight md:text-5xl lg:text-6xl">
معماری نرم‌افزار مدرن
</h2>
</div>
<p className="max-w-3xl text-lg text-neutral-400 md:text-xl">
ارائه راهکارهای جامع بک‌اند، از طراحی میکروسرویس‌ها و پیاده‌سازی CI/CD تا ساخت سیستم‌های هوشمند و مقیاس‌پذیر.
</p>
</div>
<ArrowUpLeft className="h-5 w-5 text-neutral-500 transition-transform group-hover:-translate-x-1 group-hover:-translate-y-1 group-hover:text-white" />
</div>
<h3 className="mt-5 text-lg font-bold text-white">سامانه‌های توزیع‌شده و Core</h3>
<p className="mt-2 text-xs md:text-sm text-neutral-400 leading-relaxed">
معماری میکروسرویس با پرفورمنس بالا، مدیریت همزمانی (Concurrency) و پردازش بی‌درنگ داده‌ها.
</p>
</div>
<div className="mt-6 rounded-xl border border-white/5 bg-neutral-950/60 p-3.5 font-mono text-xs">
<div className="flex items-center justify-between text-neutral-400 pb-2 border-b border-white/5">
<span>TPS / Throughput</span>
<span className="text-emerald-400 font-semibold">12,450 req/s</span>
</div>
<div className="mt-2 flex items-center justify-between text-[11px] text-neutral-400">
<span>Avg Latency:</span>
<span className="text-neutral-200">~8.2ms</span>
</div>
</div>
{/* گرید اصلی کارت‌ها */}
<div className="grid grid-cols-1 gap-6 md:grid-cols-2 lg:grid-cols-3">
{/* Card 1 */}
<SpotlightCard>
<div>
<div className="flex items-center justify-between">
<div className="flex h-11 w-11 items-center justify-center rounded-xl border border-blue-600/20 bg-blue-600/10 text-blue-500 shadow-inner">
<Zap className="h-5 w-5" />
</div>
<ArrowUpLeft className="h-5 w-5 text-neutral-500 transition-transform group-hover:-translate-x-1 group-hover:-translate-y-1 group-hover:text-blue-400" />
</div>
<h3 className="mt-5 text-lg font-bold text-white">معماری و توسعه Back-End</h3>
<p className="mt-2 text-xs leading-relaxed text-neutral-400 md:text-sm">
طراحی و پیاده‌سازی سیستم‌های مقیاس‌پذیر و ماژولار با PHP (Laravel) و Python (FastAPI/Django).
</p>
</div>
<div className="mt-6 rounded-xl border border-white/5 bg-neutral-950/60 p-3 font-mono text-xs space-y-2">
<div className="flex items-center justify-between">
<span className="text-neutral-400">API Latency:</span>
<span className="font-semibold text-emerald-400">{"<40ms"}</span>
</div>
<div className="flex items-center justify-between">
<span className="text-neutral-400">Uptime:</span>
<span className="font-semibold text-emerald-400">{"99.99%"}</span>
</div>
</div>
</SpotlightCard>
<div className="mt-6 flex flex-wrap gap-1.5">
{["Go", "Laravel 11", "FastAPI", "gRPC"].map((tag) => (
<span key={tag} className="rounded-md bg-white/[0.05] border border-white/5 px-2 py-0.5 font-mono text-[11px] text-neutral-300">
{tag}
</span>
))}
</div>
</SpotlightCard>
{/* Card 2 */}
<SpotlightCard>
<div>
<div className="flex items-center justify-between">
<div className="flex h-11 w-11 items-center justify-center rounded-xl border border-blue-600/20 bg-blue-600/10 text-blue-500 shadow-inner">
<Terminal className="h-5 w-5" />
</div>
<ArrowUpLeft className="h-5 w-5 text-neutral-500 transition-transform group-hover:-translate-x-1 group-hover:-translate-y-1 group-hover:text-blue-400" />
</div>
<h3 className="mt-5 text-lg font-bold text-white">DevOps و زیرساخت ابری</h3>
<p className="mt-2 text-xs leading-relaxed text-neutral-400 md:text-sm">
استقرار و مدیریت کانتینرها، اتوماسیون فرآیند CI/CD و انتشار بدون وقفه عملیاتی (Zero-Downtime).
</p>
</div>
<div className="mt-6 flex flex-wrap gap-1.5">
{["Docker", "CI/CD", "Kubernetes", "Linux"].map((tag) => (
<span key={tag} className="rounded-md border border-white/5 bg-white/[0.05] px-2 py-0.5 font-mono text-[11px] text-neutral-300">
{tag}
</span>
))}
</div>
</SpotlightCard>
{/* Card 2: DevOps & Cloud Infrastructure */}
<SpotlightCard>
<div>
<div className="flex items-center justify-between">
<div className="flex h-11 w-11 items-center justify-center rounded-xl bg-cyan-500/10 text-cyan-400 border border-cyan-500/20 shadow-inner">
<Terminal className="h-5 w-5" />
{/* Card 3 */}
<SpotlightCard>
<div>
<div className="flex items-center justify-between">
<div className="flex h-11 w-11 items-center justify-center rounded-xl border border-blue-600/20 bg-blue-600/10 text-blue-500 shadow-inner">
<Database className="h-5 w-5" />
</div>
<ArrowUpLeft className="h-5 w-5 text-neutral-500 transition-transform group-hover:-translate-x-1 group-hover:-translate-y-1 group-hover:text-blue-400" />
</div>
<h3 className="mt-5 text-lg font-bold text-white">مهندسی داده و Event-Driven</h3>
<p className="mt-2 text-xs leading-relaxed text-neutral-400 md:text-sm">
پیاده‌سازی پایگاه‌های داده رابطه‌ای و NoSQL، کشینگ هوشمند و معماری پیام‌محور نامتقارن.
</p>
</div>
<div className="mt-6 flex flex-wrap gap-1.5">
{["PostgreSQL", "Redis", "Kafka", "RabbitMQ"].map((tag) => (
<span key={tag} className="rounded-md border border-white/5 bg-white/[0.05] px-2 py-0.5 font-mono text-[11px] text-neutral-300">
{tag}
</span>
))}
</div>
</SpotlightCard>
{/* Card 4 */}
<SpotlightCard>
<div>
<div className="flex items-center justify-between">
<div className="flex h-11 w-11 items-center justify-center rounded-xl border border-blue-600/20 bg-blue-600/10 text-blue-500 shadow-inner">
<Cpu className="h-5 w-5" />
</div>
<ArrowUpLeft className="h-5 w-5 text-neutral-500 transition-transform group-hover:-translate-x-1 group-hover:-translate-y-1 group-hover:text-blue-400" />
</div>
<h3 className="mt-5 text-lg font-bold text-white">جستجوی معنایی و هوش مصنوعی</h3>
<p className="mt-2 text-xs leading-relaxed text-neutral-400 md:text-sm">
استخراج اطلاعات، تعبیه‌سازی وکتورها و بازیابی فوق‌سریع در پایگاه‌های داده معنایی.
</p>
</div>
<div className="mt-6 flex flex-wrap gap-1.5">
{["Qdrant", "RAG", "Embeddings", "FastAPI"].map((tag) => (
<span key={tag} className="rounded-md border border-white/5 bg-white/[0.05] px-2 py-0.5 font-mono text-[11px] text-neutral-300">
{tag}
</span>
))}
</div>
</SpotlightCard>
{/* Card 5 */}
<SpotlightCard>
<div>
<div className="flex items-center justify-between">
<div className="flex h-11 w-11 items-center justify-center rounded-xl border border-blue-600/20 bg-blue-600/10 text-blue-500 shadow-inner">
<Layers className="h-5 w-5" />
</div>
<ArrowUpLeft className="h-5 w-5 text-neutral-500 transition-transform group-hover:-translate-x-1 group-hover:-translate-y-1 group-hover:text-blue-400" />
</div>
<h3 className="mt-5 text-lg font-bold text-white">پرتال‌های سازمانی و کارتابل</h3>
<p className="mt-2 text-xs leading-relaxed text-neutral-400 md:text-sm">
طراحی پنل‌های مدیریت فرآیندها (BPMS)، فرم‌سازهای پویا و ماژول‌های سازمانی یکپارچه.
</p>
</div>
<div className="mt-6 flex flex-wrap gap-1.5">
{["Filament 3", "Next.js", "TypeScript", "Tailwind"].map((tag) => (
<span key={tag} className="rounded-md border border-white/5 bg-white/[0.05] px-2 py-0.5 font-mono text-[11px] text-neutral-300">
{tag}
</span>
))}
</div>
</SpotlightCard>
{/* Card 6 */}
<SpotlightCard>
<div>
<div className="flex items-center justify-between">
<div className="flex h-11 w-11 items-center justify-center rounded-xl border border-blue-600/20 bg-blue-600/10 text-blue-500 shadow-inner">
<ShieldCheck className="h-5 w-5" />
</div>
<ArrowUpLeft className="h-5 w-5 text-neutral-500 transition-transform group-hover:-translate-x-1 group-hover:-translate-y-1 group-hover:text-blue-400" />
</div>
<h3 className="mt-5 text-lg font-bold text-white">امنیت، هویت و دسترسی</h3>
<p className="mt-2 text-xs leading-relaxed text-neutral-400 md:text-sm">
پیاده‌سازی احراز هویت متمرکز (SSO)، پروتکل‌های OAuth2/OpenID و سیستم‌های RBAC پیشرفته.
</p>
</div>
<div className="mt-6 flex flex-wrap gap-1.5">
{["OAuth2", "SSO", "RBAC", "JWT"].map((tag) => (
<span key={tag} className="rounded-md border border-white/5 bg-white/[0.05] px-2 py-0.5 font-mono text-[11px] text-neutral-300">
{tag}
</span>
))}
</div>
</SpotlightCard>
</div>
<ArrowUpLeft className="h-5 w-5 text-neutral-500 transition-transform group-hover:-translate-x-1 group-hover:-translate-y-1 group-hover:text-cyan-400" />
</div>
<h3 className="mt-5 text-lg font-bold text-white">اتوماسیون زیرساخت و CI/CD</h3>
<p className="mt-2 text-xs md:text-sm text-neutral-400 leading-relaxed">
استقرار پیوسته، کانتینرسازی و مانیتورینگ سلامت سرویس‌ها بدون وقفه عملیاتی (Zero-Downtime).
</p>
</div>
<div className="mt-6 rounded-xl border border-white/5 bg-neutral-950/60 p-3 font-mono text-[11px] space-y-1">
<div className="text-emerald-400 flex items-center justify-between">
<span>Deployment Status:</span>
<span>Automated</span>
</div>
<div className="text-neutral-400 flex items-center justify-between text-[10px]">
<span>Pipeline Stage:</span>
<span>Success (CI/CD)</span>
</div>
</div>
<div className="mt-6 flex flex-wrap gap-1.5">
{["Docker", "CI/CD", "Kubernetes", "Linux"].map((tag) => (
<span key={tag} className="rounded-md bg-white/[0.05] border border-white/5 px-2 py-0.5 font-mono text-[11px] text-neutral-300">
{tag}
</span>
))}
</div>
</SpotlightCard>
{/* Card 3: Data Engineering & Messaging */}
<SpotlightCard>
<div>
<div className="flex items-center justify-between">
<div className="flex h-11 w-11 items-center justify-center rounded-xl bg-purple-500/10 text-purple-400 border border-purple-500/20 shadow-inner">
<Database className="h-5 w-5" />
</div>
<ArrowUpLeft className="h-5 w-5 text-neutral-500 transition-transform group-hover:-translate-x-1 group-hover:-translate-y-1 group-hover:text-purple-400" />
</div>
<h3 className="mt-5 text-lg font-bold text-white">مهندسی داده و Event-Driven</h3>
<p className="mt-2 text-xs md:text-sm text-neutral-400 leading-relaxed">
پیاده‌سازی پایگاه‌های داده رابطه‌ای و NoSQL، کشینگ هوشمند و معماری پیام‌محور نامتقارن.
</p>
</div>
<div className="mt-6 rounded-xl border border-white/5 bg-neutral-950/60 p-3 font-mono text-xs flex justify-between items-center">
<span className="text-neutral-400">Queue Ingestion:</span>
<span className="text-purple-400 font-semibold">Kafka / RabbitMQ</span>
</div>
<div className="mt-6 flex flex-wrap gap-1.5">
{["PostgreSQL", "Redis", "Kafka", "RabbitMQ"].map((tag) => (
<span key={tag} className="rounded-md bg-white/[0.05] border border-white/5 px-2 py-0.5 font-mono text-[11px] text-neutral-300">
{tag}
</span>
))}
</div>
</SpotlightCard>
{/* Card 4: AI & Vector Databases */}
<SpotlightCard>
<div>
<div className="flex items-center justify-between">
<div className="flex h-11 w-11 items-center justify-center rounded-xl bg-amber-500/10 text-amber-400 border border-amber-500/20 shadow-inner">
<Cpu className="h-5 w-5" />
</div>
<ArrowUpLeft className="h-5 w-5 text-neutral-500 transition-transform group-hover:-translate-x-1 group-hover:-translate-y-1 group-hover:text-amber-400" />
</div>
<h3 className="mt-5 text-lg font-bold text-white">جستجوی معنایی و هوش مصنوعی</h3>
<p className="mt-2 text-xs md:text-sm text-neutral-400 leading-relaxed">
استخراج اطلاعات، تعبیه‌سازی وکتورها و بازیابی فوق‌سریع در پایگاه‌های داده معنایی.
</p>
</div>
<div className="mt-6 rounded-xl border border-white/5 bg-neutral-950/60 p-3 font-mono text-xs flex justify-between items-center">
<span className="text-neutral-400">Vector Dimension:</span>
<span className="text-amber-400 font-semibold">1536d (HNSW)</span>
</div>
<div className="mt-6 flex flex-wrap gap-1.5">
{["Qdrant", "RAG", "Embeddings", "FastAPI"].map((tag) => (
<span key={tag} className="rounded-md bg-white/[0.05] border border-white/5 px-2 py-0.5 font-mono text-[11px] text-neutral-300">
{tag}
</span>
))}
</div>
</SpotlightCard>
{/* Card 5: Enterprise Portals & Workflows */}
<SpotlightCard>
<div>
<div className="flex items-center justify-between">
<div className="flex h-11 w-11 items-center justify-center rounded-xl bg-emerald-500/10 text-emerald-400 border border-emerald-500/20 shadow-inner">
<Layers className="h-5 w-5" />
</div>
<ArrowUpLeft className="h-5 w-5 text-neutral-500 transition-transform group-hover:-translate-x-1 group-hover:-translate-y-1 group-hover:text-emerald-400" />
</div>
<h3 className="mt-5 text-lg font-bold text-white">پرتال‌های سازمانی و کارتابل</h3>
<p className="mt-2 text-xs md:text-sm text-neutral-400 leading-relaxed">
طراحی پنل‌های مدیریت فرآیندها (BPMS)، فرم‌سازهای پویا و ماژول‌های سازمانی یکپارچه.
</p>
</div>
<div className="mt-6 rounded-xl border border-white/5 bg-neutral-950/60 p-3 font-mono text-xs flex justify-between items-center">
<span className="text-neutral-400">Workflow Engine:</span>
<span className="text-emerald-400 font-semibold">Active State</span>
</div>
<div className="mt-6 flex flex-wrap gap-1.5">
{["Filament 3", "Next.js", "TypeScript", "Tailwind"].map((tag) => (
<span key={tag} className="rounded-md bg-white/[0.05] border border-white/5 px-2 py-0.5 font-mono text-[11px] text-neutral-300">
{tag}
</span>
))}
</div>
</SpotlightCard>
{/* Card 6: Enterprise Security & Auth */}
<SpotlightCard>
<div>
<div className="flex items-center justify-between">
<div className="flex h-11 w-11 items-center justify-center rounded-xl bg-rose-500/10 text-rose-400 border border-rose-500/20 shadow-inner">
<ShieldCheck className="h-5 w-5" />
</div>
<ArrowUpLeft className="h-5 w-5 text-neutral-500 transition-transform group-hover:-translate-x-1 group-hover:-translate-y-1 group-hover:text-rose-400" />
</div>
<h3 className="mt-5 text-lg font-bold text-white">امنیت، هویت و دسترسی سازمانی</h3>
<p className="mt-2 text-xs md:text-sm text-neutral-400 leading-relaxed">
پیاده‌سازی احراز هویت متمرکز (SSO)، پروتکل‌های OAuth2/OpenID و سیستم‌های RBAC پیشرفته.
</p>
</div>
<div className="mt-6 rounded-xl border border-white/5 bg-neutral-950/60 p-3 font-mono text-xs flex justify-between items-center">
<span className="text-neutral-400 flex items-center gap-1.5">
<Lock className="h-3 w-3 text-rose-400" />
Audit Logging:
</span>
<span className="text-rose-400 font-semibold">Encrypted (AES-256)</span>
</div>
<div className="mt-6 flex flex-wrap gap-1.5">
{["OAuth2", "SSO", "RBAC", "JWT"].map((tag) => (
<span key={tag} className="rounded-md bg-white/[0.05] border border-white/5 px-2 py-0.5 font-mono text-[11px] text-neutral-300">
{tag}
</span>
))}
</div>
</SpotlightCard>
</div>
</div>
</section>
);
</section>
);
}
export default ServicesBentoGrid;
+2 -2
View File
@@ -126,8 +126,8 @@ export function Footer() {
{/* نوار پایینی */}
<div className="pt-8 border-t border-gray-900/80 flex flex-col sm:flex-row items-center justify-between gap-4 text-xs text-gray-500">
<div className="flex items-center gap-2">
<span>© {new Date().getFullYear()}</span>
<span>•</span>
<span></span>
<span>طراحی و توسعه برای دسترس‌پذیری بالا و مقیاس‌پذیری</span>
</div>
+3 -3
View File
@@ -45,11 +45,11 @@ export default function Header() {
<div className="max-w-6xl mx-auto px-6 flex items-center justify-between">
{/* لوگو */}
<Link href="/" className="relative z-50 flex items-center gap-2">
<div className="w-8 h-8 rounded-lg bg-gradient-to-tr from-blue-600 to-blue-400 flex items-center justify-center">
{/* <div className="w-8 h-8 rounded-lg bg-gradient-to-tr from-blue-600 to-blue-400 flex items-center justify-center">
<span className="text-white font-bold text-lg">Z</span>
</div>
</div>*/}
<span className="text-neutral-50 font-medium tracking-wide">
ژرفا نوآوری داده
ژرفانوآوری داده و آینده
</span>
</Link>
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB