新的开始:Hello Astro
2026 年 8 月 12 日 · 8 分钟阅读
最近,我又把个人网站重写了一遍。
说“又”,是因为个人网站似乎永远没有真正完成的那一天。每隔一段时间回头看,总会觉得导航太多、组件太重、信息太满,或者它已经不再像此刻的自己。于是删掉一些,再补上一些,最后索性从头来过。
上一版使用 Nuxt 和 Nuxt UI,功能丰富,也很方便。它陪我写过文章、记录过照片和书影音,还装下了不少一时兴起做出来的小功能。但随着内容越堆越多,网站也渐渐变成了一个陈列柜:每样东西都有位置,却很难一眼看出我真正想留下什么。

这次重写,我不想再造一个功能齐全的“个人门户”。我更希望它像一本摊开放在桌上的薄册子,安静、克制,偶尔翻动时又能看到一点细节。
从减法开始
新版首页没有传统导航栏,也没有大幅 Banner。头像、几句自我介绍,以及三个主要栏目从上到下自然排开:
- 朝夕录,收纳文章与日常思绪;
- 隅中筑,记录我做过或仍在折腾的项目;
- 浮影记,保存最近看过的电影、剧集和游戏。
这些名字比 Writing、Projects、Media 多了一点私人意味。它们不需要准确解释某项产品功能,只要能让来到这里的人感受到:这是一个用来记录生活和创造的地方。
视觉上也尽量保持简单。页面被约束在一条不宽的阅读区域里,以黑、白和中性色为主,没有层层嵌套的卡片,也没有为了填满屏幕而添加的装饰。留白成了主要的分隔方式,字体、字号和颜色只承担必要的信息层级。
我很喜欢这种“不急着把所有东西都展示出来”的状态。首页只放最近三篇文章、几个项目和几条书影音记录,剩下的内容留给真正想继续看的人。
评论系统也在这次做减法时被移除了。以前总觉得博客应该有一块评论区,像是为每篇文章留下一个等待回应的入口;可真正回头看,我并不确定自己是否需要它。维护第三方服务、处理登录与通知是一方面,更重要的是,我还没有想清楚评论是否真的能让这里产生我期待的交流。
这并不是拒绝讨论。比起在文章末尾固定摆放一个输入框,我现在更愿意让回应自然发生在邮件、社交平台,或者某次偶然的对话里。如果以后重新理解了评论对这个网站的意义,也许它还会回来;在那之前,先让文章安静地停在这里。
写作仍然是中心
无论网站改成什么样,文章始终是这里最重要的部分。
博文现在由 Astro Content Collections 管理,正文继续使用 Markdown 和 MDX。标题、日期、摘要与 Emoji 都有明确的数据结构,文章列表、详情页、RSS 和 Open Graph 图片可以从同一份内容生成,不必在几个地方重复维护。
我也重新整理了文章里的排版组件。标题、列表、引用、图片和链接都保持一致的间距与阅读节奏;每篇文章会根据中英文和代码内容估算阅读时间,而不是简单地按空格计算字数。分享链接时,网站还会为文章自动生成独立的封面图。
RSS、Sitemap、Canonical URL 和基础的社交分享信息也都补齐了。它们平时几乎看不见,却让一个内容网站真正具备了被订阅、索引和分享的能力。
浮影记
旧网站曾有一个很庞大的书影音页面,数据和界面都越来越难维护。新版把它重新做成了“浮影记”,不再追求建立完整档案,只记录我最近看过什么,以及当时留下的一点感受。
这些数据从 Popfeed 同步到本地内容集合,构建时生成静态页面。列表可以按类型筛选,也能根据时间、评分和标题排序。封面不再只是平铺的海报,而被处理成略带书脊与透视感的小物件,希望它们看起来更像一排被收藏起来的影像,而不是后台管理系统里的数据表。
文章里的 TMDB 链接也有了更自然的呈现方式。当 Markdown 中出现电影或剧集链接时,构建过程会解析 URL,从 TMDB 获取中文标题、原名、简介、评分和海报,再把普通链接变成一张紧凑的内容卡片。
动画应该帮助理解
一开始我给页面加了不少 CSS 动画,单独看都没问题,连在一起却有些卡顿,也缺少统一的节奏。后来改用 Motion 处理元素入场、项目展开和浮影记的筛选排序,动画的持续时间、缓动与中断状态都更容易控制。
进入页面时,内容会轻轻上移并逐项出现;展开更多项目时,高度与透明度会自然过渡;筛选书影音时,旧内容淡出,剩下的项目会移动到新的位置。所有动画都尊重 prefers-reduced-motion,不希望动效成为阅读的负担。
页面之间则使用 Astro 的 View Transitions。首页或文章列表中的标题,与详情页标题共享同一个过渡名称。点击文章时,标题会从原来的位置平滑移动到正文顶部,其他内容只做很短的淡入淡出。它并不张扬,却让“从列表走进文章”这件事有了连续感。
我还把很多地方反复出现的箭头抽成了同一个组件。它会在悬停时露出一点方向变化,但不会抢走文字本身的注意力。这些细小反馈大概就是新版最接近“装饰”的部分。
为什么是 Astro
这个网站绝大多数内容都能在构建时确定,并不需要一个长期运行的应用服务器。Astro 很适合这种场景:页面默认输出静态 HTML,需要交互的地方再加入少量客户端脚本。
新版没有引入 React、Vue 之类的前端运行时。Astro 负责页面与内容组织,UnoCSS 负责样式,Motion 只出现在确实需要动画的地方。最终站点仍然可以作为静态资源部署到 Cloudflare,结构简单,也更容易判断浏览器究竟加载了什么。
工程上的东西也尽量收敛:使用 pnpm 管理依赖,用 Prettier 统一 Astro、TypeScript 和 Markdown 的格式,构建时完成图片优化、OG 图片生成、RSS 与 Sitemap 输出。页脚还会留下本次构建对应的 Git Commit 和时间,方便以后回头确认某个页面来自哪个版本。
这并不意味着新版会永远保持现在的样子。个人网站的乐趣,本来就不只是完成它,而是在一次次修改里留下自己的变化。
写在最后
重写过程中,我删掉过不少已经做好的功能,也几次怀疑是不是把页面做得太简单了。但真正使用一段时间后,我反而越来越喜欢这种轻盈感。
它没有试图证明我会多少技术,也不再急着把生活的每个侧面都塞进首屏。它只是把文章、项目和最近喜欢的东西整理好,然后安静地等待下一次记录。
新的开始并不一定意味着推翻过去。更多时候,它只是终于看清哪些东西值得继续带走。
Hello Astro,也再次欢迎来到这里。