这里是一个长在 Cloudflare 上的小站:没有 PHP,没有 MySQL,也没有需要运维的服务器。整套系统由一个 Worker 加一个 D1(SQLite)数据库跑起来,域名解析完就能用。
它是怎么来的
起点是一套微博风格的博客主题——三栏布局、信息流卡片、资料卡、等级徽章、随机配图,视觉上几乎就是 weibo.com 的样子。它原本跑在 PHP 上:好看,但要养一台主机、维护一整套运行环境,每迁一次家都得折腾一遍。
于是索性推倒重写:把好看的那一层原样留下,把麻烦的那一层换掉。前台按原主题的模板逐个还原,包括首页大图的几种取图策略、卡片的 200 字截断与「阅读更多」、话题的 #标签# 链接、资料卡的二维码弹层这些细节;底层换成 Worker 里手写的路由加 D1 查询。
内容模型仍然是博客该有的样子:文章、分类、标签、评论、友情链接、独立页面。在此之上又添了微博式的互动——点赞、转发、关注,以及复用标签体系实现的「话题」。
技术上比较在意的几件事
- 零服务器:Worker 负责路由与渲染,D1 存数据,静态资源直出。
- 后台即前台:站点名称、资料卡、导航、菜单、随机配图、内容声明、各项开关,全部在后台改,前台不写死。
- 登录用 HMAC 签名的会话 Cookie,口令走 PBKDF2 加盐哈希,不存明文,并对登录失败做限流。
- 写操作校验同源来源,外链地址统一过白名单,正文里的媒体只放行图片与视频。
- 权限分游客、用户、管理员三级,用户投稿可以配置是否需要审核。
AI 在其中做了什么
这个项目在成型的路上,AI 助手(TraeCode)承担了相当一部分代码审计与修复:把六千五百余行源码逐行读过一遍,专门找那种「平时不出事、出事很难查」的问题。已经修掉并上线的比如:
- 短微博正文里的图片、视频地址被二次转义,链接里只要带 & 就会失效;
- 封面图没有做协议白名单,正文中写一个站外地址,就能让所有访客的浏览器去外联第三方;
- 详情页、标签页、搜索页的左栏「首页」被恒定点亮,与顶栏的高亮判断自相矛盾;
- 分类 id 入库前不校验存在性,而 post 表没有外键约束,删掉分类后会留下查不到归属的悬空归档;
- 关注、粉丝统计在没有目标地址时渲染成点击无反应的空链接 href=#。
此外还加固了后台跳转地址的编码变形绕过,修正了仪表盘的统计口径与登录失败的提示文案,并负责把改动打包部署上线。
换句话说:审美、需求与取舍来自站主,AI 负责让它更结实一些——把可能踩的坑提前填掉。
写在最后
如果你在这里看到的内容有错、有 bug,或者只是想随便说点什么,评论区一直开着。

