mcpField
P
pm-url2proto

pm-url2proto

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

关于 pm-url2proto

面向需要复刻和迭代网页原型的用户,将网页 URL 或截图转为可修改的 Next.js 与 Tailwind CSS 本地项目。它还为原型内置设计文档面板,并要求功能改动同步更新文档。

主要功能

  1. 01从 URL 或截图构建本地原型
  2. 02使用 Next.js 与 Tailwind CSS
  3. 03提取页面结构和视觉样式
  4. 04提供原型设计文档面板
  5. 05功能改动同步更新文档

适用场景

  1. 01将现有网页转为可编辑原型
  2. 02依据截图重建页面布局与样式
  3. 03在现有原型中增加页面或交互
  4. 04通过截图和反馈迭代原型

MCP 相关

该 Skill 描述了通过 Claude in Chrome MCP 工具获取页面结构、截图和样式,并在工具不可用时尝试 WebFetch。它本身不声明向 MCP 客户端提供服务。

安装

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

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

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

包含的文件

除 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 中记录。

上下游衔接

本 Skill 是 pm-skills 工作流的一环,由 pm-master 总控统一路由。

  • 上游:竞品参考 URL 常来自 pm-competitor-deconstructor 的拆解结论
  • 下游:pm-review-board(原型可作为评审材料)

交接规则:链路模式下,完成后输出一段「交接摘要」(≤10 行:本步结论 + 下一步所需输入),供下一个 Skill 直接使用。

评论

支持 Markdown