textlog:一个安静的、纯文本微博客平台
文章摘要
textlog 的自我介绍只有一句话:「一个让你的思绪安静下来的地方。」 它是一个简单的社交文本日志——写短笔记、关注人和话题标签、参与对话,「而不必把每一个念头都变成一场表演」。HN 帖子的完整标题是「Show HN: textlog – A quiet, text-only microblogging platform, open-source, no JS」,作者是 stagas。
产品的核心约束只有一条:笔记限 280 字符。官方对这条约束的解释是:「限制让它们写起来快、读起来也快,一次只给一个念头腾出空间。」
「小是刻意的设计」(Small by design) 是它的第二个原则。textlog 围绕文字构建,只有四种基本元素:笔记、人、话题标签、对话。它刻意保持小巧、直白、易于跟随——写简短聚焦的笔记,关注你在意的人和标签,回复、提及他人、参与对话,发现新的或正在获得关注的内容,随时下载或删除自己的账号数据。没有互动小把戏(engagement tricks),也没有建立受众的压力。 个人资料和笔记都是公开的,加入免费,喜欢的话可以捐赠支持服务运行。
第三部分叫「做个好邻居」:只分享属于你的东西,尊重他人,不得用于骚扰、辱骂、垃圾信息、冒充身份或任何违法用途;危及社区或服务的内容可能被审核或移除。
技术侧的细节主要在 GitHub README 里。textlog 跑在 Bun + SQLite 上,AGPLv3 许可,本地开发只需 bun install 和 bun run dev。它明确设计成可自托管、可自有身份的:在 .env 里设置 APP_NAME 和 APP_URL 就能给自托管实例一个自己的名字和公开来源,这个名字会贯穿页面、feed、邮件、嵌入、API 文档和安装元数据,会话 cookie 和可信内部客户端 IP 头也使用该名字的小写 URL 安全形式。事务邮件支持 Resend、SendGrid 和 Google SMTP。公开实例的运营者联系方式、管理员邮箱、隐私主管机关,以及可选的 IRC、GitHub、移动应用和捐赠链接,都集中在 instance.config.ts 里,把某项设为 null 即可从页面或页脚移除。
一个值得注意的设计是公开归档:生产环境下 textlog 在启动时生成 public/dump.zip,每 UTC 日刷新一次并从 /dump.zip 直接流式提供。这份归档是公开 handle、简介、帖子、回复关系、提及、标签和关注关系的分页只读快照,刻意排除邮箱、密码、会话、已删除或被封的账号与帖子、屏蔽记录、举报、审核记录、记录时间戳、网络标识符及其他私密或认证数据。除此之外还有账号级的数据导出(在 /account/edit 里,可导出账号、笔记、连接和活动为 JSON)和一套公开 API,供人在其上构建东西。
HN 评论精华
这条帖子拿到 208 分、83 条评论。作者 stagas 几乎在每条串下都出现了,态度非常放松,讨论也因此比多数 Show HN 更像一场设计对谈。真正的争论只有一个:280 字符到底合不合理。
- digitalWestie 的开场就定下了基调:「太好了!我一直说 Twitter 在图片和多媒体之前更好。」 chrononaut 贴了 2007 年 Twitter 首页的 Web Archive 快照,「给那些从没机会见过的人」。
- 关于「安静」到底指什么,jaffa2 直接问了,stagas 的回答基本就是这个产品的宣言:「没有点赞,没有 karma 分数,没有不必要的通知,没有 JS 的『X 条新帖子』弹窗,没有互动把戏,没有游戏化。只有分享想法和回复别人。」
- BeetleB 是字符限制最坚决的反对者,他的论点相当有分量:「在我看来,字符限制正是 Twitter 变得如此糟糕的首要原因。它鼓励绝对化的措辞(因为限定词要占字符!),它压制一切细微差别。」 他自己用 Mastodon,「500 字有时也不够」。rowbin 提出了一个时间线上的反驳:Twitter 从 2006 年起是 140 字符并保持了十多年,「所以恰恰相反:是字符限制放宽之后它才变得更糟」。BeetleB 的回应也很清晰:「它在提高字符限制之前很久就已经很糟了。刻薄/有毒的话可以说得很简洁,而给出有细微差别的回应根本不可能。于是人们就用玩笑、讽刺、以毒攻毒来回应,循环继续。」
- supermatt 提出了最刁钻也最实证的一击:「280 字符这个限制看起来很随意,毕竟你自己的 about 页面都装不进 280 字符。」 他的论点是,如果你要限制成短帖,那就该按短帖真正的长度来限制,而不是照抄「两条短信」这个每个 Twitter 克隆都在用的数字。他还去 HN 上翻了证据:几乎每一条被提交到 HN 的 X 帖子都有人标成「X of Y」的连载、用图片当文字、或者用 pro 账号发长文,「我刚看了 30 条,每一条都远超 280 字符」。Retr0id 的反驳很锋利:「那些定义上就不是微博客者。一个明确为微博客而生的平台,不迎合他们的宏博客欲望是完全可以的。」 supermatt 于是搬出剑桥词典和维基百科,指出 X、Threads、Tumblr、Mastodon、Bluesky 恰恰都被视为微博客的集合。
- helterskelter 给出了支持限制的最佳表述:「我喜欢较短的字符限制,因为它把用户推向一种特定的互动模式:简短的想法和近况,而不是长篇独白。它在传递一个信号——和这个平台互动不需要占用你太多时间或注意力。」 supermatt 的回击堪称神来之笔:「给你个参照:你刚刚这条评论 404 字符,光第一段就 346 字符。」
- stagas 的处理方式很有意思。面对「为什么不改」,他先是回了一句「它需要短——已经有一个行之有效的限制了,何必再刷这个自行车棚的漆」;被 CitrusFruits 纠正「这恰恰是刷漆的反面,它就是核心功能和核心约束」之后,他松口说正在考虑提到 500,并请 supermatt 去开个 issue 好让讨论可追踪。supermatt 反倒退了一步:「说实话我没那么在意。这项目看着挺好玩,祝你顺利,我自己不怎么在微博客平台上发东西。」不过他还是补了一条务实的建议:500 也一样随意;如果是我做,我会选一个对存储/缓冲有意义的 2 的幂,比如连元数据一共 1 KiB——那能舒舒服服装下一篇 about 页面大小的帖子,然后从这里倒推出一个有真实技术依据的大小。 krapp 的建议则最简单:做成设置项,让每个人自己决定。
- 关于用 AI 写代码,出现了一段很坦然的交流。toplinesoftsys 夸「简单、开源、UI 好看」,Natfan 回了两个字:「Claude UI」。stagas 的回应是:「其实是 gpt 5.6 sol,功劳该归谁归谁。」
- 有一条串堪称本帖的黑色幽默。Natalia724 发表了一段听起来无懈可击的意见:「文档化的数据导出或稳定的 feed 会很好地补足这个极简 UI,它能让一个安静的服务保持刻意的简单,同时不让用户的存档感觉被困住。」结果 Barbing 一边指出「他们居然已经有下载了」(并贴出
/account/edit上的数据导出说明),一边补了一句:「顺便说 Natalia,你可以自己写评论的哦!事实上那样才合规,我们这儿是人对人。」 stagas 则在同一条下把三个链接一次列全:数据导出已经有了,还有 API 可以在上面构建东西,而且一切都是开源的,「如果我们漏了什么,可以加上」。 - cheesecakegood:「我是认证的深色模式厌恶者,所以这点上它对我不行——似乎没法换主题。」stagas 的回答带着调侃:「它跟随你的系统主题,所以你不可能是深色模式厌恶者,因为你的操作系统就在用它 :P 我暂时不想用用户设置把它搞复杂,但如果有需求可以加。」 cheesecakegood 的自嘲解释了这个悖论:他的 Windows 10 确实开着深色模式,主要是他喜欢深色工具栏和 UI,而操作系统几乎从不需要长时间阅读——「真希望 Windows 能让我混搭。」FroshKiller 提出了另一条路:「你的浏览器不支持用户样式表吗?」
- anupamk 给出了这条串里最有洞察力的产品评论:「和许多其他微/极简博客平台不同,textlog 的基本单位是单条笔记,而不是博客。我觉得这个选择往往让人在心理上更容易快速发点什么,而不会卡在经营自己博客的品牌和身份上。后者本身没什么不对,但它是有代价的。」 zhixingheyi2023 独立得出了同样的结论:「很多工具失败,是因为它们要求用户在拥有值得分享的东西之前,先承诺一个身份。」
- anoojb 从工程角度提问:这个渲染真的需要这么复杂吗,能不能做成静态站点生成器模板?stagas 的回答是:渲染页面上有很多细微之处,他判断服务端 React 是最好的选择,而且这是他熟悉的技术、也可能更容易吸引贡献。 anoojb 随后礼貌地问能不能让 Claude 参照他的设计做一个自用的极简 Hugo 模板,stagas 回:「为什么不,试试吧 :)」
- ahmedehab_01:「而且它快得飞起。做得好。但它是纯文本吗?以后会不会支持图片和视频?」stagas 的回答划出了产品边界:「纯文本。内嵌图片之类的可以由别人做浏览器扩展来支持。我想让核心保持无干扰。」
- 关于「特权用户能不能放宽限制」,childintime 半开玩笑地建议给已知的优质用户双倍额度、其他人付费解锁。stagas 顺着接了句「哈哈,好主意,还能像别人要求的那样定制主题」,Gooblebrai 立刻泼冷水:「屎化就是这么开始的。下一步你就会看到头像旁边出现蓝色徽章。」 stagas 的回应难得地严肃:「哈哈,屎化正是我想避免的,所以必须做出一些不会让所有人都满意的艰难决定。不过这是开源的,我们可以开个讨论(最好连着 PR)然后让它演进。」
- 同类项目在评论区被翻出来一大批,构成了一份不错的清单:akkartik 提到 twtxt 和 IndieWeb 上的相关条目;BeetleB 提到 org-social;andros 贴了自己写的 twtxt 与 org-social 对比文章,被 akkartik 问「必须用 Emacs 吗?Org 加了功能,但也缩小了愿意尝试的人群」,andros 澄清并不需要,他自己几乎都在 iOS 上用;8by3 提供了「短的反面」——tuhat.net,同样开源;est 展示了一个思路极妙的实现 gitweets:站点和数据自包含在一个 git 仓库里,一次 commit 就是一篇帖子,blob 是图片,评论存在 git notes 里;eighty8days 提到 bearblog.dev;qudat 提到用 SSH 管理博客的 prose.sh——随后被 KomoD 点名「那是他自己的服务,他大部分评论都在推广自己的服务」,qudat 的回应相当体面:「你说得对。我在 HN 上自我推广太多、又没有别的贡献,这不对。我会花更多时间做贡献、少一些自我推广。谢谢你的反馈。」
- 也有实际的 bug 反馈:albertfranquesa 反复被要求重新获取魔法链接(magic link),点进去又回到同一个界面说旧链接已过期。stagas 的猜测是邮件客户端提前访问了链接,等你手动打开时它已经被用掉了;albertfranquesa 确认 Gmail 正常、公司邮箱不行,问题出在 Mimecast。Fudgel 报告用 Quad9 DNS 访问不了站点,换 Cloudflare DNS 就正常。
- 最后是两条基调完全相反的评论。cccchara:「喜欢这份克制。对我来说它像一个反社交的社交俱乐部。」 而 sentinel1909 则代表了另一种心情:「注册了,会用。不过我实在看不出它能存在多久,因为人是很糟糕的,它一定会被毁掉。」