Note dal campo

Un core, molte app: come funziona una piattaforma bancaria whitelabel

Una piattaforma bancaria whitelabel è un unico core bancario con un front end sostituibile. Il core è la parte che deve essere corretta: un ledger a partita doppia, i conti dei clienti, KYC e onboarding, emissione ed elaborazione delle carte, rail crypto e stablecoin, e la console operatore che gira dietro a tutto. L'app è la parte che vede il cliente: il nome, i colori, la forma delle schermate, il sottoinsieme di funzionalità attivate. Whitelabel significa che un solo core può indossare molti volti senza essere ricostruito sotto ciascuno. Un core, molte app.

In parole semplici, è un'affermazione su dove stanno le giunture. Tutto ciò che tocca il denaro è condiviso, sottoposto ad audit e riconciliato una volta sola; tutto ciò che tocca il cliente è configurato per tenant. L'ingegneria che conta sta nel mantenere onesta quella linea: lasciare che il front end differisca liberamente mentre il core su cui poggia non si biforca mai. Questa è un'analisi di come si traccia quella linea e del perché tracciarla con i design token batte tracciarla con un fork.

Ciò che non varia mai: il core

Partiamo dalla metà a cui non è permesso essere creativa. Un trasferimento viene registrato sempre allo stesso modo, che l'app lo chiami invio, pagamento o payout: due scritture su un ledger a partita doppia, e nulla viene mai cancellato. Il ledger si limita ad aggiungere, quindi un rimborso è una scrittura di storno che fa riferimento all'originale, non una cancellazione. Conti, saldi e blocchi di autorizzazione vivono qui. Così come KYC e onboarding, emissione e regolamento delle carte, e i rail crypto e stablecoin. Dietro c'è un'unica console operatore in cui ogni azione privilegiata richiede una motivazione e finisce in un audit log.

Di ciascuno di questi elementi ce n'è esattamente uno, ed è questo il punto. Regolamento, riconciliazione e compliance sono difficili da fare bene e costosi da sbagliare, quindi si costruiscono una volta e ogni app ne eredita il risultato. Quando un tenant fa l'onboarding di un cliente, il livello KYC deciso dal core segue quel cliente nella console, a prescindere da quali schermate dell'app abbiano acquisito i documenti. Il core non sa né si cura di come si chiami l'app che ha sopra: vede conti e scritture, non brand.

Ciò che varia: linguaggio di design, architettura dell'informazione, mix di funzionalità

Tutto ciò che sta sopra il core è libero di muoversi, lungo tre assi. Il primo è il linguaggio di design: colore, tipografia, raggio degli angoli, spaziatura, movimento, cioè la grammatica visiva del brand. Il secondo è l'architettura dell'informazione: che cosa compare nella home, come vengono chiamati e ordinati i flussi, quale azione è a un tap di distanza e quale a tre. Il terzo è il mix di funzionalità: quali moduli sono attivi. Un'app snella per i trasferimenti e una super-app densa possono girare sullo stesso identico core senza condividere nemmeno una schermata.

La pagina prodotto /products/pay presenta cinque direzioni concrete, che si leggono meglio come esempi di infinite possibilità che come un menu di cinque. Halcyon è un exchange pulito: sobrio, poche superfici, il trading al centro. Lumen è una super-app in cui il denaro si muove dentro la conversazione, e pagamenti in chat, abbonamenti ed earn condividono la home. Fern parte dai trasferimenti: payout in blocco e conversione FX basata su regole prima di tutto. Volt è una build stablecoin in dark mode con un selezionatore di stipendio e carte per il team. Meridian è multivaluta: un conto in EUR accanto a USDC, un saldo viaggi in GBP e un conto BTC dove arrivano i reward delle carte. Cinque brand, cinque architetture dell'informazione, cinque mix di funzionalità: un solo ledger, un solo KYC, un solo processore di carte sotto tutti.

Nulla di tutto ciò significa che il prodotto siano cinque app. Le cinque sono direzioni che la stessa pipeline può prendere; il numero che conta non è cinque, è quanti tenant farete entrare. Ognuna è la prova che il front end può differire fino alla forma della home mentre il core sottostante non se ne accorge.

