چگونه یک صفحه فرود هوش مصنوعی سینمایی با GSAP، Canvas API و Next.js ساختم

غواصی عمیق در ساخت Digital Rain: پیج لندینگ سینمایی هوش مصنوعی
این مقاله فرآیند ساخت «باران دیجیتال» را توضیح میدهد؛ یک قالب پیج لندینگ هوش مصنوعی متمایز با انیمیشن باران نمادهای ریاضی، UI شیشه مایع (Glassmorphism) و تعاملات اسکرول GSAP. هدف، فرار از الگوی تکراری «قهرمان-ویژگیها-قیمت» و خلق تجربهای بصری است که حس استارتاپ با بودجه بالا را القا کند.
تکنولوژیها: Next.js 15، Tailwind CSS، GSAP (ScrollTrigger) و Canvas API برای موتور انیمیشن سفارشی.
موتور باران دیجیتال: برخلاف ماتریکس کلاسیک، از نمادهای ریاضی (∑، π، ∫، ∞…) استفاده میشود. حلقه انیمیشن در Canvas با fillRect شبهشفاف رد پاها ایجاد میکند. نوآوری کلیدی، واکنش سطح مایع است: نمادهای نزدیک موس با محاسبه فاصله اقلیدسی، درخشش و شفافیت بالا مییابند که حس تعامل فیزیکی میدهد.
شیشه مایع پیشرفته: با backdrop-filter: blur(20px)، پسزمینه بسیار تیره (rgba(255,255,255,0.05))، حاشیه درونی درخشان و سایه عمیق، جلوهای واقعی و پرمیوم خلق شده، نه شیشهمورفیسم معمولی ارزان.
انیمیشنهای GSAP: استفاده از stagger: 0.15 برای ظهور ترتیبی کارتها، به همراه ScrollTrigger، تجربه اسکرول روان و سینمایی فراهم میکند.
معماری قابل توسعه: تمام متون، رنگها و دادههای قیمتگذاری در یک فایل config.ts متمرکز شدهاند تا سفارشیسازی در دقیقهها امکانپذیر باشد.
نتیجه: یک قالب کامل (قهرمان، ویژگیها، قیمت، FAQ، CTA) با TypeScript و مستندات، در گامرود موجود است..demo: og-ai-next.vercel.app
غواصی عمیق در ساخت Digital Rain – یک الگوی صفحه فرود هوش مصنوعی سینمایی با نمادهای ریاضی در حال سقوط، رابط کاربری شیشه مایع، و انیمیشنهای اسکرول GSAP با استفاده از Next.js 15 و Tailwind CSS.
بیشتر صفحات فرود هوش مصنوعی یکسان به نظر می رسند.
بخش قهرمان. ویژگی های شبکه جدول قیمت. پاورقی.
من میخواستم چیزی متفاوت بسازم – چیزی که بازدیدکنندگان را وادار میکند از پیمایش دست بردارند و بگویند “وای، این چیست؟”
نتیجه این است باران دیجیتال – صفحه فرود هوش مصنوعی سینمایی با نمادهای ریاضی در حال سقوط، رابط کاربری شیشه مایع، و انیمیشن های اسکرول مجهز به GSAP.
این دقیقاً نحوه ساخت آن است.
🎬 چشم انداز
این مفهوم از ماتریکس – آن افکت نمادین کد سبز در حال سقوط – ناشی شد. اما به جای کاراکترهای تصادفی، میخواستم نمادهای ریاضی سقوط کنند و به یک سطح مایع شبیهسازی شده واکنش نشان دهند.
هدف ساده بود: کاری کنید که محصول هوش مصنوعی شما از همان روز اول احساس یک استارتاپ با بودجه داشته باشد.
دمو زنده: https://og-ai-next.vercel.app/
🛠 Tech Stack
- Next.js 15 – روتر برنامه، TypeScript
- Tailwind CSS – یک ظاهر طراحی شده و شکل شیشه ای
- GSAP – اسکرول انیمیشن ها و ریز تعاملات
- Canvas API – موتور انیمیشن باران دیجیتال سفارشی
- فیلترهای SVG – شبیه سازی سطح مایع
🌧 ساخت انیمیشن باران دیجیتال
قلب قالب موتور سفارشی انیمیشن باران است. در اینجا نحوه کار آن آمده است:
مرحله 1 – بوم را تنظیم کنید
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
مرحله 2 – مجموعه نمادها را تعریف کنید
به جای کاراکترهای تصادفی، از نمادهای ریاضی برای احساس برتر استفاده کردم:
const symbols = [
'∑', 'π', '∆', '∫', '√', 'Ω', 'λ', 'φ',
'∞', 'θ', 'α', 'β', 'γ', 'δ', 'ε', 'ζ',
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'
];
مرحله 3 – ستون های باران را ایجاد کنید
const fontSize = 14;
const columns = Math.floor(canvas.width / fontSize);
const drops: number[] = new Array(columns).fill(1);
function drawRain() {
// Fade effect — creates trail
ctx.fillStyle = 'rgba(0, 0, 0, 0.05)';
ctx.fillRect(0, 0, canvas.width, canvas.height);
// Draw symbols
ctx.fillStyle = '#14b575'; // brand green
ctx.font = `${fontSize}px monospace`;
drops.forEach((drop, i) => {
const symbol = symbols[Math.floor(Math.random() * symbols.length)];
const x = i * fontSize;
const y = drop * fontSize;
ctx.fillStyle = `rgba(20, 181, 117, ${Math.random() * 0.8 + 0.2})`;
ctx.fillText(symbol, x, y);
// Reset drop randomly
if (y > canvas.height && Math.random() > 0.975) {
drops[i] = 0;
}
drops[i]++;
});
}
// Animate at 30fps
setInterval(drawRain, 33);
مرحله 4 – واکنش سطح مایع را اضافه کنید
این بخشی است که به آن احساس تعامل می دهد. هنگامی که ماوس حرکت می کند، نمادهای نزدیک واکنش نشان می دهند:
let mouseX = 0;
let mouseY = 0;
window.addEventListener('mousemove', (e) => {
mouseX = e.clientX;
mouseY = e.clientY;
});
// In drawRain function — add proximity effect
drops.forEach((drop, i) => {
const x = i * fontSize;
const y = drop * fontSize;
const distance = Math.sqrt(
Math.pow(x - mouseX, 2) + Math.pow(y - mouseY, 2)
);
// Symbols near cursor glow brighter
const opacity = distance < 100
? 1.0
: Math.random() * 0.8 + 0.2;
ctx.fillStyle = `rgba(20, 181, 117, ${opacity})`;
ctx.fillText(symbol, x, y);
});
✨ ساخت رابط کاربری شیشه مایع
Glassmorphism در همه جا وجود دارد، اما اکثر پیاده سازی ها ارزان به نظر می رسند. در اینجا نحوه ایجاد ظاهری عالی آورده شده است:
.glass-card {
background: rgba(255, 255, 255, 0.05);
backdrop-filter: blur(20px);
-webkit-backdrop-filter: blur(20px);
border: 1px solid rgba(255, 255, 255, 0.1);
box-shadow:
0 8px 32px rgba(0, 0, 0, 0.3),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
تفاوتهای کلیدی با شیشهمورفیسم ارزان:
- تیرگی پس زمینه بسیار کم (0.05 نه 0.3)
- تاری بالاتر (20 پیکسل نه 10 پیکسل)
- درخشش حاشیه بالایی داخلی (سایه درونی)
- پس زمینه تیره پایه بنابراین تاری در واقع نشان می دهد
⚡ انیمیشن های اسکرول GSAP
GSAP انیمیشن های اسکرول را روان و عملکردی می کند. در اینجا الگوی مورد استفاده من برای هر بخش آمده است:
import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger';
gsap.registerPlugin(ScrollTrigger);
// Fade up animation on scroll
gsap.fromTo('.feature-card',
{
opacity: 0,
y: 60
},
{
opacity: 1,
y: 0,
duration: 0.8,
stagger: 0.15,
ease: 'power3.out',
scrollTrigger: {
trigger: '.features-section',
start: 'top 80%',
end: 'bottom 20%',
}
}
);
را stagger: 0.15 چیزی است که باعث می شود چندین کارت به جای همه در یک زمان متحرک شوند. این جزئیات کوچک باعث میشود که کل چیز بسیار صیقلیتر به نظر برسد.
🧊 ساختار بخش قهرمان
export function Hero() {
return (
<section className="relative min-h-screen flex items-center">
{/* Canvas background */}
<canvas
ref={canvasRef}
className="absolute inset-0 w-full h-full opacity-40"
/>
{/* Gradient overlay */}
<div className="absolute inset-0 bg-gradient-to-b
from-transparent via-black/20 to-black/80"
/>
{/* Content */}
<div className="relative z-10 max-w-6xl mx-auto px-6">
<div className="glass-card p-8 rounded-2xl max-w-2xl">
<h1 className="text-5xl font-bold text-white mb-4">
Build Smarter Workflows with AI
h1>
<p className="text-slate-300 text-lg mb-8">
OG-AI helps teams automate repetitive tasks
p>
<button className="bg-brand-500 text-black
px-8 py-4 rounded-xl font-semibold">
Get Started
button>
div>
div>
section>
);
}
⚙️ یک فایل پیکربندی برای کنترل همه آنها
بهترین تصمیمی که گرفتم این بود که تمام سفارشی سازی ها را در یک فایل پیکربندی واحد قرار دهم:
// src/config.ts
export const config = {
brand: {
name: "Your AI Product",
tagline: "Build Smarter Workflows with AI",
color: "#14b575",
},
hero: {
title: "Build Smarter Workflows with AI",
subtitle: "Automate tasks, generate content, unlock insights",
cta: "Get Started Free",
},
nav: {
links: ["Features", "How It Works", "Pricing", "Testimonials", "FAQ"],
},
pricing: {
monthly: [
{ name: "Starter", price: 9, features: ["100 generations", "API access"] },
{ name: "Pro", price: 29, features: ["Unlimited", "Priority support"] },
]
}
}
بدون حفاری قطعات فقط این فایل را آپدیت کنید و همه چیز تغییر می کند.
📦 آنچه که قالب نهایی شامل می شود
- موتور سفارشی انیمیشن باران دیجیتال (Canvas API)
- انیمیشن های اسکرول GSAP در سراسر
- اجزای رابط کاربری شیشه ای مایع
- قهرمان، ویژگیها، نحوه کارکرد، قیمتگذاری، توصیفات، پرسشهای متداول، بخشهای CTA
- هر دو نسخه Next.js 15 و React
- TypeScript در سراسر
- راه اندازی Tailwind CSS
- مستندات کامل
🎯 نتیجه
نسخه ی نمایشی برای خود صحبت می کند: https://og-ai-next.vercel.app/
اگر در حال ساختن یک محصول هوش مصنوعی هستید و میخواهید صفحه فرود شما از همان روز اول مانند یک استارتآپ با بودجه مالی باشد – من این را به قالبی تبدیل کردم که میتوانید ظرف چند ساعت آن را بگیرید و سفارشی کنید.
دریافت قالب: https://pixelanas.gumroad.com/l/digital-rain
💭 آنچه یاد گرفتم
ساختن این به من آموخت که تفاوت بین یک صفحه فرود خوب و یک صفحه سینمایی این است:
- یک تصویر فراموش نشدنی – انیمیشن باران قلاب است
- خویشتن داری – همه چیز نیازی به زنده کردن ندارد
- ابتدا عملکرد – Canvas + requestAnimationFrame انیمیشن های CSS را برای جلوه های پیچیده شکست می دهد
- احساسات بر اطلاعات – مردم احساسات را می خرند، نه ویژگی ها
اگر در مورد هر قسمت از اجرا سوالی دارید، در نظرات مطرح کنید. خوشحالم که در هر بخش عمیق تر می رویم.
🔗 نسخه نمایشی → https://og-ai-next.vercel.app/
🛒 آن را دریافت کنید → https://pixelanas.gumroad.com/l/digitalrain
ساخته شده توسط Anas — توسعه دهنده تمام پشته متخصص در Next.js، انیمیشن ها و رابط کاربری ممتاز. مرا در X پیدا کنید: @pixelanas



