分类
工程
发布于
2026年7月5日
正文
4926 字正文

让个人站经得起时间

这篇写 Fox v2 的后台秩序,为什么内容、配置、组件、文档和构建规则会决定一个个人站能不能长期写下去。

我现在越来越相信,一个个人站最难的地方,不是把第一版做出来。

第一版反而是最容易兴奋的时候。想法很多,耐心也多。你可以熬几个晚上,把首页、文章列表、照片墙、杂谈、主题色和动效一口气推到一个能看的状态。甚至哪怕结构有点乱,也会因为新鲜感而被暂时忽略。

真正的考验在后面。

三个月后,你还愿不愿意回来写文章。

半年后,你还看不看得懂当时为什么这样分目录。

一年后,当你想给照片墙加一点新能力,或者想把搜索、RSS、标签和归档补完整时,项目会不会像一团旧毛线一样把你缠住。

这才是个人站的长期问题。

所以这次重构 Fox v2,我越来越不把它当成一次页面改版。

我更愿意把它理解成一次秩序重建。

前台体验决定访问者愿不愿意继续看,后台秩序决定我自己愿不愿意继续写。两件事缺一件都不行。只有漂亮页面,没有内部秩序,时间一长就会变成难以维护的壳。只有内部秩序,没有表达气质,站点又会像一份目录清楚但没人想读的说明书。

Fox v2 要解决的,是这两个东西怎么同时存在。

这篇主要聊后一个。

也就是个人站怎样经得起时间。

一、内容应该像内容

我最早对内容系统的不舒服,来自一个很小的细节。

写内容时,我感觉自己像在改代码。

这句话听起来有点奇怪。因为个人站本来就是代码项目,写文章当然会碰到文件。但这里的关键不是文件,而是心理状态。

如果一篇文章藏在 TypeScript 数组里,照片故事也像配置项一样被塞进数据文件,杂谈又是另一份临时结构,那么每次新增内容,我都要先进入工程模式。我要看字段名,想数组位置,担心逗号和类型,确认它会不会影响页面。

这会削弱写作欲望。

写作本来已经够难了。你要想清楚自己要说什么,要组织句子,要面对自己其实没想明白的地方。如果写之前还要先穿过一层工程摩擦,很多内容就会死在门口。

所以 Fox v2 这次把正式内容放进 src/content/

文章去 posts

照片去 photos

杂谈去 notes

未来视频先留 videos

每一条内容都是 Markdown 或 MDX 文件。文件相对路径生成公开地址。资料卡放在 Frontmatter 里,正文放在下面。

这件事听起来很普通。

但普通恰恰是它的价值。

我写文章时,不需要再感觉自己是在改一个页面组件。我只是在写一篇文章。标题、摘要、发布时间、状态、标签、分类、封面和 SEO 信息,都像内容的资料卡。正文就是正文。

内容终于回到了内容的位置。

这一步对长期维护很关键。因为一个个人站如果想写很多年,新增内容这件事必须足够轻。不能每次都像开一次小型施工会。

我希望未来的自己打开项目时,第一眼就知道。

想写东西,去内容目录。

想改页面,去页面入口。

想调展示,去组件。

想改主题,去样式和设计 token。

这种清楚不是洁癖。

它是在保护表达。

二、状态字段是一种诚实

内容系统里有一个很不起眼的字段,叫状态。

published 是公开,draft 是草稿,unlisted 是不进入公开列表的内容。

这种字段看起来像技术细节,其实非常像一种写作伦理。

不是所有内容都应该被公开。

不是所有写完的东西都准备好了。

也不是所有页面入口都应该假装已经完成。

个人站最怕的一种状态,是半成品到处露出来,但页面又装作一切正常。点进一个标签页是 404,搜索入口打开是空白,RSS 链接还没真正生成,照片详情看似存在但没有稳定规则。这种东西会慢慢消耗站点可信度。

所以 Fox v2 里公开列表默认只展示 published。草稿和未列出内容不进入首页、RSS、标签和归档。未完成页面如果已经进入导航,就用建设中页面兜底,而不是让访问者掉进不可控的空洞。

