Fältanteckningar

En kärna, många appar: så fungerar en whitelabel-bankplattform

En whitelabel-bankplattform är en bankkärna med utbytbart frontend. Kärnan är den del som måste vara korrekt: en huvudbok med dubbel bokföring, kundkonton, KYC och onboarding, kortutgivning och kortbearbetning, krypto- och stablecoin-rails samt operatörskonsolen som körs bakom allt detta. Appen är det kunden ser — dess namn, färger, skärmarnas form och den delmängd funktioner som slagits på. Whitelabel betyder att en kärna kan bära många ansikten utan att byggas om under varje. En kärna, många appar.

Sagt rakt ut är det ett påstående om var skarvarna ligger. Allt som rör pengar delas, granskas och stäms av en gång; allt som rör kunden konfigureras per tenant. Ingenjörskonsten ligger i att hålla den linjen ärlig — att låta frontend variera fritt medan kärnan under aldrig forkas. Det här är en genomgång av hur linjen dras, och varför det är bättre att dra den med design tokens än med en fork.

Det som aldrig varierar: kärnan

Börja med den hälft som inte får vara kreativ. En överföring bokförs på samma sätt oavsett om appen kallar den skicka, betalning eller utbetalning: två poster i en huvudbok med dubbel bokföring, och inget raderas någonsin — huvudboken bara läggs till, så en återbetalning är en motpost som refererar till originalet, inte en utradering. Konton, saldon och auktoriseringsreservationer bor här. Det gör även KYC och onboarding, kortutgivning och avveckling samt krypto- och stablecoin-rails. Bakom dem finns en operatörskonsol där varje privilegierad åtgärd kräver en motivering och hamnar i en granskningslogg.

Det finns exakt en av varje, och det är poängen. Avveckling, avstämning och compliance är svåra att få rätt och dyra att få fel, så du bygger dem en gång och låter varje app ärva resultatet. När en tenant onboardar en kund följer den KYC-nivå som kärnan bestämmer med kunden in i konsolen, oavsett vilken apps skärmar som fångade dokumenten. Kärnan vet inte och bryr sig inte om vad appen ovanpå heter — den ser konton och poster, inte varumärken.

Det som varierar: designspråk, informationsarkitektur, funktionsmix

Allt ovanför kärnan kan röra sig fritt, längs tre axlar. Den första är designspråket: färg, typografi, hörnradie, avstånd, rörelse — varumärkets visuella grammatik. Den andra är informationsarkitekturen: vad som ligger på startskärmen, hur flöden namnges och ordnas, vilken åtgärd som ligger ett tryck bort och vilken som ligger tre. Den tredje är funktionsmixen: vilka moduler som över huvud taget är påslagna. En slimmad överföringsapp och en tät superapp kan köra identisk kärna och inte dela en enda skärm.

Produktsidan på /products/pay går igenom fem utarbetade riktningar, och de läses bäst som exempel på oändligt många snarare än en meny med fem alternativ. Halcyon är en ren börs — återhållsam, få ytor, affären i fokus. Lumen är en superapp där pengar rör sig inne i konversationen, och chattbetalningar, prenumerationer och earn delar startskärm. Fern leder med överföringar — batchutbetalningar och regelstyrd FX-växling först. Volt är ett stablecoin-mörkt bygge med lönesorterare och teamkort. Meridian är flervalutabaserad: ett EUR-konto bredvid USDC, ett GBP-resesaldo och ett BTC-konto där kortbelöningar landar. Fem varumärken, fem informationsarkitekturer, fem funktionsmixar — en huvudbok, en KYC, en kortprocessor under dem alla.

Inget av det betyder att produkten är fem appar. De fem är riktningar som samma pipeline kan ta; talet som räknas är inte fem, utan så många tenants du onboardar. Var och en är ett bevis på att frontend kan skilja sig ända ner till startskärmens form medan kärnan under aldrig märker det.

Kärnan är den del du inte får uppfinna på nytt; appen är den del du inte får begränsa. En whitelabel-plattform är disciplinen att hålla båda de meningarna sanna samtidigt.
— Protocore · Plattformsutveckling

Därför slår token-teman att forka kodbasen

Det finns två sätt att få en produkt att se ut som många. Det självklara är att forka: kopiera kodbasen per kund, ge den ny stil, skeppa den. Det fungerar i exakt en release. Därefter måste varje buggfix och varje regeländring tillämpas N gånger över N glidande kopior, kopiorna hamnar i otakt och säkerhetsytan du måste resonera om multipliceras med antalet kunder. Att forka förvandlar ett system du förstår till många du inte förstår.

Token-teman vänder på det. Det finns en kodbas. Ett varumärke är en uppsättning värden — tokens för färg, typografi, radie och avstånd, en komponentkonfiguration, en uppsättning feature flags — som vid bygget löses upp till en varumärkesanpassad app. Ändra en token och varje skärm som läser den rör sig tillsammans, eftersom inget hårdkodar ett värde som borde komma från en token. En fix i överföringsflödet når alla tenants på en gång, eftersom det bara finns ett överföringsflöde att fixa. Varumärkena skiljer sig i sin konfiguration, inte i sin källkod.

Där designsystemet kommer in

Tokens är ingen lös idé; de är en levererad artefakt. Protocore Design System — /products/pds — består av 144 design tokens och 889 utility-klasser: vokabulären som varje app får sitt tema i. Det är dark-first, token-drivet och har radie noll som standard, och samma tokenuppsättning genereras för webb, .NET och native, så en färg som definierats en gång betyder samma färg i en React-skärm, en desktopkonsol och ett native mobilbygge. En tenants varumärke uttrycks som överskrivningar mot den vokabulären, vilket är varför en ny skin på en app är en konfigurationsändring och inte en omskrivning.

Det är också det som gör frontend verkligt fri i stället för fri inom en mall. Eftersom designspråket bor i tokens och utility-klasser och inte i enstaka stilmallar kan en designer ta en tenant långt från referensbygget — egen palett, typografi, täthet och rytm — utan att röra kärnan eller forka appen. Färgen går djupt, men det är fortfarande bara färg; rörsystemet under är delat.

Appen är en konfiguration, inte ett bygge

Funktionsmixen följer samma regel. Varje modul — chattbetalningar, earn, krypto, kort, prenumerationer, teamkort, värvning — är en brytare som slås per tenant, och en flagga kan rullas ut till en andel av användarna innan den går brett. Operatörer växlar dem från en konfigurationspanel, inte via en deploy. Skillnaden mellan en minimal överföringsapp och en full superapp är alltså inte två projekt; det är två konfigurationer av ett projekt. Referensappen som varje tenant utgår från är ett neutralt, Protocore-märkt bygge med hela menyn på plats — varje whitelabel är det bygget med överskrivna tokens och moduler som slagits på eller av.

Den ärliga gränsen

En kärna, många appar är värt maskineriet först när du faktiskt har många appar — eller en app du tänker ge ny skin, ny layout och nytt omfång över tid utan att bygga om banken varje gång. Om du skeppar en enda fast app som aldrig kommer att bära ett andra varumärke behöver du ingen whitelabel-plattform; du behöver en app. Den lönar sig i det fall den byggdes för: en plattform som sätter upp varumärkesanpassade bankprodukter tenant efter tenant, var och en synbart sin egen, ingen av dem en fork. Hela genomgången — de fem riktningarna, referensappen och operatörskonsolen bakom dem — finns på /products/pay, och designsystemet under på /products/pds.

Har du ett system att bygga?

Berätta vad problemet är. Vi återkommer med en arkitektur och en plan.