AI Website Cloner Template 学习教程

AI Website Cloner Template 学习教程

一、环境准备

前置知识

学习 AI Website Cloner Template 需要以下基础:

知识 程度 说明
AI 编码工具 必须 至少使用过 Claude Code 等工具
命令行操作 必须 Git、npm、CLI 操作
React/Next.js 推荐 理解生成的代码结构
TypeScript 推荐 理解类型定义
CSS/Tailwind 推荐 理解样式和设计令牌
Git Worktree 可选 理解并行构建机制

安装步骤

1. 确保 Node.js 环境

# 检查 Node.js 版本(需要 24+)
node -v

# 使用 nvm 安装
nvm install 24
nvm use 24

2. 克隆模板

# 克隆到你的项目目录
git clone https://github.com/JCodesMore/ai-website-cloner-template.git my-clone
cd my-clone

# 安装依赖
npm install

3. 验证基础构建

# 确认项目能构建
npm run build

# 启动开发服务器
npm run dev

4. 配置 AI Agent

Claude Code(推荐):

# 启动 Claude Code(带 Chrome 浏览器集成)
claude --chrome

其他 Agent: 项目已内置 14 个平台的配置文件,直接启动对应 Agent 即可。

环境验证

# 在 Claude Code 中测试
claude --chrome

# 输入
> /clone-website https://example.com

# 如果看到侦察阶段开始执行,说明环境配置成功

二、快速开始

Hello World

第一步: 启动 AI Agent

cd my-clone
claude --chrome

第二步: 运行克隆命令

> /clone-website https://stripe.com

AI Agent 会自动执行完整的五阶段流水线。

第三步: 观察执行过程

Phase 1: 侦察
├── 截图保存到 docs/design-references/
├── 提取字体、颜色保存到 docs/research/
├── 执行滚动/点击/悬停/响应式扫描
└── 生成 PAGE_TOPOLOGY.md 和 BEHAVIORS.md

Phase 2: 基础构建
├── 更新 src/app/layout.tsx(字体)
├── 更新 src/app/globals.css(颜色令牌)
├── 提取 SVG 图标到 src/components/icons.tsx
└── 下载资产到 public/images/

Phase 3: 组件规格
└── 为每个页面部分生成规格文件到 docs/research/components/

Phase 4: 并行构建
├── Builder Agent 1 → Hero Section
├── Builder Agent 2 → Features Section
├── Builder Agent 3 → Pricing Section
└── Builder Agent N → ...

Phase 5: 组装 & QA
├── 合并所有 Worktree
└── 视觉对比验证

第四步: 查看结果

# 启动开发服务器查看结果
npm run dev

# 查看生成的文件
ls docs/research/components/
ls src/components/
ls public/images/

多网站克隆

# 一次克隆多个网站
> /clone-website https://stripe.com https://linear.app

# 每个网站的产出隔离在独立目录
# docs/research/stripe.com/
# docs/research/linear.app/

三、核心概念

概念图谱

AI Website Cloner 核心概念
├── 五阶段流水线
│   ├── 侦察 (Reconnaissance) — 截图 + 全局提取 + 交互扫描
│   ├── 基础构建 (Foundation) — 字体 + 颜色 + 类型 + 图标 + 资产
│   ├── 组件规格 (Component Specs) — 每个组件的详细规格文件
│   ├── 并行构建 (Parallel Build) — Worktree + Builder Agent
│   └── 组装 QA (Assembly) — 合并 + 视觉对比
│
├── 设计令牌提取
│   ├── 颜色 — getComputedStyle() 精确值
│   ├── 字体 — family + weight + style
│   ├── 间距 — 比例尺识别
│   ├── 排版 — h1-h6 + body + caption
│   ├── 圆角 — border-radius
│   └── 阴影 — box-shadow
│
├── 交互行为提取
│   ├── 滚动扫描 — 触发器 + 前后状态 + 过渡
│   ├── 点击扫描 — 点击行为 + 内容变化
│   ├── 悬停扫描 — 颜色/缩放/阴影变化
│   └── 响应式扫描 — 1440px/768px/390px
│
├── 并行构建
│   ├── Git Worktree 隔离
│   ├── Builder Agent(每个组件一个)
│   ├── 规格文件作为契约
│   └── 原子编译验证
│
├── 核心原则
│   ├── 完整性优于速度
│   ├── 小任务完美结果(~150 行规格上限)
│   ├── 真实内容和资产
│   ├── 基础先行
│   ├── 提取外观和行为
│   ├── 识别交互模型
│   ├── 提取所有状态
│   ├── 规格文件是真相来源
│   └── 构建必须编译
│
└── 多平台支持
    ├── AGENTS.md(真相来源)
    ├── SKILL.md(技能定义)
    └── 同步脚本(14 个平台)

