回到文章列表

Arcuid V2

Arcuid V2:旧首页挺帅,但我还是把它拆了

粒子、画布和 3D 卡片一个不少,唯独发文章很麻烦。这个问题忍久了,我决定重搭。

旧版 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 文件,然后认真想文章本身。

这就够了。至于五年以后还在不在写,五年以后再回来回答。

看到这里了

要不要说两句

评论还没加载,往下滚到这里才会去请求。