快速原型项目搭建工具 是做什么的?
从一个想法构建可运行的网页应用,然后以在线链接的形式分享给他人。使用者提供方向和判断;你负责所有的技术工作。
技术栈
| 层级 | 默认工具 |
|---|---|
| 界面(用户看到和点击的部分) | Next.js (App Router) + TypeScript + Tailwind + shadcn/ui(基础UI、中性主题、Lucide图标、Sera风格),来自一个shadcn预设 |
| 服务端工作(密钥、外部API、AI调用) | Next.js Server Actions |
| 数据 | 浏览器端IndexedDB (Dexie)。预装Supabase CLI,以备后用 |
| 托管与分享 | Vercel |
| 搭建与自动化 | 官方CLI(vercel、supabase、gh、shadcn)+ 本技能的脚本 |
优先使用IndexedDB:无需账号、无需密钥、支持离线工作。仅当数据需要在不同用户或设备间共享、应用需要登录功能、或需要服务器/定时任务读取数据时,才迁移至Supabase(参见 references/7-extend.md)。
始终使用最新的稳定版本(无需询问)
- 升级操作无需审批,但有一个例外:来自第三方Homebrew tap的工具(例如
supabase/tap)。在搭建期间,首次信任此类tap以及每次从其升级前都需要询问,即使之前已获批。 - 否则,将所有CLI和包升级到最新的稳定版本:
npm i -g <cli>@latest、brew upgrade、winget upgrade、Node.js当前LTS版本,以及在项目中执行npm outdated --json | jq -r 'keys[] + "@latest"' | xargs npm i。用一句话说明升级了哪些内容。 - 除非用户明确要求,否则绝不使用canary、beta、rc或
next标签。不要凭记忆或根据本文档固定版本。 - 升级后,运行检查(
lint、typecheck、build)。若某一项失败,阅读错误信息找到导致问题的包,仅将该包降级到其上一个主版本的最新发布版(npm i -D <pkg>@^<major-1>),然后重新运行。在PROTOTYPE.md的“决策”部分记录该固定版本及其原因。例如:TypeScript 7破坏了ESLint的TypeScript插件,因此固定typescript@^6,其余保持最新。 - 恢复现有原型时,在新工作开始前也要执行相同的升级并检查操作。
分步构建流程
当执行到某一步时,请阅读该步骤的参考文件。不要提前阅读所有文件。
| 步骤 | 使用者操作 | 你执行的操作 | 参考文件 |
|---|---|---|---|
| 1. 搭建 | 选择文件夹 | 检查工具及其依赖,安装缺失部分,搭建应用脚手架 | references/1-setup.md |
| 2. 连接 | 审批,在浏览器中登录一次 | 运行每个CLI的登录,确认登录成功,将应用密钥存储到操作系统凭据存储区 | references/2-connect.md |
| 3. 规格说明 | 形成想法 | 通过简短问答引导需求,编写 SPEC.md | references/3-spec.md |
| 4. 构建 | 反馈、调整方向 | 每次构建一个功能,展示运行效果 | references/4-build.md |
| 5. 测试 | 试用 | 运行检查,在真实浏览器中测试,修复问题 | references/5-test.md |
| 6. 发布 | 审批、分享 | 同步密钥到Vercel,部署,提供链接 | references/6-ship.md |
| 随时 | 提出新功能需求 | 查找工具的CLI或技能,询问是否安装,连接该工具 | references/7-extend.md |
结果:先在 localhost 上运行可工作的应用,然后生成一个任何人都能打开的在线链接。
平台支持
| macOS | Windows | Linux | |
|---|---|---|---|
| 本技能脚本使用的Shell | Terminal (zsh/bash) | Git Bash(Git for Windows自带) | bash |
| CLI的包管理器 | Homebrew | winget(Supabase用Scoop) | Linux版Homebrew,或npm |
| 应用密钥存储位置 | Keychain | Credential Manager | Secret Service (secret-tool);否则使用已加入.gitignore的 .env.local |
- 使用
bash <绝对路径>运行脚本。在Windows上使用PowerShell或cmd时,直接使用bash可能会启动WSL;应使用& "$env:ProgramFiles\Git\bin\bash.exe" <脚本>。Claude Code在Windows上默认在Git Bash中运行其Shell。 - WSL视为Linux环境,但
secrets.sh在可访问PowerShell时会通过powershell.exe使用Windows Credential Manager。 - 支持云同步文件夹(Dropbox、OneDrive、iCloud、Google Drive)。如果在Dropbox文件夹中,搭建完成后立即运行
bash SKILL/scripts/ignore-sync.sh <项目>,以便Dropbox跳过node_modules、.next和测试输出。
进度文件
每个原型项目的根目录下都有一个 PROTOTYPE.md(模板:templates/PROTOTYPE.md)。它包含步骤检查清单、工具列表(工具名称、版本、全局或项目安装方式)、关键名称(绝对不包含值)、决策和链接。
- 在每个步骤结束时以及添加新工具时更新该文件。
- 当在现有原型中被调用时,首先读取
PROTOTYPE.md,并从第一个未勾选的步骤继续。如果用户指定了某个步骤(例如“让我们发布吧”),则跳转到该步骤,但需先执行该步骤的检查。 - 当所有步骤都勾选完毕,而用户想要新功能时:将其添加到
SPEC.md(必须包含的功能 + 验收检查)以及PROTOTYPE.md的“功能”部分;如果新功能需要新工具,则运行references/7-extend.md;然后针对该功能循环执行 构建 → 测试 → 发布 的流程。
你负责执行所有命令
使用者提供方向和审批;你负责执行每个命令。绝不要让他们输入或粘贴命令。
- 无需审批的操作:查阅资料、升级(见上文)、安装默认技术栈及其依赖(当用户要求搭建原型时)。用一句话说明你要安装什么及原因,然后执行。
- 需要先询问(用一句简单的话解释原因,同意后由你执行;一次可涵盖列出的多项操作):
- 登录到CLI
- 更改安全设置,例如信任某个Homebrew tap(
brew trust supabase/tap),以及升级来自第三方tap的工具 - 安装默认技术栈之外的工具(
references/7-extend.md) - 创建云资源(Vercel项目、Supabase项目、GitHub仓库、市场集成)
- 部署到生产环境
- 锁定规格说明,从“规格说明”阶段进入“构建”阶段
- 如果用户的请求已经明确要求完成整个过程(例如“直接发布到在线链接”),则视为对创建Vercel项目和生产部署的批准。但仍需在执行前用一句话说明即将进行的操作。
当某个命令需要用户互动时(浏览器登录、验证码、管理员密码):
- 解释将要发生的事情以及用户将看到什么。
- 在用户能看到并回应的地方执行命令:如果代理应用有终端面板(“在终端中运行”工具),则在其中执行。为每个登录操作分配一个专用的新标签页,并以该操作命名(例如“Vercel登录”、“GitHub登录”);切勿重复使用已用于其他操作的标签页。将终端面板切换到该标签页(使用“显示面板”工具),并在消息中链接该标签页。如果没有终端面板,则为用户打开一个终端窗口(macOS:
osascript -e 'tell application "Terminal" to do script "cd <项目> && <命令>"';Windows:start "" "%ProgramFiles%\Git\git-bash.exe" -c "<命令>; read")。 - 等待用户说“完成”,然后自己验证(
vercel whoami、gh auth status等)。不要仅凭用户口头确认就标记步骤已完成。
密钥(API密钥、令牌)的处理顺序如下:
- 首选自动方式:使用Vercel Marketplace集成(密钥直接发送到Vercel,然后
secrets.sh pull-vercel),或提供程序CLI的输出直接通过管道传给secrets.sh set NAME --stdin。用户无需看到或粘贴密钥。 - 最后使用对话框:仅当服务不提供以上两种方式时,运行
bash SKILL/scripts/secrets.sh ask NAME "查找位置"。它会在用户屏幕上打开一个隐藏输入的对话框,并将值存储在操作系统凭据存储中;任何信息都不会经过聊天或你的输出。提前告知用户将出现对话框及其原因。 绝不要在聊天中询问密钥,绝不要打印密钥,也绝不要将其写入代码或提交的文件中。
你的Shell工作目录可能在两次调用之间重置:每个项目命令都以 cd "<项目>" && 开头。长时间运行的任务(npm run dev)应在后台运行。
如何与用户沟通
- 在每个操作之前,用一句话说明该操作将为用户带来什么价值:“添加一个浏览器数据库,这样你的列表在切换页面后仍能保留。”
- 在每个步骤之后,给出2-3行的总结:现在哪些功能可用、用户可以尝试什么、下一步做什么。
- 当确实存在选择时,提供2-3个选项并给出推荐。否则选择一个合理的默认选项并说明所选内容。
- 展示,而非描述:每次可见更改后,打开
localhost(或截图)。 - 错误处理:先自己尝试修复。只有当需要用户做出决策、审批、或需要他们进行登录、输入密码或密钥等手动操作时,才请用户介入。
捆绑文件
scripts/preflight.sh [dir]— 检查工具、依赖、已安装版本与最新版本、登录状态、文件夹情况scripts/secrets.sh— 操作系统凭据存储(ask打开隐藏输入对话框)、运行并携带密钥、导出.env.local、Vercel推送/拉取(使用help查看用法)scripts/ignore-sync.sh <项目>— 告知Dropbox不要同步node_modules、.next和测试输出scripts/wincred.ps1— Windows Credential Manager辅助工具,由secrets.sh调用(不要直接调用)scripts/discover.sh <tool>— 对新工具的CLI、npm包和技能的初步查找scripts/install.sh— 全局安装此技能(如果失败则回退到项目级别)templates/—PROTOTYPE.md、SPEC.md、AGENTS.section.md、db.ts、actions.ts、smoke.spec.ts、playwright.config.ts
本文档中的 SKILL 指代此技能的文件夹,例如 ~/.agents/skills/setup-prototype-project。运行脚本时,需要将其展开为绝对路径:bash ~/.agents/skills/setup-prototype-project/scripts/preflight.sh。
常见错误
| 错误 | 正确做法 |
|---|---|
| 要求用户运行或粘贴命令 | 解释、获得同意、自己执行(登录操作使用可见的终端)。 |
| 因为用户说“完成了”就标记登录为完成 | 使用CLI进行验证(vercel whoami、gh auth status、supabase projects list)。 |
让Dropbox同步 node_modules | 搭建完成后立即运行 ignore-sync.sh。 |
| 在安装CLI的依赖之前安装CLI | 按照 1-setup.md 中的安装顺序进行(包管理器 → git → Node.js → npm CLI)。 |
凭记忆安装(npm i next@15) | 使用 @latest 稳定版本;只有当检查失败时才降级一个包。 |
| 第一天就使用Supabase | 从IndexedDB开始;只有当需要共享或登录功能时才升级。 |
| 在Server Component或Server Action中调用IndexedDB | IndexedDB仅存在于浏览器中。应在 "use client" 组件中使用。 |
将API密钥放在 NEXT_PUBLIC_ 变量中 | 所有 NEXT_PUBLIC_ 变量都会发送给每个访问者。应将密钥保持在服务器端,在Server Actions中使用。 |
| 在展示任何内容之前构建所有功能 | 一次构建一个功能,展示运行效果,然后根据反馈调整。 |
| 未同步密钥就部署 | 每次部署前运行 secrets.sh diff-vercel。 |
| 调度一个读取IndexedDB的任务 | 服务器任务无法访问浏览器数据。需要先将数据迁移到Supabase(7-extend.md)。 |
| 未以未登录状态打开链接就提供给用户 | 在分享前,检查生产URL在公开状态下是否返回200(6-ship.md)。 |
| 未经检查发布者就从搜索结果中安装工具 | 优先选择供应商的官方CLI、包或技能。询问时需说明发布者信息。 |