‹ 返回首页随笔

从想拥有一个自己的博客,到反复打磨、推倒重来,再到愿意认真维护它。第一章只复盘这段真实发生的过程:那些兴奋、不满意、故障、取舍,以及这个空间怎样慢慢有了自己的样子。

2026年10月24日·21 分钟阅读·阅读 …

文章目录
  1. 一、最开始,只是想有一个自己的地方
  2. 二、9 月 5 日到 6 日:有了网站,却还没法安心写文章
  3. 三、9 月 7 日到 12 日:越改越多,也越觉得哪里不对
  4. 写文章的地方,不能只是按钮越来越多
  5. 一个进度条,为什么能改那么久
  6. 我曾经非常执着于那个动态背景
  7. 四、10 月 17 日到 19 日:它开始有了“我的空间”的样子
  8. 文章开始记录真正发生过的项目
  9. 最后,我还是放下了那个一直在动的背景
  10. 五、10 月 18 日到 22 日:开始考虑屏幕另一边的人
  11. 评论的重点,不只是“能发出来”
  12. 我不希望读者先收到通知,再点进一个还没准备好的页面
  13. 友情链接,让这个空间开始和外面连起来
  14. 六、10 月 22 日到 24 日:我开始反复问,还有什么没做完
  15. 备份,慢慢变成了继续修改的前提
  16. 有些内容需要保留,也有些边界不能假装不存在
  17. 七、10 月 24 日:最后,还是回到了首页的几个字和一秒钟
  18. 八、这一章结束时,我想留下什么
  19. 开源项目与第三方组件声明
  20. Astro 及官方集成
  21. Marked
  22. Turndown
  23. resvg-js
  24. Node.js
  25. Python
  26. Git
  27. Cloudflare
  28. GitHub 与 GitHub Actions
  29. Resend
  30. 设计参考
  31. 项目自身与 AI 协作

关于这一章

这是 Henry 的空间的第一章,记录从 2026 年 9 月 5 日最早可追溯的项目版本,到 2026 年 10 月 24 日的这段经历。

这一篇只做复盘:最初为什么想做,中间发生了什么,为什么不断修改,以及现在的我怎样看待这个空间。具体的技术分析与实现分享,留到第二章。

项目与本文署名:Henry。开发与整理过程中使用 OpenAI Codex 辅助。开源项目及第三方服务的出处,统一放在文末致谢。

一、最开始,只是想有一个自己的地方

这个项目的开头,是一个很普通的问题:能不能用 Cloudflare 的相关免费服务,帮我做一个网站?

那时我没有一套完整的规划,也没有想过它后来会长成什么样。

我只知道,自己想要一个博客。技术实践可以往里面放,摄影相关的经历可以写,日常生活里偶尔冒出来的想法,也有个地方留下。

风格上,我希望它干净一点,有留白,有秩序,有一点苹果产品那种克制的感觉。不要像门户,不要一打开就挤满模块,也不要看起来和许多模板没有区别。

现在回头看,最初的愿望其实不是“拥有一套功能齐全的系统”,而是拥有一个属于自己的地方。

2026 年 9 月 5 日,最早可追溯的版本已经有了首页、文章页、归档和关于页。

网站终于能在自己的域名下打开,几页内容连在一起,已经像一个博客了。那个时候,能看到它出现在浏览器里,就足够让人觉得这件事确实开始了。

但我很快发现,做出第一版并不等于做完。

准确一点说,真正的折腾,才刚刚开始。

二、9 月 5 日到 6 日:有了网站,却还没法安心写文章

我不想以后每次写东西,都得先处理一堆和写作无关的事情。

于是,最早追加的方向之一,就是做一个可以直接在网页里写文章的后台:打开,写完,点发布,文章就出现在网站上。

听起来很简单,实际用起来却并不顺。

最让我困惑的一次,是后台登录。

输入错误密码,会提示密码错误;输入正确密码,却没有任何反应。它既不告诉我哪里出问题,也没有让我进入下一步。

后来还有过另一种情况:好不容易进去了,页面上的东西却点不动,能操作的似乎只剩退出;再一刷新,又回到了登录页。

那时我提的问题很直接:“密码明明正确,为什么还是进不去?”

这种困惑和按钮是不是漂亮没有关系。你站在页面前,不知道自己究竟哪里做错了,也不知道应该等、应该重试,还是应该换一个浏览器。

还有一次,是文章发布以后的列表。

首页已经能看到我刚写的东西,后台却找不到。同一篇文章,在两个地方表现得像是两种状态。

