采纳 @nishuang 老师的建议,开始以周为单位更新。

写一写具体的更新,也写一写背后的故事。

第一个比较大的更新是评论

作为一个做社交出身的人,我对做社交是充满了敬畏:它太难了。但是,无论是出于个人意愿,还是用户的需求,我都一直想在 Quail 里建立一套互动体系。

评论也许是一个简单而且不失灵活的入手点,所以就先做一个试试看。然后我就发了一个 Tweet:

虽然我在 X 上发了关于 #需求扩张 的吐槽,但事实是并没有产品经理或者用户对程序员霸凌的戏码,我是在完全知晓一切的前提下思考和决策这件事的。

因为评论真是一个非常典型的看上去可以很简单,做起来可以很复杂的东西。

从最基本的功能来看,当然是读者可以发评论。那么细化一下需求,从发评论这个动作:

哪些人可以给哪些人哪些内容什么样的评论呢?

  • 第一个「哪些人」,是谁可以评论。所有人?还是所有注册用户?还是当前 newsletter 的订阅者?还是付费的订阅者?
  • 第二个「哪些人」和「哪些内容」,留言的对象是仅限于文章吗,还是也可以给其他评论以评论?
  • 第三个「什么样的评论」,纯文字还是图文?文字能不能有格式?格式用不用 Markdown?如果用 Markdown,那么用哪个子集?

既然评论能发出去,那就还需要能读到,也就是怎么展示:

哪些评论某种规则被选取,再以某种规则被展示出来。

  • 提到「哪些评论」,那肯定有些评论是不受欢迎的,他们可能是垃圾评论,也可能是 newsletter 作者所不喜欢的。
  • 选取评论一定遵循「某种规则」,那么这些规则是否需要预设,是否需要自定义,如果能自定义,自定义的程度有多高。
  • 选取完毕以后,展示也要遵循「某种规则」。比如是否要按照某个属性排序,或者对于评论了其他评论的评论,是否要嵌套展示,是否要显示被引用的对象。

还没完:

  • 展示的目的是让相关的人能读到评论,那么这个评论是否要以通知的形式发到相关用户的 Email?如果发的话,哪些人能收到通知?他们是否愿意收到评论的通知呢?如果不愿意,是否要提供一个选项,允许他们不收到通知?
  • 评论怎么和 Quail 长远的互动体系建立联系?是否要加入某个 Fediverse 的协议比如 ActivityPub 或者 Nostr 或者 Farcaster?
  • 垃圾评论会伤害到所有人,要如何过滤掉垃圾评论?垃圾评论的过滤器用什么原理工作?自己实现还是使用第三方?是否允许用户报告漏网之鱼?如果接受用户报告的话,要如何评价一个潜在的垃圾评论是否是垃圾评论?

总之,一个看着简单的评论牵扯的东西蛮多的。

当然,Quail 的评论并不会把上面这些东西一股脑全做了。我需要先做一些,看看实际情况,再决定具体该怎么做。

因此这次的更新非常简单(啊,习惯性地用了这个表达方式):

对于评论者来说:

  • 仅可以发文本评论,不可回复和提到其他评论
  • 仅支持有限拓展的纯文本
  • 仅支持按发布时间倒序

An image to describe post

对于作者来说:

  • 可以限定哪些人可以评论:所有注册用户、自己的订阅者、自己的收费订阅者
  • 可以限定默认展示所有评论或者只展示自己允许展示出来的评论
  • 可以在文章选项中设置,也可以在列表设置中设置一个默认值来影响未来的所有新文章

An image to describe post

An image to describe post

An image to describe post

绑定自定义域名

我一直都想做自定义域名绑定,因为作为一个上古网民,我依然有很多域名,包括自己的域名。

但是要做绑定域名就必须做对应的域名 TLS 证书,否则这年头打开一个 http 的网页出门会被人看不起。而之前我一直想白嫖 Cloudflare 的证书,后来发现不可行,除非花钱购买 SSL for SaaS 服务。

于是用 acme 动手做一个 Let's Encrypted 证书颁发的流程。也就是现在大家看到的这样。

具体来说的话,作者可以在列表设置里,找到「域名设置」,选一个自己控制的二级域名(顶域名还不支持),让它以 CNAME 记录指向设置里的那个 .quail.cc 结尾的域名就行。

设置完成以后点击「保存」,快的话几分钟就能生效了(慢的话可能需要半小时以上)。

设置里有一个「Canonical URL Base」,一般来说,设置成你的二级域名就好。我想大多数人应该都希望搜索引擎优先选择自己的域名吧。

An image to describe post

TIP

对于使用 cloudflare 作为域名托管商的,有两点需要注意:

  1. 务必在 cloudflare「SSL/TLS」设置中选择 「Full」模式,否则会出现无限重定向的问题。
  2. 在域名未验证完成时,请关闭 cloudflare 的「proxy」。验证完成后则可以重新打开「proxy」有助于提高访问速度。

说起来,支持自定义域名也是一个典型的看上去可以很简单,做起来可以很复杂的东西。到目前为止这个功能还没有做完整,只是进入一个能用的状态。

UI 上的小变化

我经常会对界面进行修改,但是不一定单独拿出来说。尤其是那种突然发现的小问题,又很容易修复的,我可能顺手就改了。比如这周有:

  • 把编辑器的按钮图标都给换了
  • 给浮动编辑器工作栏加上了保存按钮。
  • 桌面下,如果把鼠标浮动到文章列表上,对应的文章的题图会稍微缩放一下。
  • 预览对话框不会在第一次打开时跳动了

我觉得这些改动是最容易体现出软件服务更像一个生物体而不是一栋建筑的表现了。每次迭代都像一次演化,让人觉得它还活着,很美好。


对了,如果你想观摩 Quail 的发展,也欢迎加入 Discord 频道