旧版 Arcuid 不难看,甚至挺会唬人。打开先是一层 Loader,然后是粒子、3D 卡片、擦除画布,留言框里还藏着树洞。第一次给别人看,效果很好。
问题出在第二次。准确说,是我自己想回来写东西的时候。
发一篇文章要复制页面结构,旧内容没有好用的入口,想改导航还得担心顺手弄坏一段动画。首页什么都会,就是不太会当博客。
我拖了一阵,最后还是承认:这不是补几个按钮能解决的,得拆。
我先写了四条要求
没有先去比较十个框架。那样很容易看了一晚上,第二天依然不知道自己要什么。我只写了四条:
- 每篇文章都要有固定地址,日期、标签和摘要不能靠手填;
- 动画可以有,但不能挡着人读字;
- 发文章应该是写 Markdown,不是再复制一大段页面代码;
- 就算脚本没加载,文章、导航和基本操作也得能用。
写到这里,答案已经很窄了:静态生成,文章统一管理,脚本能少就少。
我为什么最后用了 Astro
博客文章写完以后,大部分时间不会变。构建时直接吐出 HTML 很合适,也不用让访客的浏览器替我干一遍拼页面的活。
Astro 的 Content Collections 还替我管住了 Markdown。标题、摘要、日期、标签少一个,构建就会报错。报错烦归烦,总好过上线以后才发现某篇文章没有日期。
const writing = defineCollection({
loader: glob({ base: './src/content/writing', pattern: '**/*.{md,mdx}' }),
schema: z.object({
title: z.string(),
description: z.string(),
pubDate: z.coerce.date(),
tags: z.array(z.string()),
}),
});
配置就是这么朴素。它不负责写文章,只负责在我粗心时把门堵住。
旧站那些怪东西,还是舍不得删
擦除交互、信号场和分层树洞我还是喜欢,所以没删,只是一起搬进了 Lab。首页不用每次都替它们演出,想玩的人自己进去。
技能百分比、没链接的项目卡片、点下去不知道会发生什么的下载按钮就算了。以前觉得它们能把页面填满,现在只觉得挡路。
项目页也不再报菜名。至少应该说清楚:
- 当时的问题是什么?
- 为什么这样设计?
- 哪些方案被放弃了?
- 最终结果如何验证?
先留条退路
旧版先固定在明确的 Git 提交上,新东西放进独立分支。这样改崩了也不用凭记忆找“昨天那个好像还能用的版本”。
等构建、链接、电脑和手机都看过,才让它顶掉旧站。这个步骤不酷,但我以后大概还会照做。
上线前我查了这些
- 文章、标签、归档、搜索、RSS 和 sitemap 全部可用;
- 首屏不再被强制加载动画阻塞;
- 键盘可以完成主要导航和搜索;
- 动画尊重
prefers-reduced-motion; - 树洞明确标注为客户端谜题,而不是安全保险箱;
- 每次发布都经过自动构建和浏览器检查。
现在它没以前那么爱抢镜了,但我终于可以只新建一个 Markdown 文件,然后认真想文章本身。
这就够了。至于五年以后还在不在写,五年以后再回来回答。
看到这里了
要不要说两句
评论还没加载,往下滚到这里才会去请求。