HTML 工具的魅力
读到一篇思路很牛逼的文章!AI 总结如下。
1. Simon 的单页 HTML 工具哲学
一个老外叫 Simon,用大模型两年做了 150 个工具。
这不奇怪,强的是他只用单页 HTML 做!
把复杂的事情变简单,把简单的事情做到极致。
1.1. 工具应用场景
比如:
- 想把 SVG 转成 PNG,但不想装软件
- 想看两个 Python 包版本之间改了什么
- 想更清楚地浏览 Bluesky 上的讨论
这些都用 HTML 工具搞定了。
一个 HTML 文件,打开就能用,不需要安装,不需要注册。
1.2. 核心原则:单文件架构
Simon 坚持一个原则:所有代码写在一个 HTML 文件里。
听起来老派,但优势也很明显:
- 可以直接从 ChatGPT 或 Claude 里复制粘贴出来
- 扔到 GitHub Pages 上几秒钟就能用
- 不需要 npm,不需要构建步骤
- 两年后还能打开,不会因为依赖过期崩溃
他特别强调 不要用 React。
因为 JSX 需要构建,这会让整个流程变得麻烦。
保持简单,就是保持可维护。
1.3. 入门指南
从哪里开始?
最简单的方式是直接在 Claude 或 Gemini 里试:
做一个能把 JSON 转成 YAML 的工具,不要用 React
一会儿你就能看到一个可以用的工具。
Claude 叫这个功能 Artifacts,ChatGPT 和 Gemini 叫 Canvas。
这只是开始,真正有意思的是他能把各种简单的基础能力用到极致,比如**「复制粘贴」功能**。
操作系统的剪贴板其实能携带多种格式的数据。
你从 Word 里复制内容,粘贴到另一个 Word 文档里会保留格式,但粘贴到记事本里就只剩纯文本。
JavaScript 可以读取这些不同格式的数据。
这意味着什么?
① 你可以做一个工具,粘贴 Hacker News 的讨论 URL,它给你整理好的文本版本
② 你可以做一个工具,粘贴图片,它把所有图片的 alt 文本提取出来
③ 你可以做一个调试工具,显示剪贴板里到底有哪些格式的数据
1.4. 状态管理方案
没有后端数据库怎么办?Simon 有两个办法:
把状态存在 URL 里。
比如,他做了一个 24×24 的图标编辑器,你画的图标直接编码在 URL 里。这样你可以收藏,可以分享,打开链接就能继续编辑。
把关键的信息存在 localStorage 里。
比如 API key 这种敏感信息,不能出现在 URL 里,也不能发到服务器。
localStorage 让数据只存在用户的浏览器里。
他还用 localStorage 做自动保存。
写字数统计工具时,每次输入都会保存,这样不小心关掉标签页也不会丢内容。
1.5. CORS:浏览器端 API 调用的宝藏
CORS(跨域资源共享)听起来很技术,但理解它很重要。
有些 API 允许你从浏览器直接调用,不需要经过自己的服务器。这些 API 就是金矿:
- iNaturalist 可以查动物的观察记录
- PyPI 可以获取 Python 包的信息
- GitHub 的公开仓库内容都可以直接获取
- Bluesky 和 Mastodon 的 API 也很开放
Simon 甚至用 GitHub Gists 来持久化数据。
因为 Gist 的 API 支持 CORS,你可以做一个纯前端工具,把用户的数据保存到他们自己的 Gist 里。
1.6. 文件处理新思路
<input type="file"> 不只是用来上传文件。
JavaScript 可以直接读取文件内容,在浏览器里处理。
Simon 的第一个工具就是 OCR 工具。
你选择一个 PDF,它在浏览器里转成图片,然后跑 OCR。整个过程不需要上传到任何服务器。
他还做了视频裁剪工具。
你打开一个视频文件,拖动裁剪框,它会生成一个 ffmpeg 命令,你可以复制到终端里执行。
反过来也行。
你可以让用户下载文件,不需要服务器参与。
JavaScript 可以生成 PNG、JPEG、ICS 日历文件等等。
1.7. Python 与 WebAssembly:突破浏览器限制
这是最让人兴奋的部分。
Pyodide 让 Python 可以在浏览器里运行。
不是玩具级别的运行,是真正的 Python,包括 Pandas 和 matplotlib。
Simon 做了一个工具,你输入数据,它用 Pandas 处理,用 matplotlib 画图,全在浏览器里完成。
WebAssembly 打开了更多可能。
Tesseract OCR、SQLite、图片压缩库,这些原本用 C 或 C++ 写的软件,现在都能在浏览器里跑。
1.8. 规模化开发:从 1 到 100
当你有了 100 多个工具,新工具就容易多了。
每个工具都是下一个工具的参考文档。
你可以告诉大模型:「看看我之前做的 PyPI 包浏览器」,然后说:「做一个类似的,但是显示两个版本之间的差异」。
LLM 会读你之前的代码,理解你的模式,然后生成新的工具。
这比从零开始快得多,而且更可靠。
Simon 的这些工具真可以解决问题。
更重要的是,这种方式让你能快速实验。
想法到原型可能只需要几分钟。
不用担心部署,不用担心维护,不用担心成本。
1.9. 起步指南
怎么起步尝试?
一个 GitHub 仓库,开启 GitHub Pages。
然后就可以开始了。
用 ChatGPT 或 Claude 生成一个工具,复制粘贴到仓库里,几秒钟后就能在网上访问。
不需要完美,不需要复杂。
从一个解决你自己问题的小工具开始。
然后慢慢积累,慢慢改进。
两年后你可能也会有几十个甚至上百个这样的工具。
每一个都在某个时刻帮到你,每一个都让下一个更容易做出来。
这就是 HTML 工具的魅力:简单、实用、可持续。