Feltnotater

Én kjerne, mange apper: slik fungerer en whitelabel-bankplattform

En whitelabel-bankplattform er én bankkjerne med en utskiftbar frontend. Kjernen er delen som må være korrekt: en dobbelt bokføringsbok (ledger), kundekontoer, KYC og onboarding, kortutstedelse og -prosessering, krypto- og stablecoin-rails, og operatørkonsollen som kjører bak alt sammen. Appen er delen kunden ser — navnet, fargene, formen på skjermbildene og utvalget av funksjoner den slår på. Whitelabel betyr at én kjerne kan vise mange ansikter uten å bygges om under hvert av dem. Én kjerne, mange apper.

Sagt rett ut er dette en påstand om hvor skjøtene ligger. Alt som berører penger, er felles, revidert og avstemt én gang; alt som berører kunden, konfigureres per tenant. Ingeniørarbeidet som teller, er å holde den linjen ærlig — la frontend variere fritt mens kjernen den står på aldri forkes. Dette er en gjennomgang av hvordan linjen trekkes, og hvorfor det å trekke den med design tokens slår å trekke den med en fork.

Det som aldri varierer: kjernen

Start med halvparten som ikke har lov til å være kreativ. En overføring bokføres på samme måte enten appen kaller den en sending, en betaling eller en utbetaling: to posteringer i en dobbelt bokføringsbok, og ingenting slettes noensinne — boken legger bare til, så en refusjon er en motpostering som refererer til originalen, ikke en utradering. Kontoer, saldoer og autorisasjonsreservasjoner bor her. Det samme gjør KYC og onboarding, kortutstedelse og oppgjør, og krypto- og stablecoin-rails. Bak dem ligger én operatørkonsoll der hver privilegerte handling krever en begrunnelse og havner i en revisjonslogg.

Det finnes nøyaktig én av hver av disse, og det er poenget. Oppgjør, avstemming og compliance er vanskelig å få riktig og dyrt å få feil, så du bygger dem én gang og lar alle apper arve resultatet. Når en tenant onboarder en kunde, følger KYC-nivået kjernen bestemmer, kunden inn i konsollen uansett hvilken apps skjermbilder som tok imot dokumentene. Kjernen vet ikke, og bryr seg ikke, hva appen på toppen heter — den ser kontoer og posteringer, ikke merkevarer.

Det som varierer: designspråk, informasjonsarkitektur, funksjonsutvalg

Alt over kjernen kan fritt flyttes, langs tre akser. Den første er designspråk: farge, typografi, hjørneradius, avstand, bevegelse — merkevarens visuelle grammatikk. Den andre er informasjonsarkitektur: hva som ligger på hjemskjermen, hvordan flyter navngis og rekkefølgesettes, hvilken handling som ligger ett trykk unna og hvilken som ligger tre unna. Den tredje er funksjonsutvalg: hvilke moduler som er slått på i det hele tatt. En slank overføringsapp og en tett super-app kan kjøre på identisk kjerne og ikke dele et eneste skjermbilde.

Produktsiden på /products/pay går gjennom fem utarbeidede retninger, og de leses best som eksempler på uendelig mange snarere enn en meny på fem. Halcyon er en ryddig børs — dempet, få flater, handelen i sentrum. Lumen er en super-app der penger beveger seg inne i samtalen, og chatbetalinger, abonnement og earn deler hjemskjermen. Fern setter overføringer først — batch-utbetalinger og regelstyrt FX-konvertering foran alt annet. Volt er et mørkt stablecoin-bygg med lønnssorterer og teamkort. Meridian er flervaluta: en EUR-konto ved siden av USDC, en GBP-reisesaldo og en BTC-konto der kortbonuser lander. Fem merkevarer, fem informasjonsarkitekturer, fem funksjonsutvalg — én ledger, én KYC, én kortprosessor under dem alle.

Ingenting av dette betyr at produktet er fem apper. De fem er retninger den samme pipelinen kan ta; tallet som teller, er ikke fem, men så mange tenants du onboarder. Hver av dem er et bevis på at frontend kan avvike helt ned til formen på hjemskjermen mens kjernen under aldri merker det.