这让我第一次很明确地意识到:网站不只需要能完成一件事,还需要让我知道,这件事究竟有没有完成。

那两天,许多看起来细碎的地方开始被补上:保存后的反馈、草稿、预览、错误提示,以及发布后能不能继续找到自己的文章。

这些不够显眼,却决定了我下一次是否还愿意打开后台。

最初的“从零到一”,是网站终于能访问;到了这里,我对那个“一”的要求变了——它至少应该让我能顺利写下一篇文章。

三、9 月 7 日到 12 日:越改越多,也越觉得哪里不对

之后的一段时间,最常出现的话,大概就是:“这个地方感觉怪怪的。”

标题为什么没有居中?一句话为什么偏偏把最后一个字挤到下一行?浅色模式为什么那么单调?归档一折叠,页脚为什么也跑上去了?

有些时候,问题甚至很难准确描述。

我知道它不好看,但还说不清究竟是字号、间距,还是几个区域放在一起没有关系。于是只能先提感受,看改完的样子,再继续说哪里不对。

写文章的地方,不能只是按钮越来越多

编辑器也是这样一点点长起来的。

最开始只是能输入、能发布,后来逐渐有了不同的书写方式、格式工具、插图、预览、字数和历史记录。

但功能增加以后,新的问题也跟着出现:工具放得没有逻辑,写作时来回找;手机上的功能栏占了太多空间;为了照顾手机,电脑端又被改得很窄。

我记得自己明确提出过,电脑和手机应该是两套符合各自习惯的操作方式,而不是同一个页面缩大缩小。

到 9 月 12 日,后台的两端布局开始真正分开。

这件事让我慢慢明白,所谓“更完整”,不只是多一些功能。如果一个工具越来越强,却越来越不想打开,它依然没有做好。

一个进度条,为什么能改那么久

发布进度也折腾过很多次。

有过提示已经发布,实际却还没上线;有过进度还在走,旁边却已经写着成功;也有过切换页面以后,提示消失了,事情却没有结束。

我对进度条的位置、形状和消失方式都提过意见,但后来越来越在意的,不是它画得够不够好看,而是我能不能相信它。

如果一个页面总是让我在“是不是已经发了”和“要不要再点一次”之间犹豫,那么再精致的界面,也没有真正消除不安。

这个问题没有在那几天就彻底结束。它一直延续到后面,成为项目反复回头处理的一件事。

我曾经非常执着于那个动态背景

早期还有一件事,我花了很长时间反复调整:背景。

我想让它有呼吸感,于是要求色块动得更快一点,颜色再深一点,轨迹别总是重复,也可以适当多一点颜色。

改完以后,又觉得三个色块太突兀。

后来觉得中心有浓点,去掉以后又像一个环,再后来又像几个透明圆,或者整个页面只剩一种蓝色。

这一串反馈现在看起来有点好笑,却很真实。

我当时确实很希望,网站打开的那一刻,能有一种“这就是我想要的感觉”。问题是,这种感觉很难靠不停叠加效果得到。

有的版本乍看不错,滚动时却会迟到一拍,内容像是晚了一下才回来。于是,原本为了让页面更有生命力的东西,反而让阅读变得不舒服。

那时我还没有完全放下它,只是一边继续修改,一边开始怀疑:是不是我想要的“高级”,根本不是再加一点什么。

四、10 月 17 日到 19 日:它开始有了“我的空间”的样子

到 10 月中旬,项目又经历了一轮比较明显的变化。

这一次,我不再只是盯着单个按钮或某个色块,而是开始重新看整个网站。

它到底是一个技术博客,还是一个能容纳我不同经历的地方?首页最重要的应该是什么?为什么明明加了许多东西,整体还是显得简陋?

站点名称逐渐统一为 Henry 的空间,英文使用 Henry’s Room。Logo 仍然保留简短的 Henry,而首页的那句话,也慢慢变成了现在的样子:

保持好奇 無限进步

下面是技术实践、见闻随笔和进步笔记。

最初设想里的独立摄影区块被去掉了,但摄影并没有因此被排除在这个空间之外。我只是越来越不想,让每一种兴趣都必须先被分配到一个固定的首页模块里。

关于页、现在页、首页近况,也开始各自讲不同的事情,而不是在几个地方重复同一段自我介绍。

文章开始记录真正发生过的项目

这段时间,我把其他项目陆续写进了博客。

有 Sapphire 的本地化改造,有 Henry 媒体库,也有 Henry 模型管家。

