杯測表單的設定、評分、揭曉三個階段在手機上並排

Day15 [coffee-review] 把杯測拆成三個階段:那顆解鎖按鈕是多餘的

做 #97,把杯測表單拆成「設定、評分、揭曉」三個階段。方案在 plan mode 裡被推翻了五六次:解鎖按鈕拿掉、返回鍵拿掉、按鈕從底部搬到頂端、揭曉頁從表格改成杯卡、頒獎台畫了又撤。實作上把唯一一組評分元件搬到點開的杯卡下面,並用凍結順序避免改分數時卡片跳走;另外記錄 service worker 快取讓新 CSS 看不到、以及兩次 code review 抓到的 bug。

September 29, 2026 · 7 分鐘
一場杯測在不分組、分組、分組但沒有杯三種情況下,在列表上各算幾筆

Day14 [coffee-review] 記錄列表的排序與分組:杯測場次該算一筆還是好幾筆

搬到 Cloudflare 之後回頭清 issue,關掉 5 張過時的,挑了列表排序與分組來做。記錄日期該照哪個欄位排、杯測場次在分組時怎麼算,以及 code review 抓到的兩個 bug:沒有杯的場次在分組時整個消失,和改排序時重新打 API 造成的舊畫面覆蓋。

September 28, 2026 · 3 分鐘
遷移後的記錄列表,資料從 D1 讀出來

Day12 [coffee-review] 從 GitHub Pages + Supabase 搬到 Cloudflare:登入整個搬出 app 之外

Day5 到 Day7 的 coffee-review 跑在 GitHub Pages + Supabase 上,今天整套搬到 Cloudflare。改變最大的不是資料庫,是登入——原本 Google OAuth 是 app 的一部分,跑在瀏覽器裡、要處理 PKCE 與回跳;搬完之後 app.js 裡一行 OAuth 程式碼都沒有,登入被推到 Cloudflare Access,在請求碰到 Worker 之前就結束了。記錄兩個取捨、既有的 Google OAuth client 怎麼直接接上 Zero Trust、首次部署失敗與 AUD 只能靠一個 302 驗證的過程,以及 service worker 怎麼讓 Access 過期後回不去登入頁。

September 26, 2026 · 11 分鐘
店家頁的統計摘要卡片,下方是常見風味 chips

Day7 [coffee-review] 測試全綠,功能卻永遠是空的:查詢沒 select 的欄位

店家頁的「常見風味」在線上永遠是空的,但負責統計的純函式有十幾條測試、全綠——問題不在算法,在查詢根本沒撈那兩個欄位。這篇記錄為什麼不直接把欄位加進去、假的 Supabase client 要假到什麼程度才抓得到這種 bug,順帶收掉草稿按「還原」就被清掉與全新安裝 SQL 缺欄位兩件,以及驗證修正時我怎麼用一行 git 把自己的修正刪掉。

September 21, 2026 · 12 分鐘
記錄列表上的沖煮與杯測兩種卡片

Day6 [coffee-review] 把「杯測」這個名字還給杯測:一場多杯的記錄類型

coffee-review 原本的「杯測」其實是自己沖一支豆,真正的杯測是一次擺 N 杯、每杯用編號識別。這篇記錄舊名字讓位、編號預設手動、未評分當成一級狀態這些產品取捨,為什麼資料分成兩張表而不是一個 jsonb 陣列,以及一組評分元件怎麼輪流裝 N 杯。

September 20, 2026 · 9 分鐘
統一後的店家選取器,本地找不到時列出 Google 地圖結果

Day5 [coffee-review] 品鑑表單上的「店家」:筆記搬進表單、搜尋合成一格

Coffee Review 品鑑表單最上面的「店家」有兩個問題:店家筆記只能從店家頁填,所以沒人填;選店家又拆成「選擇」和「新增」兩套,猜錯就撞 unique constraint。記錄把筆記搬進表單、把搜尋合成一個輸入框時的取捨(筆記要不要自己的儲存鍵、dirty 跟誰比、什麼時候才問 Google),以及 code review 才抓出來的三個坑:listener 疊兩層讓 chip 點了沒用、失敗 toast 被成功訊息蓋掉、把 LatLng 的方法拆下來呼叫讓從 Google 新增店家整條壞掉。

September 19, 2026 · 6 分鐘