Kjernen er delen du ikke har lov til å finne opp på nytt; appen er delen du ikke har lov til å begrense. En whitelabel-plattform er disiplinen i å holde begge setningene sanne samtidig.
— Protocore · Plattformutvikling

Hvorfor tema på token-nivå slår å forke kodebasen

Det finnes to måter å få ett produkt til å se ut som mange. Den åpenbare er å forke: kopiere kodebasen per kunde, gi den ny stil og lansere. Det fungerer i nøyaktig én utgivelse. Etter det må hver feilretting og hver regulatoriske endring gjøres N ganger på tvers av N kopier som glir fra hverandre, kopiene kommer ut av synk, og sikkerhetsflaten du må forholde deg til, multipliseres med antall kunder. En fork gjør ett system du forstår, til mange du ikke forstår.

Tema på token-nivå snur dette. Det finnes én kodebase. En merkevare er et sett med verdier — tokens for farge, skrift, radius og avstand; en komponentkonfigurasjon; et sett med feature flags — som løses ved bygging til en app med egen merkevare. Endre én token, og alle skjermbilder som leser den, flytter seg sammen, fordi ingenting hardkoder en verdi som skulle komme fra en token. En rettelse i overføringsflyten går ut til alle tenants samtidig, fordi det bare finnes én overføringsflyt å rette. Merkevarene skiller seg i konfigurasjon, ikke i kildekode.

Hvor designsystemet står

Tokens er ikke en løs idé; de er et levert artefakt. Protocore Design System — /products/pds — er 144 design tokens og 889 utility-klasser: vokabularet alle apper får sitt tema i. Det er dark-first, token-drevet og har radius null som standard, og det samme token-settet genereres for web, .NET og native, slik at en farge definert én gang betyr den samme fargen i en React-skjerm, en desktop-konsoll og et native mobilbygg. En tenants merkevare uttrykkes som overstyringer mot dette vokabularet, og derfor er det å gi en app nytt uttrykk en konfigurasjonsendring og ikke en omskriving.

Dette er også det som gjør frontend genuint fri og ikke bare fri innenfor en mal. Fordi designspråket ligger i tokens og utility-klasser i stedet for i engangs-stilark, kan en designer flytte en tenant langt unna referansebygget — egen palett, skrift, tetthet og rytme — uten å røre kjernen eller forke appen. Malingen går dypt, men det er fortsatt bare maling; rørleggerarbeidet under er felles.

Appen er en konfigurasjon, ikke et bygg

Funksjonsutvalget følger samme regel. Hver modul — chatbetalinger, earn, krypto, kort, abonnement, teamkort, henvisninger — er en bryter som slås per tenant, og et flagg kan rulles ut til en andel av brukerne før det går bredt. Operatører slår dem av og på fra et konfigurasjonspanel, ikke gjennom en deploy. Forskjellen mellom en nøktern overføringsapp og en fullverdig super-app er altså ikke to prosjekter, men to konfigurasjoner av ett prosjekt. Referanseappen hver tenant starter fra, er et nøytralt Protocore-bygg med hele menyen på plass — hver whitelabel er det bygget med overstyrte tokens og moduler slått av eller på.

Den ærlige grensen

Én kjerne, mange apper er bare verdt maskineriet når du faktisk har mange apper — eller én app du vil gi nytt uttrykk, ny struktur og nytt omfang over tid uten å bygge om banken hver gang. Hvis du lanserer én fast app som aldri skal bære en annen merkevare, trenger du ikke en whitelabel-plattform; du trenger en app. Den lønner seg i tilfellet den ble bygget for: en plattform som setter opp bankprodukter med egen merkevare, tenant etter tenant, hver synlig sin egen, ingen av dem en fork. Hele gjennomgangen — de fem retningene, referanseappen og operatørkonsollen bak dem — finner du på /products/pay, og designsystemet under på /products/pds.

Har du et system som skal bygges?

Fortell oss problemet. Vi kommer tilbake med en arkitektur og en plan.