跳到正文
Hacker News· visujosh·· 6 天前AI 评分12

我用 Codex 和 MCP 打造本地记账应用 Budgies

Building my own expense tracker

AI 导读

开发者用约两个月时间构建了本地运行的记账应用 Budgies,通过解析银行 CSV/PDF 账单并集成 Plaid 获取实时交易,支持 16 类自动分类和可筛选的支出图表。他通过 MCP 让 Codex 访问交易历史,用于分析消费并推荐奖励最高的 Visa 信用卡;此前 ChatGPT 连接 MCP 不顺利,最终改用 Codex。下一步将加入预算、资产负债和财务预测功能。

正文 · AI 翻译

screenshots

我一直在开发一款名为 Budgies 的支出跟踪应用(名字来自我附近的一家墨西哥卷饼店)。这个想法源于我和好友兼同事 Jamshid 的一次交谈,他建议我跟踪自己的支出,以便更好地了解钱都花在了哪里,并制定预算,这样只要不超预算,花钱时就不会那么有负罪感。

我首先下载了银行和信用卡对账单,并编写解析器从 CSV/PDF 文件中提取交易记录。这些交易随后被保存到数据库中,并在 Web 应用中以图表和表格的形式展示,让我既能查看整体支出趋势,也能看到单笔消费。

我最早添加的功能之一是分类。我想了解自己在外出就餐、食品杂货、交通、订阅等方面各花了多少钱(如今这个列表已经增加到 16 个类别)。一开始需要一些手动操作,因为必须为每笔交易分类,但应用会记住类别,并自动将其应用到同一商户未来的交易上,所以随着时间推移,需要手动分类的内容会越来越少。

screenshots

之后我花了大量时间反复打磨支出图表。在构建它的过程中,我意识到我想要的东西类似于我在工作中使用的监控工具,比如 AWS CloudWatch 和 New Relic,于是我把它们作为参考。我希望能够快速调整日期范围、按类别筛选、在时间上前后导航,并保存我常用的筛选条件。当我将鼠标悬停在某个数据点上时,可以看到按类别划分的支出明细,并按从高到低排序,从而轻松看出某个月大部分钱都花在了哪里。

这一切都很好,但对预算管理来说并不是特别有用,因为我只在每月月底导入银行对账单,所以直到事后才知道自己花了多少钱。我需要一种获取实时交易更新的方式,于是决定集成 Plaid,这是一个可以接入你账户的银行 API。

集成 Plaid 并不像我预期的那么简单。Codex 最初提出了一个不必要的复杂实现方案,涉及服务、数据库表以及我并不需要的额外逻辑。部分问题在于,这个应用最初是围绕文件导入设计的,但代码库也已经变得足够臃肿,以至于 Codex 在没有我不断催促它简化的情况下,很难做出好的设计决策。我借此机会进行了清理:删除孤立的数据库表和列、删除未使用的 API 端点、简化业务逻辑并添加测试。这次清理让任务比我最初计划的更大,但也让我有机会在数周的 vibe coding 之后重新深入代码,更好地理解一切是如何运作的。

我最近开发的功能是通过 MCP 让 Codex 访问我的交易历史,这样它就能分析我的支出并从中得出洞察。例如,我让 Codex 帮我找一张 Visa 信用卡,根据我的消费模式为我赚取最多的奖励。它能够查询我的非 Amex 交易,并推荐几张信用卡,同时估算每张卡能让我赚取多少积分或返现。我最初尝试将 MCP 服务器连接到 ChatGPT,但过程并不顺利,所以最终改用了 Codex。Codex 本可以通过直接查询数据库来完成同样的工作,但使用 MCP 更好,因为我可以控制它能访问哪些数据以及能执行哪些操作。

screenshots

我开始构建 Budgies 大约已经两个月了,随着使用,我一直在逐步改进它。我并没有在构建什么特别新颖的东西,但拥有一个符合我需求、完全按照我想要的方式运行的应用程序,让我很有满足感。它还是免费的、可定制的,并且在本地运行,所以我不必与其他人分享我的财务数据,除非我决定使用 MCP 时与 Codex 分享。

下一步

既然我已经有了相当扎实的基础,下一步就是构建当初促使我启动这个项目的预算功能。我想为每个类别设置月度预算,并跟踪我的支出与预算的对比,这样我就能看到整个月还剩多少钱可以花。

我还在考虑关联我的储蓄和投资账户,这样我就能在现金流量表之外再构建一张资产负债表。这样一来,我不仅能看到钱的去向,还能看到我的整体财务状况如何随时间变化。

另一个来自 Jamshid 的想法是添加财务预测。目前,这个应用只查看历史数据,但我可以用这些数据来预测未来的财务状况,从而更好地了解 5 年或 10 年后我可能有多少钱,并为退休做规划。

我会做得不一样的地方

我后悔的一件事是没有从一开始就使用设计系统或组件库。结果我留下了一个庞大的 CSS 文件,维护起来变得很繁琐,而且每次 Codex 对前端做改动时,UI 似乎都会出问题。我希望自己从一开始就更有意识地进行设计,因为我现在花在修复 UI 问题上的时间比我希望的要多。到了这个阶段,我犹豫是否要迁移到设计系统或组件库,因为我已经构建了很多自定义逻辑。相反,我想先为关键用户旅程添加 Playwright 端到端测试和视觉快照,以捕捉意外的 UI 变化,这样 Codex 就能识别并修复问题,而无需我每次都手动检查 UI。

我还想尝试的另一件事是让 Codex 在我睡觉时通宵处理重构和清理任务。理想情况下,它会识别需要改进的地方,对它们进行优先级排序,评估风险,并在循环中完成这些更改,每一步之后都运行测试以确保没有破坏任何东西。我很想一觉醒来看到一个更整洁的代码库,这样我就能花更多时间构建功能。我认为这应该是可行的,而且这与许多公司试图通过软件工厂实现的目标类似。

架构图

来源:Hacker News · sungatae.com