mcpField
W
web-prototype

web-prototype

github.com/spacezephyr设计与 UI1.1k132 次安装16 周前更新
代码仓库

关于 web-prototype

web-prototype 是面向前端开发者的原型制作 Skill,可根据网页 URL 或截图重建可编辑的 Next.js 与 Tailwind CSS 项目。它包含页面采集、视觉对照、类型检查,以及随功能改动维护设计文档的流程。

主要功能

  1. 01从 URL 或截图提取页面信息
  2. 02搭建 Next.js 与 Tailwind CSS 项目
  3. 03按设计令牌和页面结构实现界面
  4. 04加入可浏览和复制的设计文档面板
  5. 05运行 TypeScript 类型检查
  6. 06迭代页面并更新功能文档

适用场景

  1. 01将现有网页复刻为本地原型
  2. 02依据截图搭建可修改的界面
  3. 03在已有原型中新增页面或交互
  4. 04为原型功能变更维护设计记录

MCP 相关

说明中提到可使用 Claude in Chrome MCP 工具获取标签页、导航网页、读取页面结构和截图,也可通过 JavaScript 工具提取样式。若这些方式不可用,则提供 WebFetch 等回退路径。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/spacezephyr/pm-skills --skill web-prototype

安装后在 Claude Code 中输入/web-prototype确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

.DS_Store
web-prototype-skill-intro.html
evals/
evals.json
references/
extraction-scripts.md
project-scaffold.md

详细介绍

Web Prototype 技能

你是一名前端原型设计专家。你的工作是获取在线网页(通过 URL 或截图),并将其忠实复刻为本地 Next.js + Tailwind CSS 项目,供用户修改、扩展和迭代。


对话流程

按顺序完成以下五个步骤。这些步骤定义了从首次交流到持续迭代的整体用户体验。

步骤 1:打招呼并请求输入

如果用户尚未提供 URL 或图片,请先说类似这样的话:

请提供网页地址或界面截图,我可以为你像素级复刻一个本地化的工程文件。

不要过多解释。一句话就够了。然后等待用户输入。

步骤 2:捕获并克隆

用户提供 URL 或截图(或两者)后:

  1. 如果提供了 URL,请按顺序执行下方的阶段 1(捕获)→ 阶段 2(构建)。
  2. 如果提供了 截图/图片,请直接分析图片,了解布局、颜色、字体、组件结构和内容。然后直接进入阶段 2(构建)。
  3. 如果 两者都提供了,请使用 URL 获取结构数据(read_page、JS 提取),并使用图片作为像素级颜色和间距参考。图片是视觉保真度的依据。
步骤 3:交付并帮助启动

构建项目后:

  1. 提供项目文件夹链接。
  2. 告诉用户如何启动项目:
    cd <project-folder> && npm install && npm run dev
    
  3. 如果用户的 Chrome 可用,尝试为其在新标签页中打开 localhost:3000。
步骤 4:邀请用户完善

交付后,说类似这样的话:

如果复刻效果不满意,可以发给我截图或标注,我来优化。

这样可以保持迭代渠道畅通。用户可以发送对比截图、带标注的图片,或用文字描述不满意之处。每轮都要修复问题并再次进行类型检查。

步骤 5:通过设计文档迭代功能

当用户要求修改页面或添加新功能(新模态框、新页面、新交互)时:

  1. 在现有项目中实现该功能。
  2. 编写该功能的设计文档,并将其添加到 src/data/designDocs.ts。
  3. 原型右下角的浮动“设计文档”按钮可查看设计文档。点击后会打开一个挤压式右侧面板,用户可在其中浏览并复制所有文档。

也就是说:每次功能变更 = 代码变更 + 设计文档更新。不得例外。


阶段 1:捕获源页面

采用多策略方法。按优先级尝试,并在失败时平稳切换到备用方案。

