PickCardRebate

更新日誌

信用卡資料變動、新功能、優化同公告

公告
v2.11.0

渣打 Simply Cash 八達通自動增值 1.5% 回贈 2026-06-28 起取消

卡資料變動

  • 渣打 NOC (05/2026):由 2026 年 6 月 28 日起,八達通自動增值(及 O!ePay 八達通銀包增值)剔出渣打 Simply Cash Visa 合資格簽賬,1.5% 回贈取消,生效後為 0%。
  • 官方通知:https://av.sc.com/hk/content/docs/hk-cc-noc.pdf

平台更新

  • cards.ts:octopus 1.5% rule 設 validDateRange 至 2026-06-27;base rule 排除 octopus,避免 6/28 後仍計 1.5%
  • 計算機具日期感知:6/28 當日凌晨自動轉 0%
  • 八達通排行榜(rankings)自動 re-rank,新首選 Citi Cash Back 1%
  • 八達通攻略 / AAVS 攻略同步更新:自動增值首選改 Citi Cash Back 1%(回贈需儲夠 $200 入賬),手動增值首選安信 EarnMORE Apple Pay 2%

條款存檔

  • 已將渣打 NOC (05/2026) 變動記錄於攻略 callout
新功能
v2.10.53

新增中銀 SOGO 額外 5% 回贈優惠文章

新增內容

  • 新增「中銀信用卡 SOGO 優惠 2026」文章
  • 以官方條款確認推廣期為 2026年4月1日至2026年6月30日
  • 聚焦中銀崇光 Visa 卡額外 5% 回贈、手機支付疊加及實際約 12% 回贈示例

條款存檔

  • 同步將中銀信用卡「崇光百貨購物簽賬賞高達 5%回贈優惠」寫入 card_terms
優化
v2.10.52

隱藏計算機結果彈窗內 App 下載橫幅

優化

  • 移除計算機「最抵攻略」結果彈窗底部嘅 Mobile Web App 下載 CTA,減少干擾
  • 全站其他 App 推廣入口(如 AppDownloadBanner)不變
優化
v2.10.51

單次消費門檻提示 — 顯示達門檻可享的回贈率

優化

  • 新增「單次消費門檻提示」:當回贈被 minSpend 門檻擋住時,顯示藍底面板告知用戶達門檻後可享的回贈率和金額
  • 例如:百佳 $100 → 大新ONE+ 顯示「消費滿 $300 可享 5% = $15」
  • 覆蓋 Web 計算機結果彈窗(CASE 1/2A/2B)、展開列表、以及 Mobile App
  • 同時包含上一版修復的月簽門檻雙重回贈率面板在彈窗中的顯示
修復
v2.10.50

修復計算機結果彈窗缺失月簽門檻雙重回贈率面板

修復

  • 修復計算機結果彈窗(modal)未顯示月簽門檻雙重回贈率面板的問題
  • 在 CASE 1(已持有最抵卡)、CASE 2A(你持有的最抵卡)、CASE 2B(全場最抵申請新卡)三個結果區塊中加入 baseRateFallback 面板
  • 面板會顯示「未達月簽」及「達月簽門檻」兩個回贈率的對比
修復
v2.10.49

Google 登入改用 GIS SDK — 支援 App 內置瀏覽器登入

重大改善

  • Google 登入改用 Google Identity Services (GIS) SDK,以 popup 方式完成認證
  • 解決 Threads / Instagram / Facebook 等 App 內置瀏覽器無法 Google 登入的問題(403 disallowed_useragent)

技術變更

  • 新增 /api/auth/google/verify endpoint — 接收 GIS credential token 並驗證
  • 新增 /api/auth/google/client-id endpoint — 供前端取得 OAuth Client ID
  • 前端載入 GIS SDK 並渲染 Google 官方登入按鈕
  • GIS 載入失敗時自動 fallback 到傳統 redirect 流程
  • in-app browser 偵測保留作為 fallback 安全提示
  • Mobile app 的 OAuth redirect 流程不受影響
修復
v2.10.48

修復 App 內置瀏覽器 Google 登入被封鎖問題

修復

  • 偵測 in-app browser(Threads、Instagram、Facebook 等),顯示提示訊息引導用戶用外部瀏覽器開啟
  • Google 登入按鈕在 in-app browser 中自動停用,避免觸發 403 disallowed_useragent 錯誤
  • 提示用戶可改用手機號碼登入作為替代方案
新功能
v2.10.47

新增滙豐 Reward+ 快閃換券優惠文章

新增內容

文章

  • 滙豐 Reward+ 快閃換券優惠(id: hsbc-reward-flash-coupon-2026):$45 獎賞錢換 $50 譚仔三哥(9折)、$25 換 $30 Starbucks(約84折),另有奇華餅家、文華東方、時代廣場、Venchi。推廣期 3/16-4/26
  • 條款存檔至 card_terms
修復
v2.10.45

修復商戶頁面 DYNAMIC_SERVER_USAGE 錯誤

修復

  • 修復 /merchants/[id] 頁面因 findBestCards() 使用 new Date() 觸發 DYNAMIC_SERVER_USAGE 錯誤
  • 移除 generateStaticParams 改為 force-dynamic + ISR revalidate 3600s
新功能
v2.10.44

新增雲閃付政府繳費即減優惠文章

新增內容

  • 新增雲閃付政府繳費即減優惠文章
  • 單筆滿 $3,000 即減 $18 / 滿 $20,000 即減 $160
  • 推廣期 2026年3月18日至4月30日
  • 推薦搭配 EarnMORE 銀聯卡(淨賺 0.4% + 即減)
  • 條款已同步寫入 card_terms
新功能
v2.10.43

新增 sim Credit Card x RentSmart 交租優惠文章

新增內容

  • 新增 sim Credit Card x RentSmart 交租 $0 服務費推廣文章
  • 單筆交租滿 $5,000 享每月首筆 $0 服務費(上限免 $300)
  • 滿 $15,000 額外 $150 現金回贈
  • 推廣期 2026年3月17日至7月31日
  • 條款已同步寫入 card_terms
