idoubi
2天前
复盘一下我vibe coding 一周,开发WorkAny 的过程,很有意思。😂 1. 上周三在香港办卡,临时起意想做个桌面 Agent 项目,对标 cowork,晚上回到广州开始写代码 2. 初期目标是快速发布,没时间去研究哪个 Agent 框架好用了,看很多人在用 claude agent sdk,先用这个吧 3. 第一时间想到用 tauri,喜欢小而美,总觉得 electron 很重,不想用 4. 不想自己写代码了,决定让 claude code 来写。之前的 claude 账号都被封了,用不上原版 cc,装了个 cc-switch,接上 OpenRouter 的 API 开始写 5. 截了个 chatbot 的交互截图,让 cc 参考着先把基本的对话流程跑通,用 claude agent sdk,接上 OpenRouter,cc 很快写完了第一版 6. tauri 本质是用 rust 的壳子套了个前端界面,不熟悉 rust,让 cc 用 hono 写API,rust 只做壳子,不做业务功能。API 作为 sidecar 打包进 app 7. 让 cc 在 API 引入 sqlite 实现本地存储,持久化任务数据,创建本地工作目录,保存任务输出文件 8. 写了半天,看 OpenRouter 消耗了 110 刀,有点肉疼。买了个美国住宅 ip,付费上了原版 claude pro 9. 截了个 Manus 的任务详情图,让 cc 参考写完工具调用的逻辑,中间是 chatbot 对话,右边用一个虚拟计算机的容器展示输入输出 10. 让 cc 接入 shadcn/ui,把样式做得好看一点,支持切换皮肤 11. 又写了一天,关键时候 claude pro 限频了,很影响心情,补差价上了 claude max 顶配版 12. 让 cc 把自定义模型配置,mcp、skills 调用的逻辑都实现了,跑了几个生成 PPT、Excel、Doc、 网页的 case,效果不错 13. 让 cc 把输出文件夹和中间过程的 artifacts 都在右边展示出来,写了个 artifact preview 容器,渲染各种类型的文件,可视化预览 14. 有些任务需要跑脚本完成,考虑到用户电脑可能没装代码运行环境,让 cc 引入 sandbox 来运行代码 15. 考虑到扩展性,需要支持不同类型的 Agent runtime 和 sandbox,让 cc 写了两个抽象类,统一接口调用。Agent runtime 支持 claude code、codex、deepagents,sandbox 支持 boxlite、codex-sandbox、claude-sandbox 16. 觉得 cc 写的代码有点乱,让 cc 引入 eslint 和 prettier 做了下格式化,把逻辑太多的文件做模块化拆分。再参考 ShipAny 的目录结构,调整了一下项目结构 17. 让 cc 写打包脚本,构建不同操作系统的安装包。把安装包发给一些朋友,开始内测了。根据内测用户的反馈,再让 cc 继续优化逻辑,解决问题,迭代功能 18. 有些用户电脑没装 node,没有 claude code,安装软件后跑不起来,让 cc 在构建脚本支持 flag 参数,把 node 和 cc 作为 sidecar 打包进 app,让用户能够开箱即用 19. Mac 用户安装 app 后提示文件损坏或有安全提示,让 cc 在构建脚本里面加上签名处理,用我的 Apple 开发者账户对打包的 Mac app 做签名 20. node 和 cc 都打包进 app 的版本,安装包 100 多 m,有点重。让 cc 在构建脚本实现默认不打包,在用户启动 app 的时候引导安装 node 和 cc,精简版安装包才 20 多 m,小巧精致 21. app 基本功能实现得差不多了,让 cc 在 ShipAny 模板基础上写一个 WorkAny 的官网,放上演示图,部署上线 22. WorkAny 开源发布,MVP 版本上线,用户拉源码本地构建,配个 API 直接用 23. 让 cc 写了个 github 构建脚本,在代码推送到 main 分支时,自动触发 github action 构建,一次性打包 Windows、Linux、Mac 三大平台的安装包,自动发布到 release,用户无需自行构建了 24. 根据用户的反馈,问题丢给 cc 去修,想到什么新功能也告诉 cc 加上,自己只做测试,不写代码,看都不看一眼。🌚 ------ 几点感悟: 1. 第一次尝试全自动驾驶 vibe coding 做项目,爽感非常强烈,WorkAny 的代码 100% 由 cc 老弟完成,我只负责指挥,日常开三个窗口,让三个 cc 老弟同时干活,效率拉满 2. AI 时代技术平权,人人都是建筑师,理解用户需求、好的产品 sense 和审美是做出好产品的关键 3. 技术广度和全局视野是最大的优势,可以精准提需求,指哪打哪,遇到问题能快速定位,防止 AI 走偏失控 4. 以前总觉得手洗的衣服比洗衣机洗的干净,现在可以放心交给洗衣机了,又干净又快,能穿就行 5. 优秀的程序员不会被 AI 淘汰,法拉利老了还是法拉利。🌝
idoubi
4天前
idoubi
1个月前
周末把 ShipAny Two 的网站指标干到了四项全优,实现了“秒开”。分享几个优化要点: 1. 加快首屏渲染速度。Hero 组件不要使用 motion 动画,不要用 LazyImage 懒加载图片,而是应该第一时间渲染出内容,减少 LCP(最大内容绘制) 延时。 2. 减少图片体积。图片资源尽量用 CDN 地址,如果必须要放在同域名的 /imgs 目录下,记得用 tinypng 压缩一下图片,减少图片体积。 3. 增强网页无障碍性。给只有图标没有文字内容的 <a> / <button> 等标签加上 aria-label 属性,增强网页 Accessibility 评分。 4. 优化字体加载速度。引入自定义字体时加上 display: 'swap'; preload: true 两个属性,告诉浏览器优先下载自定义字体,下载完替换默认字体,消除渲染阻塞。 5. 缓存静态资源。在 public/_headers 和 next.config.mjs 文件针对 /imgs/* 等静态资源配置自定义缓存策略,比如:Cache-Control: public,max-age=31536000,immutable,让 CDN 明确知道需要缓存多久,实现零延迟加载。 6. 缓存静态页面。在 Next.js 项目中,通过增量静态生成(ISR)来缓存页面路由文件,在页面对应的 page.tsx 文件头部加上 export const revalidate = 3600; 告诉 Worker,一小时内不重复生成此页面。 7. 适配多语言缓存。在引入 next-intl 做多语言的情况,浏览器会通过 Set-Cookie 设置用户偏好的语言,这种行为会让 Worker 认为网站是动态的,影响 ISR 的生成逻辑。因此,需要在中间件逻辑里面,对不涉及登录态的公共路由加上 intlResponse.headers.delete('Set-Cookie'); 保证多语言场景下可以正常缓存静态页面。 8. 配置 CDN 缓存。默认情况下,Cloudflare 的 CDN 会缓存特定后缀的静态资源,比如字体、图片等,不会缓存网页。要让 Next.js 项目中配置了 export const revalidate = 3600; 的 page.tsx 能被 CDN 缓存,需要在 Cloudflare 配置 Cache Rules,可以选择 Cache everything 模板,TTL 选择尊重源站,这样 CDN 就只会缓存有自定义 Cache-Control 响应头的页面。 9. 优化服务端渲染。服务端渲染涉及数据操作时,会影响网页指标的 LCP 和 Speed Index,可以把多个操作用 await Promise.all 包裹起来并行处理,降低响应延时。 10. 配置数据缓存。通过 unstable_cache,revalidateTag 配置数据缓存,比如把频繁读库的 getConfigs 缓存到内存/kv,加快数据读取速度。 --- 网站有好的性能指标,既能提升用户体验,也有利于 SEO。做网站优化的关键是合理设置缓存,包括数据缓存、文件缓存、CDN 缓存等。 ShipAny 已经把上述的多项优化措施内置到模板里面了,开箱即用。你只需要专注写业务逻辑,其他的交给框架。选择 ShipAny,让“秒开”变得简单。
idoubi
1个月前
介绍一下 ShipAny 的 Page Builder 功能。支持多个维度的页面自定义,用低代码的方式快速构建常用的功能页面。 1. 静态页面构建 只需要写一个 Markdown 文件,就可以渲染出来一个页面,常用于网站的隐私协议、服务条款等静态内容的渲染。 比如,要在你的网站上线一个公司介绍页面,只需要在 content/pages 目录创建一个 about/company.mdx 文件,就可以渲染出来一个 /about/company 页面,支持多语言。 2. 动态页面构建 只需要写一个 JSON 文件,就可以渲染出来一个动态页面,常用于制作功能型着陆页。 比如,我们做的是一个 AI 图片聚合网站,经常需要上一些子页面来介绍新出的图片模型,利用主站的权重来快速拿到搜索排名。 前阵子新出了 nano banana pro 图片模型,我们要在自己的网站上线一个内页来做排名,只需要在 src/config/locale/{locale}/pages 目录创建一个 nano-banana-pro.json 文件,在文件的 "page.sections" 字段写入 hero / features / faq / cta 几个区块内容,就可以快速上线一个 /nano-banana-pro 页面,无需写一行代码,就能马上看到一个布局完整的落地页,支持多语言。 ShipAny 内置了几十个区块,让你搭积木式快速组装实现各种样式的着陆页面,写个脚本驱动 AI 遍历关键词生成 JSON 文件,就能做出海量页面,实现 pSEO。 3. CURD 页面构建 ShipAny 实现了 Form / Table 构建器,几行代码就可以定义一个表单,一个表格,实现管理后台对业务数据的增删改查功能。 比如,我们做的是一个 AI 导航网站,需要在管理后台查看用户提交的项目并审核修改。无需写前端的页面和样式,只需要在 admin 目录新建一个 project/page.tsx,定义要展示的字段名称,就可以渲染出来一个表格,展示用户提交的项目列表;创建一个 project/[uuid]/page.tsx,定义允许修改的字段名称,就可以渲染出来一个表单,修改项目数据。 除了管理后台的 CURD,这套页面构建器也适用于在用户中心处理各类数据。比如用户进入 /activity/projects/add 页面提交项目,就可以用 FormBuilder 来构建这个提交表单。用户进入 /activity/projects 页面要看到自己提交的项目,就可以用 TableBuilder 来构建这个展示表格。 ---- AI 时代,我们经常会驱动 AI 来生成各类页面,但是使用低代码的构建器,可以有效降低 AI 生成的代码量,保持代码风格的统一和页面样式的一致性。 ShipAny 的 PageBuilder 有足够的灵活性,让不同水平的开发者都能用来快速实现各类常用的功能。 ShipAny 不仅是一个代码模板,我更愿意称之为一个全栈开发框架。集成了丰富的功能可以开箱即用,也给进阶玩家留足了定制开发的空间。 你可以永远相信我的架构设计能力。