技術筆記

一套核心,多款應用:whitelabel 銀行平台如何運作

Whitelabel 銀行平台,就是一套搭配可替換前端的銀行核心。核心是必須正確無誤的部分:複式記帳的總帳、客戶帳戶、KYC 與開戶、發卡與處理、加密貨幣與穩定幣通道,以及運行在這一切背後的營運後台。應用則是客戶看得到的部分:名稱、色彩、畫面的樣貌,以及開啟的功能子集。Whitelabel 的意思是,同一套核心可以換上許多張面孔,而不必為每一張重建。一套核心,多款應用。

直白地說,這是在談接縫落在哪裡。凡是涉及資金的一切,都只需共用、稽核與對帳一次;凡是涉及客戶的一切,則依租戶各自設定。真正重要的工程,是讓這條界線保持誠實:前端可以自由變化,而其下的核心絕不分叉。本文拆解這條界線如何劃定,以及為什麼用設計 token 來劃,勝過用分支複製來劃。

永遠不變的部分:核心

先從不容許發揮創意的那一半說起。無論應用把一筆轉帳標示為匯款、付款還是撥款,入帳方式都一樣:在複式記帳的總帳上記兩筆分錄,而且從不刪除任何東西。總帳只增不減,所以退款是引用原始交易的反向分錄,而不是抹除。帳戶、餘額與授權圈存都在這裡。KYC 與開戶、發卡與清算,以及加密貨幣與穩定幣通道也是如此。在它們之後是唯一的營運後台,每一項特權操作都必須填寫理由,並寫入稽核日誌。

這些都只有一套,這正是重點。結算、對帳與合規,做對很難,做錯代價高昂,所以只建一次,讓每個應用繼承成果。當租戶為客戶開戶時,核心判定的 KYC 等級會跟著該客戶進入後台,無論證件是由哪個應用的畫面擷取的。核心不知道,也不在意上層的應用叫什麼名字:它看到的是帳戶與分錄,而不是品牌。

會變的部分:設計語言、資訊架構、功能組合

核心之上的一切都可自由調整,沿著三條軸線展開。第一是設計語言:色彩、字型、圓角、間距、動態,也就是品牌的視覺語法。第二是資訊架構:首頁放什麼、流程如何命名與排序、哪個動作一點即達、哪個要點三下。第三是功能組合:究竟開啟哪些模組。精簡的轉帳應用與內容豐富的超級應用,可以跑在完全相同的核心上,卻沒有任何一個共用的畫面。

/products/pay 的產品頁面介紹了五個實作方向,與其把它們看成五選一的菜單,不如視為無限可能中的幾個例子。Halcyon 是簡潔的交易所,克制、畫面少,交易置於最前。Lumen 是超級應用,資金在對話中流動,聊天支付、訂閱與理財共用首頁。Fern 以轉帳為先,批次撥款與規則式外匯兌換優先。Volt 是深色穩定幣版本,具備薪資分流器與團隊卡。Meridian 支援多幣別:EUR 帳戶旁有 USDC、GBP 旅行餘額,以及接收卡片回饋的 BTC 帳戶。五個品牌、五種資訊架構、五種功能組合,底下都是同一套總帳、同一套 KYC、同一個卡片處理器。

這並不表示產品是五個應用。這五個只是同一條產線可以走的方向,真正重要的數字不是五,而是你開通了多少租戶。每一個都證明,前端可以從首頁的形狀開始全然不同,而其下的核心毫無察覺。

核心是你不被允許重新發明的部分;應用是你不被允許加以限制的部分。Whitelabel 平台的修為,就在於讓這兩句話同時成立。
— Protocore · 平台工程

為什麼 token 層級的主題化勝過分支複製程式碼

要讓一個產品看起來像許多個,有兩種做法。顯而易見的是分支複製:每位客戶複製一份程式碼,改頭換面後上線。這只在第一個版本管用。之後,每次修正錯誤、每項法規變更,都得在 N 份逐漸分歧的副本上各做一次,副本彼此失去同步,而你必須掌握的安全面,也隨客戶數成倍增加。分支複製把一個你了解的系統,變成許多你不了解的系統。

Token 層級的主題化則反其道而行。只有一份程式碼。一個品牌就是一組值:色彩、字型、圓角與間距的 token、元件設定、功能旗標集,並於建置時解析成品牌應用。改動一個 token,所有讀取它的畫面會一起改變,因為沒有任何地方把本該取自 token 的值寫死。轉帳流程的修正會一次推送給所有租戶,因為要修的轉帳流程只有一個。品牌的差異在於設定,而不在原始碼。

設計系統的位置

Token 不是鬆散的概念,而是已經交付的成品。Protocore Design System(/products/pds)包含 144 個設計 token 與 889 個工具類別,是所有應用進行主題化所用的語彙。它以深色為先、由 token 驅動,預設圓角為零,同一組 token 會輸出至 web、.NET 與原生平台,因此只定義一次的色彩,在 React 畫面、桌面後台與原生行動版本中都是同一種顏色。租戶的品牌以覆寫此語彙的方式呈現,這就是為什麼換膚是一次設定變更,而不是重寫。

這也讓前端真正自由,而不是在範本內的自由。由於設計語言存在於 token 與工具類別,而不是一次性的樣式表,設計師可以讓租戶大幅偏離基準版本:專屬的色盤、字型、密度與節奏,而不必動到核心或分支複製應用。油漆可以刷得很深,但終究只是油漆;其下的管線是共用的。

應用是設定,不是建置

功能組合遵循同一條規則。每個模組,無論是聊天支付、理財、加密貨幣、卡片、訂閱、團隊卡還是推薦,都是依租戶撥動的開關,旗標也可以先對一部分使用者推出,再全面開放。營運人員從設定面板切換,而不必重新部署。所以精簡的轉帳應用與完整的超級應用,並非兩個專案,而是同一個專案的兩種設定。每個租戶起步的參考應用,是帶有 Protocore 品牌、菜單齊全的中性版本;每個 whitelabel 都是這個版本,覆寫 token 並開啟或關閉模組後的結果。

坦白的界線

一套核心、多款應用,只有在你確實擁有多款應用時才值得這番功夫,或者你有一款應用,打算隨時間不斷換膚、重新編排、調整範圍,卻不想每一輪都重建銀行。如果你要上線的是一款固定的單一應用,永遠不會換上第二個品牌,那你不需要 whitelabel 平台,你需要的是一個應用。它真正發揮價值的,是它為之而生的情境:平台一個接一個租戶地建立品牌銀行產品,每個都明顯有自己的樣子,卻沒有一個是分支複製。完整的拆解,包括五個方向、參考應用及其背後的營運後台,請見 /products/pay,其下的設計系統則在 /products/pds。

有系統要打造?

告訴我們問題所在,我們會帶著架構與計畫回覆您。