Notes

把个人网站做成一个可验证的静态系统

记录“烷氮烂笔”如何从公开决策基线走到可构建、可检查、可复现的静态网站原型。

为《把个人网站做成一个可验证的静态系统》确定性生成的文章图形
图形生成说明
函数家族
orthogonal-bezier
简化公式
y(t)=mix(qᵢ,qᵢ₊₁,smoothstep(t))
短哈希
ea95444c2dc2
生成器版本
2

这是由文章身份与结构生成的装饰图形,不是数据可视化。

下载 SVG下载生成清单

个人网站很容易从“写点东西”扩张成一组没有边界的愿望:后台、评论、订阅、统计、搜索、动画和部署系统似乎都应该立刻出现。这个项目选择先做相反的事——写下公开决策,缩小首版范围,再用可重复的检查证明原型确实符合这些决定。

先确定不做什么

首版没有数据库、CMS、评论服务或邮件发送服务。文章以 Markdown 保存,构建后成为静态页面;浏览器端代码只负责主题切换、本地搜索和必要的界面交互。

这个边界带来三个直接结果:

  • 正文即使没有 JavaScript 也应当可读;
  • 公开仓库不需要持有部署写入凭据;
  • 内容和程序的输入可以在构建期集中校验。

预留未来能力不等于提前引入未来依赖。等一个真实需求出现,再根据它重新判断,比为假想场景维护后端更可靠。

内容也是受约束的输入

一篇文章不只是正文文件。它还需要稳定的文章标识、ASCII 固定链接、标题、摘要、日期、状态和标签。封面与数据下载若存在,也必须引用约定目录中的本地资源,并提供必要的来源、口径、许可和摘要信息。

文章正文不接受任意脚本、任意 HTML 或运行时表达式。需要交互时,正文只能引用预先实现、参数经过 Schema 校验的受控组件;复杂工具则使用独立页面。这样可以让写作保持接近普通 Markdown,也让公开内容的执行边界足够清楚。

让每篇文章拥有可复现的图形

项目会为已公开文章生成一张函数图形。它由三类输入共同决定:永久文章标识固定视觉身份,标题和内容结构影响有限参数,规范化正文的 SHA-256 控制局部细节。

生成过程只调用内置函数族,不求值作者输入的公式。构建产物包括静态 SVG、社交分享 PNG 和记录采样点与摘要的清单。正文变化会留下可比较的结果,但不会把装饰图形伪装成数据可视化。

草稿阶段只参与文章标识的唯一性检查,不生成公开图形,也不进入页面、搜索或 RSS。完成发布审核后,构建器才会为它创建静态产物并加入公开索引。

“可以构建”还不等于完成

目前的验收链包含内容安全检查、生成器测试、类型检查和生产构建。构建器在输入无效时失败关闭,并在替换生成目录失败时恢复上一份有效产物。草稿与已发布内容的隔离也需要从文章路由、栏目列表、本地搜索、RSS 和生成图目录分别验证。

这些检查证明的是当前实现满足当前约束,而不是设计已经永久正确。字体、最终色值、浏览器范围、公开镜像和生产发布流程仍需要独立决策与验证。

下一次判断从结果开始

这个原型最重要的产物不是某个框架组合,而是一条可回放的路径:先记录假设和边界,再实现最小闭环,然后让测试、构建结果和实际阅读体验修改原来的判断。

如果后续文章表明现有内容模型或交互边界不够用,应该根据具体失败调整它们。反过来,如果静态方案持续覆盖真实需求,就没有必要仅为了“完整”而增加运行时系统。