Alert di spesa, eventi di invito e modifiche al ciclo di vita delle chiavi ora appaiono come notifiche bilingui in-app, oltre alla consegna via email.
Gli eventi importanti non richiedono più di controllare la posta in arrivo. Il portale ora recapita le notifiche in-app, nella lingua preferita dell'utente, con stato di lettura/non lettura persistente.
Le notifiche sono archiviate in una tabella dedicata notifications con chiave su uid o org_id. Ogni record porta un discriminatore kind, campi bilingui title_en/title_it e body_en/body_it, una colonna read_at TIMESTAMPTZ (null = non letta), e un URL link che punta alla risorsa pertinente. La consegna email avviene in parallelo — il record in-app e l'email sono inviati dallo stesso gestore eventi.
Trigger evento → notifications.write() + smtp.send_async() → aggiornamento badge portale