Coplot

一個讓一家人共用一本帳、又各自守得住私帳的記帳工具。

Personal Side Project~6 months (ongoing)2026Role: Product Owner + Product Design + Full-stack

Screenshot pending — Coplot is behind a Google login wall (see Decisions log 2026-08-12)

WHY I BUILT IT

一個設計師,能自己把產品做到上線嗎?

AI 工具剛起來的時候,我看了很多「AI 能做什麼」的討論。但我想知道的是另一件事:一個設計師,如果不繞路、不停在原型,真的從零把一個產品做到上線,中間會發生什麼事?

所以我拿自己最卡的一件事來試。

THE PROBLEM

一筆晚餐,記三次

五年我用過五個記帳 App,沒有一個夠用。出國那幾天最明顯:同一筆晚餐,我要在 TriCount 記一次給朋友分帳、Moze 記一次自己的支出、Splitwise 記一次跟先生的共同開銷。一筆消費,記三次。

我不是哪一天決定不用它們的。是記到某一次,就沒有再記。

一家人的帳和一個人的帳,非得是兩本嗎?

THE REAL PROBLEM

這不是「記帳太麻煩」的問題

我以為我在解記帳太麻煩。做下去才知道,麻煩只是症狀——沒有一個工具願意處理那條界線:哪一筆該讓家人看見,哪一筆不該。界線畫對,一本帳就夠用;畫錯,再多功能都是繞路。

WHAT DIDN’T WORK

界線畫在容器上,走不通

所以我判斷:界線要畫在事情真正發生的那一層,不是畫在裝它的容器上。

這是我第一次看清人該在哪裡介入:AI 給得出結構上成立的方案,但它沒出過那趟門——一趟旅行本來就是公私混著的,這件事得自己記過帳才知道。

方案 A:界線畫在「專案」上。 AI 給我的第一個方案,是在專案加一個公私欄位——建立時就先選共享或私人。結構上很乾淨。

為什麼不行: 我拿一趟郵輪旅行去試。晚餐是全家分的,紀念品是我自己買的。照這個方案,我得建兩個專案,把一趟旅行硬拆成兩半。

THE SOLUTION

界線收回到每一筆帳上

交易帶立場

公私只活在每一筆帳上,專案只是不帶立場的容器。

權限只留一個地方

整個 App 只有一處在管「誰看得到什麼」,不會兩層互鎖、誰贏沒定義。

切換視角不外洩

家庭視圖看得到共同的總和,個人的細節留在個人視圖裡。

HOW I WORK

設計的規則寫進文件,一樣擋不住事

我在這個專案立過一條設計閘門:新流程要先把使用者怎麼一步步操作講清楚,才准動手做。

三個星期之後,同一件事又發生了一次——我自己跳過了它。它是一份躺在資料夾裡的文件,只在有人主動想起來的時候才生效。

所以我判斷:流程要能自己跑起來,不能只靠人記得。

我把十年的產品設計經驗收成一條產品設計流程——先快篩、再發散、再收斂、最後品質把關——做成 AI 每次都會自動載入的機制,不是一份要人記得去讀的文件。

逼出這條流程的是一次失敗:這個產品的第一輪五個介面變體,我訂的設計規則全都守住,但我一個都不滿意。這才想清楚:負向規則只能擋掉壞的,產不出好的。品味得靠正面範例和成對比較來教。

因為一直自己動手做到底、自己驗,才看得見哪些環節值得做成機制。

FULL-STACK IN PRACTICE

從規劃到資料庫,一路做到底

產品規劃

界線畫在交易層還是專案層,這一個判斷同時決定了資料表怎麼長、權限規則怎麼寫、介面預設進哪個模式。

介面系統

版面亂過一次之後,我把按鈕做成三階,大小本身就代表這個動作有多重要;中文和英文的字距分頭調,因為中文擠在一起的樣子跟英文不一樣。

前端與渲染

朋友回報「打開很慢」。我把「重現問題」和「驗證修好了」做成自動化流程,量出來三個症狀同源:本該純前端的篩選每次都跑一趟 server,而那個 server 常常是冷的。最有效的一刀不是什麼優化技巧,是把正式環境重新部署一份乾淨的 build,11.8 秒降到 966 毫秒。