并不是所有项目都顺利走到了最后。

那个后来停下来的 AI API 聚合平台,以及被放弃、却给媒体库带来启发的 iOS 风格图库,同样留下了文章。

我开始觉得,个人空间不应该只陈列做成了什么。开始时的期待,中途的变化,以及为什么最后决定停下,也值得被记住。

这些内容让网站第一次不只是一个等着被填满的框架。

它开始有了一点属于我自己的来路。

写这些文章时,另一个提醒也变得明确:用了别人的开源项目,就应该把出处和作者说清楚。哪些来自原作者,哪些是自己的改动,不能混在一句“我做了一个东西”里面带过去。

最后,我还是放下了那个一直在动的背景

也是在这轮调整里,我开始认真面对性能问题。

我实际感受到的是:博客打开一会儿,电脑会发热,风扇也会明显转起来。

这和我最初想要的东西,其实有些背道而驰。我是想做一个让人愿意停留、愿意阅读的网站,而不是一个让设备一直忙碌的展示页。

10 月 18 日,持续运行的极光背景最终被拿掉,视觉开始转向更安静的纸张感和局部层次。

那是这个项目里很重要的一次主动放弃。

不是所有花了时间做出来的东西,都必须留下来。

有时候,把它去掉,反而更接近最初的愿望。

五、10 月 18 日到 22 日:开始考虑屏幕另一边的人

评论、订阅和友情链接加入以后,网站不再只关乎我自己的操作体验。

它开始涉及别人的文字、邮箱、等待和反馈。

评论的重点,不只是“能发出来”

评论最早上线时,我接着提出了不少要求:希望有随机头像,能看到大致地区,也能像正常讨论那样回复。

真正用起来以后,却发现回复看着更像一条新评论,很难看出到底在和谁说话。地区展示也出现过不符合实际来源的反馈。

那时我特意强调过一句话:改的时候,不要丢掉现有评论。

这句话后来不只适用于评论。

它逐渐成了整个项目的底线:新的界面可以重做,但已经留下来的内容不能被当作随时可以清空的东西。

我还希望发表评论的人能收到审核和回复通知。邮件不应该只是几行随便排出来的字,而应该像这个网站认真寄出去的一封信。

于是,邮件的界面、文字和信息顺序也开始被打磨。

然后,实际使用又暴露了新的问题:被回复的人收不到信;相同邮箱之间的回复会产生多余通知;有人写了一长串不换行的评论,整封邮件就被撑得很难看。

这些问题没有宏大的名字,但如果不改,收到邮件的人就会真的遇到它们。

我不希望读者先收到通知,再点进一个还没准备好的页面

邮件订阅在 10 月 20 日上线。

我希望愿意继续看这个网站的人,不必靠反复回来刷新,才能知道有没有新文章。

但订阅也不能只是把邮箱收集起来。对方需要知道自己订阅了什么,能确认,也能退出;我需要能管理状态,不能把所有事情都藏在一句模糊的提示里。

后来的一次调整,是让文章真正上线以后,再发出更新通知。

我不希望有人打开邮件,点进来,却发现文章还不存在,或者页面仍然停在旧版本。

邮件额度也不能等到完全发不出的时候才发现。于是,这个原本不会被读者看见的地方,也被放进了日常管理里。

做这些事的时候,我越来越清楚地感受到:当有人愿意把邮箱交给这个网站,或者认真留下一段评论,它就不能再只是“我随便折腾一下”的东西。

友情链接,让这个空间开始和外面连起来

10 月 22 日,友情链接逐渐有了完整的申请和管理过程。

我既希望访客能申请,也希望自己可以直接在后台添加,不必为了每一个小改动再去处理别的事情。

这部分同样遇到过保存卡住、审核以后不知道什么时候会显示出来的问题。

表面上看,它和之前的发布进度不一样;站在使用者的位置,困惑却很相似:我已经操作了,现在到底是什么状态?

到这里,这个项目反复提醒我的,其实始终是同一件事——让人知道自己在哪里,比再多加一个漂亮入口重要得多。

六、10 月 22 日到 24 日:我开始反复问,还有什么没做完

后面这轮优化,持续了很多次对话。

我不断问,还有哪些没做完,下一批能做什么,能不能一次多做几项,进度为什么这么慢。

最初看到页面变好一点,满足感来得很快;到了这一阶段,许多工作却不再能靠一张前后对比图看出来。

有些是反复确认发布状态,有些是整理越来越复杂的后台,有些是处理旧内容,还有些只是为了让一个已经能用的地方,在换一种操作顺序后依然能用。

