72 小時造出一個金流引擎
用 Claude Code 從設計文件到公開發布,126 commits 的 AI 協作開發紀實
「我現在真正能動的錢是多少?」
打開銀行 app,看到帳戶餘額。但這個數字是錯的——房租還沒扣,信用卡帳單還沒繳,分期付款散落在好幾張卡裡,每個月還有固定債務要還。把這些扣完,真正能動的錢?可能是負的。
我試過記帳 app,問題是我不需要記帳。我不在乎上個月花了多少,我在乎的是下個月繳完所有帳單後還剩多少。市面上的工具不是太重(企業級 ERP)就是太輕(只能記流水帳),沒有一個能處理台灣信用卡的結帳日、繳費日、消費分期、帳單分期這些東西。
我一直自認財產管理觀念不好,時常變成月光族。真正想打理的時候,又被記帳、金流、預期花費搞得一團亂。每個月繳卡費前都要把每個帳戶、手上現金逐一拿出來算,耗費心力也耗費時間。後來 AI coding 逐漸上手,就萌生了一個念頭:把這個痛點跟工作流結合,用 agent 來解決。
所以我決定自己做一個。用 Claude Code。花了一個週末。這篇文章講的不是「我做了什麼功能」,而是人與 AI 的協作模式怎麼在三天裡不斷演變——從寫設計文件、到抓 AI 的錯、到把領域知識系統化。
先寫文件,不寫程式
第一件事不是 npm init。是打開一份空白 Markdown,寫設計文件。
這份文件最後長到近 540 行,定義了資料表的欄位、可動用金額的計算公式、測試案例、開發里程碑。但更重要的是它經歷了什麼——在 85 分鐘內跑了 6 輪審查。
我用 Claude Code 的 subagent 功能,讓 AI 分別扮演不同角色來審查同一份文件。第二輪加入了一位「DBA」,他指出信用卡資訊散落在分期和帳單兩張表裡,缺少一張 CreditCard 主表來統一管理結帳日和繳費日。第四輪換成「金融領域專家」,這一輪直接觸發了 major revision——修正分期金額的計算方式,簡化最低繳款邏輯,處理帳單分期的外鍵關係。
6 輪下來,設計文件被改了四次,其中兩次大幅重寫。但這一個半小時的投資,讓後面的實作幾乎沒有走回頭路。
28 分鐘的骨架
有了設計文件,下一步是寫 implementation plan——不只列「做什麼」,而是寫到「哪個檔案的第幾行改成什麼」。Plan 裡連 commit message 都預先寫好了。
M0(Walking Skeleton)的目標只有一個:5 分鐘內能看到可動用金額。
後端選了 FastAPI + SQLite。不是因為偷懶——是因為這是個人工具,不需要 PostgreSQL 的那些能力,卻需要 SQLite 的零配置。備份就是複製一個檔案。部署就是跑一個 Python 指令。前端用 React + TypeScript + Vite + Tailwind,搭 TanStack Query 管 API 狀態。
從第一個 commit 到 Dashboard 能顯示可動用金額:28 分鐘,16 個 commit。因為 Plan 已經包含所有程式碼,執行階段就是「照著打字 + 跑測試」。
一天 94 個 Commit
骨架完成後,進入最瘋狂的階段——M1 到 M4 全部在同一天搞定。信用卡模組 20 分鐘,走勢圖和試算 33 分鐘,進階功能 10 分鐘,錦上添花 11 分鐘。
其中 M3 最誇張:16 個 commit,10 分鐘。帳單轉分期、儲蓄目標、情境模擬——聽起來是三個獨立功能,但因為 Plan 精細到每一步要改哪個檔案的第幾行,執行時不需要思考,只需要打字和跑測試。
這就是 Plan 粒度帶來的效果。所有設計決策在寫 Plan 時就做完了。執行只剩機械性操作。
94 個 commit。佔了三天總量的 75%。
但速度有它的代價。
AI 不知道你怎麼繳卡費
AI 在涉及「真實世界行為」時,犯了很具體的錯。
第一次是在算「我該提領多少現金」的時候。AI 算完帳單金額,預設信用卡帳單會從銀行帳戶自動扣款。我糾正了——我的帳單是拿現金去繳的。
第二次,同樣的對話,它又犯了。
第三次是在算旅遊預算。AI 只預留了一張信用卡帳單的錢,忽略了接下來一整個月的固定支出。我貼了完整的收支時間軸,它才發現預留金額差了一大截。
這些錯的共同點:AI 缺乏的不是計算能力,而是使用者的生活脈絡。 它不知道你怎麼繳卡費、不知道哪些支出對你來說是偶發而非常態、不知道你的提領習慣。
還有一個更深的設計錯誤——AI 把信用卡帳單的分期金額設計成動態計算,結果被自己寫的週期推進邏輯打敗,帳單金額憑空蒸發好幾千。那個故事太長,我另外寫了一篇。
從逐次糾正到系統化防錯
同一個錯犯三次,就不是 AI 的問題了——是我沒有把知識結構化。
我建了三層防錯機制。最底層是 CLAUDE.md,專案設定檔,每次對話自動載入。寫進去的都是硬規則:帳單的繳費方式、哪些支出是偶發性質、查詢可用金額時預設要看到哪個時間點。
往上一層是 SKILL.md,AI Skill 的行為規範。這裡放的是操作流程——Business Rules 禁止假設支付方式,Playbooks 定義了常見問題的標準處理 SOP,還有預留計算必須展開完整月份時間軸的規定。比 CLAUDE.md 更結構化,也更長。
最頂層是 memory,跨對話記憶。只記錄具體犯錯案例和矯正方式。短、精準、讓未來的對話不重蹈覆轍。
後來我覺得,跟 AI 合作最值得花時間的事不是幫它寫 code,是把你腦裡那些潛規則寫下來讓它能讀。
Skill:第三種介面
整個系統是 API-first 的設計——前端只是 API 的消費者之一。這帶來一個意外的好處:AI 也能直接當消費者。
我用 Claude Code 的 Skill 系統寫了一個 cashflow skill。不需要 MCP server,不需要額外基礎設施。Skill 就是一份 Markdown,告訴 AI 怎麼把使用者的自然語言對應到 API 呼叫,回來的數字怎麼轉換和顯示。
加上 HARD-GATE 機制——所有寫入操作都必須先列摘要、等我確認才執行——它就是一個安全的自然語言介面。
透過設計貼合自己需求的 API 和 agent skill,幾乎所有對財務的困惑和猶豫都能讓 agent 擔任顧問,對真實資料跑分析。不用再打開 app 一個一個翻,直接問就好。
發布前的安全審計
三天後,系統能用了。但要公開到 GitHub,得先確認沒有洩漏個人資訊。
我請了一組五人安全審計團隊(還是 subagent)。他們翻遍了所有檔案,標記了幾個風險:設定檔裡有支付習慣、commit log 裡有具體的財務數字、設計文件包含真實資料範例、資料庫本身也不能上傳。
最後的做法是建立一個獨立的 release repo,用 .gitattributes 的 export-ignore 排除敏感檔案。發布腳本負責自動化同步。上傳的是乾淨的程式碼,不帶任何個人資料。
回頭看這三天
126 個 commit。11 個 Claude Code session。
但這些時間裡,超過 30% 花在「寫文件」和「審查文件」上,不是寫程式。Spec 一個半小時,6 輪審查。每個 Milestone 都有 Implementation Plan。Bug 修復也先寫設計文件再動手。
我的角色一直在變。設計階段是架構師,實作階段是交通指揮,使用階段是 QA 和領域專家,優化階段是產品經理,發布階段是安全官。
但有一個角色我始終沒扮演過:寫程式的人。
做完之後,程式和資料庫的內容隨時能調整,逐漸照顧到財務管理上方方面面的問題。我最常問自己的一句話還是那句:「現在到底還有多少錢可以動?我可以買這個東西嗎?分期可以分幾期,能承擔多少利率?」這些以前要算半天的事,現在問一句就有答案。省下的心力是真的。
要說不安的話,倒不是擔心這個專案沒辦法給別人用——它本來就是針對我自己的需求開發,沒顧及市場性和擴充性。真正讓我不安的是:工具把數字攤開來,比自己模糊的感覺殘忍得多。
但這也是第一步。透過工具逐漸掌控自己的資源——這一步,無論 AI agent 再怎麼強大,還是得靠慢慢調整的個人消費習慣。
這篇文章的技術深潛版本——關於信用卡分期金額從動態計算到快照的演進故事——在這裡。