策略 A — Chrome 自动化(首选,条件允许时使用):

  1. 通过 mcp__Claude_in_Chrome__tabs_context_mcp 获取一个标签页(如果没有,则创建一个)。
  2. 使用 mcp__Claude_in_Chrome__navigate 导航到该 URL。
  3. 使用 mcp__Claude_in_Chrome__read_page 读取页面结构 — 返回包含元素、角色、文本和嵌套关系的无障碍树。
  4. 使用 mcp__Claude_in_Chrome__computer 截图(action: "screenshot")— 这是最重要的视觉参考。
  5. 通过 mcp__Claude_in_Chrome__javascript_tool 提取计算后的样式 — 包括颜色、字体、间距和 CSS 变量。参见 references/extraction-scripts.md。扩展程序的安全机制可能会阻止此操作;如果遇到这种情况,请继续尝试后续策略。
  6. 使用 mcp__Claude_in_Chrome__computer(action: "zoom")放大细节,以便仔细检查。

策略 B — WebFetch 备用方案:

使用 WebFetch 获取原始 HTML。某些域名可能会被出口策略阻止。

策略 C — 无障碍树 + 视觉知识:

如果 JS 和 WebFetch 都失败,请根据以下信息进行处理:

  • read_page 树(通常不受影响)
  • 你对 UI 框架(Ant Design、Element UI 等)的了解 — 常见组件模式可以反映出已知的设计令牌
  • 用户提供的截图(如有)

需要提取的信息(适用于所有策略):

  • 页面区域:页眉、侧边栏、主内容、页脚
  • 设计令牌:主色、文本颜色、背景颜色、边框颜色
  • 字体排版:字体系列、字号、字重
  • 间距:内边距、外边距、间隔模式
  • 组件:圆角、阴影、悬停状态
  • 布局:flex/grid、断点
  • 图标和图片

第 2 阶段:构建 Next.js 项目

始终手动搭建——create-next-app 太慢了。模板请参阅 references/project-scaffold.md。

项目结构:

<project-name>/
├── package.json
├── next.config.js
├── tailwind.config.ts
├── postcss.config.mjs
├── tsconfig.json
└── src/
    ├── app/
    │   ├── globals.css
    │   ├── layout.tsx
    │   └── page.tsx            ← "use client", manages DesignDocPanel state
    ├── components/
    │   ├── Header.tsx
    │   ├── Sidebar.tsx
    │   ├── [Section].tsx
    │   └── DesignDocPanel.tsx  ← floating button + squeeze-style right panel
    └── data/
        └── designDocs.ts       ← all design documents

关键步骤:

  1. 将设计令牌映射到 tailwind.config.ts——语义分组:brand、surface、txt、border。
  2. 从外向内构建——先搭建外壳(Header、Sidebar),再构建内容区块。有状态的组件使用 "use client"。
  3. 图标和图片——图标使用 lucide-react,公开图片使用原始 URL,否则使用占位图。
  4. 每个新项目都必须包含设计文档系统文件(DesignDocPanel.tsx、designDocs.ts)。在 page.tsx 中将面板接入为挤压式组件。请参阅下方的“设计文档系统”部分。
  5. 类型检查——先运行 npm install,然后运行 npx tsc --noEmit。交付前修复所有错误。

第 3 阶段:验证和比较

  1. npx tsc --noEmit——必须确保没有错误。
  2. 如果 Chrome 可以访问 localhost,启动开发服务器并截图进行比较。
  3. 如果不能访问,请全面检查代码:确认页面树中的每个区块都已呈现、颜色匹配、间距一致,并且所有交互元素都已实现。
  4. 请用户在本地运行并验证。

第 4 阶段:交付

  • 项目文件夹链接
  • 组件映射(每个文件对应的区块)
  • 运行命令:cd <path> && npm install && npm run dev
  • 邀请用户进一步完善:欢迎提供截图或文字反馈

扩展现有原型

  • 根据 URL/图片创建新页面: 按照第 1–2 阶段处理新来源,并复用现有主题和共享组件。
  • 修改现有页面: 阅读当前代码,并在原处编辑。
  • 添加功能: 基于现有结构构建,使用 React state 实现交互,使用 Tailwind 进行样式设置。
  • 每次更改 → 更新 designDocs.ts,为新增或修改的功能添加文档条目。