Il core è la parte che non si può reinventare; l'app è la parte che non si può vincolare. Una piattaforma whitelabel è la disciplina di mantenere vere entrambe le frasi allo stesso tempo.
— Protocore · Platform engineering

Perché il theming a livello di token batte il fork del codice

Ci sono due modi per far sembrare un solo prodotto tanti prodotti. Quello ovvio è il fork: copiare il codice per ogni cliente, ridisegnarlo, rilasciarlo. Funziona per una sola release. Dopo, ogni bug fix e ogni modifica normativa va applicata N volte su N copie che divergono, le copie si disallineano e la superficie di sicurezza da tenere sotto controllo si moltiplica per il numero di clienti. Il fork trasforma un sistema che capite in tanti che non capite.

Il theming a livello di token capovolge la logica. Il codice è uno solo. Un brand è un insieme di valori (token per colore, tipografia, raggio e spaziatura; una configurazione dei componenti; un set di feature flag) risolto in fase di build in un'app brandizzata. Cambiate un token e ogni schermata che lo legge si muove insieme, perché nulla fissa nel codice un valore che dovrebbe venire da un token. Una correzione al flusso di trasferimento arriva a tutti i tenant in una volta, perché c'è un solo flusso di trasferimento da correggere. I brand differiscono per configurazione, non per sorgente.

Dove si colloca il design system

I token non sono un'idea vaga: sono un artefatto rilasciato. Il Protocore Design System (/products/pds) conta 144 design token e 889 classi di utilità: il vocabolario in cui è composto il tema di ogni app. È dark-first, guidato dai token e con raggio zero per impostazione predefinita, e lo stesso set di token viene emesso per web, .NET e nativo, quindi un colore definito una volta è lo stesso colore in una schermata React, in una console desktop e in una build mobile nativa. Il brand di un tenant si esprime come override di quel vocabolario, ed è per questo che cambiare la veste di un'app è una modifica di configurazione e non una riscrittura.

È anche ciò che rende il front end davvero libero, e non libero entro un template. Poiché il linguaggio di design vive in token e classi di utilità e non in fogli di stile una tantum, un designer può portare un tenant molto lontano dalla build di riferimento, con una propria palette, tipografia, densità e ritmo, senza toccare il core né fare il fork dell'app. La vernice va in profondità, ma resta pur sempre vernice: l'impianto sotto è condiviso.

L'app è una configurazione, non una build

Il mix di funzionalità segue la stessa regola. Ogni modulo (pagamenti in chat, earn, crypto, carte, abbonamenti, carte per il team, referral) è un interruttore attivato per tenant, e un flag può essere esteso a una fetta di utenti prima di andare a regime. Gli operatori li attivano da un pannello di configurazione, non da un deploy. Quindi la differenza tra un'app minimale di trasferimenti e una super-app completa non sono due progetti: sono due configurazioni dello stesso progetto. L'app di riferimento da cui parte ogni tenant è una build neutra con il brand Protocore e l'intero menu presente; ogni whitelabel è quella build con i token sovrascritti e i moduli attivati o disattivati.

Il confine, senza giri di parole

Un core, molte app giustifica il meccanismo solo quando le app sono davvero molte, oppure quando c'è un'app che intendete ridisegnare, riorganizzare e ridimensionare nel tempo senza ricostruire la banca a ogni giro. Se rilasciate una sola app fissa che non indosserà mai un secondo brand, non vi serve una piattaforma whitelabel: vi serve un'app. Dove si ripaga è nel caso per cui è nata: una piattaforma che mette in piedi prodotti bancari brandizzati tenant dopo tenant, ciascuno visibilmente a sé, nessuno un fork. L'analisi completa (le cinque direzioni, l'app di riferimento e la console operatore che le sostiene) è su /products/pay, e il design system sottostante è su /products/pds.

Hai un sistema da costruire?

Raccontaci il problema. Torneremo con un'architettura e un piano.