首页
博客 前端

用 Astro 岛屿把博客做成一个个人数字空间

为什么这个站点不是「又一个博客」:静态输出、岛屿交互、内容集合驱动,以及一条可以一直迭代下去的路线。

4 天前 1 分钟读完 421 字

大多数个人博客最后都停在同一个样子:一篇篇文章,加上一个越来越久不更新的「关于我」。我想要的是一个可以持续生长的空间——文章只是其中一块,项目、收藏、数据看板都能落在同一套视觉语言里。

三个约束

  1. 内容必须能躺着维护:新增一篇文章就是新增一个 Markdown 文件,不需要改任何代码。
  2. 首屏必须快:没有客户端路由,没有运行时框架预热,HTML 直出。
  3. 交互要克制但真实:主题切换、筛选、播放器这些确实需要状态的地方才上 JS。

为什么是 Astro + Vue 岛屿

Astro 负责把页面编译成纯 HTML,Vue 只出现在需要交互的局部。一个主题切换按钮的成本大约是 1.5 KB gzip,而不是把整个框架塞进首屏。

// 首帧前写入主题,避免闪白
document.documentElement.dataset.theme = resolved;

同一页里,静态的卡片留在 Astro 里,需要键盘导航的 Tabs 才升级成岛屿。这个边界如果一开始就划清楚,后面加功能时就不会慢慢退化成 SPA。

内容集合是骨架

文章、项目、收藏都定义成 zod schema,构建期校验。字段错了直接构建失败,而不是上线后才发现某篇的日期是字符串。

内容层的价值不在于「能渲染 Markdown」,而在于它让数据形状变成可执行的约定。

下一步

按迭代计划:首页 Dashboard → 博客列表与详情 → 关于页与响应式收口。每一轮都保持「可上线」状态,而不是攒到最后一起来。