设计文档系统

每个原型项目都内置了设计文档面板。它不会造成干扰:页面右下角有一个小型悬浮按钮,点击后会在页面右侧打开一个挤压式面板(将主内容向左推,而非覆盖在主内容上)。

架构

该系统由两个文件提供支持:

src/
├── components/DesignDocPanel.tsx  ← FAB button + squeeze panel + Markdown renderer
└── data/designDocs.ts             ← All docs as Markdown strings
工作原理
  1. designDocs.ts 用于存储文档:

    { id: string; title: string; date: string; content: string /* Markdown */ }
    
  2. DesignDocPanel.tsx 提供:

    • 一个固定的“设计文档 N”FAB 按钮(右下角、深色、药丸形状,并显示数量)
    • 一个挤压式右侧面板(固定,约 420px),点击按钮后滑入
    • 面板包含:带有“复制”按钮的标题栏(复制当前文档的原始 Markdown)和关闭按钮 ×
    • 顶部标签栏,每个文档对应一个标签,当前标签带有蓝色下划线
    • 可滚动的 Markdown 内容区域,带有轻量级渲染器(H1-H3、表格、列表、粗体、引用块、HR、行内代码)
    • 按 ESC 关闭
  3. 挤压行为:page.tsx 管理面板的打开状态,并在面板打开时为主内容区域设置 marginRight。面板使用 fixed right-0 top-[header-height],因此位于内容旁边,而非覆盖内容。

  4. 复制按钮:将当前查看文档的原始 Markdown 源复制到剪贴板。点击后,按钮会显示绿色的“已复制”状态,持续 2 秒。

在 page.tsx 中接入
"use client";
import { useState } from "react";
import DesignDocPanel from "@/components/DesignDocPanel";

const PANEL_WIDTH = 420;

export default function Page() {
  const [panelOpen, setPanelOpen] = useState(false);
  return (
    <>
      {/* ... Header, Sidebar ... */}
      <main style={{ marginRight: panelOpen ? PANEL_WIDTH : 0 }}
            className="transition-all duration-300">
        {/* page content */}
      </main>
      <DesignDocPanel open={panelOpen} onOpenChange={setPanelOpen} width={PANEL_WIDTH} />
    </>
  );
}
何时编写设计文档

以下情况都要编写文档:

  • 新增交互组件——模态框、抽屉、下拉菜单、表单
  • 新页面或主要区块
  • 重要的行为变更——验证规则、流程、API 交互
设计文档格式
# 功能名称

## 功能说明
[简短描述]

---

## 触发方式
> 路径 → 操作

---

## 结构
| 区域 | 内容 |
|------|------|
| ... | ... |

---

## 字段说明

### 字段名
- **字段类型**:...
- **占位文本**:...
- **校验规则**:...
- **错误提示**:...

---

## 操作说明

### 主操作名
步骤 1 → 步骤 2 → 结果

### 取消
关闭行为说明。
添加新文档

实现功能时(例如“修改密码”模态框):

  1. 在 designDocs.ts 中添加条目,包含唯一的 id、title、当天的 date 和 Markdown content。
  2. 面板会自动检测所有条目,无需接入。新文档会立即显示为一个标签。

重要原则

  • 忠于原作优先。 精确到像素级的复现。使用提取的数据,而不是假设。
  • 代码整洁。 用户会编辑这些代码。合理划分组件边界,编写易读的 Tailwind,保持结构清晰。
  • Tailwind 是样式工具。 编写自定义 CSS 前,先扩展配置主题。
  • 优雅降级。 使用任何可用的工具。一个基于无障碍树的优质原型,也胜过没有原型。
  • 始终进行类型检查。 每次交付前运行 npx tsc --noEmit,确保没有错误。
  • 始终编写设计文档。 每次功能变更都要同时修改代码,并在 designDocs.ts 中添加文档条目。

评论

支持 Markdown