平时学的东西不少,但大多停在「收藏夹吃灰」的阶段。笔记散落在各种软件里,时间一长自己都找不到;做过的小项目躺在硬盘和 GitHub 上,除了简历里的一行字,没地方给人看;追番的记录在 Bangumi,踩过的坑留在聊天记录里。
所以我想要一个完全属于自己的地方:学习、踩坑、做小东西的过程能沉淀下来,项目能摆出来,兴趣也能装进去。域名是我的,数据是我的,长什么样我说了算:不用管平台改规则和限流,也不用担心服务哪天关停,一段记录跟着消失。
第一版是 Vue 写的,然后推倒了#
最早那版用 Vue 手搓。搭到一半发现真正的阻力不在技术,而在工作量:我想要的不是一个「能显示文章的页面」,而是一整条内容管线:Markdown 渲染、代码高亮、标题锚点、标签归档、搜索、RSS、评论、部署。每一样都得自己造轮子;等轮子造得差不多,最初的动力也消耗完了。
于是推倒重来,换成 Next.js(App Router)+ 全静态导出。这次把决策收成一条:整站就是一堆静态文件,没有 API 路由、没有数据库、没有运行时。git push 之后 CI 构建、生成搜索索引、部署上线,全程没有服务器参与。
好处很直接:托管不花钱(GitHub Pages 对公开仓库免费);没有服务器,也就没有可被攻击的面;静态文件交给任何一家托管都能跑,国内访问不理想还能整体搬到 Cloudflare Pages,代码不用改。
代价也有:所有「动态」能力都得找静态友好的方案,选型时绕了些弯路。
选型:每一项都写下了理由#
- 评论用 giscus:数据存在仓库的 GitHub Discussions 里,不用额外维护服务端。之前考虑过 Waline 和 Twikoo,功能更全,但要为一个评论区再养一个后端,跟全静态的初衷冲突。
- 图片放 Cloudflare R2:自定义域直连,出口流量免费。
- 追番数据直连 Bangumi 公开 API:实测 CORS 放行、并发不限流,不需要代理层。
- 搜索用 Pagefind:构建期对产物生成静态索引,没有服务端。
框架之外的几个决定:
- TypeScript 开 strict:类型写清楚,构建期就报错,比线上出问题强;
- Tailwind 4 管设计 token,配色、字号、圆角改一处全站生效;
- 组件全部自研,只在弹窗这种对无障碍要求高的地方引入 Radix 的无样式原语;
- 动效交给 GSAP,滚动入场、极光漂移都尊重系统的「减弱动态效果」偏好;
- 图标用 Iconify + MDI 按需生成,不背一整套图标库;
- 内容管线是 unified(remark / rehype),锚点、高亮、图表占位都能插拔;
- 代码高亮用 Shiki 双主题,亮暗两套在构建期就烘进 HTML,切换不会闪。
设计:天空和夜空#
设计方向在动工前就定了:浅色为主、蓝白基调、柔和阴影、圆润造型,带一点 ACG 气质。给 AI 的关键词只有两个——天空、夜空。
最后落地的方案叫 Soft ACG Fusion:玻璃卡片、极光渐变背景、萤火粒子,主色是天蓝、樱粉、暮紫。二次元素材克制使用,氛围藏在背景里,排版和交互才是主角。白天是晴空,晚上是星夜,两套主题共用同一套 token。
还有一条是全站的硬性要求:无障碍不是可选项。对比度、键盘可达、焦点可见、动效尊重系统偏好、图片必须有替代文本。这些在设计走查里是关卡,不是加分项。
和 AI 结对做完的#
这个站是我和 AI 一起做出来的,从第一行代码到上线。分工大致是:我提需求、定方向、做决定,并且盯着审美和质量;调研、写代码、走查细节、整理文档由 AI 执行。
这个过程里我觉得最值钱的不是「写得快」,而是决策记录。现在记了 21 条决策,每条都写清结论、备选方案和为什么这么选。写下来的过程会逼着模糊的想法变清楚;后面不管是回头查,还是跟 AI 对齐,都有据可依。这篇文章里提到的每个选型,背后都有一条编号。
另一个感受:AI 时代做个人项目,瓶颈从「会不会写代码」变成了「能不能把需求讲清楚」。AI 几分钟就能实现一个组件,但这个组件该不该存在、长什么样、交互顺不顺手,还是得有人一关一关地看。工具越强,判断越值钱。
明确不做的#
下面这些在决策记录里写死了,主要为了防止自己以后手痒:
- 不做用户系统和登录
- 不做多语言
- 不做友链页面
- 不做访问统计
- 不做实时聊天和弹幕
- 不做打赏
接下来#
- 博客本身继续打磨:动效细节、性能、移动端体验;
- 文章继续写:建站过程、前端学习的笔记;
- 实验室继续加东西:学到新技术,先做成能跑的小玩意放上去;
- ACG 橱窗跟着 Bangumi 的记录自动更新。
更新节奏不固定。想看更新可以用 RSS,想说什么就在文章下面留言,评论用 GitHub 账号就能发。
