对话建站

把 Lifetime 建起来

我

我想要一个地方,存我和 AI 的对话、自己说的话、拍的照片。因为对话会忘,我想把思维成长的过程留下来。

首页按时间倒序、内容要多元;我自己写的东西简洁大方就行,对话要像对话,能看出思考怎么一步步推进的。

技术用 Next.js,纯静态,扔到服务器上让 Nginx 托管,域名已经解析好了。服务器资源不多,你在本机构建好再传上去。图片走腾讯云 COS,单开一个 lifetime 桶。

AI

在动手前有三个决策会直接改变架构,先确认:

  1. 访问控制——公开、全站密码、还是默认公开但支持单条加密?这决定要不要引入构建期的鉴权层。
  2. COS 图片怎么加载——桶设公共读最简单;私有桶加签名链接更安全,但 URL 会过期;私有桶加 Nginx 代理最安全,但服务器要常驻进程,你这台内存只有 3.7G。
  3. 要不要全文搜索——纯静态搜索需要在构建时额外生成索引。

其余的交给我:分类怎么组织、页面怎么排、视觉怎么定,我来判断。

我

公开访问,桶设公共读,要静态搜索。

AI

那架构就定了:Next.js 静态导出,构建期把 Markdown 渲染成 HTML,Pagefind 生成索引,产物整包扔给 Nginx。

内容分成三个抽屉,对话用 :::me / :::ai 分角色,:::note 留给事后回看的批注。分类不预设枚举,每写一条自己填。

过程中踩了一个值得记的坑:中文标题的详情页全部渲染成了错误页。

原因是 Next 静态导出时,params 给过来的是百分号编码后的字符串,用它去查条目自然查不到,代码走了 notFound()。修复只有一行——查询前先 decodeURIComponent。同一套代码里分类页和标签页安然无恙,正因为那两个页面我顺手写了 safeDecode,只有 slug 这一处漏了。

批注

这条记录本身就是我想要的形态:不是"我们做了 A、B、C"的流水账,而是把当时的判断和踩坑留在原地。三个月后回看,应该能想起来为什么选了公开访问、为什么会漏掉那个 decode。至于怎么操作这个站、frontmatter 有哪些字段,写在仓库的 README 里就够了,不必占用对话记录的篇幅。