这个过程中,我也明确给过一个界限:整体风格和已有文章、评论等数据必须保留,其他地方可以继续调整。

后来,我又把部分事情先放下,不再要求所有方向同时推进。

这并不是忽然不想完善它了,而是开始接受:每个问题都有自己的轻重,也不是每一项工作都能在当下得到同样充分的确认。

备份,慢慢变成了继续修改的前提

前期修改时,我更关注改完会不会更好看。

后面则会习惯先加一句:做好回滚备份,不合适还能退回来。

因为网站已经有了自己的内容,也已经有了别人留下的东西。它不再是坏了就重新做一遍也无所谓的空壳。

有退路以后,才更敢认真做取舍,而不是每次都在“想改”和“怕弄坏”之间犹豫。

我并不是想把它变成一个永远不会出问题的网站。只是希望,出问题时不必靠运气,也不至于把已经积累起来的东西一起丢掉。

有些内容需要保留,也有些边界不能假装不存在

私密文章的想法,同样来自一个很朴素的需求:有些文字想放在自己的空间里,但不希望任何人打开就能读到。

后来,私密文章里的评论,以及相关图片和附件,也逐渐进入了考虑范围。

但不是给一个地方加上“私密”两个字,所有过去发生过的事就会自动改变。

以前公开过的资料,仍然需要单独看待;历史内容之间的关系,也需要我自己确认。

这一阶段让我学会的,不是怎样把一个状态写得更漂亮,而是承认什么已经做好,什么还需要处理,什么现在还不能保证。

七、10 月 24 日:最后,还是回到了首页的几个字和一秒钟

整理完一轮后台与已有问题以后,我们又回到了前台。

首页精选的文字和封面比例,文章之间的层次,订阅页的排版,手机底部入口的顺序,都重新看了一遍。

开发日记的分类栏曾经很难读,还会生硬地跟着页面滚动;阅读统计里的两个区域也显得不协调。这些地方后来都做了针对性的整理。

这一次,我没有要求所有东西一起推倒重来,而是希望不合适的地方改好,已经舒服的地方保留。

有意思的是,在文章、评论、订阅和后台都逐渐成形以后,最新的几轮反馈,依然落在很小的感受上。

首页一刷新,为什么像抽了一下?

修完以后,为什么又看不出任何动画?

最后希望留下来的,其实只是一个很轻的开场:内容慢慢清晰起来,位置不要晃,不要突然往中间挤,也不要让我等它表演完才开始看文章。

如果放在项目刚开始的时候,我大概还会继续要求更明显、更丰富一点。

走到现在,我反而更在意它是否恰当,会不会抢走内容的注意力,能不能让我舒服地停留。

这种变化,不只发生在首页动画上。

它也发生在我看待整个网站的方式里。

八、这一章结束时,我想留下什么

现在的 Henry 的空间,已经和最早那几页网页很不一样。

我可以在后台写文章,保存没有写完的内容,预览,发布,再继续修改;读者可以找旧文章,留下评论,订阅更新,也可以把准备以后再读的东西先留下。

关于我正在做什么、已经做过什么,以及这个网站自己经历了什么,也逐渐有了不同的位置。

这些东西终于开始围绕“写下来”和“读下去”发生关系,而不只是因为能加,就被一项项加在页面上。

但我不想把这一章的结尾,写成“功能已经全部完成”。

它当然还会有问题,也还会有我没有照顾到的使用习惯。有些历史内容需要继续整理,有些体验需要更长时间才能看清楚。

这一篇的意义,不是宣布它完美了,而是记下:它已经走过最初的那个阶段。

从想要一个网站,到做出一个网站,再到愿意对这个网站负责。

回头看,这段时间并没有一个特别戏剧化的转折。更多时候,只是在一些很普通的时刻里向前走了一点:终于能登录了,文章终于能找到了,回复终于像一段对话了,那个让电脑忙个不停的背景终于可以放下了。

也有很多时候,刚觉得改好了,下一次打开又发现新的问题。

但正是这些反复,让它不再只是最初那张看起来不错的页面。

在之前那篇 Vibe Coding 的随笔 里,我谈过 AI 让想法更容易变成实际结果。这次复盘里,我更想留下的,是结果出现以后,自己为什么还愿意继续看它、用它,再把不满意的地方一点点改好。

这个空间不需要什么都有。

我更希望它能装下真正发生过的事情:完成的项目,没有做完的计划,当时的困惑,后来的理解,以及一些暂时还没有答案的问题。