这不是保守。

这是诚实。

我宁愿告诉你,这里还在整理,也不想伪装成已经做完。

这种诚实对自己也有帮助。草稿可以安全地存在,不必因为还没写好就被迫删除。未公开内容可以留作未来素材,不会突然跑到首页。公开内容则承担公开内容应该承担的责任。

个人站如果没有状态边界,很容易把自己逼成两种极端。

要么什么都不敢放。

要么什么都随手放。

状态字段让中间地带出现了。

这对长期写作很重要。

三、配置不能到处散

一个站点时间长了,最容易散掉的是配置。

站点名在哪里,社交链接在哪里,首页状态在哪里,SEO 默认值在哪里,主题图片在哪里,导航在哪里。第一版做的时候,随手写在组件里很方便。反正就一个地方用,反正以后再说。

但「以后再说」会变成债。

当你想改站点名称,发现页面里散着好几份。当你想调整首页 Now,发现文案写在组件里。当你想改默认封面,发现列表页和详情页各有自己的判断。当你想改社交链接,发现首屏和页脚不是同一个来源。

这时候你就不想改了。

不是因为改动大,而是因为你不知道哪里才算改完。

Fox v2 把这些东西收回到 src/config/。站点信息在站点配置里,首页状态在首页配置里,主题图片和签名在主题配置里,导航、社交和 SEO 也各自有自己的位置。

配置只表达稳定事实。

不放渲染逻辑。

这句话很重要。配置不是另一个组件,也不是为了把代码藏起来。配置只是告诉项目,哪些东西是全站事实,哪些东西可以被页面读取。

比如首页 Now 里的更新文案、最近在读、最近在听,就应该是配置,而不是写死在组件里。组件负责展示它,不负责拥有它。

这种分离会让项目变得安静。

未来我要换一本书,换一首歌,调整一句近况,只需要去一个地方。页面不会因为内容变化被迫重新理解结构。

很多长期维护的轻松感,就是从这种小地方来的。

四、组件要知道自己的边界

个人项目很容易写着写着就把所有东西塞进一个页面文件。

一开始很爽。

因为你不用跳文件,不用想抽象,也不用命名。页面从上往下写,哪里缺什么就补什么。直到某天你打开它,发现里面混着数据、配置、样式类名、交互状态、图片逻辑、空状态、链接规则和一堆临时判断。

这时它就不再是页面。

它变成了一个不能碰的盒子。

Fox v2 对这个问题的处理很直接。src/app/ 只放路由、布局、页面入口和 metadata。首页页面只负责组装。首页业务组件放在 src/components/home/。内容展示组件放在 src/components/content/。通用基础组件放在 src/components/ui/

这听起来像目录规范。

但目录规范背后,其实是责任规范。

一个组件应该知道自己负责什么,也应该知道自己不负责什么。

HomeSnapshot 负责展示当前状态概览,不应该自己拥有所有状态事实。HomeFeaturedContent 负责组织首页 Recent 区域,不应该知道内容怎么从 Markdown 里被读出来。文章详情组件负责呈现详情模型,不应该临时决定哪些文章公开。

边界清楚之后,修改才有方向。

如果文章排序错了,去内容读取和排序逻辑找。

如果文章详情排版不舒服,去内容组件和内容样式找。

如果首页卡片不对,去首页组件找。

如果主题色不稳,去设计 token 找。

没有边界时,每个问题都像全局问题。

有边界后,大多数问题会变回局部问题。

这就是长期维护的核心。

把问题变小。

五、样式也需要秩序

很多个人站越改越乱,不是因为功能复杂,而是因为样式没有秩序。

今天在组件里写一个颜色,明天在全局样式里塞一段页面专属规则,后天为了修一个移动端问题又补一个更强的选择器。短期看都能解决问题。长期看,页面会变成一个靠记忆维持的东西。

你不敢删。

也不敢改。

