a
This commit is contained in:
+8
-56
@@ -33,7 +33,6 @@ function LinkedInIcon({ className = 'w-4 h-4' }: { className?: string }) {
|
|||||||
interface BoardMember {
|
interface BoardMember {
|
||||||
name: string;
|
name: string;
|
||||||
role: string;
|
role: string;
|
||||||
title: string;
|
|
||||||
image: string;
|
image: string;
|
||||||
linkedin?: string;
|
linkedin?: string;
|
||||||
email?: string;
|
email?: string;
|
||||||
@@ -41,28 +40,19 @@ interface BoardMember {
|
|||||||
|
|
||||||
const boardMembers: BoardMember[] = [
|
const boardMembers: BoardMember[] = [
|
||||||
{
|
{
|
||||||
name: 'نام و نامخانوادگی عضو ۱',
|
name: 'علی صالح ابوالقاسمی',
|
||||||
role: 'رئیس هیئت مدیره',
|
role: 'رئیس هیئت مدیره',
|
||||||
title: 'دکتری مدیریت فناوری اطلاعات',
|
|
||||||
image: '/images/team/member-1.jpg',
|
image: '/images/team/member-1.jpg',
|
||||||
linkedin: 'https://linkedin.com',
|
|
||||||
email: 'board1@company.ir'
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'نام و نامخانوادگی عضو ۲',
|
name: 'علی گلشنی',
|
||||||
role: 'مدیرعامل و عضو هیئت مدیره',
|
role: 'عضو هیئت مدیره',
|
||||||
title: 'کارشناس ارشد مهندسی نرمافزار',
|
|
||||||
image: '/images/team/member-2.jpg',
|
image: '/images/team/member-2.jpg',
|
||||||
linkedin: 'https://linkedin.com',
|
|
||||||
email: 'board2@company.ir'
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'نام و نامخانوادگی عضو ۳',
|
name: 'فراز فیروزبخت',
|
||||||
role: 'نایبرئیس هیئت مدیره',
|
role: 'عضو هیئت مدیره',
|
||||||
title: 'کارشناس ارشد مدیریت سیستمها',
|
|
||||||
image: '/images/team/member-3.jpg',
|
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">
|
<section className="space-y-12">
|
||||||
|
|
||||||
{/* ردیف اصلی Hero */}
|
{/* ردیف اصلی 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
|
<motion.div
|
||||||
@@ -89,18 +79,9 @@ export default function AboutPage() {
|
|||||||
transition={{ duration: 0.5 }}
|
transition={{ duration: 0.5 }}
|
||||||
className="lg:col-span-7 space-y-6"
|
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">
|
<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>
|
</h1>
|
||||||
|
|
||||||
{/* متن معرفی */}
|
{/* متن معرفی */}
|
||||||
@@ -222,8 +203,7 @@ export default function AboutPage() {
|
|||||||
{/* ۲. اعضای هیئت مدیره */}
|
{/* ۲. اعضای هیئت مدیره */}
|
||||||
<section className="space-y-10">
|
<section className="space-y-10">
|
||||||
<div className="space-y-1 border-b border-gray-800/80 pb-4">
|
<div className="space-y-1 border-b border-gray-800/80 pb-4">
|
||||||
<h2 className="text-2xl font-bold text-white tracking-tight">ارکان راهبری و هیئت مدیره</h2>
|
<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>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="grid grid-cols-1 md:grid-cols-3 gap-6">
|
<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">
|
<span className="text-xs font-medium text-indigo-400 mt-1">
|
||||||
{member.role}
|
{member.role}
|
||||||
</span>
|
</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>
|
</motion.div>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
+11
-20
@@ -20,7 +20,7 @@ import {
|
|||||||
|
|
||||||
// دستهبندیهای فنی پروژه
|
// دستهبندیهای فنی پروژه
|
||||||
const projectCategories = [
|
const projectCategories = [
|
||||||
{ id: 'core-banking', label: 'سامانهها و ماژولهای بانکی', icon: Server },
|
{ id: 'core-banking', label: ' سامانه ها و ماژول ها ', icon: Server },
|
||||||
{ id: 'db-optimization', label: 'پایگاهداده و مقیاسپذیری', icon: Database },
|
{ id: 'db-optimization', label: 'پایگاهداده و مقیاسپذیری', icon: Database },
|
||||||
{ id: 'ai-engine', label: 'هوش مصنوعی و پردازش اسناد', icon: Cpu },
|
{ id: 'ai-engine', label: 'هوش مصنوعی و پردازش اسناد', icon: Cpu },
|
||||||
{ id: 'custom-platform', label: 'داشبوردها و سامانههای عملیاتی', icon: Layers }
|
{ id: 'custom-platform', label: 'داشبوردها و سامانههای عملیاتی', icon: Layers }
|
||||||
@@ -81,15 +81,7 @@ export default function ContactPage() {
|
|||||||
|
|
||||||
{/* ۱. Hero Section */}
|
{/* ۱. Hero Section */}
|
||||||
<section className="text-center max-w-3xl mx-auto space-y-5">
|
<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
|
<motion.h1
|
||||||
initial={{ opacity: 0, y: 10 }}
|
initial={{ opacity: 0, y: 10 }}
|
||||||
@@ -97,10 +89,9 @@ export default function ContactPage() {
|
|||||||
transition={{ duration: 0.5, delay: 0.1 }}
|
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"
|
||||||
>
|
>
|
||||||
آغاز یک همکاری مهندسی، <br />
|
<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-l from-indigo-400 via-sky-300 to-white">
|
آغاز یک <span className="text-transparent bg-clip-text bg-gradient-to-r from-indigo-400 via-cyan-400 to-emerald-400">همکاری</span>
|
||||||
پایدار و فراتر از مقیاس
|
</h1>
|
||||||
</span>
|
|
||||||
</motion.h1>
|
</motion.h1>
|
||||||
|
|
||||||
<motion.p
|
<motion.p
|
||||||
@@ -109,7 +100,7 @@ export default function ContactPage() {
|
|||||||
transition={{ duration: 0.5, delay: 0.2 }}
|
transition={{ duration: 0.5, delay: 0.2 }}
|
||||||
className="text-gray-400 text-sm sm:text-base leading-relaxed"
|
className="text-gray-400 text-sm sm:text-base leading-relaxed"
|
||||||
>
|
>
|
||||||
آماده همافزایی فنی جهت طراحی و اجرای ماژولهای با پرفورمنس بالا، بازطراحی زیرساختهای قدیمی و راهکارهای یکپارچه سازمانی.
|
آماده همافزایی فنی جهت طراحی و اجرای ماژولهای با پرفورمنس بالا، بازطراحی زیرساختهای قدیمی و راهکارهای یکپارچه
|
||||||
</motion.p>
|
</motion.p>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
@@ -142,7 +133,7 @@ export default function ContactPage() {
|
|||||||
{/* انتخاب نوع پروژه */}
|
{/* انتخاب نوع پروژه */}
|
||||||
<div className="space-y-3">
|
<div className="space-y-3">
|
||||||
<label className="block text-xs font-mono text-gray-400">
|
<label className="block text-xs font-mono text-gray-400">
|
||||||
// ۰۱. نوع پروژه و قلمرو فنی:
|
نوع پروژه و قلمرو فنی:
|
||||||
</label>
|
</label>
|
||||||
<div className="grid grid-cols-1 sm:grid-cols-2 gap-3">
|
<div className="grid grid-cols-1 sm:grid-cols-2 gap-3">
|
||||||
{projectCategories.map((cat) => {
|
{projectCategories.map((cat) => {
|
||||||
@@ -269,7 +260,7 @@ export default function ContactPage() {
|
|||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<span className="block text-[11px] text-gray-500 font-mono">DIRECT INBOX</span>
|
<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>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -279,7 +270,7 @@ export default function ContactPage() {
|
|||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<span className="block text-[11px] text-gray-500 font-mono">TECHNICAL LINE</span>
|
<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>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -289,7 +280,7 @@ export default function ContactPage() {
|
|||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<span className="block text-[11px] text-gray-500 font-mono">LOCATION</span>
|
<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>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -338,7 +329,7 @@ export default function ContactPage() {
|
|||||||
|
|
||||||
{/* Footer ساده و هماهنگ */}
|
{/* Footer ساده و هماهنگ */}
|
||||||
<footer className="border-t border-gray-900 py-6 text-center text-xs text-gray-600 font-mono">
|
<footer className="border-t border-gray-900 py-6 text-center text-xs text-gray-600 font-mono">
|
||||||
SYSTEM ENGINEERING // ENTERPRISE ARCHITECTURE
|
ژرفا نواوری داده و آینده
|
||||||
</footer>
|
</footer>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
import CtaBanner from "@/components/banner/CtaBanner";
|
import CtaBanner from "@/components/banner/CtaBanner";
|
||||||
import HeroSection from "@/components/features/home/hero-section";
|
import HeroSection from "@/components/features/home/hero-section";
|
||||||
import ProjectsSection from "@/components/features/projects/projects-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";
|
import { Footer } from "@/components/shared/footer";
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+99
-78
@@ -6,11 +6,7 @@ import Header from "@/components/shared/header";
|
|||||||
import Footer from "@/components/shared/footer";
|
import Footer from "@/components/shared/footer";
|
||||||
import {
|
import {
|
||||||
ExternalLink,
|
ExternalLink,
|
||||||
GitBranch,
|
|
||||||
CheckCircle2,
|
CheckCircle2,
|
||||||
Workflow,
|
|
||||||
ShieldCheck,
|
|
||||||
Database,
|
|
||||||
Terminal
|
Terminal
|
||||||
} from "lucide-react";
|
} from "lucide-react";
|
||||||
|
|
||||||
@@ -22,60 +18,106 @@ interface ProjectItem {
|
|||||||
highlights: string[];
|
highlights: string[];
|
||||||
techStack: string[];
|
techStack: string[];
|
||||||
status: string;
|
status: string;
|
||||||
|
image?: string; // آدرس تصویر پروژه
|
||||||
}
|
}
|
||||||
|
|
||||||
const projectsData: ProjectItem[] = [
|
const projectsData: ProjectItem[] = [
|
||||||
{
|
{
|
||||||
id: 1,
|
id: 1,
|
||||||
title: "سامانه یکپارچه پرتال و اینترانت بانکی",
|
title: "مرکز تماس هوشمند",
|
||||||
category: "سیستمهای سازمانی و اینترانت",
|
category: "هوش مصنوعی و تحلیل دادههای صوتی",
|
||||||
description: "طراحی و توسعه معماری متمرکز جهت مدیریت احراز هویت، کارتابل سازمانی، ماژولهای آماری و دسترسیپذیری بالا برای پرسنل شعب.",
|
description: "پلتفرم تحلیل مکالمات صوتی مرکز تماس مبتنی بر STT و LLM جهت ارزیابی خودکار عملکرد کارشناسان، سنجش احساسات مشتری و استخراج KPIهای سازمانی.",
|
||||||
highlights: [
|
highlights: [
|
||||||
"مدیریت سطوح دسترسی پیچیده (RBAC) و احراز هویت متمرکز",
|
"تبدیل خودکار و دقیق گفتار به متن (Speech-to-Text) با پشتیبانی تخصصی از زبان فارسی",
|
||||||
"معماری ماژولار کارتابل با پشتیبانی از صفهای پردازشی سنگین",
|
"ارزیابی خودکار شاخصهای عملکردی (KPI)، لحن، ادب و پایبندی به اسکریپت سازمانی",
|
||||||
"یکپارچهسازی با هسته سامانههای بانکی (Core Banking)"
|
"تحلیل احساسات (Sentiment Analysis) و خلاصهسازی هوشمند مکالمات جهت ثبت در CRM",
|
||||||
|
"یکپارچهسازی کامل با زیرساختهای VoIP / Asterisk و پایپلاینهای پردازش صوت"
|
||||||
],
|
],
|
||||||
techStack: ["Laravel 11", "PostgreSQL", "Redis", "Filament", "Docker"],
|
techStack: [
|
||||||
status: "Production / Enterprise"
|
"Python",
|
||||||
|
"FastAPI",
|
||||||
|
"Whisper / STT",
|
||||||
|
"LLM / LangChain",
|
||||||
|
"PostgreSQL",
|
||||||
|
"Redis",
|
||||||
|
"Docker"
|
||||||
|
],
|
||||||
|
status: "Production / AI Solution",
|
||||||
|
image: "/image/aicall2.png" // مسیر تصویر دلخواه خود را اینجا وارد کنید
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 2,
|
id: 2,
|
||||||
title: "سامانه هوشمند مدیریت شیفت و پرسنل بانکی",
|
title: "پلتفرم هوشمند تمرینات ورزشی نیوفیت",
|
||||||
category: "پلتفرم عملیاتی و لجستیک",
|
category: "سلامت، فیتنس و تحلیل دادههای ورزشی",
|
||||||
description: "پیادهسازی موتور تخصیص خودکار شیفتها، مدیریت جایگزینی و اعلانهای آنی جهت بهینهسازی توزیع نیروی انسانی در شبکه شعب.",
|
description: "سامانه جامع و هوشمند صدور برنامههای تمرینی اختصاصی مبتنی بر ارزیابی دقیق فاکتورهای بیومتریک و سبک زندگی کاربران، همراه با سیستم زمانبندی داینامیک و ارائهدهنده محتوای چندرسانهای آموزشی.",
|
||||||
highlights: [
|
highlights: [
|
||||||
"الگوریتم زمانبندی پویا جهت پیشگیری از تداخل کاری",
|
"موتور ارزیابی و پروفایلینگ پیشرفته کاربر (قد، وزن، سابقه تمرینی، سطح استرس، شاخص فعالیت روزانه و اهداف فردی)",
|
||||||
"سیستم اعلانهای بلادرنگ (Real-time WebSockets)",
|
"تولید خودکار و هوشمند برنامههای تمرینی شخصیسازیشده متناسب با محیط تمرین (خانه / باشگاه) و اهداف ورزشی",
|
||||||
"گزارشگیری تحلیلی با بازدهی بالا و کشینگ چندلایهای"
|
"سیستم زمانبندی منعطف و تقویم داینامیک جهت مدیریت روزها، ساعات و فازبندی جلسات تمرینی",
|
||||||
|
"طراحی هوشمند متغیرهای تمرین شامل ساختار ستبندی، الگوهای بارگذاری و توصیههای تکنیکی و بیومکانیکی هر حرکت",
|
||||||
|
"پایگاه داده چندرسانهای بهینهسازیشده برای استریم روان ویدیوهای آموزشی اجرای صحیح حرکات و نکات کلیدی"
|
||||||
],
|
],
|
||||||
techStack: ["FastAPI", "Python", "PostgreSQL", "Redis", "React"],
|
techStack: [
|
||||||
status: "Deployed"
|
"Flutter / React Native",
|
||||||
|
"FastAPI / Python",
|
||||||
|
"PostgreSQL",
|
||||||
|
"Redis",
|
||||||
|
"Object Storage / CDN",
|
||||||
|
"Docker"
|
||||||
|
],
|
||||||
|
status: "Production / Mobile Application",
|
||||||
|
image: "/image/neo.png" // مسیر تصویر دلخواه خود را اینجا وارد کنید
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 3,
|
id: 3,
|
||||||
title: "پایپلاین رویدادمحور و موتور پردازش داده (TMS & Store)",
|
title: "دستیار هوشمند فروش و پشتیبانی",
|
||||||
category: "معماری توزیعشده و میکروسرویس",
|
category: "هوش مصنوعی، RAG و عاملهای هوشمند (AI Agents)",
|
||||||
description: "طراحی زیرساخت پردازش غیرهمگام رویدادها جهت مدیریت دورههای آموزشی سازمانی و ثبت سفارشات درونسازمانی با تضمین تحویل پیام.",
|
description: "سامانه دستیار هوشمند سازمانی مبتنی بر معماری RAG و عاملهای گفتگومحور؛ مسلط به کل محتوای وبسایت، محصولات و مستندات جهت افزایش نرخ تبدیل فروش و کاهش ۷۰ درصدی تیکتهای پشتیبانی.",
|
||||||
highlights: [
|
highlights: [
|
||||||
"بهکارگیری Kafka و RabbitMQ برای انتشار و مصرف پیامها",
|
"پیادهسازی معماری پیشرفته RAG (Retrieval-Augmented Generation) با سینک خودکار کاتالوگ و صفحات",
|
||||||
"طراحی الگوهای Idempotency و Circuit Breaker در ارتباطات",
|
"عامل هوشمند فروش (Sales Agent) جهت هدایت رفتار کاربر به سبد خرید و افزایش Conversion Rate",
|
||||||
"کاهش لیتنسی پردازش دادههای حجیم به زیر ۵۰ میلیثانیه"
|
"کاهش بیش از ۷۰ درصدی بار تیکتهای پشتیبانی با پاسخدهی بلادرنگ، بدون Hallucination و مستند به دادههای سازمان",
|
||||||
|
"یکپارچهسازی از طریق Webhook / API با سیستمهای انبارداری و سفارشات (Live Stock / Order Status)",
|
||||||
|
"نصب و تعبیه بسیار سریع در وبسایتها تنها از طریق یک Script Tag سبک"
|
||||||
],
|
],
|
||||||
techStack: ["Laravel", "Kafka", "RabbitMQ", "Docker", "CI/CD"],
|
techStack: [
|
||||||
status: "Microservices"
|
"Python",
|
||||||
|
"FastAPI",
|
||||||
|
"LangChain / LlamaIndex",
|
||||||
|
"Qdrant / Vector DB",
|
||||||
|
"OpenAI / Local LLMs",
|
||||||
|
"Redis",
|
||||||
|
"Docker"
|
||||||
|
],
|
||||||
|
status: "Production / AI Solution",
|
||||||
|
image: "/image/payai.png" // مسیر تصویر دلخواه خود را اینجا وارد کنید
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 4,
|
id: 4,
|
||||||
title: "موتور جستجوی معنایی و پایگاه دانش برداری (RAG)",
|
title: "معلم و دستیار آموزشی هوشمند",
|
||||||
category: "سیستمهای مبتنی بر هوش مصنوعی",
|
category: "هوش مصنوعی، RAG و فناوریهای آموزشی (EdTech)",
|
||||||
description: "طراحی و استقرار پایپلاین تولید و نمایهسازی بردارهای متنی مستندات بانکی جهت پرسشوپاسخ هوشمند و بازیابی دقیق اسناد سازمانی.",
|
description: "پلتفرم جامع آموزش تعاملی و یادگیری شخصیسازیشده مبتنی بر معماری RAG و پردازش صوت دوطرفه؛ مسلط بر کتب درسی رسمی جهت رفع توهم هوش مصنوعی (Zero Hallucination)، طراحی آزمون، تصحیح خودکار و تولید درسنامه.",
|
||||||
highlights: [
|
highlights: [
|
||||||
"ذخیرهسازی و کوئریگیری پرسرعت با Qdrant Vector Database",
|
"پیادهسازی معماری RAG بر روی متون کتب درسی رسمی با ارجاع دقیق به سرفصلها و پاراگرافها جهت جلوگیری از Hallucination",
|
||||||
"استراتژی Chunking بهینهشده برای اسناد فارسی و اصطلاحات تخصصی",
|
"موتور هوشمند تولید آزمونهای تستی و تشریحی در سه سطح دشواری با سناریوهای شب امتحان",
|
||||||
"اتصال امن به مدلهای زبانی محلی بدون خروج دادههای محرمانه"
|
"تصحیح تحلیلی پاسخهای تشریحی دانشآموز با تحلیل گامبهگام و ارائه فیدبک مفهومی مبتنی بر رفرنس کتاب",
|
||||||
|
"تعامل صوتی دوطرفه (Voice-Enabled) با موتورهای تبدیل متن به گفتار (TTS) و گفتار به متن فارسی (STT)",
|
||||||
|
"ماژول خلاصهسازی خودکار فصول، تولید درسنامههای ساختاریافته و استخراج نکات کلیدی شب امتحان",
|
||||||
|
"معماری مقیاسپذیر و ماژولار جهت مدیریت پیک ترافیک و درخواستهای همزمان در ایام امتحانات"
|
||||||
],
|
],
|
||||||
techStack: ["Python", "FastAPI", "Qdrant", "PostgreSQL", "Docker"],
|
techStack: [
|
||||||
status: "R&D / Production"
|
"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 }}
|
transition={{ duration: 0.6 }}
|
||||||
className="mx-auto max-w-3xl"
|
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">
|
<h1 className="mb-5 text-3xl font-extrabold tracking-tight text-white md:text-5xl pt-20">
|
||||||
<GitBranch className="w-3.5 h-3.5" />
|
معماری نرمافزار <span className="text-transparent bg-clip-text bg-gradient-to-r from-indigo-400 via-cyan-400 to-emerald-400">سامانههای سازمانی</span>
|
||||||
<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>
|
</h1>
|
||||||
<p className="text-sm md:text-base text-gray-400 leading-relaxed max-w-2xl mx-auto">
|
<p className="text-sm md:text-base text-gray-400 leading-relaxed max-w-2xl mx-auto">
|
||||||
نمونهای از سیستمهای تحت وب، میکروسرویسها و پایپلاینهای مقیاسپذیر که با تمرکز بر امنیت، کارایی بالا و پایداری شبکه توسعه یافتهاند.
|
نمونهای از سیستمهای تحت وب، میکروسرویسها و پایپلاینهای مقیاسپذیر با تمرکز بر امنیت
|
||||||
</p>
|
</p>
|
||||||
</motion.div>
|
</motion.div>
|
||||||
</section>
|
</section>
|
||||||
@@ -181,7 +218,7 @@ export default function ProjectsPage() {
|
|||||||
</div>
|
</div>
|
||||||
</motion.div>
|
</motion.div>
|
||||||
|
|
||||||
{/* ستون کارت سیستم */}
|
{/* ستون تصویر سیستم */}
|
||||||
<motion.div
|
<motion.div
|
||||||
initial={{ opacity: 0, x: isEven ? -40 : 40 }}
|
initial={{ opacity: 0, x: isEven ? -40 : 40 }}
|
||||||
whileInView={{ opacity: 1, x: 0 }}
|
whileInView={{ opacity: 1, x: 0 }}
|
||||||
@@ -190,6 +227,7 @@ export default function ProjectsPage() {
|
|||||||
className="w-full lg:w-[46%]"
|
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="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 justify-between border-b border-gray-800/80 pb-3 mb-4">
|
||||||
<div className="flex items-center gap-1.5">
|
<div className="flex items-center gap-1.5">
|
||||||
<div className="w-2.5 h-2.5 rounded-full bg-rose-500/80" />
|
<div className="w-2.5 h-2.5 rounded-full bg-rose-500/80" />
|
||||||
@@ -198,41 +236,24 @@ export default function ProjectsPage() {
|
|||||||
</div>
|
</div>
|
||||||
<div className="text-[11px] font-mono text-gray-500 flex items-center gap-1">
|
<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" />
|
<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>
|
</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="relative w-full aspect-[16/10] overflow-hidden rounded-xl border border-gray-800/60 bg-gray-950/80 group">
|
||||||
<div className="text-gray-500 text-[10px] mb-1">سطح دسترسپذیری و امنیت:</div>
|
{project.image ? (
|
||||||
<div className="text-emerald-400 flex items-center gap-1.5 font-sans">
|
<img
|
||||||
<ShieldCheck className="w-3.5 h-3.5" />
|
src={project.image}
|
||||||
<span>High Availability • Multi-layer Auth</span>
|
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>
|
)}
|
||||||
|
|
||||||
<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>
|
||||||
</div>
|
</div>
|
||||||
</motion.div>
|
</motion.div>
|
||||||
@@ -251,11 +272,11 @@ export default function ProjectsPage() {
|
|||||||
آماده پیادهسازی و توسعه سیستمهای پیچیده
|
آماده پیادهسازی و توسعه سیستمهای پیچیده
|
||||||
</h3>
|
</h3>
|
||||||
<p className="text-xs md:text-sm text-gray-400 leading-relaxed">
|
<p className="text-xs md:text-sm text-gray-400 leading-relaxed">
|
||||||
اگر نیاز به مشاوره معماری نرمافزار، مقیاسپذیری سرویسها یا پیادهسازی ماژولهای اینترانت و سازمانی دارید، در ارتباط باشید.
|
اگر نیاز به مشاوره معماری نرمافزار، مقیاسپذیری سرویسها یا پیادهسازی ماژولهای اینترانت و سازمانی دارید
|
||||||
</p>
|
</p>
|
||||||
<div className="pt-2">
|
<div className="pt-2">
|
||||||
<a
|
<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"
|
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>
|
<span>شروع همکاری فنی</span>
|
||||||
|
|||||||
+4
-14
@@ -133,23 +133,15 @@ export default function ServicesPage() {
|
|||||||
|
|
||||||
{/* ۱. Hero Section */}
|
{/* ۱. Hero Section */}
|
||||||
<section className="text-center max-w-3xl mx-auto space-y-6">
|
<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
|
<motion.h1
|
||||||
initial={{ opacity: 0, y: 10 }}
|
initial={{ opacity: 0, y: 10 }}
|
||||||
animate={{ opacity: 1, y: 0 }}
|
animate={{ opacity: 1, y: 0 }}
|
||||||
transition={{ duration: 0.5, delay: 0.1 }}
|
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.h1>
|
||||||
|
|
||||||
<motion.p
|
<motion.p
|
||||||
@@ -158,11 +150,9 @@ export default function ServicesPage() {
|
|||||||
transition={{ duration: 0.5, delay: 0.2 }}
|
transition={{ duration: 0.5, delay: 0.2 }}
|
||||||
className="text-gray-400 text-sm sm:text-base leading-relaxed"
|
className="text-gray-400 text-sm sm:text-base leading-relaxed"
|
||||||
>
|
>
|
||||||
ارائه خدمات یکپارچه نرمافزاری در مقیاس سازمانی، از معماری پایگاههای داده با تراکنش بالا تا طراحی زیرساختهای پایدار و امنیتمحور بانکی.
|
ارائه خدمات یکپارچه نرمافزاری در مقیاس سازمانی، از معماری پایگاههای داده با تراکنش بالا تا طراحی زیرساختهای پایدار
|
||||||
</motion.p>
|
</motion.p>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
{/* ۲. Engineering Workflow Highlight */}
|
|
||||||
<motion.div
|
<motion.div
|
||||||
initial={{ opacity: 0, scale: 0.98 }}
|
initial={{ opacity: 0, scale: 0.98 }}
|
||||||
animate={{ opacity: 1, scale: 1 }}
|
animate={{ opacity: 1, scale: 1 }}
|
||||||
|
|||||||
@@ -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;
|
||||||
@@ -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;
|
||||||
@@ -2,13 +2,31 @@
|
|||||||
|
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import { motion } from "framer-motion";
|
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];
|
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 (
|
return (
|
||||||
|
// بخش اصلی با کنترلر موس و افکت Spotlight بدون تغییر باقی میماند
|
||||||
<section
|
<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) => {
|
onMouseMove={(e) => {
|
||||||
const { currentTarget, clientX, clientY } = e;
|
const { currentTarget, clientX, clientY } = e;
|
||||||
const { left, top } = currentTarget.getBoundingClientRect();
|
const { left, top } = currentTarget.getBoundingClientRect();
|
||||||
@@ -16,63 +34,42 @@ export default function CtaBanner() {
|
|||||||
currentTarget.style.setProperty("--mouse-y", `${clientY - top}px`);
|
currentTarget.style.setProperty("--mouse-y", `${clientY - top}px`);
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{/* ========================================================
|
{/* افکتهای پسزمینه (Spotlight و Grid) بدون تغییر */}
|
||||||
پسزمینه کاملاً منطبق با سکشن Projects
|
|
||||||
======================================================== */}
|
|
||||||
{/* افکت Spotlight */}
|
|
||||||
<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-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,#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
|
<motion.div
|
||||||
initial={{ opacity: 0, y: 25, scale: 0.98 }}
|
initial={{ opacity: 0, y: 25, scale: 0.98 }}
|
||||||
whileInView={{ opacity: 1, y: 0, scale: 1 }}
|
whileInView={{ opacity: 1, y: 0, scale: 1 }}
|
||||||
viewport={{ once: true, margin: "-50px" }}
|
viewport={{ once: true, margin: "-50px" }}
|
||||||
transition={{ duration: 0.8, ease: customEase }}
|
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" />
|
<div className="absolute top-0 right-0 w-64 h-64 bg-indigo-500/10 rounded-full blur-3xl pointer-events-none" />
|
||||||
|
|
||||||
{/* تیتر اصلی با گرادیانت هماهنگ با متون Projects */}
|
{/* محتوای داخلی */}
|
||||||
<motion.h2
|
<div className="relative z-10 max-w-2xl mx-auto space-y-4">
|
||||||
initial={{ opacity: 0, y: 15 }}
|
<h3 className="text-2xl md:text-3xl font-bold text-white">
|
||||||
whileInView={{ opacity: 1, y: 0 }}
|
{title}
|
||||||
viewport={{ once: true }}
|
</h3>
|
||||||
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"
|
<p className="text-xs md:text-sm text-gray-400 leading-relaxed">
|
||||||
>
|
{description}
|
||||||
آماده خلق یک{" "}
|
</p>
|
||||||
<span className="text-neutral-500">شاهکار دیجیتال</span> هستید؟
|
<div className="pt-2">
|
||||||
</motion.h2>
|
<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"
|
||||||
<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"
|
|
||||||
>
|
>
|
||||||
<path
|
<span>{buttonText}</span>
|
||||||
strokeLinecap="round"
|
{Icon && <Icon className="w-3.5 h-3.5" />}
|
||||||
strokeLinejoin="round"
|
</a>
|
||||||
d="M10.5 19.5L3 12m0 0l7.5-7.5M3 12h18"
|
</div>
|
||||||
/>
|
</div>
|
||||||
</svg>
|
|
||||||
</button>
|
|
||||||
</motion.div>
|
|
||||||
</motion.div>
|
</motion.div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
import { useRef } from "react";
|
import { useRef } from "react";
|
||||||
import { motion, Variants, useScroll, useTransform } from "framer-motion";
|
import { motion, Variants, useScroll, useTransform } from "framer-motion";
|
||||||
|
import Link from "next/link";
|
||||||
|
|
||||||
// تعریف Variants با انیمیشنهای نرمتر و روانتر
|
// تعریف Variants با انیمیشنهای نرمتر و روانتر
|
||||||
const containerVariants: Variants = {
|
const containerVariants: Variants = {
|
||||||
@@ -104,12 +105,15 @@ export default function Hero() {
|
|||||||
variants={itemVariants}
|
variants={itemVariants}
|
||||||
className="mt-8 flex justify-center gap-4"
|
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>
|
</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 className="px-6 py-2 rounded-md border border-neutral-700 text-neutral-300 font-medium hover:bg-neutral-800 transition-colors">
|
||||||
مشاهده نمونه کارها
|
پروژه ها
|
||||||
</button>
|
</button>
|
||||||
|
</Link>
|
||||||
</motion.div>
|
</motion.div>
|
||||||
</motion.div>
|
</motion.div>
|
||||||
</section>
|
</section>
|
||||||
|
|||||||
@@ -1,134 +1,342 @@
|
|||||||
"use client";
|
"use client";
|
||||||
|
|
||||||
import { motion } from "framer-motion";
|
import { useState } from "react";
|
||||||
import Image from "next/image";
|
import { motion, AnimatePresence } from "framer-motion";
|
||||||
|
import {
|
||||||
|
Landmark,
|
||||||
|
Banknote,
|
||||||
|
BarChart3,
|
||||||
|
ShieldCheck,
|
||||||
|
Workflow,
|
||||||
|
BadgeCheck,
|
||||||
|
Terminal,
|
||||||
|
ArrowLeft,
|
||||||
|
} from "lucide-react";
|
||||||
|
|
||||||
// دیتای تستی پروژهها (میتوانید با دیتای واقعی جایگزین کنید)
|
type ProjectStatus = "در حال بهرهبرداری" | "در حال توسعه" | "فاز آزمایشی";
|
||||||
const projects = [
|
|
||||||
|
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,
|
id: "core-banking-report",
|
||||||
title: "سیستم مدیریت مالی فراز",
|
title: "دستیار آموزشی و معلم هوشمند",
|
||||||
category: "نرمافزار سازمانی",
|
domain: "آموزشی / سازمانی",
|
||||||
description: "یک پلتفرم یکپارچه برای مدیریت منابع مالی سازمانها با داشبوردهای تحلیلی در لحظه.",
|
status: "در حال بهرهبرداری",
|
||||||
image: "/project-1.jpg", // این عکسها را در پوشه public قرار دهید
|
description:
|
||||||
color: "from-blue-500/20 to-purple-500/20",
|
"این سیستم به جای ارائه پاسخهای عمومی، تمامی کتب درسی را در پایگاه دانش خود بلعیده و پردازش کرده است. نتیجه؟ یک معلم خصوصی بینقص که ۲۴ ساعته در دسترس است، دقیقا بر اساس متن کتاب درسی آموزش میدهد، امتحان میگیرد، تصحیح میکند و با دانشآموز به صورت صوتی صحبت میکند.",
|
||||||
|
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,
|
id: "treasury-dashboard",
|
||||||
title: "اپلیکیشن سلامتجو",
|
title: "دستیار هوشمند فروش و پشتیبانی",
|
||||||
category: "اپلیکیشن موبایل",
|
domain: "سازمانی / مالی",
|
||||||
description: "سیستم نوبتدهی و پایش سلامت بیماران با قابلیت یکپارچهسازی با گجتهای پوشیدنی.",
|
status: "در حال بهرهبرداری",
|
||||||
image: "/project-2.jpg",
|
description:
|
||||||
color: "from-emerald-500/20 to-teal-500/20",
|
"راهکاری نوین برای کسبوکارهای آنلاین است که شکاف میان کاربر و محتوای سایت شما را پر میکند. این سیستم با خزش (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,
|
id: "fraud-detection",
|
||||||
title: "پلتفرم فروشگاهی نوینشاپ",
|
title: "مرکز تماس هوشمند",
|
||||||
category: "تجارت الکترونیک",
|
domain: "بانکی / پشتیبانی",
|
||||||
description: "فروشگاهساز ابری با معماری میکروسرویس و قابلیت مقیاسپذیری بالا برای ترافیکهای سنگین.",
|
status: "در حال توسعه",
|
||||||
image: "/project-3.jpg",
|
description:
|
||||||
color: "from-orange-500/20 to-red-500/20",
|
"«مرکز تماس هوشمند» فراتر از یک سیستم ضبط مکالمه است. این پلتفرم با استفاده از فناوریهای پیشرفته 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,
|
id: "bpm-automation",
|
||||||
title: "اتوماسیون اداری هوشمند",
|
title: "اپلیکیشن ورزشی نئوفیت",
|
||||||
category: "هوش مصنوعی",
|
domain: "ورزشی / آموزشی",
|
||||||
description: "سامانه اتوماسیون مبتنی بر هوش مصنوعی برای دستهبندی خودکار نامهها و ارجاعات.",
|
status: "در حال بهرهبرداری",
|
||||||
image: "/project-4.jpg",
|
description:
|
||||||
color: "from-indigo-500/20 to-blue-500/20",
|
"دستیار هوشمند شما برای رسیدن به تناسب اندام ایدهآل است. این اپلیکیشن با تحلیل دقیق ویژگیهای جسمانی، سبک زندگی و شرایط محیطی، برنامه تمرینی کاملاً اختصاصی برای شما تدوین میکند. با نیوفیت، میتوانید زمان و مکان تمرین را به سادگی تعیین کنید.",
|
||||||
|
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() {
|
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 (
|
return (
|
||||||
<section
|
<section
|
||||||
className="relative min-h-screen py-32 flex flex-col items-center justify-center overflow-hidden bg-gray-950"
|
id="projects"
|
||||||
onMouseMove={(e) => {
|
className="relative py-24 md:py-32 bg-gray-950"
|
||||||
const { currentTarget, clientX, clientY } = e;
|
aria-labelledby="projects-heading"
|
||||||
const { left, top } = currentTarget.getBoundingClientRect();
|
|
||||||
currentTarget.style.setProperty("--mouse-x", `${clientX - left}px`);
|
|
||||||
currentTarget.style.setProperty("--mouse-y", `${clientY - top}px`);
|
|
||||||
}}
|
|
||||||
>
|
>
|
||||||
{/* افکت Spotlight و Grid (دقیقا مشابه Hero) */}
|
<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="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="z-10 w-full max-w-7xl mx-auto px-4 md:px-8">
|
<div className="relative z-10 w-full max-w-7xl mx-auto px-4 md:px-8">
|
||||||
{/* هدر بخش پروژهها */}
|
{/* هدر سکشن */}
|
||||||
<div className="mb-20 md:mb-32">
|
<div className="mb-12 md:mb-16">
|
||||||
<motion.h2
|
<motion.h2
|
||||||
|
id="projects-heading"
|
||||||
initial={{ opacity: 0, y: 20 }}
|
initial={{ opacity: 0, y: 20 }}
|
||||||
whileInView={{ opacity: 1, y: 0 }}
|
whileInView={{ opacity: 1, y: 0 }}
|
||||||
viewport={{ once: true, margin: "-100px" }}
|
viewport={{ once: true, margin: "-80px" }}
|
||||||
transition={{ duration: 1, ease: customEase }}
|
transition={{ duration: 0.9, delay: 0.05, ease: customEase }}
|
||||||
className="text-4xl md:text-6xl font-bold tracking-tight text-white mb-6"
|
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.h2>
|
||||||
<motion.p
|
<motion.p
|
||||||
initial={{ opacity: 0, y: 20 }}
|
initial={{ opacity: 0, y: 20 }}
|
||||||
whileInView={{ opacity: 1, y: 0 }}
|
whileInView={{ opacity: 1, y: 0 }}
|
||||||
viewport={{ once: true, margin: "-100px" }}
|
viewport={{ once: true, margin: "-80px" }}
|
||||||
transition={{ duration: 1, delay: 0.1, ease: customEase }}
|
transition={{ duration: 0.9, delay: 0.1, ease: customEase }}
|
||||||
className="text-lg md:text-xl text-neutral-400 max-w-2xl"
|
className="text-base md:text-lg text-neutral-400 max-w-2xl leading-relaxed"
|
||||||
>
|
>
|
||||||
برخی از پروژههای منتخب ما که با تمرکز بر کارایی، زیبایی و معماری قدرتمند توسعه یافتهاند.
|
نگاهی به محصولاتی که مسیر رشد کسبوکارها را هموار کردند
|
||||||
</motion.p>
|
</motion.p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* گرید پروژهها */}
|
{/* ── نمای Master-Detail ── */}
|
||||||
<div className="grid grid-cols-1 md:grid-cols-2 gap-6 md:gap-8">
|
<motion.div
|
||||||
{projects.map((project, index) => (
|
initial={{ opacity: 0, y: 32 }}
|
||||||
<motion.div
|
whileInView={{ opacity: 1, y: 0 }}
|
||||||
key={project.id}
|
viewport={{ once: true, margin: "-80px" }}
|
||||||
initial={{ opacity: 0, y: 40 }}
|
transition={{ duration: 0.9, ease: customEase }}
|
||||||
whileInView={{ opacity: 1, y: 0 }}
|
className="grid grid-cols-1 lg:grid-cols-[320px_1fr] gap-5 md:gap-6 items-stretch"
|
||||||
viewport={{ once: true, margin: "-100px" }}
|
role="tablist"
|
||||||
transition={{
|
aria-label="فهرست پروژهها"
|
||||||
duration: 1.2,
|
>
|
||||||
delay: index * 0.15, // انیمیشن آبشاری برای کارتها
|
{/* ── Master: فهرست پروژهها ── */}
|
||||||
ease: customEase,
|
<div
|
||||||
}}
|
className="flex flex-col rounded-2xl border border-white/10 bg-neutral-900/50 overflow-hidden"
|
||||||
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"
|
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>
|
||||||
|
|
||||||
|
<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")}
|
||||||
<div className={`relative h-64 md:h-80 w-full overflow-hidden bg-gradient-to-br ${project.color}`}>
|
</span>
|
||||||
{/*
|
<div className="min-w-0 flex-1">
|
||||||
نکته: برای استفاده از Image در Next.js، کامنت زیر را بردارید و عکسها را در فولدر public بگذارید.
|
<div
|
||||||
در اینجا موقتاً از یک گرادیانت به عنوان جایگزین عکس استفاده شده است تا خطا نگیرید.
|
className={`truncate text-sm font-semibold transition-colors ${
|
||||||
*/}
|
isActive
|
||||||
{/* <Image
|
? "text-white"
|
||||||
src={project.image}
|
: "text-neutral-200 group-hover:text-white"
|
||||||
alt={project.title}
|
}`}
|
||||||
fill
|
>
|
||||||
className="object-cover object-center transition-transform duration-700 group-hover:scale-105"
|
{project.title}
|
||||||
/> */}
|
|
||||||
|
|
||||||
{/* یک المان تزئینی به جای عکس واقعی (موقتی) */}
|
|
||||||
<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>
|
</div>
|
||||||
|
<div className="mt-0.5 truncate font-mono text-[10px] uppercase tracking-wider text-neutral-500">
|
||||||
{/* بخش محتوا (پایین کارت) */}
|
{project.domain}
|
||||||
<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>
|
|
||||||
</div>
|
</div>
|
||||||
</motion.div>
|
</div>
|
||||||
))}
|
<span
|
||||||
</div>
|
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>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -3,311 +3,253 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import { motion, useMotionTemplate, useMotionValue } from "framer-motion";
|
import { motion, useMotionTemplate, useMotionValue } from "framer-motion";
|
||||||
import {
|
import {
|
||||||
Server,
|
Server,
|
||||||
Terminal,
|
Terminal,
|
||||||
Database,
|
Database,
|
||||||
ShieldCheck,
|
ShieldCheck,
|
||||||
Cpu,
|
Cpu,
|
||||||
Layers,
|
Layers,
|
||||||
ArrowUpLeft,
|
ArrowUpLeft,
|
||||||
Zap,
|
Zap,
|
||||||
Lock
|
Lock
|
||||||
} from "lucide-react";
|
} from "lucide-react";
|
||||||
|
|
||||||
// ==========================================
|
// ==========================================
|
||||||
// 1. کامپوننت کارت با افکت ردیابی نور موس
|
// 1. کامپوننت کارت با افکت ردیابی نور موس
|
||||||
// ==========================================
|
// ==========================================
|
||||||
interface SpotlightCardProps {
|
interface SpotlightCardProps {
|
||||||
children: React.ReactNode;
|
children: React.ReactNode;
|
||||||
className?: string;
|
className?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
function SpotlightCard({ children, className = "" }: SpotlightCardProps) {
|
function SpotlightCard({ children, className = "" }: SpotlightCardProps) {
|
||||||
const mouseX = useMotionValue(0);
|
const mouseX = useMotionValue(0);
|
||||||
const mouseY = useMotionValue(0);
|
const mouseY = useMotionValue(0);
|
||||||
|
|
||||||
function handleMouseMove({ currentTarget, clientX, clientY }: React.MouseEvent) {
|
function handleMouseMove({ currentTarget, clientX, clientY }: React.MouseEvent) {
|
||||||
const { left, top } = currentTarget.getBoundingClientRect();
|
const { left, top } = currentTarget.getBoundingClientRect();
|
||||||
mouseX.set(clientX - left);
|
mouseX.set(clientX - left);
|
||||||
mouseY.set(clientY - top);
|
mouseY.set(clientY - top);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
onMouseMove={handleMouseMove}
|
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}`}
|
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
|
||||||
<motion.div
|
className="pointer-events-none absolute -inset-px rounded-2xl opacity-0 transition-opacity duration-300 group-hover:opacity-100"
|
||||||
className="pointer-events-none absolute -inset-px rounded-2xl opacity-0 transition-opacity duration-300 group-hover:opacity-100"
|
style={{
|
||||||
style={{
|
background: useMotionTemplate`
|
||||||
background: useMotionTemplate`
|
radial-gradient(
|
||||||
radial-gradient(
|
450px circle at ${mouseX}px ${mouseY}px,
|
||||||
450px circle at ${mouseX}px ${mouseY}px,
|
rgba(59, 130, 246, 0.1),
|
||||||
rgba(255, 255, 255, 0.06),
|
transparent 80%
|
||||||
transparent 80%
|
)
|
||||||
)
|
`,
|
||||||
`,
|
}}
|
||||||
}}
|
/>
|
||||||
/>
|
<div className="relative z-10 flex h-full flex-col justify-between">
|
||||||
<div className="relative z-10 flex h-full flex-col justify-between">
|
{children}
|
||||||
{children}
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
);
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ==========================================
|
// ==========================================
|
||||||
// 2. بخش اصلی Bento Grid خدمات
|
// 2. بخش اصلی Bento Grid خدمات
|
||||||
// ==========================================
|
// ==========================================
|
||||||
export function ServicesBentoGrid() {
|
export function ServicesBentoGrid() {
|
||||||
return (
|
return (
|
||||||
<section
|
<section
|
||||||
className="relative overflow-hidden py-24 md:py-32 bg-gray-950 text-white"
|
className="relative overflow-hidden bg-gray-950 py-24 text-white md:py-32"
|
||||||
onMouseMove={(e) => {
|
onMouseMove={(e) => {
|
||||||
const { currentTarget, clientX, clientY } = e;
|
const { currentTarget, clientX, clientY } = e;
|
||||||
const { left, top } = currentTarget.getBoundingClientRect();
|
const { left, top } = currentTarget.getBoundingClientRect();
|
||||||
currentTarget.style.setProperty("--mouse-x", `${clientX - left}px`);
|
currentTarget.style.setProperty("--mouse-x", `${clientX - left}px`);
|
||||||
currentTarget.style.setProperty("--mouse-y", `${clientY - top}px`);
|
currentTarget.style.setProperty("--mouse-y", `${clientY - top}px`);
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{/* ۱. الگوی گرید پسزمینه کاملاً یکدست و بدون سایه/محوشدگی بالا و پایین */}
|
{/* Grid background */}
|
||||||
<div
|
<div
|
||||||
className="pointer-events-none absolute inset-0 opacity-70"
|
className="pointer-events-none absolute inset-0 opacity-70"
|
||||||
style={{
|
style={{
|
||||||
backgroundImage: `linear-gradient(to right, #80808012 1px, transparent 1px), linear-gradient(to bottom, #80808012 1px, transparent 1px)`,
|
backgroundImage: `linear-gradient(to right, #80808012 1px, transparent 1px), linear-gradient(to bottom, #80808012 1px, transparent 1px)`,
|
||||||
backgroundSize: "24px 24px",
|
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="container relative z-10 mx-auto max-w-7xl px-4 md:px-6">
|
||||||
<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">
|
<div className="flex flex-col items-center justify-center gap-8 pb-16 text-center">
|
||||||
|
<div className="flex flex-col items-center gap-3">
|
||||||
{/* Section Header */}
|
<span className="inline-block rounded-full bg-blue-600/10 px-3 py-1 text-sm font-semibold text-blue-400">
|
||||||
<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">
|
</span>
|
||||||
<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">
|
<h2 className="text-3xl font-bold tracking-tight md:text-5xl lg:text-6xl">
|
||||||
<Zap className="h-3.5 w-3.5 text-amber-400" />
|
معماری نرمافزار مدرن
|
||||||
<span>CAPABILITIES & ARCHITECTURE</span>
|
</h2>
|
||||||
</div>
|
</div>
|
||||||
<h2 className="text-3xl font-extrabold tracking-tight md:text-4xl lg:text-5xl text-white">
|
<p className="max-w-3xl text-lg text-neutral-400 md:text-xl">
|
||||||
توسعه زیرساخت و معماری مقیاسپذیر
|
ارائه راهکارهای جامع بکاند، از طراحی میکروسرویسها و پیادهسازی CI/CD تا ساخت سیستمهای هوشمند و مقیاسپذیر.
|
||||||
</h2>
|
</p>
|
||||||
<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>
|
</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">
|
<div className="grid grid-cols-1 gap-6 md:grid-cols-2 lg:grid-cols-3">
|
||||||
<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="mt-6 flex flex-wrap gap-1.5">
|
{/* Card 1 */}
|
||||||
{["Go", "Laravel 11", "FastAPI", "gRPC"].map((tag) => (
|
<SpotlightCard>
|
||||||
<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">
|
<div>
|
||||||
{tag}
|
<div className="flex items-center justify-between">
|
||||||
</span>
|
<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>
|
</div>
|
||||||
</SpotlightCard>
|
<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>
|
||||||
|
|
||||||
{/* Card 2: DevOps & Cloud Infrastructure */}
|
{/* Card 2 */}
|
||||||
<SpotlightCard>
|
<SpotlightCard>
|
||||||
<div>
|
<div>
|
||||||
<div className="flex items-center justify-between">
|
<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">
|
<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" />
|
<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 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>
|
</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>
|
||||||
|
</section>
|
||||||
<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>
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export default ServicesBentoGrid;
|
export default ServicesBentoGrid;
|
||||||
|
|||||||
@@ -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="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">
|
<div className="flex items-center gap-2">
|
||||||
<span>© {new Date().getFullYear()}</span>
|
|
||||||
<span>•</span>
|
<span></span>
|
||||||
<span>طراحی و توسعه برای دسترسپذیری بالا و مقیاسپذیری</span>
|
<span>طراحی و توسعه برای دسترسپذیری بالا و مقیاسپذیری</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -45,11 +45,11 @@ export default function Header() {
|
|||||||
<div className="max-w-6xl mx-auto px-6 flex items-center justify-between">
|
<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">
|
<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>
|
<span className="text-white font-bold text-lg">Z</span>
|
||||||
</div>
|
</div>*/}
|
||||||
<span className="text-neutral-50 font-medium tracking-wide">
|
<span className="text-neutral-50 font-medium tracking-wide">
|
||||||
ژرفا نوآوری داده
|
ژرفانوآوری داده و آینده
|
||||||
</span>
|
</span>
|
||||||
</Link>
|
</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 |
Reference in New Issue
Block a user