本站是怎么搭起来的
这个站看起来花哨,其实结构是挺朴素的三层。
页面是静态的
博客部分由 Astro 生成:每篇文章是一份 Markdown,构建时渲染成 纯 HTML。关掉 JavaScript 也能正常读文章,只是三维入口用不了。这一点我很在意—— 内容是主角,动效是配角。
文章的字段写在 frontmatter 里,其中 description 是必填的:首页列表、搜索结果、
RSS 和三维档案卡片都会用到它。这是唯一一个不能靠机器糊弄过去的字段。
三维入口是另一套构建
/lab/ 那个终端是独立的 Three.js 应用,跟博客分开打包。它读的是构建时从文章
派生出的一份目录,所以文章只要写一次,博客页和三维档案卡都会出现——不存在
两处维护的问题。
档案里的「分类 / 日期 / 标签」用的就是文章自己的字段,没有另造一套。
托管在一个 Worker 上
博客、/lab/、以及 /bobing 那个博饼小游戏,全部挂在同一个 Cloudflare Worker
下面。博饼的多人房间用 Durable Object 存,一个房间号对应一个实例。
没有后端服务器,也就没有数据库要维护。收藏是存在浏览器本地的,不依赖账号—— 代价是换设备会丢,好处是不用登录。
发一篇文章要几步
- 在 Obsidian 里写 Markdown(沿用 Hexo 的习惯:
title / date / tags / categories) - 跑一条脚本:导入新文章,自动分配 id、生成网址
- 自己写
description(脚本只会从正文首段草拟一句,并标记「待润色」) - 跑发布脚本:构建并上传
推到 GitHub 也会自动部署,所以第 4 步可以省掉。
说到底这个站没什么神秘的东西。但它让我愿意写:写的时候只面对 Markdown, 发布是一条命令,剩下的都是它自己的事。