TapCanvas tapcanvas-design-to-web

基于用户提供的设计稿图片还原真实网页。该 skill 可用于任意前端项目,但强依赖本地已启动且已授权的 TapCanvas vision 工作流;默认使用 `gemini-3.1-flash-image-preview` 做视觉取证,支持外部传入 vision prompt,且不可静默降级。

install
source · Clone the upstream repo
git clone https://github.com/anymouschina/TapCanvas
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/anymouschina/TapCanvas "$T" && mkdir -p ~/.claude/skills && cp -r "$T/apps/agents-cli/skills/tapcanvas-design-to-web" ~/.claude/skills/anymouschina-tapcanvas-tapcanvas-design-to-web && rm -rf "$T"
manifest: apps/agents-cli/skills/tapcanvas-design-to-web/SKILL.md
source content

TapCanvas Design To Web

目标

  • 把用户提供的设计稿图片还原成仓库内真实可运行的网页,而不是只产出静态描述。
  • 优先追求接近设计稿的视觉完成度,同时保持实现符合当前仓库技术栈与模块边界。
  • 单一路径执行:设计稿取证 -> 结构拆解 -> 代码实现 -> 对稿修正。

强约束

  • 本 skill 强依赖本地已启动的 TapCanvas vision 工作流。
  • 默认视觉模型是
    gemini-3.1-flash-image-preview
    ;除非用户显式指定其他 active model,否则不要私自改。
  • 假定当前环境具备白名单调用权限;若无权限,必须直接报错。
  • 必须先做视觉取证,再动代码;禁止凭主观印象直接开写。
  • 本地 vision 工作流不可用、超时、返回空结果、资源不可达或证据不足时,必须显式报错并说明卡在哪一步。
  • 禁止静默降级到其他模型、默认视觉方案、硬编码模板或“差不多”的通用 landing page。
  • 只能使用用户本轮明确提供的设计稿路径、当前真实代码、当前项目状态和工具返回结果作为依据。

何时使用

  • 用户说“根据这张设计稿还原页面”“把截图做成网页”“参考这张 UI 图实现页面”。
  • 用户明确把设计稿图片放进仓库,例如
    assets/
    ,并要求还原为 React/Mantine 页面。
  • 用户要求“接近 AI Studio 做出的网页质感”,本质上是在追求高保真视觉落地。

必要输入

  • 至少一张设计稿图片路径。
  • 明确目标页面或落地区域:新页面、现有路由、现有组件改造,或其他清晰的前端 surface。
  • 明确还原标准:
    • 高保真还原
    • 保留风格但允许工程化调整
  • 确认本次任务应通过本地 TapCanvas vision 工作流做视觉分析。
  • 可选外部 vision prompt;若调用方提供,必须优先使用该 prompt,而不是静默改写。

缺少上述信息时,先指出缺失项,不要假设页面归属或交互细节。

视觉取证步骤

1. 收集输入事实

  • 读取用户给出的设计稿路径。
  • 确认要修改的页面入口、路由、组件或容器。
  • 如果是现有页面改造,先读现有实现,确认哪些结构可以保留,哪些必须重写。

2. 调用图像理解

优先使用本地 TapCanvas vision 工作流,对设计稿做结构化取证。目标不是“看图讲故事”,而是提取可编码的界面事实。

建议分析维度:

  • 页面结构:section 划分、主次层级、左右布局、卡片/列表/表单/导航的组合关系
  • 视觉 token:主色、辅助色、背景层次、圆角、边框、阴影、模糊、间距节奏
  • Typography:字号层级、字重、大标题风格、正文密度、按钮文字风格
  • 组件清单:hero、navbar、feature cards、metric tiles、gallery、CTA、form、footer
  • 装饰系统:渐变、光斑、噪点、网格、插画、mock device、浮层、标签
  • 交互暗示:hover、选中态、滚动分段、粘性头部、入场动画线索

调用时默认要求:

  • 默认
    modelAlias="gemini-3.1-flash-image-preview"
  • 温度保持低值,例如
    0.2
  • 若调用方提供外部 vision prompt,则直接透传该 prompt
  • 若未提供外部 vision prompt,才使用本 skill 内置的结构化分析提示
  • 若外部 prompt 与要求的输出结构冲突,必须显式报冲突,不能自己猜着改
  • 输出必须是结构化结果,至少包含:
    • layout
    • designTokens
    • components
    • visualHierarchy
    • motionHints
    • uncertainties

如果设计稿有多个画板或多张图片:

  • 先分别取证,再合并出统一 token 与组件契约。
  • 对互相冲突的部分显式标注,不要自行拍板“平均化”。

实现步骤

3. 把取证结果转成代码计划

先形成一个简短实施计划,再开始改代码:

  • 页面拆成哪些组件
  • 哪些 token 放在页面级样式,哪些放在复用样式
  • 哪些视觉效果要用纯 CSS,哪些需要少量交互动效
  • 哪些地方必须做响应式重排

坚持单一职责:

  • 页面容器负责整体结构
  • 各 section 组件只负责自己的视图
  • 视觉 token 与纯转换逻辑尽量抽成独立模块

4. 在仓库中落地

  • 优先改真实页面,不要只生成示例文件。
  • 遵守当前仓库技术栈:React + TypeScript + Mantine。
  • 每个 JSX/TSX 标签都要带可读
    className
  • 不新增
    any
    ,不写
    as any
  • 如果现有文件已经过大,先拆分再实现。
  • 如需补充图片资源,只能使用用户明确提供的设计稿或仓库已有合法资源;不能伪造未提供素材。

5. 对稿修正

至少做一次“设计稿 vs 页面实现”的回看,重点检查:

  • 第一屏比例关系是否接近
  • 标题与正文层级是否准确
  • 卡片尺寸、圆角、间距是否统一
  • 背景层次、渐变、阴影是否到位
  • 响应式下是否仍保留设计核心气质

如果差异明显,继续修,不要在“已经能跑”时提前停止。

输出要求

对用户汇报时必须包含:

  • 已修改的真实页面/组件
  • 设计稿中哪些视觉特征已经落地
  • 仍存在的差异与原因
  • 是否完成构建/类型检查/静态验证

失败策略

  • 本地 vision 工作流不可用、未授权或模型不可达:直接报错,说明调用失败,不做替代分析。
  • imageUrl
    资源不可读,例如供应商侧无法访问
    127.0.0.1
    / 本机局域地址:直接按阻塞失败处理,不得把空结构当成功分析。
  • 设计稿信息不足:列出缺失事实,例如“只有局部截图,无法判断整页结构”。
  • 现有页面归属不明:先说明需要落到哪个入口,不能私自挑一个无关页面。
  • 缺少关键素材:明确指出缺什么,不要用默认图、默认文案、默认插画填空。

推荐交付节奏

  1. 先读图并输出结构化取证摘要。
  2. 再说明准备改哪些页面和组件。
  3. 然后直接实施代码改动。
  4. 最后做一次显式 review:对照用户目标、设计稿、已改代码、验证结果,确认没有遗漏再结束。