因为你不知道哪一条样式正在撑住哪个角落。

Fox v2 把样式按职责拆开。全局入口只做入口,主题 token 放在 theme.css,基础排版放在 typography.css,跨组件复用样式放在 components.css,首页样式放在 home.css,内容页面样式放在 content.css,通用动效放在 transitions.css

这些文件名本身就是提醒。

你要改首页,就不要把规则塞进全局。

你要改主题,就不要在组件里手写颜色。

你要改动效,就要考虑减少动画偏好。

这里有一个很容易被低估的东西,设计 token。通俗说,它就是把颜色、圆角、阴影、布局宽度这些基础设计选择变成统一变量。这样页面不是到处记一堆零散颜色,而是用同一套语言说话。

浅色模式的暖白纸感、樱粉强调色,深色模式的深绿灰背景,玻璃面板的透明度、边框、模糊和阴影,都应该从这套语言里出来。

这样设计才不会随着每次小修改漂移。

长期项目最怕漂移。

漂移不是大错,它是一点点发生的。一个按钮颜色略深,一个卡片阴影略重,一个页面圆角略软。几个月后,站点还在,但气质散了。

样式秩序,就是为了减少这种慢性损耗。

六、文档不是给别人看的

我以前也会觉得,个人项目写这么多文档是不是有点夸张。

后来我改观了。

文档当然可以给别人看,但在个人站里,它更像是写给未来的自己。

因为未来的自己不一定记得今天的自己为什么做这个决定。

为什么首页不是营销页。为什么文章、照片、杂谈是核心内容类型。为什么默认使用 Server Component。为什么内容要进 src/content/。为什么公开列表只展示 published。为什么页面改动需要验收。为什么不直接启动长期挂起的本地服务。

这些东西如果只存在脑子里,很快就会丢。

一旦丢了,项目就会被情绪接管。

今天觉得这个酷,就加。明天觉得那个方便,就塞。后天又觉得之前太复杂,开始删。每次都像在重新发明规则。

Fox v2 的文档把这些规则写下来。项目总说明、产品页面规格、设计系统、工程规范、路线图、SEO 和部署、组件规格、代码规范、测试规划。看起来很多,但它们其实在回答同一个问题。

这个站为什么这样做。

有了这个答案,后续修改就不会完全靠感觉。

文档不是为了让项目显得正式。

它是为了减少反复。

尤其是个人项目,最容易被热情推动,也最容易被热情抛弃。文档的作用,是在热情降下来之后,还能给你一条路。

你不需要重新鼓起很大的劲。

你只要沿着已经写好的规则继续走。

七、构建和验收是边界感

一个能长期维护的站,不能只靠「我觉得应该没问题」。

我在 Fox v2 里很重视构建和验收,不是因为我喜欢跑命令,而是因为它们能帮我发现自己忽略的地方。

npm run build 会先做 Next.js 静态导出,再用 Pagefind 扫描输出目录生成搜索索引。这个过程可以确认公开页面能不能正常生成,文章详情、RSS、标签、搜索索引这些东西是否还连得上。

这对内容站尤其重要。

因为内容不是静止的。今天新增一篇文章,明天加一个标签,后天改一个日期。如果内容字段缺失时静默回退,或者草稿误进公开列表,这些问题很难靠肉眼一次看出来。

构建像一次比较冷静的检查。

它不关心我写得多有感觉。

它只问项目能不能生成。

页面验收则是另一层。构建通过不等于体验通过。页面可能能生成,但移动端横向滚动,深色模式不清楚,按钮没有可访问名称,图片加载失败后布局难看,文本在卡片里溢出。

这些都需要看页面。

所以项目规则里要求用户可见页面改动要用内置浏览器验收。这个要求看起来严格,但它其实是在保护访问者。

个人站也是产品。

只要有人打开,它就有体验责任。

八、RSS 和搜索是给未来留门

RSS 和搜索这两个东西,在个人站里很容易被低估。

因为它们不太显眼。

