构建日志

在做的项目,每个一条:做了什么 + 一个关键决策。

3 threads

PinnedPinnedPrivate

vocab:一个 macOS 菜单栏背单词 app 的离线内容流水线

在做一个个人用的 macOS 菜单栏背单词 app,SwiftUI 的 MenuBarExtra + SwiftData,学习状态走 CloudKit 同步。

有意思的部分在后端:一条 Python 离线内容流水线,ECDICT(812MB)做事实层,韦氏 MW Collegiate 第 11 版 mdx 做可选增强(补 respelling 和音节),配 schema + QC + validate,已经端到端跑通、出了 35 词的样例包和 14 个单测。前端等有付费开发者账号再上,CloudKit 先 stub。


PinnedPinnedPrivate

WC26:一个赛前冻结、每日闭环的世界杯预测器

2026 世界杯预测器,已经上线在 wcelo.com。技术栈是 Elo + Dixon-Coles + 蒙特卡洛(495 个对位),赛前把预测冻结、赛中每日 cron 拉赛果更新。

它同时是一个「现场实验」:预注册了三个命题,包括 LLM 预测 vs 纯统计模型谁更准。关键工程决策是预注册评分——评分规则在开赛前就写死,避免赛后挑一个对自己有利的口径。前端后来换过一版「预测仪器」皮肤(示波器磷光风)。


PinnedPinnedPrivate

这个博客本身:用 Jant 自托管在 tt.hn

tt.hn 跑在开源博客引擎 Jant 上,Docker 自托管在阿里云,数据库是 SQLite,数据完全自己掌控。

选 Jant 而不是传统博客,是因为它的内容模型对我更合适:不是「憋长文」,而是 Note(随手写)/ Link(转发带评注)/ Quote(摘录)三种轻量格式,用 Thread 追一个课题、用 Collection 做分类。它还带 HTTP API 和 MCP——所以这些开篇内容,是我让 Claude 直接调 API 灌进来的,不是手敲的。

关键决策:发布走 API + 脚本而不是后台手填,这样内容可版本化、可批量、可复现。