跳过正文
  1. 文章/

30 Days of Vibe Coding - Day 10 - Miro 克隆版

Nuno Coração
作者
Nuno Coração
Principal Product Manager @ Docker
目录
30 Days of Vibe Coding - 这篇文章属于一个选集。
§ 10: 本文

第 10 天。我让它做一个 Miro 克隆版。一个完整的无限画布,带图形、连接线、图层,还有演示模式。

提示词
#

“做一个像 Miro 那样的无限画布白板应用。本地优先,TypeScript,HTML5 Canvas。”

起点就这些。剩下的全都是从任务拆解里冒出来的。

是怎么做出来的
#

这个有点大。Watchfire 把它拆成了 27 个任务,是我在这次挑战里见过最多的一次。拆解涵盖了:

  1. 图形和绘图工具(矩形、椭圆、直线、箭头)
  2. 自由手绘笔工具
  3. 文本元素
  4. 带颜色分类的便签
  5. 图形之间的智能连接线
  6. 网格与吸附
  7. 撤销/重做历史
  8. 导出为 PNG 和 JSON
  9. 图层面板
  10. 取色器
  11. 缩放与平移控制
  12. 覆盖所有功能的键盘快捷键
  13. 深色模式
  14. 带引导的欢迎界面
  15. 演示模式

27 个任务不少。但每个任务的范围都切得很清楚。每一个都在不破坏前面成果的前提下,加上一块具体的功能。

拿到的东西
#

这玩意儿功能意外地齐全。

带便签和连接线的主画布

感觉就像一个真正的白板工具。 打开它就是一个带点阵网格的无限画布。你可以平移、放大缩小、放置图形、写文字、用箭头把东西连起来。白板的基本操作循环就是能跑起来。

带快捷键说明的欢迎界面

有一个像样的欢迎界面。 它会告诉你键盘快捷键和怎么开始。你可以关闭它,还能勾选“下次不再显示”。是个小细节,但让应用看起来像是真的做完了。

图形与连接线

连接线很聪明。 你在两个图形之间画一根线,它会自动吸附到连接点。移动图形时,连接线会跟着动。有没有这个功能,就是绘图应用和图表工具的区别。

图层面板

图层面板是真能用的。 每一个元素都会出现在侧边栏列表里。你能看到层级关系,重新排序,管理什么在最上面。像一个迷你版的 Figma 图层面板。

键盘快捷键覆盖层

几乎所有操作都有键盘快捷键。 V 选择,R 矩形,O 椭圆,P 画笔,T 文本,S 便签。再加上所有标配的那些,比如 Cmd+Z 撤销、Cmd+Shift+Z 重做。按 ? 还能调出一个完整的快捷键覆盖层。

自由手绘

画笔工具很顺滑。 我就是为了测试随手画了张脸。笔触反应灵敏,感觉自然。没有压感之类的花活,但头脑风暴时用来草草画点想法完全够用。

问题反馈
#

这一天相对来说比较干净。27 个任务,我本以为会遇到更多问题,但因为是一步步做的,每一块在下一块到来之前都已经测过了。我主要注意到的有:

  • 便签缩得太小时,有时会和文字重叠
  • 角落里的缩略图在大幅缩放之后,有时会和主画布不同步
  • 导出 PNG 时,偶尔会把画布边缘的元素裁掉

没什么大问题。核心的白板体验从很早就已经很稳了。

数字
#

  • 27 个 Watchfire 任务,从画布初始化一路到演示模式
  • TypeScript + Vite,用 HTML5 Canvas 渲染
  • 完整工具集: 选择、平移、矩形、椭圆、直线、箭头、连接线、画笔、文本、便签
  • 深色模式、图层、导出、键盘快捷键、演示模式
  • 零外部 UI 库。 一切都基于 Canvas 自己造

试试看
#

打开白板

桌面端体验最好。用键盘快捷键才能完整发挥。

第 10 天总结
#

这是整个挑战里第一个真正去挑战一个复杂网络服务的项目。Miro 不是那种规则自成一体的游戏。它是一个真真正正的产品,有图形、连接线、图层、导出、演示模式,还有一整套交互模型,原团队花了好几年才打磨出来。用一天去克隆它,就意味着必须做出取舍:留下什么,放弃什么。

最大的取舍是后端。没有。一切都活在浏览器里,持久化到本地存储。没有账号,没有服务器,没有数据库。这是我在这次挑战的前几个项目里有意守着的一条约束 ——让东西留在本地,出货更快,避免为每一个 demo 都去搭一套基础设施的复杂度。在这里行得通,是因为白板即使不是多人协作也依然有用。迟早会撞上墙。实时协作、云端同步、通过 URL 把白板分享给别人 ——这些没有后端都做不到。我们会在之后的某个项目里走到那一步。

最让人眼前一亮的是架构。代码库被干净地拆成了几个模块:输入处理、渲染、状态管理、工具、UI。每个工具是一个独立的模块。状态管理负责处理撤销/重做的历史。这不是随便糊出来的原型,而是一个结构规规矩矩的应用。

它能取代 Miro 吗?不能。但作为一个本地优先的草图和图表工具,它意外地好用。我发现自己居然真的在上面整理想法,而不只是为了测试它。

挑战已经过了三分之一。能塞进一天里的东西,范围还在不断扩大。


这是 30 Days of Vibe Coding 的第 10 天。跟我一起看看 30 天用 AI 辅助编程做出 30 个项目的过程。

30 Days of Vibe Coding - 这篇文章属于一个选集。
§ 10: 本文

相关文章