核心概念详解

1. 交互模型识别

克隆中最昂贵的错误:把滚动驱动的 UI 当作点击驱动来构建。

如何判断交互模型:

步骤 1: 不要先点击!先缓慢滚动
  └── 如果元素随滚动自动变化 → 滚动驱动
       └── 提取: IntersectionObserver / scroll-snap / sticky / animation-timeline
  └── 如果滚动无变化 → 进入步骤 2

步骤 2: 点击/悬停测试
  └── 记录每个交互行为和对应的内容变化

步骤 3: 在规格文件中明确标注
  └── "INTERACTION MODEL: scroll-driven with IntersectionObserver"
  └── 或 "INTERACTION MODEL: click-to-switch with opacity transition"

2. 多状态提取

很多组件有多个视觉状态,必须全部提取:

标签/有状态内容: - 点击每个标签/按钮 - 提取每个状态的内容、图片、卡片数据 - 记录内容属于哪个状态 - 记录状态间过渡动画

滚动依赖元素: - 捕获滚动位置 0 的样式(初始状态) - 滚动过触发阈值后再次捕获(滚动状态) - 对比两套 CSS 找出变化属性 - 记录过渡 CSS(时长、缓动、属性)

3. 规格文件(组件契约)

每个组件在构建前必须有规格文件:

# docs/research/components/hero-section.md

## Component: HeroSection

### 截图参考
[附上该区域的截图]

### 交互模型
INTERACTION MODEL: static(无交互)

### 布局
- 外层容器: max-width 1440px, padding 80px 24px
- 内容区: flex, flex-col, items-center, gap 24px
- 标题: font-size 64px, font-weight 700, line-height 1.1
- 副标题: font-size 20px, font-weight 400, color #6b7280
- CTA 按钮: bg #7c3aed, text white, rounded-lg, px 8, py 4

### 资产
- 背景图: public/images/hero-bg.webp (1920x1080)
- Logo SVG: src/components/icons.tsx → LogoIcon

### 响应式
- 768px: 标题 48px, 布局不变
- 390px: 标题 32px, padding 40px 16px, 按钮全宽

### TypeScript 类型
interface HeroSectionProps {
  title: string;
  subtitle: string;
  ctaText: string;
  ctaHref: string;
  backgroundImage: string;
}

4. 复杂度预算规则

如果 Builder Prompt 超过 ~150 行规格内容 → 组件太复杂 → 拆分

示例:
"构建整个 Features 区域" → 太复杂 ❌

拆分为:
├── Builder A → Features 区域容器 + 布局
├── Builder B → Feature Card 变体 1(带图标)
└── Builder C → Feature Card 变体 2(带图片)

术语表

术语 说明
Reconnaissance 侦察阶段,提取设计令牌和交互行为
Foundation 基础构建阶段,设置全局样式和类型
Component Spec 组件规格文件,Builder 的契约
Builder Agent 构建器 Agent,在 Worktree 中构建单个组件
Worktree Git 工作区隔离,每个 Builder 独立工作
Design Token 设计令牌,颜色/字体/间距等设计参数
Interaction Model 交互模型,决定 UI 是点击/滚动/悬停驱动
Behavior Extraction 行为提取,捕获动画、过渡、状态变化
oklch 一种色彩空间,Tailwind v4 用于设计令牌
MCP Model Context Protocol,浏览器自动化接口

