✎ 笔记
把博客拆回两百行脚本:静态建站与手绘纸面笔记
- 博客
- GitHub Pages
- 静态站点
以前我也折腾过重型博客框架。装主题、配插件、调打包器,头两天兴致勃勃,等隔了半年想补一篇笔记时,npm install 先报一屏依赖冲突。修完构建配置,原本想写的那点东西早就没兴致写了。
这次重做 lxfight.github.io,我给自己的底线很明确:隔一年不碰,打开仓库依然能在一分钟内把文章发出去。
为什么不用现成框架
个人博客的核心需求其实极窄:把 Markdown 转成 HTML,按日期排个序,再生成首页和列表页。为了这点事引入一整套前端运行时、几十个插件和复杂的客户端水合,长远看全是在给自己攒技术债。
我干脆把构建逻辑收敛成了一个单文件 build.js,依赖只留三样:
front-matter读文章头部的元数据marked把正文转成 HTMLhighlight.js在构建阶段直接完成代码高亮
加起来两百来行代码,没有任何魔法。模板就是原生 HTML 加上 {{title}}、{{content}} 这样的纯文本占位符,跑一遍 node build.js,不到一秒就能吐出全站静态文件。没有客户端路由,也没有打包产物的 hash 迷宫,丢到 GitHub Pages 上就能直接跑。
做成一本速写本,而不是 SaaS 落地页
既然代码底座已经够轻了,外观上我也想避开那种千篇一律的“毛玻璃 + 大圆角 + 霓虹渐变”。技术笔记本来就更接近草稿纸上的涂写和圈注,索性整站都做成了铅笔手绘风(Sketch Style)。
整站样式全部收在根目录的 styles.css 里,靠几条硬约束撑起纸面感:
- 拒绝纯白背景(
#ffffff看久了晃眼),默认用冷调米白纸#faf8f3,另外配了暖米黄、沙色、蓝图纸、黑板等 8 套纸色,改一下<html>上的data-palette就能换纸。 - 边框一律用
2px dashed的铅笔虚线,卡片和按钮做成不对称的小圆角,悬停时带一点-1deg的轻微歪斜,模拟手绘线条的不稳定感。 - 强调色只用来画波浪下划线和虚线框,绝不直接拿高饱和红黄蓝绿去当文字颜色,保证在深浅纸面上都有足够的阅读对比度。
/* 铅笔手绘卡片:纸面底色 + 虚线描边 + 错位笔触阴影 */
.sketch-box {
background-color: var(--c-paper);
border: var(--bd);
border-radius: var(--r-card);
box-shadow: var(--shade-md);
}
这里还踩过两个挺有意思的浏览器渲染坑:
第一,最早我想在 box-shadow 里直接塞 SVG 排线图案,结果 Chrome 和 Firefox 会静默丢弃带 url() 的阴影声明,不报错也不渲染。最后改成了两段错位叠加的半透明铅笔灰笔触(1px 1px 叠 4px 4px),反倒更像铅笔侧锋涂出来的阴影。
第二,卡片加上轻微旋转(rotate)之后会创建新的层叠上下文,原本用 ::after { z-index: -1 } 垫在底下的排线纹理会被直接顶到正文上方盖住字。把这类纯装饰背景克制在聚焦态和独立色带里,版面才彻底干净下来。
为了防止以后改样式时不小心破戒,我还顺手写了个 sketch-check.js,每次构建完自动扫一遍 CSS 和 HTML——一旦混进渐变、毛玻璃、纯白背景,或者哪套纸色主题的文字对比度跌破 WCAG AA(4.5:1),脚本直接报错退出。
这个本子打算记些什么
把建站流程砍到最简,终归是为了把精力留给正文。接下来这里主要会记三类东西:
- AI 插件与记忆系统:围绕 AstrBot 生态做的插件实战,尤其是 RAG、长期记忆沉淀和工具调用里踩过的工程坑。
- 小而稳的工程工具:像基于 Deno 的 GitHub 代理服务、桌面端桥接客户端这类解决自己日常痛点的小项目。
- 排障与取舍复盘:少写空泛的概念科普,多写“当时遇到了什么约束、试过哪几种方案、最后为什么选了现在这条路”。
代码跑通只是第一步,把来龙去脉理清楚写下来,才算真正消化成了自己的东西。
如果你正好也在折腾类似的方向,或者对某篇笔记里的实现有不同看法,欢迎随时来 GitHub (@lxfight) 找我交流,也可以直接发邮件到 contact@lxfight.com。