首页做好了,别人立刻能看到。文章卡片做好了,视觉变化很明显。RSS 做好了,可能只有少数订阅工具会用。搜索做好了,也只有内容变多之后才显出价值。

但正是这种不显眼的能力,决定站点能不能积累。

RSS 是给长期读者留的一扇门。不是每个人都会每天打开我的主页,但有人可能愿意在订阅工具里看到更新。只输出已发布文章,不包含草稿和未列出内容,按发布时间倒序,链接指向文章详情页。这些规则保证了订阅体验不乱。

搜索是给未来内容量准备的路。

现在文章不多时,搜索看起来没那么必要。但如果一个站真的写了几年,内容会变成森林。没有搜索,连自己都很难找回某个旧想法。Pagefind 这种静态全文搜索适合这个阶段,因为它不需要复杂服务,也符合静态站的部署方式。

这两个能力都不是为了显得功能完整。

它们是在承认一件事。

内容会变多。

站点会变老。

而我希望它变老之后仍然可用。

还有一个更实际的原因。

当内容越来越多,站点会开始反过来影响写作方式。没有搜索时,我很难确认自己以前有没有写过类似想法。没有 RSS 时,更新只能被动等人打开首页看到。没有稳定链接时,旧文章很难被再次引用。没有标签和归档时,内容之间的关系也会变薄。

这些能力不是给机器看的。

它们是在给内容留下回路。

一篇文章写完后,不应该只在发布当天出现一次。它应该能被搜索找回,被标签重新串起来,被订阅工具送到读者面前,也能在另一篇文章的上下文里再次出现。这样内容才不是孤岛。

个人站如果想经得起时间,就要让旧内容还有被重新看见的机会。

九、长期维护不是把事情做复杂

说到这里,很容易产生一个误会。

是不是为了长期维护,就要把个人站做得很复杂。

我觉得恰好相反。

长期维护的目标,是让复杂度待在该待的地方。

内容就是内容,配置就是配置,组件就是组件,样式就是样式,工具函数就是工具函数,文档就是文档。不是每件事都要抽象,也不是每个临时需求都要设计一套未来扩展方案。

有些地方应该简单。

比如首页不需要承担完整内容浏览。

比如分页不是第一阶段必需能力。

比如友链和关于页没准备好,就用建设中页面诚实兜底。

比如视频内容先保留目录和规则,不急着做入口。

这种克制和前台体验里的克制是一回事。

前台不把所有东西摆出来。

后台也不把所有未来都提前实现。

能长期走下去的项目,往往不是最聪明的项目,而是最不容易把自己拖垮的项目。每次只做真正需要的东西,每次把边界放回正确位置,每次改完都有验收方法。

这听起来慢。

但慢不是坏事。

慢可以让一个个人站活得久一点。

十、我想给未来的自己少留一点债

Fox v2 这次重构,最打动我的地方不是某个页面变好看了。

而是我觉得未来的自己会少骂现在的自己几句。

他想写文章时,不需要先猜内容在哪里。

他想改首页近况时,不需要翻组件。

他想调整主题时,不需要全站搜索某个颜色。

他想查为什么这么设计时,能在文档里找到理由。

他想确认改动有没有破坏页面时,有构建和验收规则。

这就是后台秩序的意义。

它不是为了服务某个抽象的工程洁癖,而是为了让后来的每一次表达都更轻一点。

个人站是很私人化的东西。它不像公司项目,有明确排期、明确负责人、明确收益。它靠的是一种很脆弱的愿意。今天愿意写,明天愿意改,过几个月还愿意回来看看。

这种愿意,需要被保护。

混乱会消耗它。

清楚会保存它。

所以我现在看 Fox v2,不只是在看一个网站。

我是在看一套能不能让自己继续写下去的生活装置。

它有前台的安静,有后台的秩序,有内容的入口,有未完成的诚实,也有一点对未来的耐心。

这可能就是我想要的个人站。

不是一次做完。

而是经得起一次次回来。

本文采用知识共享 CC BY-NC-SA 4.0 协议发布。

作者
fox
最后更新