資料庫規則

PostgreSQL 的列舉型別有 session 限制,不能跟其他改動混在同一支腳本裡。我把它定成規則:一支檔案只做一件列舉改動,而且要能重跑不出錯。

這一層我也踩過兩次同樣的坑:資料庫改動漏上正式環境,第一次我只修了當下的資料、沒去改流程,所以它又來了一次——跟前面那道設計閘門,是一模一樣的形狀。

MEASURING SUCCESS

一筆記一次

開頭那件事——一筆晚餐記三次——現在不會了。這本帳每天都在運轉:出國一趟,一筆記一次,不用再想「這筆該記在哪個 App」。儲存和切換都在一秒內。

但我們想做的還有一件事。

WHAT I MISSED

他試了一次,就沒再試了

我們想把過去的信用卡帳單也整合進來——那是以前那五個 App 都做不到的事。我自己做成了,用得很順,所以跟先生分享,他也想試試看。

他一次貼了太多筆,被擋下來了。

他沒有跟我說。他去忙別的事了。那之後,他就沒再試。我是後來才知道的。

我自己用得起來,所以我以為它可以用。我的資料量是我的,不是他的。而使用者不會替你回報問題——他只會安靜地走開。

THE REAL PROBLEM (AGAIN)

失敗之後,沒有路可以回來

我把它修好了。但他後來說的話,比那個 bug 有用得多:他還沒養成用新工具的習慣,被打斷之後要重新啟動,花的時間比他預期的多;他需要的是有人帶他走一遍。

所以問題不在那一次失敗,在失敗之後沒有路可以回來。

一個新功能如果只準備了「成功」這一條路,使用者踩空一次,就不會再踩第二次。該做的不是把功能做得更強,是替失敗準備配套:能退一步、能換小一點的量、有人帶著走第一遍。習慣也不會自己長出來。我把這些回饋寫成了 PRD,排進待開發。

我五年前離開那五個 App,也是這樣離開的。

BEYOND THE PRODUCT

我可以直接把 code 打開給他

我們兩個都習慣用 AI 解自己生活裡的問題。所以我們討論出來的做法是:我把 repo 打開,邀他進來,直接把那份資料匯進資料庫。等他有空——這件事不急。

這其實是自己做產品最好的地方。我手上的不只是一個 App,是整條路——從介面到資料庫都是我自己鋪的。所以當「產品」這個介面接不住他的時候,我還有別的方式跟他一起把事情做成:使用者不一定只能是使用者,他也可以是一起動手的人。

我也很清楚這條通道為什麼成立:他是我先生,這種事他本來就在做。將來的人不會有這條通道,所以產品層那件事還是得做。

不是每個問題都得靠產品來解。有時候接住它的是人。

BEYOND THE PROJECT

這個專案最有價值的部分,發生在它之外

回到最開始那個問題:一個設計師自己把產品做到上線,中間會發生什麼事?

對我來說,最有價值的不是這個產品,是它長出來的東西。我把這裡學到的帶進工作的專案,把它們做成標準化、可規模化的機制——ds-agent 家族和 codebase 的 design system guideline 都是從這裡長出來的,後來工程師一起採用;code-to-figma 的流程也擴到了其他產品線的設計師。

這些都不是先想好的方法論。是自己下場做過一遍,才長得出來。

TAKEAWAYS

帶走的三件事

功能也要準備失敗的那條路

使用者踩空一次,就不會再踩第二次。新功能不只要能成功,還要能失敗。

負向規則只能擋壞,產不出好

規則守得住底線,長不出品味。而且規則要做成會自己跑起來的流程,不是一份沒人會回頭讀的文件。

做到底,才看得見自己解決不了的那部分

與其等別人整理好方法,不如自己下場做一個真的產品,從規劃一路做到資料庫。實戰累積出來的判斷,才知道哪些節點可以交給 AI、哪些不能——也才看得見這件事:我能修好任何一個看得見的 bug,但「他為什麼沒再試」從來不在 bug 清單上。