為什麼要做#
市面上的記帳 App 不少,但我自己用下來總卡在兩件事:
- 記一筆太麻煩:打開 App、選分類、選帳戶、打金額、打備註……步驟一多,就懶得記,記帳習慣也跟著斷掉。
- 資料放在別人家:很多 App 要註冊帳號、資料上傳雲端,還塞滿廣告和訂閱方案。
所以「有魚記帳」的目標很單純:用最少的操作記完一筆帳,資料只存在自己的手機裡。 名字取自「有餘」——希望每個月都有魚(餘)。
主要功能#
| 功能 | 說明 |
|---|---|
| 🎙️ 語音記帳 | 說「午餐吃拉麵 180」,自動判斷分類、金額、商家、備註,確認後就存好 |
| 📷 掃電子發票 | 掃紙本發票左右兩個 QR Code,自動帶入日期、金額、店家與品項 |
| 📄 載具明細匯入 | 從財政部電子發票平台下載的 CSV,直接用「分享」丟給 App 批次匯入,已匯入或略過的發票不會重複出現 |
| 🧮 計算機鍵盤 | 金額欄位是計算機,可以直接輸入 120+85*2、支援括號,適合分帳 |
| 📅 月曆/列表/統計 | 三種檢視切換,月曆可以看每天的收支;統計頁有分類圓餅圖與月份切換 |
| 🤝 借貸紀錄 | 借出、借入、幫朋友代墊都能記,還款後標記已還,自動變灰 |
| 💰 資產與負債 | 現金、銀行、信用卡、電子錢包分開管理,借貸也算進去,隨時看到真實的淨資產 |
| ⚡ 桌面捷徑 | 長按 App 圖示或加到桌面,一鍵直接進語音記帳 |
| 🌙 其他 | 深色模式、帳戶與分類自訂顏色和排序、手動備份/還原 |
設計上的取捨#
Local-first,不登入、不上雲。 所有資料用 Room(SQLite)存在手機本機,沒有帳號系統,也沒有伺服器。換手機時用「匯出備份 → 匯入還原」搬資料。
AI 只用在一個地方:語音解析。 語音辨識後的文字交給 Groq 的大型語言模型,轉成結構化的 JSON(分類、金額、商家、備註),分類清單會一起送過去,讓模型從使用者自己的分類裡挑。 這是唯一需要連網的功能,而且是選配:API 金鑰由使用者自己申請、只存在手機上;沒設定或連線失敗時,辨識文字會直接放進備註欄,不會擋住記帳流程。
台灣在地需求優先。 電子發票 QR Code 的格式(左碼帶發票資訊、右碼帶品項,品項還可能跨兩個碼)和載具 CSV 匯入,都是針對台灣的使用習慣做的,這也是國外記帳 App 比較難做好的部分。
技術架構#
- 語言/UI:Kotlin、Jetpack Compose、Material 3
- 架構:MVVM + Repository,單一 Activity
- 資料:Room 本機資料庫(交易、帳戶、分類、借貸、已略過發票)
- 掃描:相機掃描 QR Code,自行撰寫台灣電子發票格式解析器
- 語音:Android 語音辨識 + Groq API(OpenAI 相容格式,JSON 回應)
- CI/CD:GitHub Actions 每次合併到 main 自動建置 APK,固定簽章金鑰讓新版可以直接覆蓋安裝
- 支援版本:Android 8.0(API 26)以上
開發過程#
這個 App 從 2026 年 8 月開始,一個月內迭代了 58 個 Pull Request。開發方式是我負責產品規劃、使用情境和每一版的實機測試,程式實作則跟 AI 程式助理(Claude Code)協作完成。
流程大概是:提出需求 → AI 實作並開 PR → GitHub Actions 自動編譯 APK → 我下載裝到手機實際使用 → 回饋下一輪修正。 很多功能都是實際用了才發現需要的,例如:
- 打金額時常常要加總好幾個品項 → 把金額欄位改成計算機鍵盤
- 下拉選單看不出哪個是信用卡、哪個是現金 → 帳戶旁顯示類型、加上顏色
- 每次都要點好幾下才能開始講話 → 加了桌面捷徑直達語音記帳
接下來#
- 預算功能與超支提醒
- 更多統計圖表(月份趨勢、帳戶走勢)
- 定期支出(房租、訂閱)自動記帳

