这是这个站的第一篇日志。
为什么手写
三年前我会直接 npx create-next-app,然后花两天删掉一半用不上的东西。今年我改了个做法:先想清楚这个站要做什么,再决定用什么做。
它要做的只有四件事:
- 放文章
- 好看
- 加载快
- 十年后还能构建
前三条是产品需求,第四条是时间需求。第四条直接排除了大部分框架——不是它们不好,而是「依赖会腐烂」。一个 2026 年的 node_modules,在 2030 年大概率装不上。
所以这个站的构建器只有 400 行 Python,只用标准库。它的生命周期只取决于一件事:Python 还在不在。而在可见的未来里,它都在。
这个站要记录什么
大致三类:
- 后端的坑:Go、Gin、GORM、事务、鉴权、并发,那些文档里不写但会让人熬夜的部分。
- 前端的手感:动效、排版、性能预算,怎么在 16.7ms 里讲清楚一件事。
- 构建与工程:怎么用最少的工具把事情做完。
不写「XX 入门教程」——那种内容有更好的地方去写。这里只写自己踩过、并且爬出来的东西。
一点审美上的坚持
赛博朋克在视觉上常被简化成「紫粉色 + 霓虹灯 + 汉字」。那是它的表皮。
它的内核其实是:高技术,低生活。信息过载,但个体依然要在噪声里发出自己的信号。
对应到这个站的设计上,就是两条规则:
一,装饰必须让位于可读性。正文的行高、字号、对比度优先级永远高于特效。 二,动效必须为信息服务。它告诉你「这里可以点」「这里刚更新」,而不是「看我多会写 CSS」。
所以你会看到:扫描线和噪点很轻,故障效果每 6 秒才爆发一次,粒子背景的透明度只有 0.85,正文区域没有任何背景动效。
技术栈
| 层 | 选择 | 原因 |
|---|---|---|
| 构建 | Vite + markdown-it | 4 个构建期依赖,产物零运行时 |
| 样式 | 原生 CSS(~1400 行) | 自定义属性已足够,不需要预处理器 |
| 交互 | 原生 JS(~8KB,压缩后更小) | 没有任何必须用框架的场景 |
| 动图 | SVG + SMIL | 6KB 顶 2MB 的 GIF |
| 部署 | 任意静态托管 | dist/ 拖哪都能跑 |
接下来
- 评论接 Giscus,不自己造
- 文章页加「相关阅读」,用标签交集算
- 给代码块加上行号与折叠(超过 60 行时)
- 把配色抽成主题,试试毒性绿版本
如果你也在做一个「不必要但很想做」的项目,希望这里的某段代码能帮你省下几个小时。
信号已建立。
// COMMENTS
评论尚未启用 · 见下方说明