本站是怎么搭起来的

Woo3aN约 1 分钟

这个站看起来花哨,其实结构是挺朴素的三层。

页面是静态的

博客部分由 Astro 生成:每篇文章是一份 Markdown,构建时渲染成 纯 HTML。关掉 JavaScript 也能正常读文章,只是三维入口用不了。这一点我很在意—— 内容是主角,动效是配角。

文章的字段写在 frontmatter 里,其中 description 是必填的:首页列表、搜索结果、 RSS 和三维档案卡片都会用到它。这是唯一一个不能靠机器糊弄过去的字段。

三维入口是另一套构建

/lab/ 那个终端是独立的 Three.js 应用,跟博客分开打包。它读的是构建时从文章 派生出的一份目录,所以文章只要写一次,博客页和三维档案卡都会出现——不存在 两处维护的问题。

档案里的「分类 / 日期 / 标签」用的就是文章自己的字段,没有另造一套。

托管在一个 Worker 上

博客、/lab/、以及 /bobing 那个博饼小游戏,全部挂在同一个 Cloudflare Worker 下面。博饼的多人房间用 Durable Object 存,一个房间号对应一个实例。

没有后端服务器,也就没有数据库要维护。收藏是存在浏览器本地的,不依赖账号—— 代价是换设备会丢,好处是不用登录。

发一篇文章要几步

  1. 在 Obsidian 里写 Markdown(沿用 Hexo 的习惯:title / date / tags / categories)
  2. 跑一条脚本:导入新文章,自动分配 id、生成网址
  3. 自己写 description(脚本只会从正文首段草拟一句,并标记「待润色」)
  4. 跑发布脚本:构建并上传

推到 GitHub 也会自动部署,所以第 4 步可以省掉。


说到底这个站没什么神秘的东西。但它让我愿意写:写的时候只面对 Markdown, 发布是一条命令,剩下的都是它自己的事。

规范地址