首頁
逛實體店也能聰明買
站在貨架前,
站在貨架前,
一掃就知道哪裡最便宜
輸入、掃條碼或拍照,同步比較 PChome、momo、酷澎與蝦皮,含運費與回饋的實付價一眼看懂,再看走勢決定現在買還是等。
5 個通路實體+4 大電商
90 天價格走勢紀錄
實付價含運費與回饋
降價提醒到價自動通知
今日好價
看走勢 →三步驟,現場就能做決定
1
找到商品
掃條碼最準;沒有條碼就拍包裝或輸入關鍵字。
2
填入店內標價
系統把實體價與網路實付價並排,直接算出差多少。
3
看時機、放清單
價格在 90 天低點就買,偏高就設提醒,等降價再出手。
研發說明書 v1.0
好價雷達|系統架構與工作流程
從使用者在店內的一個動作,到後端如何收集、比對、分析價格,以及設計規範與上線部署。每一節都可收合,挑你需要的看。
目標使用者:在量販店、藥妝、3C 賣場、超市現場猶豫要不要買的消費者;以及需要定期補貨的小型辦公室、家庭採購者。
核心價值:3 秒內給出「現在在這裡買划不划算」的答案。
- 以「實付價」比較:售價+運費-點數回饋,避免只看標價的錯覺。
- 以「單位價」比較:每包、每公克、每片,解決不同包裝難以比較的問題。
- 以「時機」決策:結合 90 天走勢百分位,告訴你該買還是該等。
- 框架:MVP 以原生 JS(本檔案即是);正式版建議 Preact 或 Svelte,打包後 JS ≤ 60KB(gzip)。
- 掃碼:優先使用瀏覽器內建
BarcodeDetector;不支援時(如 iOS Safari)動態載入 ZXing WebAssembly 後援,只在使用者按下掃描時才下載。 - 拍照:
<input capture>取得影像,前端先壓縮到長邊 1280px 再上傳,節省流量。 - 離線:Service Worker 快取外殼與最近查詢;採購清單存在 IndexedDB,地下室賣場沒訊號也能看。
- 路由:Hash 路由+頁面模組延遲渲染,只在切換到該頁時才計算圖表。
| 服務 | 職責 | 關鍵技術 |
|---|---|---|
| 商品辨識 | 條碼 GTIN 查主檔;影像 OCR 讀品名/規格;圖像相似度找候選 | GTIN 主檔、OCR 服務、向量檢索 |
| 比價聚合 | 並行查詢各通路,單一來源逾時 2.5 秒即略過,不拖慢整體 | 非同步並行、斷路器、Redis 快取 |
| 商品比對引擎 | 判斷不同平台商品是否「同款同規格」,解析入數/容量換算單位價 | 規格正規化、相似度評分 ≥ 0.85 才視為同款 |
| 價格歷史・分析 | 寫入每日價格點、計算百分位、波動率、活動檔期效應 | 時序資料庫、連續聚合 |
| 通知推播 | 到價提醒、清單商品降價摘要 | Web Push、Email、LINE 通知 |
- 第一優先:官方 API、聯盟行銷計畫或授權資料供應商,資料穩定且合法,還能帶來分潤收入。
- 第二來源:使用者回報的實體通路價格,搭配信譽分數與照片佐證,異常值自動剔除。
- 若需自行擷取:必須先確認各平台服務條款與 robots.txt,控制頻率、不擷取個資、不繞過任何防護機制;建議上線前請法務審閱。
- 頁面上呈現的價格標註「更新時間」,並提醒「以平台頁面為準」。
| 資料表 | 主要欄位 | 說明 |
|---|---|---|
product | id, gtin, name, brand, spec, unit_qty, unit, category | 標準化商品主檔 |
listing | id, product_id, platform, url, seller, match_score | 各平台上的對應商品 |
price_point | listing_id, ts, price, shipping, rebate, in_stock | 時序價格,依時間分區 |
store_report | product_id, store, price, photo, user_id, trust | 實體通路回報價 |
user_list | user_id, product_id, qty, budget | 採購清單 |
alert | user_id, product_id, target_price, channel | 降價提醒 |
| 方法 | 端點 | 用途 |
|---|---|---|
| GET | /api/search?q= | 關鍵字搜尋(自動完成) |
| GET | /api/barcode/:gtin | 條碼查商品 |
| POST | /api/recognize | 上傳影像辨識商品 |
| GET | /api/compare/:id?store_price= | 多通路實付價比較 |
| GET | /api/history/:id?days=90 | 價格走勢與統計 |
| POST | /api/lists | 建立/更新採購清單 |
| POST | /api/alerts | 設定降價提醒 |
- 比價 API:p95 < 1.5 秒;快取命中 < 200 毫秒。
- 首頁 LCP < 2.0 秒(4G 手機)、INP < 200 毫秒、CLS < 0.05。
- 掃碼到出結果:< 3 秒。
- 服務可用性 99.5%;單一通路故障時其餘通路照常回傳。
擷取輸入輸入、掃碼或拍照
辨識正規化GTIN、規格、單位
多通路查價並行查詢+快取
實付價排序運費、回饋、單位價
時機判斷90 天百分位
清單與提醒採購、到價通知
- 打開 App(PWA 從主畫面啟動,免安裝)→ 首頁三個大按鈕:輸入、掃碼、拍照。
- 掃碼成功震動提示 → 直接跳到比價頁,並請使用者輸入店內標價(可略過,用回報價)。
- 比價結果:最上方一句話結論(在哪買省多少),下方各通路實付價由低到高。
- 想再想想 → 「看走勢」確認是不是低點;或「設降價提醒」。
- 確定要網購 → 加入採購清單,回家一次結帳;或前往平台頁面購買。
- ① 用戶端送出 GTIN 或關鍵字 → Gateway 驗證與限流。
- ② 查 Redis:熱門商品 10 分鐘內有結果就直接回傳。
- ③ 未命中 → 比價聚合服務並行查詢 4 個電商來源,每個來源逾時 2.5 秒。
- ④ 比對引擎過濾非同款(例如 72 包與 24 包),計算單位價與實付價。
- ⑤ 寫入價格點到時序資料庫(非同步,不影響回應時間)。
- ⑥ 回傳排序結果+走勢摘要;部分來源失敗時標記「暫無資料」而非整體錯誤。
| 分級 | 判定 | 更新頻率 |
|---|---|---|
| 熱門 | 近 24 小時被查詢或在清單中 ≥ 50 次 | 每 30 分鐘 |
| 一般 | 近 7 天有查詢 | 每 6 小時 |
| 長尾 | 其他 | 每日 1 次 |
| 檔期 | 雙 11、週年慶等活動期間 | 熱門商品加密至每 10 分鐘 |
所有任務進入佇列,失敗採指數退避重試 3 次;連續失敗的來源自動降級並通知值班人員。
每日最低價序列:取每天各電商實付價的最小值,形成 90 天序列。
價格百分位 P:目前價格在 90 天中贏過多少天。P 越低代表越便宜。
- P ≤ 25:建議入手(處於近期低點)
- 25 < P ≤ 60:價格合理(急用可買)
- P > 60:建議觀望,系統自動建議提醒價=90 天第 25 百分位
清單組合最佳化:先為每件商品找最低實付通路,再依通路合併計算免運門檻;若合併到單一平台反而更省(運費門檻效應),就推薦單一平台方案。
- 每次寫入價格點時比對提醒條件,命中後進入通知佇列。
- 同一商品 24 小時內最多通知 1 次;夜間 22:00–08:00 延後發送。
- 通知內容附上目前最低通路、與提醒價差距、價格更新時間。
- 節奏:雙週 Sprint;週一規劃、每日 15 分鐘站會、雙週五 Demo 與回顧。
- 分支:主幹開發+短命功能分支,所有合併需 1 人以上 Code Review。
- 品質:單元測試涵蓋比對引擎與計價邏輯;E2E 測試涵蓋掃碼→比價→加入清單主流程。
- 發佈:CI 自動建置、Lighthouse 分數低於 90 就擋下;新功能用 Feature Flag 先開給 5% 使用者。
- 監控:前端 Web Vitals、後端錯誤率與各來源成功率儀表板。
珊瑚橘主色・行動
湖水綠實體通路・信任
芥末黃亮點・插圖
省錢綠最低價・節省
警示紅較貴・超支
奶油白淺色背景
可可黑深色背景
H1 / 2.25rem一掃就知道哪裡最便宜
H3 / 1.08rem今日好價
內文 / 0.95rem含運費與回饋的實付價一眼看懂。
輔助 / 0.75rem價格更新於 10 分鐘前
| 裝置 | 寬度 | 導覽 | 版面 |
|---|---|---|---|
| 手機 | < 700px | 底部 5 格導覽列,拇指可及 | 單欄;比價結果卡片式 |
| 平板 | 700–1099px | 左側 88px 圖示軌,省空間 | 單欄加寬、圖表放大 |
| 電腦 | ≥ 1100px | 左側完整側欄+文字 | 雙欄:左側固定摘要、右側明細 |
頂部列固定放「掃碼、深淺色、字級」三個最常用動作,任何頁面一鍵可達。
- 插圖:暖色調、圓潤造型、深咖啡描邊 2.2px;人物帶腮紅與微笑,傳達「買到好價的小確幸」。
- 圖示:24px 網格、1.8px 圓角線條,與插圖同一套圓角語言。
- 功能入口圖示:圓形淡色底+紙張白+一個強調色點綴(掃描紅線、愛心鏡頭)。
- 全部以內嵌 SVG 繪製,深色模式自動換色,不需額外圖片請求。
- 頁面切換:淡入+上移 12px,420ms,緩動曲線
cubic-bezier(.22,.8,.24,1)。 - 收合面板:高度過渡 380ms,以 grid 列高動畫實作,不跳動。
- 比價列表:逐列滑入、價格長條由左長出,引導視線。
- 使用者若開啟「減少動態效果」,所有動畫自動關閉。
- 主題三選一:淺色、深色、跟隨系統;設定存在瀏覽器,下次開啟不閃爍。
- 字級四段:小 14px/標準 16px/大 18px/特大 20px;全站使用 rem,整體等比縮放。
- 色彩全部透過 CSS 變數(設計 Token)管理,新增主題只需改一組變數。
- 文字對比符合 WCAG AA;按鈕觸控區至少 44×44px。
- 所有圖示按鈕有
aria-label;收合面板有aria-expanded。 - 鍵盤可完整操作,焦點框清楚可見;Esc 可關閉彈窗。
- 本網站是單一檔案,檔名保持
index.html,直接上傳到網站根目錄即可。 - 正式站:price.wen8604.org,以 Cloudflare Workers 靜態資源部署(專案
wen8604-price),網域與 HTTPS 憑證由 Cloudflare 自動處理;也可改用 Pages、Netlify 或自有主機。 - 一定要 HTTPS:瀏覽器只允許在 HTTPS 網站開啟相機掃碼。
- 目前比價、走勢為示範資料;串接真實後端後,把 JS 中的資料函式改成呼叫 API 即可(見「API 規格」)。
server {
listen 443 ssl http2;
server_name price.example.com;
root /var/www/goodprice;
index index.html;
gzip on;
gzip_types text/html text/css application/javascript image/svg+xml;
location = /index.html {
add_header Cache-Control "no-cache";
}
location ~* \.(js|css|svg|png|webp|woff2)$ {
add_header Cache-Control "public, max-age=31536000, immutable";
}
add_header Strict-Transport-Security "max-age=31536000" always;
add_header Permissions-Policy "camera=(self)" always;
}
- 零外部依賴:不載入字型、框架與圖片,一次請求即完成。
- 全部插圖與圖示為內嵌 SVG+圖示 sprite 重複引用,體積小、可隨深色模式換色。
- 主題於
<head>先行套用,避免開啟時白屏閃爍。 - 頁面模組延遲渲染:圖表、清單只在切換到該頁時才計算。
- 價格歷史記憶化快取,切換期間不重算。
- 動畫只用 transform 與 opacity,由 GPU 合成,不觸發重排。
- manifest.webmanifest:名稱、圖示(含 maskable 版)、主題色、獨立視窗模式,以及長按圖示出現的「掃碼/走勢/採購」捷徑。
- sw.js:頁面採網路優先、3 秒逾時改用快取,所以上線新版後馬上生效,沒訊號時也能開;圖示採快取優先、背景更新。
- 安裝:Android/電腦版 Chrome、Edge 會在頂部列與「顯示設定」出現「安裝到主畫面」按鈕;iPhone 用 Safari 的「分享 → 加入主畫面」。
- 離線提示:斷線時頂端顯示「離線中」,恢復時提示「網路已恢復」。
- 更新版本:改網站後把 sw.js 的
VERSION換掉,舊快取會自動清除。
| 階段 | 時程 | 範圍 |
|---|---|---|
| MVP | 第 1–6 週 | 本介面上線、條碼查價、4 大電商比價、實付價與單位價 |
| V1 | 第 7–14 週 | 90 天走勢、採購清單、降價提醒、會員登入、PWA 離線 |
| V2 | 第 15–24 週 | 拍照辨識、實體價群眾回報、檔期預測、團隊/企業採購報表 |
- 產品經理 1:需求、優先序、資料來源合作洽談。
- UI/UX 設計 1:插圖、元件庫、可用性測試。
- 前端工程 2:PWA、掃碼、圖表、效能。
- 後端工程 2:聚合服務、比對引擎、通知。
- 資料工程 1:收集排程、時序資料、分析模型。
- QA 1:自動化測試與裝置相容性。