修復
v2.10.42

修正 /offers 頁面額外獎賞顯示最高禮品價值

修正

  • 修正中銀 Chill Card 在 /offers 頁面卡圖無法顯示(DB image_url 為舊的隨機檔名)
  • /offers 頁面額外獎賞現自動計算 bonusItems 中最高價值禮品,顯示最高可獲金額
  • 例如 HSBC VS 額外獎賞由顯示 $800 修正為最高 $4,980(Delsey 行李箱)
  • badge、總值明細均統一使用最高禮品價值

優化

  • 將 update-image API 加入公開路徑,方便修正卡圖資料
新功能
v2.10.41

新增中銀 Bliss Card MoneyHero 迎新 seed 資料

新增

  • 新增 boc-bliss 的 MoneyHero 限時獨家迎新 seed 資料
  • 包含申請連結、獎賞選項、推廣期、批核要求與注意事項

調整

  • 新增 boc-bliss 對應的 MoneyHero 合作夥伴申請連結
  • 維持 officialApplyUrlpartnerOffer.applyUrl 分工,不覆蓋銀行官方申請連結

後續

  • 部署後將透過 /api/admin/partner-offers/seed 導入 production DB
優化
v2.10.43

重構迎新值解析:共用函數 + data-store fallback 統一 + 開發規則

優化

  • 新增 lib/utils/welcome-offer.ts 共用函數 parseWelcomeOffer(),統一 isMilesCardnewCustomerValueexistingCustomerValue 的判斷邏輯
  • 卡片列表頁、卡片詳情頁、offers 頁、API route 全部改用共用函數,消除重複代碼
  • 統一 data-store.tsx 的 fallback 策略:銀行資料 local 優先、後台管理資料 DB 優先,所有欄位都有 fallback
  • 新增開發規則第十九條(Partner Offer 檢查清單)和第二十條(迎新值解析規範)
  • 修正 mobile 端卡片詳情頁的迎新值解析邏輯
修復
v2.10.42

修正 HSBC 卡片迎新總值顯示

修正

  • 修正 HSBC 卡片迎新顯示邏輯:含「獎賞錢」的迎新不再被誤判為里數卡
  • HSBC VS 及 Pulse 加入明確 welcomeOfferReward,避免正則匹配到簽賬門檻金額
  • 更新 MoneyHero 額外獎賞 bonusValue 為最高禮品價值 $4,980(Delsey 行李箱)
  • 現在正確顯示「最高可獲 $5,780」= 銀行迎新 $800 + 額外獎賞 $4,980
新功能
v2.10.42

新增滙豐餐飲獎賞及建行海外簽賬優惠文章;開放 card-terms/changelog API

新功能

  • 新增「滙豐最紅本地餐飲簽賬獎賞 2026」優惠文章(3/14-6/13,餐飲額外3%,上限$300,含抽獎)
  • 新增「建行(亞洲)飛常賞您 2026」優惠文章(3/2-4/30,海外簽賬額外4%-6%,上限$600,名額5,500)

改善

  • 開放 /api/admin/card-terms 及 /api/admin/changelog 為公開 API,方便自動化寫入條款及更新日誌

修正

  • 修正 promos.ts 反引號轉義導致 template literal 語法錯誤
新功能
v2.10.50

計算機新增月簽門檻雙重回贈率顯示

新功能

  • 月簽門檻雙重回贈率顯示:有月簽要求的信用卡回贈規則,現會同時顯示「未達月簽」基本回贈率及「達月簽門檻」優惠回贈率,讓用戶一目了然
  • 計算引擎新增 baseRateFallback 欄位,自動搜尋無門檻的基本回贈規則作為對比
  • Web 主結果列:橙底面板雙欄對比(未達月簽 vs 達月簽門檻)
  • Web 精簡結果列:一行式緊湊顯示
  • Mobile App 計算結果同步支援雙重顯示面板

改善

  • 已有雙重面板時自動隱藏冗餘的紅色「需月簽滿 $X」提示,避免重複資訊
新功能
v2.10.54

Mobile App 加入消費提醒面板

新功能

  • Mobile 錢包 Tab 新增「消費提醒」面板(與 Web 版對齊)
  • 提醒類型包括:月簽門檻、優惠截止倒數、需登記提示、年費到期、Travel Guru 登記
  • 預設收起顯示數量 badge,展開可逐條查看及關閉
  • 新增 /api/mobile/spending-reminders 後端 API,統一由伺服器端生成提醒
新功能
v2.10.53

Mobile App 計算結果加入「一撳記帳」功能

新功能

  • Mobile 計算機結果每張卡新增「記帳」按鈕,一撳即記錄消費
  • 自動帶入商戶名、金額、類別、卡片、回贈金額,無需手動填寫
  • 記錄後按鈕變綠色「已記錄」,防止重複記帳
  • 新計算時自動重置記錄狀態

優化

  • 錢包「消費提醒」預設收起,減少頁面佔用空間
優化
v2.10.52

錢包消費提醒預設收起,減少頁面佔用空間

優化

  • 錢包頁面「消費提醒」區塊預設收起,不再佔用大量頁面空間
  • 收起狀態顯示提醒數量 badge(如「3 項」或「1 緊急」),方便用戶判斷是否需要展開
  • 有緊急提醒時 badge 顯示紅色,普通提醒顯示橙色
新功能
v2.10.51

Mobile App 加入「預計剪卡日」倒數及可重申迎新日期功能

新功能

  • Mobile 卡片設定 Modal 新增「預計剪卡日」輸入欄位
  • 設定後自動顯示剪卡倒數天數及預計可重新申請迎新日期
  • 卡片列表顯示剪卡倒數 badge 或可重申迎新日期 badge
  • 設定會自動同步到雲端,與 Web 版共享
新功能
v2.10.50

錢包新增「預計剪卡日」倒數及可重申迎新日期功能