四、功能详解

4.1 侦察阶段详解

侦察是整个流水线最关键的阶段:

截图采集

自动采集:
├── 全页桌面截图 (1440px) → docs/design-references/desktop-full.png
├── 全页手机截图 (390px)  → docs/design-references/mobile-full.png
└── 后续每个组件还会采集区域截图

全局提取

// 通过浏览器 MCP 提取的颜色
const colors = {
  background: getComputedStyle(body).backgroundColor,
  primary: getComputedStyle(primaryBtn).backgroundColor,
  text: getComputedStyle(h1).color,
  // ...映射到 shadcn 令牌
};

// 提取的字体
const fonts = {
  heading: 'Inter, sans-serif',
  body: 'Inter, sans-serif',
  mono: 'JetBrains Mono, monospace'
};

强制交互扫描

四种扫描覆盖所有交互:

扫描 方法 产出
滚动扫描 缓慢滚动页面 BEHAVIORS.md
点击扫描 点击所有可交互元素 行为记录
悬停扫描 悬停所有可能的状态 状态记录
响应式扫描 1440/768/390 三种宽度 断点记录

页面拓扑

# docs/research/PAGE_TOPOLOGY.md

1. Navbar (fixed, z-50) — 滚动后背景变化
2. Hero Section (static) — 无交互
3. Features Grid (static) — 3 列 → 1 列响应式
4. Pricing Cards (click-driven) — 月/年切换
5. Testimonials (time-driven) — 自动轮播
6. CTA Banner (static) — 无交互
7. Footer (static) — 多列布局

4.2 基础构建详解

基础构建是顺序执行的(不能并行),因为后续所有 Builder 都依赖它:

// 更新 layout.tsx 字体
import { Inter } from 'next/font/google';
const inter = Inter({ subsets: ['latin'] });

// 更新 globals.css 设计令牌
:root {
  --background: oklch(1 0 0);
  --primary: oklch(0.702 0.183 293.541);
  --secondary: oklch(0.968 0.007 264.542);
  // ...
}

// 提取 SVG 图标
// src/components/icons.tsx
export function SearchIcon(props: SVGProps<SVGSVGElement>) {
  return <svg {...props}>...</svg>;
}

4.3 资产下载

自动生成并执行下载脚本:

// scripts/download-assets.mjs
const assets = [
  { url: 'https://target.com/images/hero.jpg', dest: 'public/images/hero.jpg' },
  { url: 'https://target.com/images/logo.svg', dest: 'public/images/logo.svg' },
  // ...
];

4.4 并行构建详解

主 Agent(Foreman 角色)
│
├── 发现 Hero Section → 写规格文件 → 派发 Builder A
│   └── Builder A 在 worktree-1 中工作
│       └── 完成: src/components/hero-section.tsx
│
├── 发现 Features Section → 写规格文件 → 派发 Builder B
│   └── Builder B 在 worktree-2 中工作
│       └── 完成: src/components/features-grid.tsx
│       └── 完成: src/components/feature-card.tsx
│
├── 发现 Pricing Section → 写规格文件 → 派发 Builder C
│   └── Builder C 在 worktree-3 中工作
│       └── 完成: src/components/pricing-section.tsx
│
└── 所有 Builder 完成
    └── 合并 worktree
    └── 验证 npm run build

4.5 多平台同步

修改两个真相来源文件后,运行同步脚本:

# 修改 AGENTS.md 后
bash scripts/sync-agent-rules.sh

# 修改 SKILL.md 后
node scripts/sync-skills.mjs

同步脚本自动为每个平台生成特定配置: - .claude/ → Claude Code - .cursor/ → Cursor - .windsurf/ → Windsurf - .gemini/ → Gemini CLI - .codex/ → Codex CLI - .cline/ → Cline - 等等...

4.6 Docker 部署

# 生产模式
docker compose up app --build
# → http://localhost:3000

