PRODUCT + ENGINEERING · CASE STUDY 01

共同生活的账,
也值得认真设计。

一个从真实合租需求出发的小型全栈项目。迁移旧账、简化分摊、自动记房租,并把数据正确性、多人协作和可维护性落实到代码里。界面参照 Kittysplit,优先展示成员余额,账目按需查看。

TypeScriptREST APISQLite / D1Drizzle migrations乐观锁与事务幂等定时任务GitHub ActionsR2 对象存储多币种 / Finances 来源
01 · REAL DATA

344 笔历史记录,逐人对账

317 笔支出、27 笔还款,总支出 $35,241.21。导入保留日期、付款人、分摊与备注。姓名由 zhao 修正为 wenchao zhang,原成员 ID 与账务归属保留。

02 · MONEY CORRECTNESS

把半分钱留到结算时处理

总金额使用整数分;分摊保留 microcent 精度。每笔分摊严格守恒,汇总后统一舍入,确保所有人的余额之和为零。

03 · COLLABORATION

多人编辑,也不会相互覆盖

每次读取带有 revision。写入在事务中保存历史快照并校验版本;旧版本返回 409 Conflict,界面保留草稿并提示刷新核对。

04 · AUTOMATION

房租每月记,重复运行只记一次

服务器使用纽约时区判断到期月份,以 rent-YYYY-MM 为稳定 ID。GitHub Actions 按月触发,云端任务核对并重试失败;已删除的自动记录不会被重新创建。

05 · FILES & CURRENCIES

原币记账,收据随单保存

17 种原币统一折算 USD,保存后锁定汇率。照片/PDF 写入 R2,D1 校验附件归属;重试上传不会重复覆盖。

06 · FINANCE PROVENANCE

让账目保留可核对的来源

从 ChatGPT Finances 导入文件,预览匹配旧账或选择新消费。只公开选中来源,交易哈希避免重复关联。当前为显式导入,尚未提供网页银行直连或自动同步。

常见后端技术,用在具体问题上

问题实现验证方式
跨设备共享数据TypeScript API + D1 持久化写入后重新读取
并发更新丢失revision 乐观锁 + 原子事务同版本并发,一次成功、一次 409
账务舍入误差整数计算 + 聚合后舍入原表对账与资金守恒测试
任务重试与漏跑稳定 ID + 到期月份计算月界线、幂等与补记测试
变更容易回归API 契约 + 数据迁移 + CINode 测试、类型检查与接口检查

5 分钟项目演示

1展示历史导入后的总额和个人余额,说明精度处理。
2点“记一笔”默认买菜,由 xu 和 ge 均分;切换“水电杂费”可核对三人分摊。
3用两个窗口同时编辑,演示冲突提示如何保护已保存的数据。
4打开房租规则和自动任务测试,解释时区与幂等。
5展示 API、SQL 迁移和测试;说明当前小规模账本聚合存储的取舍。