Files
aivideo/frontend-web/src/app/page.tsx

190 lines
7.2 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import {
ArrowRight,
CirclePlay,
Coins,
FolderKanban,
ImagePlus,
ShieldCheck,
Sparkles,
} from "lucide-react";
import Link from "next/link";
const productHighlights = [
{
title: "生成工作台",
copy: "把模型、提示词、时长、比例和素材引用收进一个创作面板。",
icon: Sparkles,
},
{
title: "素材系统",
copy: "图片、视频、音频参考素材统一入库,创作时直接调用。",
icon: ImagePlus,
},
{
title: "任务追踪",
copy: "生成状态实时刷新,结果视频、积分消耗和任务详情一屏可见。",
icon: FolderKanban,
},
{
title: "积分与增长",
copy: "充值、兑换码、注册奖励和邀请关系形成完整的商业闭环。",
icon: Coins,
},
];
export default function HomePage() {
return (
<main className="marketing-home">
<header className="marketing-nav">
<div className="marketing-logo">AIVideo</div>
<nav className="marketing-nav-links">
<a href="#product"></a>
<a href="#workflow"></a>
<a href="#ops"></a>
</nav>
<div className="marketing-nav-actions">
<Link href="/login" className="marketing-link-button">
</Link>
<Link href="/register" className="marketing-primary-button">
</Link>
</div>
</header>
<section className="marketing-hero">
<div className="marketing-hero-copy">
<span className="marketing-kicker">AI VIDEO PLATFORM</span>
<h1></h1>
<p>
AIVideo
</p>
<div className="marketing-hero-actions">
<Link href="/register" className="marketing-primary-button">
<ArrowRight size={16} />
</Link>
<Link href="/login" className="marketing-secondary-button">
</Link>
</div>
<div className="marketing-stat-row">
<div>
<strong></strong>
<span></span>
</div>
<div>
<strong></strong>
<span></span>
</div>
<div>
<strong></strong>
<span></span>
</div>
</div>
</div>
<div className="marketing-stage">
<div className="marketing-stage-card marketing-stage-card-dark">
<div className="marketing-stage-label">Creator Workspace</div>
<h2> AI </h2>
<p>
</p>
<div className="marketing-chip-row">
<span>Text to video</span>
<span>Asset references</span>
<span>Task polling</span>
</div>
</div>
<div className="marketing-stage-grid">
<div className="marketing-stage-card">
<CirclePlay size={18} />
<strong></strong>
<span></span>
</div>
<div className="marketing-stage-card">
<Coins size={18} />
<strong></strong>
<span></span>
</div>
</div>
</div>
</section>
<section className="marketing-section marketing-section-light" id="product">
<div className="marketing-section-copy">
<span className="marketing-kicker">Product Capabilities</span>
<h2></h2>
<p>
DEMO
</p>
</div>
<div className="marketing-tile-grid">
{productHighlights.map((item) => {
const Icon = item.icon;
return (
<article className="marketing-tile" key={item.title}>
<div className="marketing-tile-icon">
<Icon size={20} />
</div>
<h3>{item.title}</h3>
<p>{item.copy}</p>
</article>
);
})}
</div>
</section>
<section className="marketing-section marketing-section-dark" id="workflow">
<div className="marketing-section-copy">
<span className="marketing-kicker">Workflow</span>
<h2></h2>
</div>
<div className="marketing-flow-grid">
<div className="marketing-flow-card">
<span>01</span>
<strong></strong>
<p></p>
</div>
<div className="marketing-flow-card">
<span>02</span>
<strong></strong>
<p></p>
</div>
<div className="marketing-flow-card">
<span>03</span>
<strong></strong>
<p></p>
</div>
</div>
</section>
<section className="marketing-section marketing-section-light" id="ops">
<div className="marketing-ops-shell">
<div className="marketing-section-copy">
<span className="marketing-kicker">Operations Console</span>
<h2></h2>
<p>
</p>
</div>
<div className="marketing-ops-card">
<ShieldCheck size={20} />
<strong></strong>
<p>
AIVideo
</p>
<Link href="/admin/login" className="marketing-link-inline">
<ArrowRight size={14} />
</Link>
</div>
</div>
</section>
</main>
);
}