⚖️ This site was built with heavy AI assistance while I was learning · 本站由 AI 重度辅助搭建

技术架构与开发心得

📌 最新更新(v1.9.3)

修复 选课数据对照官方 Calendar 纠错:MAT354=Complex Analysis I、MAT357=Foundations of Real Analysis(先修改为 MAT257)、CSC311 先修边改为 CSC236
新功能 选课规划器新增「推荐学期计划表」:每年秋/冬/全年各上哪些课 + 核心学分小计,课程代码可点开详情
优化 选课规划器课程图改为自上而下的依赖树布局:按先修深度分层,箭头垂直向下,更像树状图
新功能 UofT 选课规划器(/courses.html):Math Specialist + CS Major 先修课程图(年份分栏 + SVG 箭头)、学位概览、逐课详情、可勾选清单
新功能 content/courses.json(官方 Calendar 数据)→ build-courses.js 数据流;Knowledge 下拉新增入口
优化 AI-ASSISTED 标注 + 「以官方 Calendar 为准」免责声明
新功能 Mission Control 仪表盘(/progress.html):学习日志连续天数、书本进度条、Codeforces 评分、ICPC/Putnam 倒计时
新功能 content/progress.json → build-progress.js 数据流;学习日志与进度脚本接入 sync 流水线;导航新增 Progress
优化 诚实政策下唯一指定的 AI-ASSISTED 激励项目,Projects 页已标注
新功能 网站定位重塑为「诚实的个人展示」:全站诚实声明横幅 + 知识库三分区(✍️ 我写的 / 🤖 AI 辅助参考库 / 👥 其他编辑)
新功能 四个新页面:About、Projects(手写与 AI 辅助项目分栏)、Posts(月度总结)、Log(每日学习日志)
新功能 学习日志流水线:learning-log/*.md → build-learning-log.js → log.html 渲染
优化 导航栏英文化(Home/About/Projects/Posts/Log/Knowledge/Tech);README、RULES、AGENTS 文档英文化
优化 .gitignore 新增 private/(个人文件永不进 GitHub);找回并修正 LICENSE

🛠️ 技术栈详情

点击任意技术展开查看完整引入历史和版本演进。

语言 HTML5 / CSS3 / JavaScript (ES5) v1.0

v1.0 (2026-06-03): 全站使用原生技术构建,无 React/Vue/Webpack。

决策:知识库交互模式是"浏览→点击→阅读",不需要 SPA 的实时协作能力。多页面架构(MPA)更适合内容密集型网站。零 npm 依赖消除版本冲突和供应链攻击风险。

约束:浏览器端 JS 使用 ES5 语法(var+function),确保不依赖转译器也能在所有浏览器运行。

运行时 Node.js 24 v1.0

v1.0 (2026-06-03): 51 行原生 http 模块实现静态文件服务器。不使用 Express/Koa。

决策:需求极简(静态文件+MIME映射+路径安全),不需要路由/REST API/中间件。原生模块零依赖,部署就是一个 `node server.js`。

v1.4 (2026-06-04): 添加 Cache-Control 头部:JS/CSS max-age=86400,HTML no-cache,图片 max-age=604800。

数学渲染 KaTeX 0.16 v1.0v1.4

v1.0 (2026-06-03): 引入 KaTeX CDN。选择 KaTeX 而非 MathJax——KaTeX 渲染速度约 10× 快、无 DOM 操作次数少、对内容密集型页面更友好。初始为同步 <script> 加载。

v1.4 (2026-06-04): 改为 <script> defer。问题:之前同步加载阻塞 FCP 约 300ms。改名后首屏不再等待 276KB 的 katex.min.js 下载。

v1.5 (2026-06-04): Katex CSS 改为 media="print" onload 异步加载,不阻塞渲染。

图表 Mermaid 10 v1.0v1.4

v1.0 (2026-06-03): 引入 Mermaid CDN 渲染流程图、时序图。初始为同步 <script>

v1.4 (2026-06-04): 改为 <script> defer。仅文章阅读器需要流程图,首屏不需要。defer 后不阻塞渲染。

v1.5 (2026-06-04): index.html 补充 mermaid defer(之前仅 knowledge.html 有 deferred)。

内容管理 Obsidian v1.2

v1.2 (2026-06-04): 引入 Obsidian 作为内容管理系统。Markdown ↔ {t,v} JSON 双向转换。

决策:比 WordPress 轻量、比直接写 JSON 直观。内容创作(Obsidian)和代码(VS Code)完全分离。通过 import-from-md.js / export-to-md.js 双向转换。

v1.5 (2026-06-04): content/ 目录重组为 homepage/knowledge/tech 三层,Obsidian 打开直观对应三网页。

AI 助手 opencode (DeepSeek) v1.0

v1.0 (2026-06-03): 使用 opencode + DeepSeek 作为 AI 编程助手。负责:写知识库文章内容(L1-L5 分层)、编写和调试脚本、代码审查和优化。

v1.2 (2026-06-04): 引入多 session 协作模式,编程主控+内容创作分工。AGENTS.md + RULES.md 分离上下文和规范。

v1.5 (2026-06-04): 建立防退化规则(上下文同步+板块状态同步+单一信息源),确保 AI session 始终基于最新项目状态。

部署 Cloudflare Pages v1.0

v1.0 (2026-06-03): Git push → Cloudflare Pages 自动构建部署。Output dir = public/。同时预配 Vercel vercel.json 作为备选方案。

版本控制 Git + GitHub v1.0

v1.0 (2026-06-03): 每完成一组改动 commit。版本号通过语义化版本管理。

v1.5 (2026-06-04): sync 后自动 commit + push。git-auto-commit.js 分析 git diff 生成 vX.Y.Z | 北京时间 | 类型: 描述 格式的 commit message。

CSS 架构 CSS Variables + BEM v1.0

v1.0 (2026-06-03): 全部颜色通过 :root CSS 变量定义,支持亮/暗双主题。类名用 BEM 约定(knowledge-card--soon、kc-icon)。

v1.4 (2026-06-04): Critical CSS 内联到 <style> 消除外部 CSS 渲染阻塞。style.css 转为 async 加载。

v1.5 (2026-06-04): Dark mode 配色从 slate 蓝灰改为暖灰 (#1a1a1a)。[data-theme="dark"] 块内联到所有页面确保即时生效。

JS 压缩 自定 minify.js v1.4

v1.4 (2026-06-04): 创建 minify.js:sync 时自动压缩所有 JS 文件。先保存字符串和正则字面量→去注释→压缩空白→还原。

决策:不引入 terser/uglify(零 npm 依赖原则)。自定 60 行 minifier 足够处理 ES5 代码。

结果:6 个 JS 文件总体从 1085KB → 779KB(-28%)。

缓存 Cache-Control v1.4

v1.4 (2026-06-04): server.js 响应头:JS/CSS max-age=86400(1天),HTML no-cache,图片 max-age=604800(1周)。

缓存穿透 ?v= query string v1.4.1

v1.4.1 (2026-06-04): 所有静态资源 URL 加 ?v=1.9.3。版本号变化→浏览器视为新资源→自动重新下载。

决策:选 query string 而非文件名 hash(如 app.a3f2.js)因为文件名 hash 需要构建工具,违反零依赖原则。query string 是纯 HTML 层面的改动,bump-version.js 用正则替换即可。

技术细节:bump-version.js 批量替换所有 HTML 中的 ?v=\d+\.\d+\.\d+ 为新版本号。

文章分层 L1-L5 五层递进 v1.0

v1.0 (2026-06-03): L1 初级(纯文字无公式)→ L2 中级(协议机制)→ L3 高级(算法数学)→ L4 专家(端到端工程)→ L5 世界顶尖(形式化证明)。

决策:同一主题同时服务初学者和研究者。每层独立 Markdown 文件,{t, v} JSON 格式存储。12 种内容块类型(p/h3/h4/code/note/list/table/math/viz/mermaid)。

内容块格式 {t, v} JSON v1.0

v1.0 (2026-06-03): 文章内容块用 {t: 'type', v: 'value'} JSON 格式存储为 JS 变量。浏览器直接读取无需 fetch/parse。

决策:避免运行时 JSON.parse 开销(1.3MB 数据直接以 JS 变量形式加载)。12 种块类型覆盖段落/标题/代码/公式/表格/图表/柱状图。

构建自动化 10 个 Node.js 脚本 v1.2v1.5

内容管道(Markdown → 网页):

Obsidian 写 .md → import-from-md.js 解析 Markdown → {t,v} JSON → articles*.js
                                                         ↓
content/messages/*.md → build-guestbook.js 读标题+正文+mtime → guestbook-data.js
                                                         ↓
                                            index.html 加载 .js → 浏览器渲染

v1.2 (2026-06-04): import-from-md, sync-cards, export-to-md, watch, bump-version, write-build-time。

v1.4 (2026-06-04): 新增 minify.js(去注释+压缩空白,总体 -28%);sync-cards.js 加 </html> 截断+div 平衡防护。

v1.5 (2026-06-04): 新增 build-site-config.js、git-auto-commit.js。sync 顺序修正(write-build-time 在 minify 前)。watch.js 补全 build-guestbook + minify + git-auto-commit,实现改完 3 秒自动同步→部署全流程。

npm run sync 完整流水线(10 步):

import-from-md      → Markdown → articles*.js(文章数据)
sync-cards         → meta.json → knowledge.html(卡片 HTML)
build-guestbook    → 留言 .md → guestbook-data.js(留言板)
build-homepage     → hero.json → hero-data.js(首页 Hero)
build-nav          → nav.json → 三页 HTML 导航注入
build-site-config  → 站点配置 JSON
write-build-time   → 写入构建时间戳
minify             → 压缩所有 JS(~28% 体积缩减)
git-auto-commit    → git add -A → commit → push → Cloudflare 自动部署

npm run watch 自动监听:递归监听 content/ 目录 → 文件变化 3 秒防抖 → 自动跑上面完整流水线 → 边写边预览 → 自动推送到 GitHub → Cloudflare 自动上线。零手动操作。

整体架构:纯文件转换、零数据库、零 API。内容创作(Obsidian)和代码(VS Code)完全分离,12 种内容块类型覆盖段落/标题/代码/公式/表格/图表。

📋 版本摘要

版本类型发布时间摘要
v1.9.3修复2026-06-13选课数据对照官方 Calendar 纠错
v1.9.2新功能2026-06-13选课规划器新增推荐学期计划表
v1.9.1优化2026-06-13课程图改为自上而下依赖树布局
v1.9.0新功能2026-06-13UofT 选课规划器(先修课程图 + 学位概览 + 清单)
v1.8.0新功能2026-06-12Mission Control 仪表盘 + Progress 导航 + 进度数据流水线
v1.7.0新功能2026-06-11诚实声明 + 知识库分区 + About/Projects/Posts/Log 四页 + 学习日志
v1.6.0新功能2026-06-11全文搜索 + 端口调整 + 删 Astro + 新手手册 + 层标题修复
v1.5.1严重2026-06-04 11:00卡片点击修复 + 管理面板 v2 + 知识库导航 + roadmap 修复
v1.5.0优化2026-06-04 05:09全面审查修复 + tech 页面 dark mode、统一导航
v1.4.1修复2026-06-04 04:45主页加载失败 + cache-busting
v1.4.0新功能2026-06-04 ~04:07技术页面、4篇补L5、知识库独立页、性能优化
v1.3.0新功能2026-06-04 ~01:55独立知识库页、搜索/PDF/进度/留言、9篇新文
v1.2.0修复2026-06-04 01:08修复重复level、统一标题、Obsidian工作流
v1.1.0优化2026-06-03 09:297篇补全层级、版本自动化
v1.0.0新功能2026-06-03 05:50初始版本 22 篇文章

📝 完整变更日志

v1.5.0 — 2026-06-04 05:09 北京时间

✨ 新功能
新功能 tech.html dark mode 支持 + 主题切换按钮
新功能 tech.html 进度条、回顶按钮、完整下拉导航栏
新功能 RULES.md 新增防退化规则 3 条
⚡ 优化
优化 AGENTS.md 重写为实际状态(44 篇、11 板块)
优化 变更日志技术细节可折叠(每版本一个 <details class="tech-details">
优化 技术栈详情改为可展开列表(每项一个 <details class="ts-item">
优化 Roadmap 内联脚本提取到独立 roadmap.js 文件
优化 知识库 TOC 自动覆盖所有板块分组
🐛 修复
修复 tech.html 版本摘要表列数对齐 + dark mode 缺失
修复 Roadmap 重复 probability-theory 条目删除
修复 Roadmap 点击无效 → 跳转到 knowledge.html
修复 RULES.md 底部残留碎片、双页面→三页面、板块表全部校正
修复 主题切换失效:inline dark CSS 恢复为页面底部内联脚本(非 DOMContentLoaded)
📋 技术细节

问题:AGENTS.md 严重过时(文章数 17 vs 实际 44、结构图缺 10+ 文件);主题切换代码从页面底部内联脚本移入 app.js 的 DOMContentLoaded 后闭包行为不一致导致手动切换失效。

方案:主题切换恢复为页面底部内联脚本(git 验证 v1.5 build 05:40 版本可用),app.js 不再处理主题;防退化规则用「上下文同步 + 板块状态同步 + 单一信息源」三条规则从源头防止文件过期。

技术细节:content/ 目录重组为 homepage/knowledge/tech 三层结构;4 个脚本路径更新(import-from-md.js, sync-cards.js, build-guestbook.js, build-site-config.js);RULES.md 新增 80+ 行(主题系统设计规范含架构图+18变量表+JS逻辑+调试指南);AGENTS.md 完全重写(131→215 行);sync-cards.js 加 </html> 截断 + div 平衡检查 + 主题代码一致性检查;git-auto-commit.js 自动生成版本号+北京时间+类型标签的 commit message;变更日志每版本加 <details class="tech-details"> 可折叠四要素;技术栈详情从 <table> 改为 <details class="ts-item"> 可展开列表。

结果:AGENTS.md 与实际状态一致(44 篇/11 板块);主题切换恢复手动+系统双模式;content/ 三文件夹对应三页面;sync 后自动 commit/push 到 GitHub。

v1.9.3 — 2026-06-13

🐛 修复
修复 选课规划器课程数据对照官方 Academic Calendar 纠正三处:MAT354H1 = Complex Analysis I(原误 Real Analysis I);MAT357H1 = Foundations of Real Analysis,先修 MAT257Y1(非 MAT354);CSC311 先修边改用 CSC236。程序学分要求核对全部正确

v1.9.2 — 2026-06-13

✨ 新功能
新功能 选课规划器在依赖树下方新增「推荐学期计划表」:4 年 × 秋/冬/全年网格,每学期列出建议课程 + 每年核心学分小计;课程代码可点开详情。树看依赖、表看时序,互补

v1.9.1 — 2026-06-13

⚡ 优化
优化 选课规划器课程图:从「按年份分栏」改为「按先修深度自上而下的依赖树」——根课在顶、CSC413 深度学习在底,箭头垂直向下,Math/CS 各自聚拢,读起来像一张树状图;卡片保留 Yn 年份标记

v1.9.0 — 2026-06-13

✨ 新功能
新功能 UofT 选课规划器(courses.html):Math Specialist (ASSPE1165) + CS Major (ASMAJ1689) 的先修课程依赖图——Year 1-4 分栏、SVG 箭头、点击课程看详情(先修/排他/官方链接)、可勾选要求清单(localStorage)、HBSc 学位概览
新功能 content/courses.json(官方 Academic Calendar 数据,每门课带 URL)→ scripts/build-courses.js → public/courses-data.js;接入 npm run sync;Knowledge 下拉新增「🎓 UofT Course Planner」
📢 发布说明
v1.9.0 是一个面向 UofT 学生的选课工具:把 Math Specialist + CS Major 的课程先修关系画成一张图,点开每门课能看官方信息,并能勾选已修课程。AI-ASSISTED 项目,顶部明确写了「以官方 Calendar 为准、要求每年变动」——给别人用的工具,准确性和诚实比好看更重要。

v1.8.0 — 2026-06-12

✨ 新功能
新功能 Mission Control 仪表盘(progress.html):连续天数(隔一天不断、隔两天才断,与日志守则一致)、书本进度条、Codeforces 评分卡(API 失败优雅降级)、倒计时
新功能 content/progress.json → scripts/build-progress.js → public/progress-data.js;与 build-learning-log.js 一起接入 npm run sync;导航第 8 页 Progress
📢 发布说明
v1.8.0 是诚实政策下唯一指定的 vibe-coded 激励项目:AI 一晚建成、明确标注、只为让每天的坚持看得见。规则写进了路线图:此类项目永远只有一个,且必须服务每日学习系统。

v1.7.0 — 2026-06-11

✨ 新功能
新功能 诚实声明横幅:全站每页顶部展示 "This site was built with heavy AI assistance while I was learning"
新功能 知识库三分区:✍️ Written by me(9 月起的手写笔记)/ 🤖 AI-assisted reference library(43 篇 AI 辅助文章,明确标注非本人作品)/ 👥 By other editors(预留)
新功能 about.html / projects.html / posts.html / log.html 四个英文页面;Projects 页手写项目与 AI 辅助项目分栏,带 BY HAND / AI-ASSISTED 标签
新功能 学习日志流水线:learning-log/YYYY-MM.md(每日三行 Did/Learned/Next)→ build-learning-log.js → public/log-data.js → log.html 渲染
⚡ 优化
优化 content/nav.json 重写为英文导航;build-nav.js 注入范围扩展到 7 个页面
优化 文档英文化:README.md、RULES.md、AGENTS.md、社交平台/README.md(中文原版保留在 git 历史)
优化 .gitignore 新增 private/;找回 GitHub 上的 LICENSE 并修正自相矛盾的「MIT 头 + 保留所有权利正文」
📢 发布说明
v1.7.0 把网站的定位说清楚了:这是一个「诚实的个人展示」。AI 建的东西全部明确标注(包括本站本身),我自己的成长由每日学习日志记录——三行一天,绝不间断两天。从这一版起,导航、文档、提交信息全部使用英文。

v1.6.0 — 2026-06-11

✨ 新功能
新功能 知识库全文搜索(knowledge.html):零依赖、支持中文,多关键词空格隔开 = AND 匹配;结果按匹配数排序,摘要带 L1-L5 层级标记和高亮,点击直达文章对应层级
新功能 《新手学习手册.md》六章:先跑起来 → 网页三件套 → 服务器原理 → 全文搜索案例研究 → 安全地修改代码 → 进阶路线 + 术语表
⚡ 优化
优化 端口调整:知识库 5000→3000,社交平台 3003→3001(5000 被 macOS 隔空播放接收器占用;3000/3001 是 Web 开发惯例端口);两个服务器支持 PORT 环境变量临时覆盖
优化 删除 Astro 实验版(知识库网站astro/,含误提交的 node_modules 等约 1.9 万个文件);.gitignore 补充 node_modules / dist / .astro / 数据库;根 server.js 移除 SQLite/SSE 死代码并补全中文教学注释
🐛 修复
修复 生成器层标题截断:import-from-md.js 误以为文件名匹配结果还带 .md 后缀而多切 3 字符,改为优先读取 md 文件首行完整标题,43 篇 × 5 层标题全部重新生成
严重 畸形请求(如 /?a=%zz)触发 decodeURIComponent 未捕获异常,整个 Node 进程退出 — 知识库与社交平台两个服务器均改用 try/catch 包裹的 safeDecode
修复 全文搜索高亮缺陷:多关键词逐个替换会破坏先插入的 <mark> 标签、搜 amp/lt/gt 误命中转义符内部 — 改为单次扫描 + 分段转义
修复 文档纠错:44 篇 → 实际 43 篇、8 个脚本 → 实际 12 个、AGENTS.md 过时路径与端口说法
📋 技术细节

问题:43 篇文章找内容只能靠卡片标题过滤;Lunr.js 等主流搜索库依赖空格分词,对中文几乎失效。同时 5000 端口在 macOS 上被「隔空播放接收器」占用,开发体验差。

方案:放弃分词索引库,用 JS 原生 indexOf 子串扫描——中文天然支持,全文约 65 万字符扫一遍 <5ms;索引懒构建(首次输入才建),不拖慢页面加载。代码以教学为目的书写,配合《新手学习手册》第 4 章作为案例研究。

技术细节:blockText/cleanText 把 p/h3/h4/note/list/table/code 各类内容块拍平为纯文本(代码块保留原样,标签清理只针对交叉引用 <a>);多关键词 AND 匹配 + 按命中块数排序;摘要截取关键词前 30 字后 50 字;高亮用单一交替正则一次扫描、命中与未命中片段分别 esc() 转义,规避标签自我破坏与转义符误命中两类缺陷(审查阶段以 Node 实测验证)。

结果:knowledge.html 顶部新增搜索框,输入即搜全部正文并直达对应层级;服务器对畸形请求免疫;层标题数据完整恢复(如 "Total Cost of Ownership" 不再被切成 "Owners")。

📢 发布说明
v1.6.0 的主角是全文搜索:不装任何库,在浏览器里直接搜 43 篇文章的全部 L1-L5 正文,支持中文和多关键词,点击结果直达对应层级。这个功能的代码本身就是教材——《新手学习手册》第 4 章逐步拆解它的实现思路。
仓库做了一次大扫除:删掉了与原生版脱钩的 Astro 实验版(连同误提交的近 2 万个 node_modules 文件),端口从 5000/3003 迁到 3000/3001,两个服务器修复了一个能被一条畸形 URL 击溃的崩溃缺陷。

v1.5.1 — 2026-06-04 10:00 北京时间

🔴 严重修复
严重 知识库卡片点击无反应 — app.min.js 被截断,minify.js 未彻底去除 // 注释导致闭合括号被注释掉
严重 首页 roadmap 完全不显示 — roadmap.min.js 头注释污染单行代码,function 从未执行
✨ 新功能
新功能 管理面板 v2 — 纯静态 Web CMS,6 Tab:概述/主页/导航/知识库/留言/同步。零数据库,全通过 server.js API 读写 content/ 文件
新功能 知识库阅读器 🗂️ 知识库导航面板 — 左侧边栏按板块列出全部 43 张卡片,点击即可切换到其他文章,无需关闭阅读器
新功能 构建流水线新增 build-homepage.js(hero.json → hero-data.js)和 build-nav.js(nav.json → 三页 HTML 导航)
新功能 server.js 内置管理 API — __api/stats, __api/articles, __api/article/save/new/delete, __api/nav/save, __api/hero/save
⚡ 优化
优化 端口迁移至 5000,server.js 从 71 行重写为支持完整 API 的架构
优化 三页 nav ☰ 移动端菜单补全,首页链接从 #hero(锚点)改为 /(首页 URL)
优化 技术页面更新构建流水线说明(7 步 → 10 步),与 package.json sync 脚本一致
🐛 修复
修复 导航编辑架构重构 — 从直接修改 public/ HTML 改为 content/nav.json 统一数据源,build-nav.js 注入三页
修复 watch.js 补全 build-guestbook + build-homepage + build-nav + minify + git-auto-commit 完整流水线
修复 AGENTS.md / RULES.md / SESSION_INSTRUCTIONS.md 全部同步到 v1.5.0 实际状态(版本号、端口、脚本数、内容路径)
修复 minify.js 新增安全步骤:恢复字符串后再次清除残留 // 注释,防止复发
修复 CSS 变量值同步 — RULES.md 中 --code-lang-bg、--hero-gradient、--shadow 的 dark 值与 style.css 一致
修复 .gitignore 添加 .DS_Store,清理仓库中的 macOS 元数据文件
📋 技术细节

问题:用户点击知识库卡片无反应(Console 报 SyntaxError: Unexpected end of input),首页 roadmap 完全空白。两者根因一致:minify.js 的 // 注释清除不彻底,残留注释在压缩后的单行 JS 中吞噬所有后续代码。

方案:1) minify.js 在恢复字符串后增加二次清除补救;2) roadmap.js 移除文件头注释避免被 minify 误处理;3) 重新生成所有 .min.js 文件。

技术细节:管理面板 v2 全部功能通过 server.js 内置 REST API 实现(GET/POST/DELETE),操作 content/ 目录文件和触发 npm run sync。知识库导航侧边栏在 app.js 的 DOMContentLoaded 中新增 readerCardsSidebar 组件,通过遍历 ARTICLES 数组按 section 分组渲染 43 张卡片,点击调用 switchToArticle() 关闭当前阅读器并打开目标文章。

结果:知识库卡片点击、首页 roadmap 恢复正常。管理面板可实现全部内容管理功能,无需离开浏览器。构建流水线从 7 步扩展到 10 步,覆盖主页 Hero 和导航注入。

📢 发布说明
v1.5.1 修复了知识库卡片点击失效和首页学习路线空白两个严重 Bug(minify.js 注释残留导致 JS 被截断)。同时上线了管理面板 v2,现在可以直接在浏览器里管理文章、导航、留言和首页内容,不用手动编辑文件。
新增 🗂️ 知识库导航面板,阅读文章时左侧可查看全部 43 张卡片,无需关闭阅读器即可快速跳转。构建流水线从 7 步扩展到 10 步(新增 hero.json 和 nav.json 构建),server.js 内置 REST API 驱动管理面板。所有内容编辑统一走 content/ 目录 → sync → GitHub → Cloudflare 自动部署。
🔜 社区平台开发中,基于 P2P 技术(PeerJS + WebRTC),支持文字群聊和 1v1 语音/视频通话,全部免费,即将上线。
43 篇文章覆盖 11 个板块:从硬件存储、ZFS、RAID 到 C++、Python、Go、Rust、算法、网络、数据库 —— 每一篇都试图回答「为什么」。

v1.4.1 — 2026-06-04 04:45 北京时间

🐛 修复
修复 主页加载失败——恢复 articles*.min.js 脚本引用
修复 hero 版本号不显示——build-info.js 未填充 heroVersion
修复 浏览器缓存过期——添加 ?v= cache-busting 到所有静态资源
📋 技术细节

问题:主页 hero 显示"⚠️ 内容加载失败",因为 articles*.min.js 脚本引用在代码重构中丢失;浏览器缓存旧版 JS/CSS 导致更新滞后。

方案:Cache-busting 用 URL query string ?v=X.Y.Z(而非 Service Worker 或 ETag),浏览器将不同版本视为独立资源自动重新下载。

技术细节:三页 HTML 的 JS/CSS URL 加 ?v=1.9.3 参数;bump-version.js 用正则批量替换所有 HTML 中的版本查询串;server.js 设 Cache-Control: max-age=86400 配合 cache-busting。

结果:用户无需手动清除缓存,版本更新后自动加载新代码。

v1.4.0 — 2026-06-04 ~04:07 北京时间(近似)

✨ 新功能
新功能 /tech.html 技术心得页面
新功能 4 篇文章补全 L5 层
新功能 知识库左侧固定 TOC、知识卡片独立为 /knowledge.html
⚡ 优化
优化 Critical CSS 内联 + JS 压缩 28% + Cache-Control 头
📋 技术细节

问题:首屏渲染等待外部 CSS 下载(FCP 慢);JS 体积 1085KB 拖慢 TTI;无缓存策略导致重复访问慢。

方案:Critical CSS 内联到 <style> 消除渲染阻塞;minify.js 去注释+压缩空白实现 28% 压缩;server.js 按文件类型设 Cache-Control。

技术细节:style.css 用 media="print" onload="this.media='all'" 异步加载;minify.js 保留字符串+正则后去注释压缩;Cache 分层: .css/.js 1天, .html no-cache, 图片 1周。

结果:FCP 从 ~800ms 降至 ~200ms;JS 体积从 1085KB 降至 779KB。

v1.3.0 — 2026-06-04 ~01:55 北京时间(近似)

✨ 新功能
新功能 知识库独立页、全局搜索框、PDF 打印按钮
新功能 阅读进度条 + 回顶按钮、L1-L5 阅读记录(localStorage)
新功能 交叉引用 [[article-id]] 语法、留言板系统
⚡ 优化
优化 6 个新板块目录 + 9 篇新增文章
📋 技术细节

问题:知识卡太多首页过长;跨文章引用只能手动复制链接;无用户反馈渠道。

方案:拆分为 /knowledge.html 独立页;[[id]] 在 Markdown import 时自动转为链接;留言板用 mtime 自动提取时间。

技术细节:import-from-md.js 正则 \[\[([a-z0-9-]+)\]\] 替换为 <a class="xref-link">;build-guestbook.js 从 content/_messages/ 读 .md 并用文件 mtime 生成北京时间。

结果:首页简洁化;跨文章引用自动可点击;留言板支持 Obsidian 编辑。

v1.2.0 — 2026-06-04 01:08 北京时间

🐛 修复
修复 多篇文章重复 level(hardware-storage 的 L1-L5 各两次)——脚本检测并合并
修复 文章标题不统一——统一为"中文 — English"格式
⚡ 优化
优化 拆分 AGENTS.md + RULES.md + Obsidian 工作流 + 8 个脚本
📋 技术细节

问题:多篇文章的 layers 数组中有重复 level(同一 level 出现两个 layer 对象),导致阅读器显示混乱;文章标题混乱(模板占位符、错误层级标签)。

方案:编写 Node.js 脚本遍历所有文章,检测重复 level 并合并 content 数组为单一 layer;用"中文 — English"格式统一 133 个层标题。

技术细节:合并策略: 同 level 的 content 拼接到第一个 layer,标题用 | 连接后选较长的去除模板标签。引入 AGENTS.md+RULES.md 分离项目上下文和规范约束。

结果:所有文章 L1-L5 唯一无重复;标题格式统一可读。

v1.1.0 — 2026-06-03 09:29 北京时间

⚡ 优化
优化 7 篇文章补全 L3-L5 缺失层级
优化 版本号自动化 bump + 构建时间改为 build-time.js 写入固定时间戳
📋 技术细节

问题:7 篇文章(Proxmox、UPS、ZFS DMU、数据生命周期、混沌工程、SPDK、下一代存储)只有 L1-L3 或 L1-L2,缺 L4 和 L5 层。

方案:补写 14 个 L4/L5 层,每层约 8-25KB 内容。引入 bump-version.js 实现 semver 版本号自动化。

技术细节:bump-version.js 同时更新 package.json 和 index.html 版本字符串;构建时间从浏览器 Date() 改为服务器端 write-build-time.js 写入北京时间。

结果:7 篇文章达到完整 L1-L5;版本号可一键升级(major/minor/patch)。

v1.0.0 — 2026-06-03 05:50 北京时间

✨ 新功能
新功能 22 篇存储与硬件知识库上线 + L1-L5 阅读器 + 主题切换
📋 技术细节

设计决策:选择原生 HTML/CSS/JS 无框架构建。不做 SPA 因为知识库交互模式是"浏览→点击→阅读"而非实时协作;零 npm 依赖消除维护负担和供应链攻击风险。

技术栈:Node.js 原生 http 模块 51 行实现文件服务器(含 MIME 映射、路径遍历防护);KaTeX CDN 数学公式渲染;Mermaid CDN 流程图;CSS 自定义属性实现亮暗主题切换。

文章系统:L1-L5 五层递进(初级→世界顶尖),每层独立 Markdown 文件,{t, v} JSON 格式存储为 JS 变量供浏览器直接读取。

结果:22 篇文章上线,覆盖 NAS、ZFS、RAID、硬件介质、文件系统 5 个主题领域。