新功能

  • 錢包卡片設定新增「預計剪卡日」日期選擇器
  • 設定後自動顯示剪卡倒數天數
  • 自動計算並顯示「預計可重新申請迎新」日期(剪卡日 + 12 個月)
  • 錢包卡片列表顯示剪卡倒數 badge(橙色)或可重申迎新日期 badge(綠色)
  • 同步支援中英文版錢包頁面
優化
v2.10.46

更新 Citi 及信銀國際 Motion Partner Offer 至最新期數

更新內容

Partner Offer 更新

  • Citi 信用卡系列(八達通白金卡、Cash Back、Rewards、Rewards 銀聯、PremierMiles):更新至 3月20日至26日期數,禮品更新為 PHILIPS 飲水機、Dyson 風筒/吸塵機、DJI 運動相機、iPad 等8選1
  • 信銀國際 Motion 信用卡:更新至 3月18日至27日期數,禮品更新為 LG 空氣清新機、Philips 吸塵機/飲水機等7選1

cards.ts 更新

  • 更新 cncbi-motion 卡片 note 欄位,反映最新 Partner Offer 及銀行迎新資訊
新功能
v2.11.0

新增 8 大功能:問卷平台、即時匯率、商戶專頁、消費目標等

新功能

第一梯隊

  • 問卷平台 Phase 1:修復信用卡推薦問卷評分邏輯(整合計算機引擎 findBestCards)、新增「加到錢包」和「分享結果」CTA、建立 surveys / survey_questions / survey_responses DB 資料表
  • 外幣匯率即時化:新增 /api/tools/fx-rates API,接入免費匯率 API 並每小時快取到 MySQL,外幣計算機自動使用即時匯率並顯示更新時間
  • 消費報告自動推送:新增 /api/cron/monthly-report-reminder Cron 端點,每月 1 號推送上月消費報告提醒

第二梯隊

  • 問卷平台 Phase 2:後台 /admin/surveys 問卷管理 UI(建立/編輯/刪除問卷、拖拽排序題目、多種題型、回覆分析報告含圖表和 CSV 匯出)
  • 問卷平台 Phase 3:前台 /survey/[id] 動態問卷填寫頁面,從 DB 讀取題目,提交後儲存回覆
  • 商戶專頁:新增 /merchants/[id] 頁面,含最佳信用卡排名(計算機引擎)、不同金額比較、同類商戶推薦、SEO metadata 和 JSON-LD
  • Web 版消費目標:新增 /wallet/goals 消費目標頁面(localStorage 版),支援預設模板、預算進度追蹤、回贈追蹤、記錄消費
  • 年費 vs 回贈分析:新增 /tools/annual-fee-analysis 工具,計算付費卡淨收益、打和消費金額、同銀行免年費替代建議

第三梯隊

  • 年度回贈總結:新增 /wallet/annual-summary 頁面,含年度總回贈、最常用卡 Top 3、最常消費商戶 Top 5、類別分佈、月度趨勢圖、分享功能

優化

  • 錢包頁新增「消費目標」和「年度總結」快速入口
  • Sitemap 新增商戶頁面和年費分析工具
  • 後台側邊欄新增「問卷管理」入口
新功能
v2.11.0

新增 PWA 支援及互動式新手導覽

新功能

PWA 支援

  • 新增 Web App Manifest,支援「加到桌面」功能
  • 擴充 Service Worker 加入離線快取策略(API: Network-First / 圖片: Cache-First / 頁面: Stale-While-Revalidate)
  • 離線 fallback 頁面
  • PWA 安裝提示元件,支援 Android 原生提示和 iOS Safari 手動教學
  • Feature flag 控制(pwa_install_enabled / app_download_enabled)
  • PWA → App 過渡策略:App 上架後可一鍵切換,已安裝 PWA 的用戶會看到「App 已上架」遷移提示

互動式新手導覽

  • 使用 React Joyride 取代原有彈窗式教學
  • 實際 highlight 頁面 UI 元素(商戶搜尋框、金額輸入、排行榜、優惠攻略、錢包)
  • 桌面和手機分別設計不同的導覽步驟
  • 沿用現有 analytics tracking(trackTourStep / trackTourComplete / trackTourSkip)
  • Navbar「使用教學」按鈕可重新觸發
修復
v2.10.43

統一 Partner Offer 最高價值計算邏輯,修復重複出現的計算錯誤

修復

  • extractMaxGiftValue 抽為共享工具函數,統一從 bonusItems 解析最高禮品價值
  • 修復 PartnerOfferCard(卡片詳情頁)未使用最高禮品價值的問題
  • 修復 /cards 列表頁、/discover 文章頁、文章卡片 Markdown 渲染器同樣的計算問題
  • 移除 /api/offers route 的重複函數,改用共享版本

技術改善

  • 所有使用 partner offer 最高價值的地方(共 5 個檔案)統一調用 extractMaxGiftValue,避免各處自行計算導致不一致
新功能
v2.10.40

新增 Citi 指定五張卡 MoneyHero 逐張迎新 seed

新增

  • 逐張新增 Citi 指定卡的 MoneyHero 迎新 seed
  • 涵蓋:citi-octopusciti-cashbackciti-rewardsciti-rewards-unionpayciti-premiermiles
  • 每張卡維持獨立 partnerOffer 記錄,避免共用模板導致後續期次誤套

備註

  • 本次只更新 partner offer seed 資料,不改 officialApplyUrl
新功能
v2.10.39

新增 Citi Cash Back MoneyHero 單卡迎新 seed 資料

新增

  • 新增 citi-cashback 的 MoneyHero 限時獨家迎新 seed 資料
  • 包含獎賞選項、推廣期、批核及簽賬要求、注意事項

調整

  • 不採用五張卡一鍵複製,改為單卡獨立維護,避免每期活動誤套用到其他 Citi 卡

流程

  • docs/CREDIT_CARD_DATA_GUIDE.md 以 seed 更新,後續透過 /api/admin/partner-offers/seed 導入 DB
新功能
v2.10.38

新增 Citi Cash Back MoneyHero 迎新 seed 資料