# 开发模式(热重载)
docker compose up dev --build
# → http://localhost:3001

五、CLI 完整参考

命令

# 开发
npm run dev          # 启动开发服务器

# 构建
npm run build        # 生产构建

# 检查
npm run lint         # ESLint 检查
npm run typecheck    # TypeScript 类型检查
npm run check        # 完整检查(lint + typecheck + build)

# 同步
bash scripts/sync-agent-rules.sh  # 同步平台指令
node scripts/sync-skills.mjs      # 同步克隆技能

# Docker
docker compose up app --build     # 生产
docker compose up dev --build     # 开发

AI Agent 命令

# 克隆网站(核心命令)
/clone-website <url1> [<url2> ...]

# 从规格文件构建
/build-from-spec

# 定制化修改
/customize

常用工作流

工作流 1: 完整克隆
1. git clone ... && cd my-clone && npm install  设置项目
2. claude --chrome                               启动 Agent
3. /clone-website https://target.com             克隆
4. npm run dev                                   预览
5. 根据需要修改定制                               定制

工作流 2: 多网站克隆
1. /clone-website https://a.com https://b.com    并行克隆
2. 每个网站的产出隔离在 docs/research/<hostname>/

工作流 3: 存量项目集成
1. 将模板的 docs/ 和 scripts/ 复制到现有项目
2. 调整 AGENTS.md 中的技术栈配置
3. 运行 /clone-website

工作流 4: 自定义技能
1. 编辑 .claude/skills/clone-website/SKILL.md    修改技能
2. node scripts/sync-skills.mjs                  同步到所有平台

六、进阶主题

6.1 自定义克隆行为

可以通过修改 SKILL.md 调整克隆行为:

## Scope Defaults
- **Fidelity level:** Pixel-perfect  → 改为 "Close match" 降低精度
- **In scope:** Visual layout...    → 添加 "Dark mode variant"
- **Out of scope:** Real backend... → 移除 "SEO optimization" 以包含 SEO

6.2 添加新的设计令牌

src/app/globals.css 中添加自定义令牌:

