لندینگِ ابزارِ خودکارسازی
پیشنمایش تمامصفحهلندینگِ گرم و نارنجی روی کرم: هیرو با امتیاز و چهرهٔ مشتریها، نوارِ سه کارت (عکس، داشبورد، گرادیان)، چهار مزیت با پیشنمایش، بخشِ ارزش با عکس و نقلقول، آمارِ شمارنده، مطالعههای موردیِ تیره و فراخوان.
۱. نصب کامپوننتها
این بلاک از ۸ آیتم دیگ استفاده میکند: avatarbuttoncontrol-sizecount-upiconspersianprogressreveal
پکیجمنیجر پیشفرض Node.jsنصب سریع با لینک سخت و دیسک مشترکYarn نسخهٔ ۲ به بالا (Berry)رانتایم و پکیجمنیجر Bun
npx digdesign@latest add https://docs.digdesign.ir/r/avatar.json https://docs.digdesign.ir/r/button.json https://docs.digdesign.ir/r/control-size.json https://docs.digdesign.ir/r/count-up.json https://docs.digdesign.ir/r/icons.json https://docs.digdesign.ir/r/persian.json https://docs.digdesign.ir/r/progress.json https://docs.digdesign.ir/r/reveal.jsonpnpm dlx digdesign@latest add https://docs.digdesign.ir/r/avatar.json https://docs.digdesign.ir/r/button.json https://docs.digdesign.ir/r/control-size.json https://docs.digdesign.ir/r/count-up.json https://docs.digdesign.ir/r/icons.json https://docs.digdesign.ir/r/persian.json https://docs.digdesign.ir/r/progress.json https://docs.digdesign.ir/r/reveal.jsonyarn dlx digdesign@latest add https://docs.digdesign.ir/r/avatar.json https://docs.digdesign.ir/r/button.json https://docs.digdesign.ir/r/control-size.json https://docs.digdesign.ir/r/count-up.json https://docs.digdesign.ir/r/icons.json https://docs.digdesign.ir/r/persian.json https://docs.digdesign.ir/r/progress.json https://docs.digdesign.ir/r/reveal.jsonbunx --bun digdesign@latest add https://docs.digdesign.ir/r/avatar.json https://docs.digdesign.ir/r/button.json https://docs.digdesign.ir/r/control-size.json https://docs.digdesign.ir/r/count-up.json https://docs.digdesign.ir/r/icons.json https://docs.digdesign.ir/r/persian.json https://docs.digdesign.ir/r/progress.json https://docs.digdesign.ir/r/reveal.json۲. کد صفحه
کد را در app/<route>/page.tsx بگذارید و متنها، داده و هندلرها را با محصول خودتان عوض کنید.
landing-automation.tsx
"use client"
import { ArrowUpIcon, BarChartIcon, BoltIcon, CheckIcon, FlashIcon, GridIcon, ShieldCheckIcon, SparklesIcon, StarIcon } from "@/components/icons"
import { Avatar, AvatarGroup } from "@/components/ui/avatar"
import { Button } from "@/components/ui/button"
import { ControlSizeProvider } from "@/components/ui/control-size"
import { CountUp } from "@/components/ui/count-up"
import { Progress } from "@/components/ui/progress"
import { Reveal } from "@/components/ui/reveal"
import { toFaDigits } from "@/lib/persian"
import { stockImages } from "@/lib/stock-images"
const GRADIENT = "bg-[linear-gradient(135deg,var(--dig-orange-400),var(--dig-red-500))]"
const BENEFITS = [
{ title: "زمان تا ارزش، کوتاهتر", text: "گردشکارهای آماده از روزِ اول؛ بدونِ ماهها پیادهسازی.", icon: <FlashIcon />, metric: "۳ روز", label: "تا اولین خودکارسازی" },
{ title: "ظرفیتی که بزرگ میشود", text: "تیم بزرگ میشود، فرایند همان میماند؛ بیاستخدامِ اضافه.", icon: <GridIcon />, metric: "۴×", label: "حجمِ کار با همان تیم" },
{ title: "تمرکز روی تصمیم", text: "کارهای تکراری خودکار، ذهنِ تیم برای کارهای مهم آزاد.", icon: <SparklesIcon />, metric: "۱۲ ساعت", label: "صرفهجویی در هفته" },
{ title: "چابکی با داده", text: "هر گردشکار گزارشِ خودش را دارد؛ گلوگاهها پیداست.", icon: <BarChartIcon />, metric: "٪۹۸", label: "دقتِ گزارش" },
]
const STATS = [
{ value: 80, suffix: "+ هزار", text: "تیمی که کارهای روزانهشان را خودکار کردهاند" },
{ value: 50, suffix: "+", text: "یکپارچگیِ آماده با ابزارهای ایرانی و جهانی" },
{ value: 120, suffix: " میلیارد", text: "تومان صرفهجوییِ مشتریان در سالِ گذشته" },
]
const CASES = [
{ title: "بهرهوریِ بیشتر برای فینتکِ آوند", metric: "٪۶۰", label: "تراکنشِ پردازششده بیدخالتِ دستی", photo: "coverFinanceDesk" as const },
{ title: "پشتیبانیِ سریعتر برای فروشگاهِ نیکا", metric: "٪۷۴", label: "کاهشِ زمانِ پاسخ", photo: "projectDashboard" as const },
{ title: "ثبتنامِ خودکار برای آموزشگاهِ مهر", metric: "۹ ساعت", label: "صرفهجویی در هر روز", photo: "classroom" as const },
]
/**
* لندینگِ ابزارِ خودکارسازی، گرم و نارنجی روی کرم: هیرو با اعتمادِ اجتماعی و نوارِ سه کارت
* (عکس، کارتِ داشبورد، کارتِ گرادیانی)، چهار مزیت با پیشنمایشِ نارنجی، بخشِ ارزش با عکس و
* نقلقول، سه آمارِ شمارنده، مطالعههای موردیِ تیره، و فراخوانِ پایانی در کارتِ روشن.
*/
export default function LandingAutomationBlock() {
return (
<ControlSizeProvider size="xl" asChild>
<main className="flex w-full flex-col bg-[var(--dig-orange-50)] dark:bg-[var(--dig-graphite-950)]">
<section className="flex flex-col items-center gap-6 px-4 pt-20 pb-12 text-center sm:px-6">
<span className="flex items-center gap-2 text-sm">
<AvatarGroup max={3} size="sm">
<Avatar src={stockImages.personWoman1.src} alt="" />
<Avatar src={stockImages.personMan2.src} alt="" />
<Avatar src={stockImages.personWoman3.src} alt="" />
</AvatarGroup>
<span className="flex flex-col items-start">
<span className="flex text-[var(--dig-orange-500)]">
{Array.from({ length: 5 }, (_, index) => (
<StarIcon key={index} aria-hidden className="size-3.5 fill-current" />
))}
</span>
<span className="text-xs text-muted-foreground">مورد اعتمادِ ۲۰ هزار تیم</span>
</span>
</span>
<h1 className="max-w-3xl text-4xl leading-tight font-black text-balance sm:text-6xl sm:leading-tight">کارها را خودکار کن، تیم را رها کن</h1>
<p className="max-w-xl text-lg leading-8 text-muted-foreground">کارهای تکراری را به گردشکارهای هوشمند بسپارید و وقتِ تیم را برای تصمیمهای مهم آزاد کنید.</p>
<div className="flex flex-wrap justify-center gap-3">
<Button>
کشفِ امکانات
<ArrowUpIcon aria-hidden className="-rotate-45" />
</Button>
<Button variant="outline">درخواستِ دمو</Button>
</div>
</section>
<div className="grid w-full grid-cols-1 gap-4 px-4 sm:grid-cols-3 sm:px-0">
{/* eslint-disable-next-line @next/next/no-img-element -- عکس از کتابخانهٔ تصویرِ دیگ */}
<img src={stockImages.manLaptopStreet.src} alt="" className="hidden h-72 w-full rounded-xl object-cover sm:block sm:rounded-s-none" />
<div className="flex h-72 items-center justify-center rounded-xl bg-[linear-gradient(160deg,var(--dig-orange-300),var(--dig-orange-500))] p-6">
<div className="flex w-full max-w-64 flex-col gap-3 rounded-xl bg-card p-4 shadow-xl">
<span className="text-xs text-muted-foreground">گردشکارِ فاکتور</span>
<span className="text-2xl font-black tabular-nums">۱٬۲۴۸ اجرا</span>
<Progress value={82} aria-label="پیشرفتِ ماه" />
<span className="flex justify-between text-xs text-muted-foreground">
<span>هدفِ ماه</span>
<span>٪۸۲</span>
</span>
</div>
</div>
<div className={`flex h-72 flex-col items-center justify-center gap-3 rounded-xl ${GRADIENT} p-6 text-center text-[var(--dig-white)] sm:rounded-e-none`}>
<span aria-hidden className="flex size-14 items-center justify-center rounded-full bg-[var(--dig-white)] text-[var(--dig-orange-700)]">
<BoltIcon className="size-7" />
</span>
<span className="text-lg font-bold">گزارشِ خودکار فرستاده شد</span>
<span className="text-sm text-[var(--dig-orange-100)]">به ۱۲ نفر، دوشنبه ساعت ۹</span>
</div>
</div>
<ul aria-label="مشتریان" className="mx-auto flex w-full max-w-6xl flex-wrap items-center justify-between gap-x-10 gap-y-4 px-4 py-14 text-muted-foreground sm:px-6">
<li className="max-w-40 text-sm leading-6 text-foreground">افتخارِ همکاری با سازمانهای پیشرو</li>
{["لوتوس", "مدار", "کیمیا", "سیمرغ", "آرمان"].map((name) => (
<li key={name} className="flex items-center gap-2 text-lg font-black">
<SparklesIcon aria-hidden className="size-5" />
{name}
</li>
))}
</ul>
<section aria-labelledby="la-benefits" className="mx-auto flex w-full max-w-6xl flex-col gap-10 px-4 py-16 sm:px-6">
<div className="mx-auto flex max-w-xl flex-col items-center gap-3 text-center">
<span className="rounded-full bg-card px-3 py-1 text-xs font-semibold text-[var(--dig-orange-700)] dark:text-[var(--dig-orange-400)]">• مزیتها</span>
<h2 id="la-benefits" className="text-3xl font-black sm:text-4xl">
مزیتهایی برای جهشِ کسبوکار
</h2>
</div>
<ul className="grid grid-cols-1 gap-6 md:grid-cols-2">
{BENEFITS.map((item, index) => (
<Reveal asChild key={item.title} delay={(index % 2) * 120}>
<li className="flex flex-col gap-4 rounded-xl bg-card p-3 pb-6 shadow-sm">
<div className={`rounded-lg ${GRADIENT} p-5 sm:p-8`}>
<div className="flex flex-col gap-4 rounded-lg bg-card p-4 shadow-lg">
<span className="flex items-center gap-2 text-sm font-bold">
<span aria-hidden className="flex size-8 items-center justify-center rounded-lg bg-[var(--dig-orange-100)] text-[var(--dig-orange-700)] dark:bg-[var(--dig-orange-950)] dark:text-[var(--dig-orange-300)] [&>svg]:size-4">
{item.icon}
</span>
{item.title}
</span>
<div className="flex items-end justify-between gap-4">
<span className="flex flex-col">
<span className="text-2xl font-black">{item.metric}</span>
<span className="text-xs text-muted-foreground">{item.label}</span>
</span>
<Button size="sm" className="[--primary-foreground:var(--dig-white)] [--primary:var(--dig-orange-700)]">
ببینید
</Button>
</div>
</div>
</div>
<div className="flex flex-col gap-1.5 px-3">
<h3 className="text-lg font-bold">{item.title}</h3>
<p className="leading-7 text-muted-foreground">{item.text}</p>
</div>
</li>
</Reveal>
))}
</ul>
</section>
<section aria-labelledby="la-value" className="mx-auto grid w-full max-w-6xl grid-cols-1 items-center gap-10 px-4 py-16 sm:px-6 lg:grid-cols-2">
<div className="relative">
{/* eslint-disable-next-line @next/next/no-img-element -- عکس از کتابخانهٔ تصویرِ دیگ */}
<img src={stockImages.teamReviewingDocs.src} alt={stockImages.teamReviewingDocs.alt} className="aspect-[4/3] w-full rounded-xl object-cover" />
<figure className="absolute inset-x-4 bottom-4 flex flex-col gap-2 rounded-xl bg-[color-mix(in_oklab,var(--dig-graphite-950)_70%,transparent)] p-4 text-sm leading-6 text-[var(--dig-white)] backdrop-blur-md">
<blockquote>«از وقتی گزارشها خودکار شد، جلسهٔ دوشنبهها نصف شد و تصمیمها دو برابر.»</blockquote>
<figcaption className="text-xs text-[var(--dig-neutral-300)]">پریسا جهانی، مدیرِ عملیات</figcaption>
</figure>
</div>
<div className="flex flex-col items-start gap-6">
<span className="rounded-full bg-card px-3 py-1 text-xs font-semibold text-[var(--dig-orange-700)] dark:text-[var(--dig-orange-400)]">• چرا ما</span>
<h2 id="la-value" className="text-3xl font-black sm:text-4xl">
ارزشی که پشتِ کار است
</h2>
<ul className="flex flex-col gap-5">
{[
["عملیاتِ یکپارچه", "دادهها و ابزارها در یک جریان؛ دیگر کپی بینِ برنامهها نیست."],
["ساختهشده برای رشد", "از ده اجرا در روز تا ده هزار؛ بدونِ تغییرِ معماری."],
["امنیتِ قابلِ اعتماد", "رمزگذاری، دسترسیِ نقشمحور و گزارشِ کاملِ تغییرات."],
].map(([title, text], index) => (
<li key={title} className="flex gap-4">
<span aria-hidden className={`flex size-10 shrink-0 items-center justify-center rounded-lg ${GRADIENT} text-[var(--dig-white)]`}>
{[<CheckIcon key="a" className="size-5" />, <BarChartIcon key="b" className="size-5" />, <ShieldCheckIcon key="c" className="size-5" />][index]}
</span>
<span className="flex flex-col gap-1">
<span className="font-bold">{title}</span>
<span className="leading-7 text-muted-foreground">{text}</span>
</span>
</li>
))}
</ul>
<Button>دیدنِ امکانات</Button>
</div>
</section>
<section aria-label="آمار" className="mx-auto grid w-full max-w-6xl grid-cols-1 gap-4 px-4 py-12 sm:grid-cols-3 sm:px-6">
{STATS.map((stat, index) => (
<Reveal key={stat.text} delay={index * 100} className="flex flex-col gap-3 rounded-xl bg-card p-6 shadow-sm">
<span aria-hidden className="flex size-10 items-center justify-center rounded-lg bg-[var(--dig-orange-100)] text-[var(--dig-orange-700)] dark:bg-[var(--dig-orange-950)] dark:text-[var(--dig-orange-300)]">
<SparklesIcon className="size-5" />
</span>
<span className="text-4xl font-black tabular-nums">
<CountUp value={stat.value} />
{stat.suffix}
</span>
<span className="text-sm leading-6 text-muted-foreground">{stat.text}</span>
</Reveal>
))}
</section>
<section aria-labelledby="la-cases" className="flex w-full flex-col gap-8 py-16">
<div className="mx-auto flex w-full max-w-6xl flex-col gap-3 px-4 sm:px-6">
<span className="text-xs font-semibold text-[var(--dig-orange-700)] dark:text-[var(--dig-orange-400)]">• مطالعهٔ موردی</span>
<h2 id="la-cases" className="max-w-md text-3xl leading-snug font-black sm:text-4xl">
اثرِ واقعی با مدیریتِ کارها
</h2>
</div>
<ul className="mx-auto flex w-full max-w-6xl snap-x snap-mandatory gap-4 overflow-x-auto px-4 pb-2 [scrollbar-width:none] sm:px-6 [&::-webkit-scrollbar]:hidden">
{CASES.map((item) => (
<li key={item.title} className="grid w-[85%] shrink-0 snap-start grid-cols-1 overflow-hidden rounded-xl bg-[var(--dig-graphite-900)] text-[var(--dig-white)] sm:w-[70%] sm:grid-cols-2 lg:w-[48%]">
{/* eslint-disable-next-line @next/next/no-img-element -- عکس از کتابخانهٔ تصویرِ دیگ */}
<img src={stockImages[item.photo].src} alt="" className="aspect-[4/3] size-full object-cover grayscale sm:aspect-auto" />
<div className="flex flex-col justify-between gap-8 p-6">
<h3 className="text-lg leading-8 font-bold">{item.title}</h3>
<div className="flex items-end justify-between gap-4">
<span className="flex flex-col">
<span className="text-3xl font-black">{item.metric}</span>
<span className="text-xs text-[var(--dig-neutral-400)]">{item.label}</span>
</span>
<Button size="sm" className="[--primary-foreground:var(--dig-graphite-950)] [--primary:var(--dig-white)]">
خواندن
</Button>
</div>
</div>
</li>
))}
</ul>
</section>
<section className="bg-[var(--dig-graphite-950)] px-4 py-16 sm:px-6">
<div className="mx-auto flex w-full max-w-4xl flex-col items-center gap-5 rounded-xl bg-card px-6 py-16 text-center">
<span className="rounded-full bg-[var(--dig-orange-100)] px-3 py-1 text-xs font-semibold text-[var(--dig-orange-700)] dark:bg-[var(--dig-orange-950)] dark:text-[var(--dig-orange-300)]">• شروع کنید</span>
<h2 className="text-3xl font-black sm:text-4xl">تیمت را رشد بده، کسبوکارت را</h2>
<p className="max-w-md leading-7 text-muted-foreground">گردشکارها را ساده کن، بهرهوری را بالا ببر و به تیمت ابزارِ درست بده.</p>
<Button>
شروعِ رایگان
<ArrowUpIcon aria-hidden className="-rotate-45" />
</Button>
<span className="text-xs text-muted-foreground">{toFaDigits(14)} روز رایگان، بدونِ کارتِ بانکی</span>
</div>
</section>
</main>
</ControlSizeProvider>
)
}