新增

  • 新增 citi-cashback MoneyHero 限時獨家優惠 seed 資料
  • 包含獎賞選項、推廣期、批核與簽賬門檻、適用卡與不適用條件
  • 保留 partnerOffer.applyUrl 作為合作夥伴專屬申請連結,不影響 officialApplyUrl

流程

  • docs/CREDIT_CARD_DATA_GUIDE.md 以 seed 方式維護,再由後台導入資料庫
新功能
v2.10.37

新增信銀國際 Motion MoneyHero 迎新 seed 資料

新增

  • 新增 cncbi-motion MoneyHero 獨家迎新 seed 資料
  • 包含獎賞選項、推廣期、簽賬門檻、申請條件與注意事項
  • 保持連結分工:partner 連結走 partnerOffer.applyUrl,不覆蓋 officialApplyUrl

流程

  • 依照 docs/CREDIT_CARD_DATA_GUIDE.md 的 seed + 後台導入流程執行
優化
v2.10.36

後台改為真正 server-side admin 驗證

變更

  • 新增 server-side admin auth API:/api/admin/auth/login/api/admin/auth/session/api/admin/auth/logout
  • 新增 admin JWT 與 HttpOnly Cookie 流程,後台登入狀態不再依賴 localStorage 假登入
  • middleware 新增 /admin/*/api/admin/* 的權限檢查,未授權請求會被擋下
  • 前端 admin auth context 改為向後端 session 驗證
  • 後台登入頁改為呼叫 server login API

安全性

  • /api/admin/*(除 auth 三條路由)現需有效 admin cookie 才可存取
  • /admin/login 在已登入時會被 server 端導向回 /admin

備註

  • 保留環境變數覆蓋機制:ADMIN_LOGIN_EMAILADMIN_LOGIN_PASSWORDADMIN_JWT_SECRET
修復
v2.10.35

卡圖更新流程收口:回讀驗證、分享圖局部容錯與健康檢查

修正

  • 後台卡圖儲存後新增即時回讀驗證,避免假成功
  • 修正兩個後台卡片編輯頁統一讀取 GET /api/admin/cardscards[0] 契約
  • POST /api/admin/cards/update-image 回傳補齊 cardIdimageUrlupdatedAt
  • 排行榜分享圖改為局部移除失敗圖片,不再因單一壞圖清空全部卡圖

新增

  • 新增 GET /api/admin/cards/image-health,輸出卡圖健康狀態與 HTTP/Content-Type
  • /admin/api-tools 新增卡圖健康檢查入口與 CSV 複製
  • /admin/analytics 新增分享圖壞圖觸發統計
  • 新增卡圖更新 SOP 文件與 rules 卡圖章節

備註

  • 本次僅做流程穩定化,不改排行榜計算邏輯與 mobile payload。
修復
v2.10.34

修復排行榜分享圖在特定榜單出現空白

修復

  • 修復 /rankings 在「八達通增值」與「換里數」分享 Top10 可能生成空白圖問題
  • 新增分享圖空白檢測:若 html-to-image 輸出近乎全白,視為失敗
  • 新增雙重 fallback:
    1. 移除圖片後重新 DOM 生成
    2. 再失敗時改用 Canvas 純文字版生成,確保至少有可分享內容

影響

  • 不改排行榜計算結果
  • 只加強分享圖生成穩定性
新功能
v2.10.33

新增 sim 流動支付獎賞 2026 文章與條款存檔

新增

  • 新增 Discover 文章:sim Credit 流動支付獎賞 2026(含獎賞1/獎賞2、FAQ、SEO)
  • 新增 /my-promos 追蹤設定:以每階段 HK$6,000 作為進度門檻
  • 新增條款 payload 檔:docs/card_terms_payload_sim_mobile_payment_2026.json

規則更新

  • 補充規則:GitHub push 紀錄(commit/changelog)需使用繁體中文

注意

  • 文章內已預留獎賞2附圖路徑:/images/promos/sim-mobile-payment-reward2-2026.png,可配合後續上傳使用
優化
v2.10.32

加固 ChineseAN sync:CPS/CPA 分開容錯

改善

  • /api/admin/affiliates/syncPromise.all 改為 Promise.allSettled
  • 即使 CPA 或 CPS 其中一條失敗,另一條仍可保留並繼續同步,不再整體歸零。
  • apiDebug 會分別標示 CPS / CPA 讀取失敗原因,方便定位上游問題。
修復
v2.10.31

修正卡片詳情頁優惠商戶 logo 顯示與死圖 fallback

修正

  • /cards/[id] 優惠商戶 logo matching 加強,支援 alias / 中文部分匹配,修正如 BOC SOGO 內頁無法帶出 SOGO logo 的問題。
  • 商戶 logo 圖片新增 onError fallback,即使資料指向不存在圖檔(例如 iHerb)也不會顯示死圖,會改用字母 placeholder。
優化
v2.10.30

錢包頁信用卡名稱加入卡片詳情連結

改進

  • /wallet 已加入的信用卡,卡名現在會連結到對應的 /cards/{id} 信用卡詳情頁。
  • 保持原有錢包版面與按鈕結構不變,只補上卡名的內部導覽。
修復
v2.10.29

修正 affiliates sync rawData definite assignment build error

修正

  • 修正 /api/admin/affiliates/sync 在 ChineseAN raw fetch debug 流程中,rawData 可能未賦值就被使用的 TypeScript build error。
  • rawData 現在改為 nullable,只有 JSON parse 成功時才會進一步取 data / Programs / programs
修復
v2.10.28

修正 affiliates stats fallback 的 days scope build error

修正

  • 修正 /api/admin/affiliatesaffiliate_click_logs 缺表 fallback 中使用區塊外 days 變數導致的 TypeScript build error。
  • days 現在於 try 外先解析,正常查詢與缺表回應都可共用。
修復
v2.10.27

修正 merchant community 用錯欄位導致 SQL 錯誤

修正

  • /api/merchants/community 改為先由 merchantIdmerchants 表取得商戶名稱,再用 merchant_namemerchant_reviews,修正原本誤用不存在的 merchant_id 欄位。
  • merchant_tags 查詢改為 best-effort,缺表或查詢失敗時不會拖垮整個 community API。
  • Merchant community API 在找不到商戶時會回空資料,避免不必要錯誤。
修復
v2.10.26

補齊多個 missing table 容錯並重建缺表

修正

  • 重新觸發 production /api/migrate/create-missing-tables,補齊 promo_commentscard_commentsaffiliate_click_logspage_views 等缺表。
  • /api/promos/comments/api/cards/comments 現在遇到留言表缺失時,GET 會回空列表,POST / DELETE 會回明確提示,而不會直接 500。
  • /api/admin/affiliates 遇到 affiliate_click_logs 缺表時,會回空統計資料。
  • /api/stats/pageview 遇到 page_views 缺表時,會回空統計而非直接失敗。
  • 新增共用 isMissingTableError helper,統一缺表判斷邏輯。
修復
v2.10.25

補回 partner_clicks 表並加點擊統計缺表容錯

修正

  • 觸發 production /api/migrate/create-missing-tables,補回 partner_clicks 表。
  • /api/stats/partner-click 現在遇到 partner_clicks 缺表時,GET 會回傳空統計而非直接 500。
  • partner click stats 錯誤訊息改為更穩定的缺表容錯處理。
修復
v2.10.24

補回 article_comments 表並加文章留言缺表容錯

修正

  • 觸發 production /api/migrate/create-missing-tables,補回 article_comments 表。
  • /api/articles/comments 現在遇到 article_comments 缺表時,GET 會回傳空列表而非直接 500。
  • POST / DELETE 在缺表時會回傳明確提示,要求先執行 /api/migrate/create-missing-tables
優化
v2.10.23

加強 ChineseAN API debug fallback 訊息

改善

  • 加強 /api/admin/affiliates/check-chinesean debug 輸出,新增 request URL、request params、response headers、content type。
  • 同步加強 /api/admin/affiliates/sync 在 API 回傳 0 個或非 JSON 時的 debug payload。
  • /admin/affiliates 現可直接顯示上述 debug 資訊,方便向 ChineseAN support 提供完整診斷資料。

備註

  • app/admin/affiliates/page.tsx 仍有既有 no-explicit-any lint,非今次新增。
修復
v2.10.22

修正登入跳轉與 ChineseAN 檢查 API 診斷

修正

  • 首頁標題由測試用的 信用卡回贈計算機 v2 改回原本字樣。
  • 改善 /api/admin/affiliates/check-chinesean 在 HTTP 200 但非 JSON 時的診斷資訊,會額外回傳 content type、hint 與 raw preview。
  • 修正 Google Web Login 成功後的跳轉流程,改為在 OAuth callback 完成後直接 server-side 轉址回目標頁,避開 /auth/success client-side exception。
新功能
v2.10.21

新增東亞春日自主賞 2026 優惠文章與條款

新增內容

  • 新增東亞信用卡春日自主賞 2026 /discover 優惠文章
  • 補上 FAQ、SEO、相關東亞信用卡卡面模組與 /cards 連結
  • 同步加入需登記及每階段累積簽賬追蹤設定,支援 /my-promos
  • 同步寫入 /admin/card-terms 條款存檔

技術修正

  • 避免在 template literal 內容中出現未轉義反引號,防止 build 失敗
maintenance
v2.10.20

補充文章 template literal 防錯規則

維護

  • .cursor/rules 補充規則:promos.tsguides.ts 等 template literal 內容中,如要寫 markdown inline code,必須將反引號轉義。
  • 明確記錄未轉義反引號會提早結束 template literal,導致 TypeScript build 失敗,部署停留在舊版本。
修復
v2.10.7

修復 discover 文章頁 null tags 導致 500

Bug Fix

  • 修復 parseJsonField 在 JSON.parse("null") 時返回 null 而非 fallback 的問題
  • generateMetadata 中 ...promo.tags 加入 null 防護
  • 渲染層 promo.tags.join() 加入 null 防護
  • 影響文章:enJoy 簽賬獎賞、HSBC 豐澤優惠
maintenance
v2.10.19

再次觸發部署同步新 Discover 文章

維護

  • 由於 production 仍未同步最新 Discover 文章與對應頁面修復,重新觸發一次部署。
  • 本次不涉及業務邏輯變更,目的只為確保近期新增的優惠文章與頁面修復真正上線。
maintenance
v2.10.18

重新觸發部署同步 Discover 新文章

維護

  • 確認 production changelogcard_terms 已有最新資料,但 /api/promos/{id}/discover/{slug} 仍未見到新文章,顯示正式站程式碼尚未同步至最新 commit。
  • 重新觸發一次部署,確保近期新增的 Discover 優惠文章與頁面修復一併上線。
修復
v2.10.17

修復 Discover 新文章頁 500 錯誤

修復

  • 修正 /discover/[slug] 讀取 MySQL promo 記錄時,未先解析 related_card_idstagsfaqs JSON 字串而直接渲染的問題。
  • 新同步到資料庫的 promo 文章現在會正確將上述欄位 parse 成陣列後再渲染。
  • 修復後,近期新增的 discover 優惠文章不會再因 map() 作用於字串而返回 500。
新功能
v2.10.16

新增滙豐豐澤優惠文章

新增優惠文章

  • 新增 滙豐 HSBC 信用卡豐澤優惠 2026 /discover 優惠文章。
  • 整理單一簽賬滿 $3,500 送 $150、滿 $7,000 送 $400,以及綁定易賞錢的 HSBC easy / 合資格白金 Visa 滿 $9,500 額外 +$150 的玩法。
  • 文章內加入滙豐相關信用卡卡面模組及 /cards 內部連結。

會員與追蹤

  • 這則優惠需要先於 Reward+ 登記,因此會加入 /my-promos
  • 由於條款屬單一簽賬多級門檻,現階段不以一般 progress tracker 追蹤,避免誤導成累積簽賬優惠。

條款歸檔

  • 同步將滙豐豐澤優惠條款寫入 production card_terms
  • 文章與條款均以官方 PDF 為準,明確採用 2026 年 8 月 31 日或之前入賬的版本。
新功能
v2.10.15

新增恒生 enJoy 卡簽賬獎賞文章

新增優惠文章

  • 新增 恒生 enJoy 卡簽賬獎賞 2026 /discover 優惠文章。
  • 整理每階段累積簽賬滿 $5,000、購物額外 10X yuu 積分、餐飲額外 20X yuu 積分的玩法與 FAQ。
  • 文中加入恒生 enJoy 卡卡面模組與內部 /cards/hangseng-enjoy 連結。

追蹤與會員

  • 這則優惠需要登記,且有清晰累積簽賬門檻,因此已設為可加入 /my-promos 的優惠。
  • progressTarget = 5000 方式支援階段性簽賬追蹤。

條款歸檔

  • 同步將恒生 enJoy 卡日常日嚐簽賬賞條款寫入 production card_terms
  • 文章與條款一律以官方條款頁內容為準,明確採用 2026 年 7 月內入分的版本。
優化
v2.10.14

新增滙豐屈臣氏優惠文章及收稿規則

內容更新

  • 新增 滙豐信用卡屈臣氏優惠 2026 /discover 優惠文章,整理簽滿 $500 送 $50 電子優惠券的條款、FAQ、SEO 內容及相關滙豐卡內部連結。
  • 文章以官方 PDF 條款為準,明確採用門市券與網店券的正確入賬及到期日。
  • 這則優惠不需登記、亦無合理進度追蹤,因此不加入 /my-promos

條款歸檔

  • 同步將 HSBC x 屈臣氏優惠條款寫入 production card_terms,方便後台 /admin/card-terms 後續查閱與管理。

規則更新

  • 補強優惠收稿規則:先分類 promo / guide / cards.ts / partner-offers。
  • 新增 promo FAQ / SEO、文內信用卡卡面圖與 /cards 內部連結要求。
  • 明確規定:只有需登記或可追蹤進度的優惠才加入 /my-promos
  • 明確規定:只要用戶提供條款網址、PDF 或條款內容,就必須同步寫入 /admin/card-terms
  • 明確規定:新增 /discover 文章時,需同時可見於前台 /discover 與後台 /admin/discover,預設無需置頂。
修復
v2.10.13

修復網站 Logo 與重新生成 Admin chunk

修復

  • 將前台與結構化資料的網站 Logo 參照改為正確的 /logo.jpg,避免因副檔名與實際檔案格式不一致而出現死圖。
  • 對 Admin layout / error / dashboard 作最小變更,強制生成新的 chunk hash,避開 production 上持續回傳 520 的舊 chunk URL。
maintenance
v2.10.12

重新觸發部署以修復 Admin chunk 520

維護

  • 確認回復到 997f3f3 後本地可成功 build,Admin 路由亦能正常產生。
  • Production /admin 仍有部分 _next chunk 回傳 520,因此重新觸發部署以修復部署資產不完整問題。
maintenance
v2.10.11

回復至 997f3f3 穩定版本

維護

  • 由於 Admin 仍持續出現錯誤提示及網站 Logo 顯示異常,已回復至 997f3f3 的穩定版本狀態。
  • 本次回復以非破壞方式執行,保留完整 Git 歷史。
修復
v2.10.10

收窄版本更新錯誤判斷

修復

  • 收窄前台與 Admin 錯誤頁對「頁面版本已更新」的判斷,只在較明確的 chunk / module mismatch 情況下顯示。
  • 普通載入錯誤或一般網絡失敗不再誤判成版本更新提示。
  • 統一全站與 Admin error boundary 的版本錯誤判斷邏輯。
優化
v2.10.9

我的優惠頁移除重覆提醒總覽

改進

  • /my-promos 頁頂移除重覆的提醒總覽卡,避免與下方詳細列表重覆顯示。
  • 保留原有詳細提醒與優惠分類內容,頁面資訊更聚焦。
優化
v2.10.8

首頁提醒去重並恢復計算機優先

首頁體驗優化

  • 首頁將計算機重新置於摘要與提醒模組之前,恢復主流程優先
  • PromoSummaryWidget 移除重覆顯示的單條重要提醒
  • 首頁保留一張摘要卡 + 一組詳細 reminders,避免同一優惠提醒重覆出現兩次

前台可見頁面

  • 首頁 /:計算機會先顯示,且不再重覆顯示同一提醒
  • 我的優惠 /my-promos:維持詳細提醒模組顯示
新功能
v2.10.7

首頁與我的優惠接入摘要及提醒模組

新功能

  • 首頁 PromoSummaryWidget 改為讀取 /api/user/home-summary
  • 新增 Web PromoRemindersWidget,讀取 /api/user/reminders 顯示優惠提醒
  • /my-promos 頁面加入同一套 reminders module,與首頁提示整合

規則更新

  • .cursor/rules 新增規則:每次完成更新後,必須主動告知用戶前台可在哪些頁面看到;如屬純 API 或未接前台改動,亦要明確說明目前前台未可見

前台可見頁面

  • 首頁 /:可見新的摘要與提醒模組
  • 我的優惠 /my-promos:可見新的優惠提醒模組
新功能
v2.10.6

新增 home-summary 與 reminders API

新功能

  • 新增 /api/user/home-summary,為首頁個人化摘要提供 MySQL 聚合資料
  • 新增 /api/user/reminders,整合優惠到期、需登記及進度未完成提醒
  • 新增 lib/user/get-home-summary.tslib/user/get-reminders.ts helper,統一 MySQL-only 資料聚合邏輯

技術說明

  • 兩個 API 均使用 JWT cookie / Bearer 驗證,未登入回傳 401
  • 所有 reminder 與 summary 資料均直接由 MySQL + 本地 promo 定義聚合,不引入 Supabase 或其他歷史相容層

待續

  • 下一步可直接將首頁 summary UI 與 reminders module 接上新 API
新功能
v2.10.5

新增文章與卡片 CTA 導流追蹤

新功能

  • Discover 攻略與優惠文章新增 CTA 導流區塊
  • 信用卡詳情頁新增「計算 / 比較」決策 CTA 模組
  • Analytics 新增文章 CTA 與卡片決策 CTA 的 impression / click 事件

規則更新

  • .cursor/rules 新增規則:Agent 如需向用戶提問、確認或請求批准,一律使用繁體中文

備註

  • 所有新導流與後續規劃均以 MySQL 為唯一資料來源,不引入 Supabase 假設
優化
v2.10.4

新增 PRD、優先級 backlog 及 Phase 1 工程文件

文檔更新

  • 新增全站產品需求文件(PRD),整理現況、版本規劃、變現策略與 API 影響
  • 新增 2026 Q1 priority backlog,按 Phase 1 / Phase 2、優先級與 owner 類型拆分任務
  • 新增 Phase 1 Jira / Linear tickets 文件,轉成可直接開票格式
  • 新增 Phase 1 engineering spec,對應首頁 CTA、Wallet Summary、提醒聚合與 Partner placement
  • 全部文檔統一改為明確聲明:系統已不再使用 Supabase,MySQL 為唯一資料來源
優化
v2.10.2

計算機新增 PayMe 付款方式選項

優化

計算機新增 PayMe 付款方式

  • Web 及 Mobile 計算機新增「PayMe」付款方式選項
  • 與 AlipayHK、WeChat Pay 等電子錢包選項保持一致
  • 選擇 PayMe 後計算機會自動排除不支援的卡片規則,顯示實際可用回贈率
優化
v2.10.1

卡片設定 UX 優化 + 回贈明細顯示修正

UX 優化

卡片設定對話框固定底部按鈕

  • 「儲存設定」及「從錢包移除此卡」按鈕固定於 popup 底部
  • 內容區域獨立捲動,按鈕不會被捲走
  • Web 及 Mobile 版本同步調整

自動儲存機制

  • Web:分配 5X 或選擇類別後即時自動保存,關閉對話框不會丟失設定
  • Mobile:按關閉按鈕時自動靜默保存,按「儲存設定」按鈕顯示確認提示

Bug 修復

回贈明細空括號修正

  • getExtraSource 清除百分比後留下空括號 ()
  • 例:「最紅自主獎賞 9X ()」→ 修正為「最紅自主獎賞 9X [需登記,5X自由分配]」
  • 避免用戶誤以為未計算最紅獎賞
新功能
v2.10.0

最紅自主獎賞 5X 自由分配、Travel Guru、AAVS、多組設定支援

新功能

HSBC 最紅自主獎賞 5X 自由分配

  • 由原本「五選一」改為 5X 自由分配模式
  • 用戶可將 5X 分配到不同類別(賞滋味/賞購物/賞家居/賞享受/賞世界)
  • 計算機根據分配精準計算各類別回贈率
  • Stepper UI 顯示剩餘點數

Travel Guru 等級選擇

  • 新增 Travel Guru 等級下拉選擇(GO +3% / GING +4% / GURU +6%)
  • 海外實體店簽賬可疊加最紅自主獎賞
  • HSBC VS 及 EveryMile 適用

八達通自動增值 (AAVS)

  • 計算機新增「八達通自動增值」付款方式選項
  • Web 及 Mobile 同步支援

多組自選類別設定

  • 同一張卡支援多個設定組(如 HSBC VS 同時有最紅自主獎賞 + Travel Guru)
  • 卡片設定對話框分段顯示各組設定
  • 計算機獨立處理各組規則

Travel Guru 登記提醒

  • 錢包頁面為 HSBC VS 及 EveryMile 持卡人顯示 Travel Guru 登記提醒
  • 可關閉,不重複顯示

技術改動

  • CardSelectionConfig 新增 allocate 模式及 totalPoints
  • RewardRule 新增 allocationMaxPoints 欄位
  • calculator.ts 重構為多組 resolvedGroups 架構
  • Web/Mobile/API 全面同步更新
優化
v2.9.1

錢包交易記錄優化、提醒修正、合作夥伴推廣頁面

新功能

合作夥伴推廣頁面 /offers

  • 新增 /offers 頁面展示 MoneyHero 合作推廣卡片
  • 後台可開關 /offers 頁面及 Navbar 入口
  • 管理員可自訂推廣卡片清單及截止日期

交易記錄功能優化

  • 新增 DELETE API 支援刪除交易記錄
  • 刪除圖示直接顯示(不再需要 hover)
  • physical_card 翻譯為「實體卡」
  • 日期改為香港時區格式

Bug 修復

年費提醒/消費提醒重複出現

  • 關閉後重新出現問題修正
  • 改用 useState lazy initializer 同步載入 localStorage

進行中優惠計數不一致

  • /wallet/my-promos 頁面計數對齊

Admin Discover 頁面

  • 文章瀏覽數 0 問題修正(pageview API path 欄位修正)
  • 日期改為 HK 時區格式

其他

  • 條款管理改為 archive 模式(MySQL 統一管理)
  • 新增 Cursor rules:條款自動存檔、自動 git push、新增文章檢查清單
新功能
v2.9.0

全面檢查修正 — Bug修復、Mobile自選類別、FX計算機紀錄、錯誤頁面

新功能

Mobile 卡包自選類別設定

  • Mobile App 卡包新增齒輪設定按鈕
  • 支援 HSBC 最紅自主獎賞、DBS Live Fresh、MMPOWER、WeWa 的自選類別設定
  • 單選/多選模式完整支援
  • 卡面顯示自選類別狀態標籤(未設定/已過期/待確認/已設定)
  • 設定儲存到 AsyncStorage + 雲端同步

FX 外幣計算機使用紀錄

  • 新增 fx_calculator_logs 資料庫表
  • 前端計算後自動記錄(幣種、金額、最佳卡、用戶)
  • 後台新增「外幣計算機記錄」頁面(/admin/fx-logs)
  • 統計:今日/昨日/近7日使用次數、最熱門幣種
  • 支援按用戶名稱或 Email 搜尋

一般用戶錯誤頁面

  • 新增 app/error.tsx 通用錯誤頁面
  • 包含重新整理/重試/返回首頁按鈕
  • Chunk 載入錯誤特殊處理提示

Bug 修復

  • 回報 API:移除不存在的 merchant_id 欄位,修復「Unknown column」錯誤
  • 回報 API 統一/api/report/api/report/submit 統一使用相同欄位結構
  • Admin Transactions:修復 reward_amount?.toFixed 錯誤,改用 parseFloat(String()) 防禦 BigInt/Decimal
  • Changelog 時間:改用香港時間 (HKT) 顯示日期

優化

  • Mobile 計算機移除 debug console.log
  • Admin 側邊欄新增「外幣計算機記錄」入口
  • .cursor/rules 新增時間顯示規則(所有頁面一律使用 HKT)
優化
v2.8.2

錢包卡面新增自選類別未設定提示

  • 錢包頁面的 HSBC、DBS Live Fresh、MMPOWER、WeWa 等有自選類別的卡片,新增卡面狀態提示:
    • 未設定(琥珀色):「未設定最紅自主獎賞,點擊齒輪設定」
    • 已過期(紅色):「優惠已過期」
    • 待確認(藍色):「請確認今年的設定」
  • 已設定且有效的卡片不顯示提示,保持乾淨介面
優化
v2.8.1

隱藏錢包頁面迎新追蹤器

  • 隱藏錢包頁面的「迎新追蹤器」組件(WelcomeOfferTracker),暫無實際用途
  • 組件代碼保留,日後需要時可重新啟用
新功能
v2.8.0

通用自選類別框架 + 數據修正 + 排行榜優化

新功能

  • 通用自選類別框架:支援 HSBC 最紅自主獎賞、DBS Live Fresh、恒生 MMPOWER、WeWa 四組卡的自選類別設定
  • 計算機自動偵測用戶自選類別狀態(已設定/未設定/已過期/待確認)
  • 錢包頁面卡片設定彈窗支援單選及多選類別
  • 計算結果顯示自選類別狀態標籤
  • 後台會員詳情頁可查看用戶自選類別設定

數據修正

  • Hang Seng Travel+ Visa Signature:年費修正為永久免年費
  • SC Smart Card:移除「八達通錢包增值」不包事項(此卡八達通自動增值有 0.56% 回贈)

排行榜優化

  • 同家族卡片去重新增年費 tiebreaker,同回贈率時優先顯示年費較低的版本
  • 確保每個排行分類都選到最合適的家族代表(例如:網購選 sim Credit Card,海外選 sim World Mastercard)
新功能
v2.10.22

ChineseAN 後台憑證 + 23 商戶 Logo + Auth 修復

新功能

  • ChineseAN 憑證可於 /admin/affiliates 填寫儲存至 DB(騰訊雲無法設 env 時適用)
  • 新增 23 個商戶 Logo(莎莎、Dyson、Samsung、Lancôme、CASETiFY 等)

修復

  • Auth 路徑 pathname 改用 cookie 傳遞,避免 proxy 過濾 header 導致無 CSS
修復
v2.10.22

Auth 登入修復 + 文檔同步規則

修復

  • Auth 路徑改用 server-side pathname(middleware x-pathname header)避免 usePathname() hydration mismatch
  • 新增 app/auth/layout.tsx 精簡 Provider,修復 Google 登入後 /auth/success client-side exception

新增

  • 開發規則十七:文檔同步 — 改動時自動更新 HANDOFF、PRD、AFFILIATE、SYSTEM_DOCUMENTATION
修復
v2.10.6

加強 chunk error 攔截及防快取

Bug Fix

  • inline script 加入 unhandledrejection 監聽(捕捉 Promise 類 chunk 錯誤)
  • 擴展錯誤匹配模式:Unexpected token / invalid JavaScript / module import failed
  • HTML 加入 Cache-Control: no-cache 防止過度快取
  • next.config 加入 headers() 對非靜態資源設 no-cache
修復
v2.10.5

Chunk error 全域攔截修正

Bug Fix

  • 在 HTML head 加入 inline script 全域捕捉 chunk 載入錯誤
  • 不依賴 React error boundary,即使舊 JS 被快取也能自動重載
  • 配合 error.tsx 的 React 層級修正,雙重保障
修復
v2.10.5

改進 chunk error 自動重載

Bug Fix

  • 改用 cache-busting URL 取代普通 reload,確保瀏覽器取得最新版本
  • 冷卻時間從 10 秒增加到 30 秒
  • 手動重新整理按鈕也使用 cache-busting
修復
v2.10.4

Chunk error 自動重載修正

Bug Fix

  • 部署新版本後,瀏覽器快取舊 JS chunk 導致頁面錯誤時,自動重新載入頁面
  • 使用 sessionStorage 防止 10 秒內重複重載(避免無限迴圈)
  • 前台及後台 error.tsx 同步修正
docs
v2.10.3

完善 AI 交接文檔

文檔更新

  • 完善 HANDOFF.md 交接文檔,從 10 個章節擴展至 19 個章節
  • 新增:多語系 (i18n)、認證與用戶系統、Analytics 與追蹤、SEO、Web Push 通知、支付方式與電子錢包邏輯、快取策略、環境變數、測試
  • 補充 Admin 後台功能列表、Mobile App 技術棧及功能
  • 關鍵文件索引從 18 項擴展到 35 項
新功能
v2.10.3

/offers 頁面新增銀行迎新優惠及合計總額顯示

新功能

  • /offers 頁面每張卡片新增顯示銀行本身迎新優惠內容(amber 底色區塊)
  • 新增「銀行迎新 + 本網額外獎賞」合計總額區塊,並拆分明細顯示
  • 里數卡片特殊處理:不與港幣金額相加,提示用戶查看卡片詳情
  • API 新增回傳 welcomeOfferRewardisMilesCard 欄位
更新
v2.10.3

E-wallet 商戶及支付方式邏輯優化

更新
v2.10.3

商戶 Logo 全面升級