此处记载着这片领地是如何建立的。

技术栈

本站使用 Hexo 静态博客框架构建,模板语言为 Pug。主题名为 hexo-theme-ares,是我从 hexo-theme-hermes fork 后自行修改而来。

网站过去托管于 Netlify、受 Cloudflare 保护 —— 现在自托管在 IONOS 的 VPS 上了!好吧,虽然我写过一篇 和数字主权相关的文章,但是考虑到读者的访问体验以及我的钱包,只能选择美国的 VPS 提供商了……

网站源代码公开,请见 这里。备份在 这里

Webmention

本站已接入 Webmention —— 一项 W3C 推荐标准,允许不同网站之间互相通知引用、回复与互动,类似于去中心化的评论系统。

如何与本站互动

部分文章在发布时会同步到我的 GoToSocial 账号 @cytrogen@gts.cytrogen.icu。你可以在 Fediverse 上直接回复、点赞或转发这些帖子,这些互动会通过 Bridgy 转化为 Webmention,自动出现在对应文章底部。

你也可以在自己的博客或网站上撰写文章并链接本站的某篇文章,只要你的站点支持发送 Webmention,本站就会收到通知并展示。

技术实现

本站通过 webmention.io 接收并存储 Webmention,同时借助 Bridgy 将 Mastodon 上的回复、喜欢和转发桥接为标准的 Webmention。构建时,站点会从 webmention.io 获取数据,按类型(回复、喜欢、转发、提及)分组后静态渲染到文章页面中。VPS 上每 30 分钟会自动检查是否有新的 Webmention,并将变更直接更新到对应页面的 HTML 中,无需完整重建。文章本身使用 Microformats2h-entryh-card 等)进行语义标记,确保 Webmention 发送端能正确解析内容。

邮件评论

本站的文章下方接入了一套邮件评论系统,模仿邮件列表的运作方式:写一封邮件即可留言,回复他人的评论也通过邮件完成。这是一项实验性功能,稳定性尚未充分验证,如果只是想联系我,使用 contact 页面 里的邮箱地址是更推荐的方式。

如何与本站互动

每篇文章的评论区会显示一个专属地址,形如 post-{文章 ID}@blog.cytrogen.icu,直接发邮件过去即可留言,标题随意,正文就是评论内容。首次评论的邮箱地址会先进入审核,通过后自动加入白名单,之后的评论只要邮件本身通过 SPF / DKIM 校验,会直接公开显示,不需要再次审核。

评论一旦上线,会以邮件列表的形式转发给同一篇文章下的其他评论者,收件人回复即可参与讨论,不想再收到某篇文章的讨论通知,可以用通知邮件里的退订链接。评论区每条评论旁边的「回复」链接会生成一个带有该评论专属标识的地址,用这个地址回复,无论是不是老朋友,都能精确挂在对应评论下面,不需要先成为订阅者才能精确回复。

公开显示的内容只有你的名字,邮箱地址不会被公开展示。

技术实现

邮件由自建的 Stalwart 邮件服务器接收,通过 MTA Hook 在邮件到达 DATA 阶段时转发给一个常驻的 Node.js 进程,解析出文章 ID(以及精确回复时地址里编码的父评论标识)后写入本地 JSON 文件,新发件人的评论先进入待审队列。一个每 5 分钟运行一次的定时任务把已批准的评论重新组装成嵌套的讨论树,生成静态 JSON 供页面读取,同时把新评论转发给该文章下的其他参与者。评论的嵌套关系优先取自地址中编码的父评论标识,其次才是邮件本身的 In-Reply-To 头 —— 因为 mailto 链接没法可靠预填这类邮件头,只有精确编码地址才能保证任何人都能直接回复到具体某一条评论。

字体

正文使用 Georgia 和 Times New Roman 作为西文字体,中文则使用思源宋体(Source Han Serif CN/JP)与 Noto Serif SC/JP。

标题使用 Open Sans 作为西文字体,中文使用 Noto Sans SC / JP,并以系统默认无衬线字体作为后备。

代码使用 JetBrains Mono,辅以 Source Han Code JP 和系统默认等宽字体。

内容版图

本站主要有三类内容:

  1. 「想法迭代」月刊,见 分类。需要注意的是,我并不会定时发布月刊,通常来说是在月底发布该月的月刊;
  2. 技术类文章;
  3. 个人随想,什么类型可能都有吧,比较杂乱。

订阅方式

你可以通过 RSS 订阅本站。