news 2026/8/21 6:49:59

手机优先的 Personal Ledger:把账目、学习和复盘放到同一个入口

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
手机优先的 Personal Ledger:把账目、学习和复盘放到同一个入口

手机优先的 Personal Ledger:把账目、学习和复盘放到同一个入口

很多个人记录工具只能解决一个问题:记账、打卡或写笔记。

真正使用一段时间后,我更想要的是一个轻量的统一入口:今天花了什么、学习投入了多久、某个项目有什么进展,都能用同一套方式留下来,月底还能重新查到。

因此,我整理了一个面向个人使用的自托管项目:Personal Ledger

它采用FastAPI + SQLite,前端是静态页面,重点放在手机操作。本文不只介绍技术选型,也直接展示项目的实际界面和一条完整使用路径。文中的界面图均使用移动端390 × 844视口截取,示例数据已经脱敏。

先看实际使用:一句话,记录两类内容

打开“记录”页后,核心交互只有一个输入区。

例如输入:

今天午餐 32 元,晚上听英语 30 分钟

后端会把一句话拆成一笔消费和一条学习积累,并在页面中列出解析结果。金额、日期和分类仍然会显示出来,提交前后都可以核对。

从手机上看,这个流程可以概括为三步:输入、提交、检查结果。

如果内容比较明确,项目优先使用本地规则处理;复杂文本可以接入可选的模型服务,但模型只负责辅助整理,最终数据仍由用户确认。

历史页:先看总量,再定位分类

历史页适合回答“这个月大概花了多少”这类问题。

页面会给出支出、收入和结余,并用趋势图展示每天的变化。下面的分类汇总可以快速看到餐饮、生活开支、交通和数码服务等项目的金额。

点击分类后,还可以继续查看对应的明细。这样做的好处是:先用总量判断整体情况,再用明细解释数字,而不是只留下一个月底总额。

账目记录保存日期、标题、金额、收支方向、分类、备注和货币单位。项目另外维护交易标签,用于支持更细的语义筛选,同时不改变原始金额和标题。

本月页:把日历当成记录索引

如果想知道某一天发生了什么,本月页会更直观。

它把有记录的日期标记在月历上,选中日期后显示当天明细。对于经常需要回看账目的场景,日历比连续滚动一长串列表更容易定位。

本月页还保留本月支出和结余两个关键数字。用户可以先看月度状态,再点击某天检查具体记录。

Ac 页面:记录时间,而不只是记录金额

很多工具能够回答“花了多少钱”,却很难回答“这个月投入了多少时间”。

项目用accumulation_entries保存学习、阅读、听书、课程、实践项目、笔记复盘和运动等积累记录。一条记录包含:

  • 日期、标题和活动类型
  • 时长、页数和备注
  • 主领域、子领域和标签

例如,英语听力会归入“英语语言 / 听力”,羽毛球会归入“健康运动 / 羽毛球”。同一天、同一活动和同一领域的重复记录可以合并累计,减少碎片数据。

Ac 页面提供日历、当天明细、活动方式汇总、领域汇总、每日时间线和月度占比。月末复盘时,可以看到时间主要投入在编程、运动、英语还是阅读上。

Id 页面:把复盘从长文本变成可检索记录

项目复盘、灵感和生活记录通常不是结构化表格,而是一段完整文本。

Id 页面会按月份展示这些记录,内容包括标题、正文摘要、日期和标签。SQLite 的 FTS5 全文检索表负责建立索引,后续可以结合关键词、主题和时间范围重新找到内容。

知识记录采用“先整理、后确认”的流程:

  1. 输入一段复盘或口述内容。
  2. 应用生成标题、主题、事件和标签等结构化草稿。
  3. 用户检查并修改草稿。
  4. 确认后再写入知识库。

这一步很重要。模型或规则的分类结果不应该直接覆盖用户数据,先让用户确认,才能兼顾自动化和可控性。

这个项目的核心设计

1. 一个入口,多个数据结构

输入入口保持简单,但后端并不把所有内容塞进一张表。

  • 账目进入transactions
  • 学习和运动进入accumulation_entries
  • 复盘内容进入knowledge_notes

统一入口降低了记录成本,分开的数据结构又保留了各自的查询和展示方式。

2. 先判断意图,再选择处理流程

分析页会区分几类输入:

  • 消费入库,例如“今天午餐 32 元”
  • 消费查询,例如“这个月餐饮花了多少”
  • 积累入库,例如“昨天阅读 40 分钟”
  • 积累查询,例如“本月运动投入了多久”
  • 知识整理,例如“总结一下这周项目进展”

不同意图对应不同的解析器和 API。这样可以避免把“查询问题”误当成一笔新记录。

3. 规则优先,模型可选

明确的金额、日期、时长和活动类型优先由本地规则处理;只有复杂文本才需要模型辅助。

