[實戰解析] 匯率展示系統:從零到一的 MVP 最小可行性架構規劃
前幾天接到一個有趣的委託,某個店家希望能做一套「匯率展示系統」,可以直接掛在店內或飯店大廳當作廣告看板。需求聽起來很直白:系統要定時去抓台灣銀行的外幣匯率,然後在畫面上顯示加上「店家利潤」過後的匯率。
說白了,這就是要一台能夠自動更新、自動算好加扣點數的數位看板。
在真的跳下去寫 code 之前,最重要的永遠是先確認「這東西真的能解決問題嗎?」、「店家真的願意為了這個付月費嗎?」。這篇文章我就來分享一下,如何用最低成本、最少開發時間,規劃出一個足以用來驗證市場意願的 MVP(Minimum Viable Product)架構。
1. 核心問題:把力氣花在刀口上
開發完整產品很花時間,為了在初期以最低成本驗證買家意願,我們只專注在一件事:真實的銀樓或旅店負責人,看到這個東西,會不會買單?
所以這個「MVP Lite」版本,我們只做「能讓店家看到效果、能開口談月費」的最少功能,把那些對驗證沒有直接幫助的功能通通砍掉。
那些被我砍掉的功能
在規劃初期,我們必須很果斷地捨棄一些過度工程:
- App 開發(Flutter / Android / Windows):開發重、測試麻煩。直接用網頁瀏覽器全螢幕模式替代。
- QR Code 設備配對與管理:MVP 只做掃碼網頁顯示授權,先不做複雜的設備 Token 與管理流程。
- 管理員審核流程:人工操作即可,暫時不需要專門刻一個管理員頁面。
- Redis 快取與多服務架構:以初期驗證的 10 店規模來說,PostgreSQL 直接查詢就夠了。全部塞進單一服務,不需要搞 Docker Compose 拆分。
- 多租戶訂閱與金流:先不做方案限制與線上扣款,直接收轉帳、手動開通。
2. 應用場景與畫面示意
MVP 的核心是要讓客戶「有感」,以下是幾個預期的使用情境:

這是在銀樓店內的應用情境,店家可以將廣告機掛在櫃台或牆面,顯示自己設定後的外幣收兌匯率,並隨時透過手機調整利潤點數。

如果是飯店業者,則可以在大廳櫃台旁提供旅客即時外幣匯率資訊,提升服務體驗。
3. MVP 留下的核心功能
捨棄了花里胡哨的東西後,真正需要動手做的就這三塊:
- 台銀匯率排程抓取
- 每小時定時呼叫台銀 CSV API。
- 儲存幣別、現金買賣、即期買賣到資料庫。
- 如果抓取失敗就保留上一筆,記錄錯誤原因就好。
- 店家後台(極簡版)
- 使用 LINE Login 登入。
- 店家資料先由我手動在資料庫建立,並綁定使用者的 LINE 帳號。
- 讓店家勾選要展示的幣別。
- 對每個幣別設定「固定點數」的加扣(現金買入 / 賣出)。
- 按下儲存立即生效,並能預覽計算後的匯率表。
- 廣告機展示頁(全螢幕網頁)
- 每個店家會有專屬路徑,例如
/display/:storeId。 - 首次開啟時顯示 QR Code,負責人用手機掃碼進行 LINE Login。
- 驗證成功後,原本的螢幕自動切換顯示匯率,並每 30 秒自動更新。
- 畫面單純顯示:幣別、現金買入、現金賣出、最後更新時間。
- 終端設備只要插上電視棒(例如 Chrome Stick)跑全螢幕模式就行了。
4. 系統架構設計
為了極致縮短開發時間,架構必須越簡單越好。我決定全部用一個 Next.js 專案搞定(包含後台頁面、展示頁、API Routes),搭配免費層的 PostgreSQL 與排程服務。
flowchart LR
BOT[台灣銀行 CSV] --> Worker[排程 Worker]
Worker --> DB[(PostgreSQL)]
StoreUser[店家負責人] --> LineLogin[LINE Login]
LineLogin --> StoreWeb[店家後台 /admin]
StoreWeb --> API[後端 API]
API --> DB
Display[廣告機瀏覽器] --> DisplayPage[展示頁 /display/:storeId]
DisplayPage --> QRAuth[QR Code 驗證畫面]
QRAuth --> LineVerify[LINE Login 驗證]
LineVerify --> API
這樣的架構省去了維護多個 repo 的麻煩,部署也只需要丟上 Zeabur 或 Vercel 就能一鍵搞定。
5. 資料模型規劃
資料庫 schema 同樣遵循精簡原則,只留下驗證必需的欄位:
- stores(店家基本資料):
id,name,line_user_id,is_active - display_auth_sessions(授權狀態):
store_id,session_token,is_authorized - exchange_rates(原始匯率):
currency,cash_buy,cash_sell,fetched_at - store_rate_rules(店家設定):
store_id,currency,cash_buy_offset,cash_sell_offset - rate_fetch_logs(抓取紀錄):單純用來追蹤排程是否正常運作。
小結
這套「MVP Lite」方案的核心思維,就是用最原始、甚至有點半手工的方式,先撐起產品的核心價值。
與其花一個月寫完整的用戶註冊、金流訂閱和設備管理系統,不如花幾天把最核心的匯率運算和展示頁做出來,立刻拿去給店家試用。等到有多間店家願意付款使用,我再來著手進行第二階段,把產品正式 SaaS 化,屆時再去規劃進階功能,包含 SaaS 自動化金流、快取與多租戶架構等。
順帶一提,這個小案子在架構規劃收斂完畢後,搭配 AI Agent 進行開發,預估核心程式碼大概 2 到 3 天內就能寫完。如果再加上前期的溝通、後續的部署與實機測試等環節,整體專案大約 1 到 2 週內就可以順利結案。這種高效率的開發模式,正是我們能夠用極低成本、快速將點子丟向市場驗證的最大武器!