第一章,先记到这里。

第二章再谈怎样实现、为什么这样选择,以及一路做下来有哪些具体的技术经验。现在,先把这段路认真留下。

第二章:Henry 的空间 · 第二章:把一个博客,做成可以长期维护的系统

保持好奇,無限进步。


开源项目与第三方组件声明

以下按项目分别列出原作者、上游出处与授权信息,仅作致谢和说明,不在这一章展开技术分析。相关名称、代码和商标归各自作者、贡献者或服务提供方所有。

Astro 及官方集成

  • 项目:Astro、@astrojs/rss、@astrojs/sitemap
  • 原作者与维护者:Fred K. Schott、Astro 团队及贡献者
  • 上游仓库:withastro/astro
  • 许可证:MIT License
  • 用途:本站页面、文章内容及订阅与站点地图的基础能力。

Marked

Turndown

  • 项目:Turndown
  • 原作者与维护者:Dom Christie 与贡献者
  • 上游仓库:mixmark-io/turndown
  • 许可证:MIT License
  • 用途:衔接后台两种书写方式。

resvg-js

  • 项目:@resvg/resvg-js
  • 维护者:resvg-js 项目维护者与贡献者
  • 上游仓库:thx/resvg-js,原地址 yisibl/resvg-js 现跳转至该仓库
  • 许可证:MPL-2.0
  • 用途:生成文章分享图片。

Node.js

  • 项目:Node.js
  • 维护者:Node.js 项目维护者与贡献者
  • 官网:nodejs.org
  • 许可证:核心采用 MIT 许可证;随附第三方组件各有声明,见官方 LICENSE
  • 用途:项目构建与相关工具运行。

Python

  • 项目:Python
  • 维护者:Python Software Foundation 与贡献者
  • 官网:python.org
  • 许可证:主要采用 PSF License Version 2
  • 用途:项目部署、备份核验与自动化检查。

Git

  • 项目:Git
  • 维护者:Git 项目维护者与贡献者
  • 官网:git-scm.com
  • 许可证:GPL-2.0
  • 用途:保留内容版本与开发历史。

构建链还包含其他间接依赖,完整版本及授权以项目锁文件和各组件随附声明为准。这份说明不代替完整的软件物料清单或许可证原文,也不将上述项目的工作归为本站原创。

Cloudflare

  • 服务:Cloudflare
  • 提供方:Cloudflare
  • 官网:cloudflare.com
  • 使用能力:Pages、Workers、Workers KV、D1、Turnstile 及相关网络与站点服务。

GitHub 与 GitHub Actions

  • 服务:GitHub、GitHub Actions
  • 提供方:GitHub
  • 官方说明:GitHub Actions 文档
  • 用途:项目及文章版本管理、自动构建与发布。

Resend

  • 服务:Resend
  • 提供方:Resend
  • 官方说明:Resend 文档
  • 用途:发送站点相关邮件通知。

以上三项属于第三方服务,并非本站原创的开源组件。使用免费额度不等于服务没有限制,其费用、额度、隐私及使用条件以各平台实际说明为准。

设计参考

视觉方向参考 Apple 产品中克制的排版、留白和交互秩序。Henry 的空间不是 Apple 官方产品,也与 Apple 不存在官方隶属或背书关系。相关商标与权利归各自权利人所有。

项目自身与 AI 协作

Henry 的空间由 Henry 发起、设计并持续维护,开发与内容整理过程中借助 OpenAI Codex 辅助。相关工具名称与权利归各自权利人所有,使用辅助工具不改变第三方代码的原有许可证要求。

截至本文发布时,项目源码仓库为私有,尚未为项目本身额外声明开源许可证。使用开源依赖,不等于整个项目已经开源,也不代表本文授予源码、站点素材或文章的自由再分发授权。

文中提及的 Sapphire、媒体库、模型管家等,是这个空间记录的其他项目,不应据此视为博客本身的依赖。它们各自的上游来源、原作者与第三方声明,请阅读对应文章。

本文不包含后台密码、访问令牌、备份密钥、订阅者邮箱或访客个人数据。


项目与本文署名:Henry。记录截至 2026 年 10 月 24 日。 更细的日期与更新记录,保留在开发日记中。

第二章:Henry 的空间 · 第二章:把一个博客,做成可以长期维护的系统

H
Henry

记录技术实践、设计观察与生活里的慢思考。

关于作者
DISCUSSION

评论 0

留下想法或补充。评论经审核后会显示在这里。

正在读取评论…