:root {
  /* shadcn 默认令牌 */
  --background: oklch(1 0 0);
  --foreground: oklch(0.145 0 0);

  /* 自定义令牌 */
  --accent-gradient: linear-gradient(135deg, #7c3aed, #2563eb);
  --card-glow: 0 0 20px rgba(124, 58, 237, 0.15);
}

6.3 处理复杂交互

平滑滚动库(Lenis):

# 如果目标网站使用 Lenis
npm install lenis
// src/hooks/use-smooth-scroll.ts
import Lenis from 'lenis';

export function useSmoothScroll() {
  useEffect(() => {
    const lenis = new Lenis({ duration: 1.2 });
    function raf(time: number) {
      lenis.raf(time);
      requestAnimationFrame(raf);
    }
    requestAnimationFrame(raf);
    return () => lenis.destroy();
  }, []);
}

滚动驱动动画:

// 使用 IntersectionObserver 实现入场动画
'use client';
import { useEffect, useRef } from 'react';

export function useScrollReveal() {
  const ref = useRef<HTMLDivElement>(null);
  useEffect(() => {
    const observer = new IntersectionObserver(
      ([entry]) => {
        if (entry.isIntersecting) {
          entry.target.classList.add('revealed');
        }
      },
      { threshold: 0.1 }
    );
    if (ref.current) observer.observe(ref.current);
    return () => observer.disconnect();
  }, []);
  return ref;
}

6.4 优化 Token 消耗

并行 Builder Agent 消耗大量 Token,优化策略:

策略 说明
合并简单组件 如果两个相邻组件都很简单,合并为一个 Builder
减少截图 只发送当前组件的截图,不发送全页截图
使用更便宜的模型 非关键组件用 Sonnet 而非 Opus
控制并行度 不要同时派发太多 Builder

6.5 检查产出质量

# 查看生成的规格文件
ls docs/research/components/
cat docs/research/BEHAVIORS.md
cat docs/research/PAGE_TOPOLOGY.md

# 验证构建
npm run check

# 视觉对比(手动)
# 在浏览器中打开克隆结果和原网站对比

6.6 使用其他 AI Agent

# Cursor
cursor .

# Windsurf
windsurf .

# Gemini CLI
gemini

# Codex CLI
codex

# 每个平台会自动读取对应的配置文件

七、常见问题

Q1: 必须使用 Claude Code 吗?

不必须。项目支持 14 个 AI 编码 Agent。但 Claude Code + Opus 4.6 是推荐组合,效果最好。其他 Agent 也能工作,但精确度可能有差异。

Q2: 为什么需要浏览器 MCP?

浏览器 MCP(Chrome MCP / Playwright MCP 等)是核心依赖。没有浏览器自动化,就无法提取精确的 CSS 值、执行交互扫描、下载资产。这是项目"像素级精确"的基础。

Q3: 能克隆 JavaScript 渲染的网站吗?

能。通过浏览器 MCP 访问的是完全渲染后的 DOM,包括 JavaScript 动态生成的内容。这是比静态截图工具(如 screenshot-to-code)的重要优势。

Q4: 克隆一个网站需要多长时间?

取决于目标网站的复杂度: - 简单单页: 5-15 分钟 - 中等复杂度: 15-30 分钟 - 复杂多页: 30-60 分钟 - 多个网站(并行): 与最复杂的那个相当

Q5: Token 消耗大吗?

比较大。并行 Builder + 详细规格生成 + 多次浏览器 MCP 调用。建议使用 Anthropic API 按 Token 计费,避免使用固定价格的订阅。

Q6: 克隆的代码能直接部署吗?

能。生成的代码是标准的 Next.js 项目,可以直接部署到 Vercel 或其他平台。但需要注意: - 只包含前端代码 - 表单、认证等后端功能需要自己实现 - 使用的是目标网站的真实资产,上线前需要替换

Q7: 如何处理目标网站的自定义字体?

项目会自动检测目标网站的字体来源: - Google Fonts → 使用 next/font/google 加载 - 自托管字体 → 下载到 public/fonts/ 并使用 next/font/local - 系统字体 → 直接在 CSS 中使用

Q8: 多人团队如何使用?

  • 模板本身是 Git 仓库,可以 Fork
  • 每个开发者克隆不同的目标网站
  • 通过 Git PR 合并各自的克隆结果
  • 规格文件(docs/research/)可以团队共享和审查

八、参考资料

官方资源

  • GitHub 仓库: https://github.com/JCodesMore/ai-website-cloner-template
  • YouTube Demo: https://youtu.be/O669pVZ_qr0
  • Discord 社区: https://discord.gg/hrTSX5yTpB

相关技术

  • Next.js 16: https://nextjs.org
  • shadcn/ui: https://ui.shadcn.com
  • Tailwind CSS v4: https://tailwindcss.com
  • Chrome MCP: Chrome DevTools Protocol 集成
  • Claude Code: https://docs.anthropic.com/en/docs/claude-code

竞品参考

  • screenshot-to-code: https://github.com/abi/screenshot-to-code
  • v0 (Vercel): https://v0.dev
  • bolt.new: https://bolt.new
  • websim.ai: https://websim.ai

学习路线图

第1天: 基础入门
├── 克隆模板并安装依赖
├── 配置 Claude Code + Chrome MCP
├── 尝试克隆一个简单网站
└── 理解五阶段流水线

第2-3天: 核心概念
├── 理解设计令牌提取
├── 学习交互行为提取(四种扫描)
├── 理解组件规格文件
└── 掌握并行 Builder Agent 机制

第4-5天: 进阶实践
├── 克隆复杂交互网站
├── 学习多 URL 克隆
├── 理解 Worktree 并行构建
└── 定制克隆行为

第6-7天: 扩展集成
├── 使用其他 AI Agent(Cursor/Windsurf 等)
├── Docker 部署
├── 自定义技能和平台同步
└── 建立完整的网站克隆工作流