模型服务不可用时,应用仍能完成基础记录。对于个人工具来说,稳定的基础路径比所有功能都依赖外部服务更重要。

技术实现:FastAPI、SQLite 和静态前端

后端使用 FastAPI,并用 Pydantic 定义请求和响应结构。当前主要接口包括:

  • POST /api/records/ingest:混合记录入库
  • GET /api/transactions:查询账目明细
  • GET /api/monthly-summary:读取月度汇总
  • GET /api/accumulation/summary:读取学习与积累统计
  • POST /api/knowledge/summarize:生成知识草稿
  • POST /api/knowledge/drafts/{draft_id}/confirm:确认知识草稿
  • POST /api/analyze:执行账目、积累或知识分析

SQLite 适合这个项目的原因很实际:部署只需要一个数据库文件,备份可以直接复制文件,容器重建时也能通过目录挂载保留数据。

数据库连接开启了外键约束、WAL 模式、同步写入和忙等待时间。知识检索使用 SQLite FTS5 虚拟表,交易标签和积累批次则用于保留更完整的处理信息。

本地运行与 Docker 部署

本地运行需要 Python 环境:

python-mvenv .venv..venv/bin/activate pipinstall-rrequirements.txt uvicorn app.main:app--reload

生产环境可以使用 Docker Compose:

services:ledger:build:.ports:-"18888:8000"environment:APP_DB_PATH:/data/app.dbvolumes:-/srv/personal-ledger/data:/data

部署时建议把应用代码、数据目录和备份目录分开管理。SQLite 文件放在宿主机持久化目录,容器更新不会直接删除数据。

项目还提供数据库备份脚本,可以按天生成快照并保留固定周期。涉及个人消费和复盘内容时,服务器访问控制、备份文件权限和模型服务密钥都需要单独配置。

适合哪些人

这个项目更适合:

  • 想把个人账目、学习和运动记录放到同一个页面的人
  • 希望自己部署和维护数据的人
  • 想学习 FastAPI、SQLite、FTS5 和 Docker Compose 的开发者
  • 需要一个可以继续二次开发的个人效率工具

它的边界也很明确:这是单用户、自托管的个人记录应用,不是多人财务系统,也不替代专业财务、医疗或投资工具。

结语

我做这个项目的出发点,不是再增加一个复杂平台,而是让日常记录更容易坚持。

手机上输入一句话,应用负责把它整理成账目、积累或复盘;需要回看时,用历史、月历、Ac 和 Id 四个入口分别查看。

如果你也在多个工具之间分散记录生活和学习,可以从一个小型自托管应用开始:先保留最常用的记录,再根据真实习惯逐步扩展。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/21 6:47:06

后缀A代表什么?Clair Brothers Asia 系列产品定位说明

在 Clair Brothers Asia 的产品命名体系中,“-A”是出现频率最高的字符,也是市场认知分歧的焦点之一。不少从业者误将其认定为全新迭代产品的升级标记,实则不然。对此,品牌方面的定位十分明确:A 后缀仅代表亚太本地化场…

作者头像 李华
网站建设 2026/8/21 6:46:06

写字楼租赁管理系统推荐:甲级写字楼如何实现跨区域高效管控

一、写字楼租赁管理的四大核心痛点痛点一:跨区域管理半径大,总部管控力不从心许多大型企业的写字楼物业分布在多个城市,但租赁管理由总部统一负责。以国信证券为例,其可租赁甲级写字楼物业分布在北京、上海、深圳、大连、义乌等城…

作者头像 李华
网站建设 2026/8/21 6:43:39

企业招聘系统权限管理实战:RBAC模型与数据安全设计

1. 企业招聘系统权限管理的核心挑战在开发企业级招聘系统时,权限管理往往是最容易被低估却又至关重要的模块。我经历过多个招聘系统项目,发现权限问题通常会在系统上线3-6个月后集中爆发——当HR部门开始抱怨"销售总监能看到所有候选人的薪资信息&q…

作者头像 李华
网站建设 2026/8/21 6:43:04

华为OD机试Java实现核酸检测统计系统

1. 项目背景与核心需求华为OD(Huawei Outsourcing Development)机试是华为技术有限公司面向外包开发人员设计的技术能力测评环节。这类机试通常要求候选人在限定时间内完成特定功能的编码实现,既考察基础编程能力,也检验对实际业务…

作者头像 李华
网站建设 2026/8/21 6:42:54

SpringBoot+Vue评论组件设计:从状态机到实时推送的工程实践

最近在重构一个老项目,发现评论模块的代码已经乱到没法看了。前端是各种硬编码的 DOM 操作,后端是十几个 if-else 嵌套的校验逻辑,加个表情功能都得改三四个文件。这让我想起一个很常见的现象:很多开发者,包括几年前的…

作者头像 李华