← Torna ai progetti
Marketplace e FinTech Case study

Tendex — Piattaforma di investimento per il mercato degli asset digitali

Sviluppo ed evoluzione della piattaforma di investimento del fondo svizzero Tendex: restyling completo, gestione dei piani di investimento, sistema utenti e referral. Stack: Symfony, ElasticSearch, RabbitMQ, Redis, Twig.

Tecnologie 7
PHP
Symfony
JavaScript
PostgreSQL
Redis
Elasticsearch
RabbitMQ
Tendex — Piattaforma di investimento per il mercato degli asset digitali
Progetto in evidenza ↗

Informazioni sul progetto

Tendex è un fondo di investimento svizzero regolamentato dalla FINMA che dal 2019 utilizza analisi quantitative e algoritmi proprietari per generare rendimenti stabili e non correlati sul mercato degli asset digitali. La piattaforma elabora oltre 100 miliardi di parametri di mercato e garantisce una gestione automatizzata di operazioni e rischi in modalità 24/7.

Ho partecipato al progetto come sviluppatore full-stack (Symfony + Twig): responsabile del restyling completo del frontend e dell'evoluzione dei processi di business chiave — gestione dei piani di investimento, congelamento e avvio differito, chiusura forzata, cancellazione utenti e modifica della struttura referral. Ho lavorato con un'architettura ad alto carico basata su ElasticSearch, RabbitMQ e Redis.

Tendex — Piattaforma di investimento per il mercato degli asset digitali

Tendex è un fondo di investimento svizzero regolamentato dalla FINMA che dal 2019 utilizza tecnologie all'avanguardia e analisi quantitative per generare rendimenti stabili e non correlati sul mercato degli asset digitali.

Il vantaggio chiave del fondo risiede in un monitoraggio approfondito del mercato basato su oltre 100 miliardi di parametri e algoritmi proprietari che garantiscono una gestione automatizzata di operazioni e rischi in modalità 24/7. L'obiettivo della piattaforma è minimizzare i rischi e offrire agli investitori un elevato potenziale di crescita — con soluzioni affidabili per la diversificazione e la protezione del capitale in un mondo pieno di incertezze.

Il mio ruolo nel progetto

Sviluppatore full-stack: Symfony (backend), Twig (template). Responsabile del restyling dell'area clienti e del frontend, nonché dell'evoluzione dei processi di business chiave della piattaforma di investimento.

Stack tecnologico

  • Backend: Symfony (PHP)
  • Frontend: Twig
  • Ricerca e analytics: ElasticSearch
  • Code: RabbitMQ
  • Cache e sessioni: Redis
  • Infrastruttura: worker in background per l'elaborazione asincrona degli eventi di investimento

Attività chiave

  • Restyling completo del sito e dell'area clienti dell'investitore
  • Meccanica di chiusura forzata di un piano di investimento
  • Cancellazione corretta dell'utente preservando l'integrità dei dati finanziari
  • Funzionalità di congelamento dei piani di investimento
  • Funzionalità di avvio differito di un piano di investimento
  • Modifica della struttura referral
  • Elaborazione asincrona degli eventi tramite RabbitMQ
  • Indicizzazione e ricerca tramite ElasticSearch

Risultato

La piattaforma ha ottenuto un'interfaccia moderna e aggiornata e un set ampliato di strumenti per la gestione dei piani di investimento. Ciò ha migliorato l'esperienza degli investitori e ridotto il carico sul supporto. L'architettura asincrona basata su RabbitMQ ed ElasticSearch ha garantito un funzionamento stabile sotto carico e un accesso rapido all'analytics.

Ciò che ho consegnato

01

L'interfaccia esistente della piattaforma era obsoleta, poco pratica per gli investitori e...

La sfida

L'interfaccia esistente della piattaforma era obsoleta, poco pratica per gli investitori e non rifletteva lo status di un fondo svizzero regolamentato. Era necessario rinnovare la parte visiva e l'UX senza perdere funzionalità e senza interferire con i processi di business in corso.

Soluzione

  • Audit dei template Twig esistenti e identificazione dei componenti riutilizzabili.
  • Sviluppo di un nuovo design system: griglia, tipografia, componenti UI.
  • Reimplementazione delle pagine chiave con Twig e integrazione di componenti Vue per le aree interattive (grafici, tabelle, form).
  • Garanzia della responsività e del rendering corretto su dispositivi mobili.

Risultati

  • Interfaccia moderna e aggiornata, coerente con il posizionamento del fondo.
  • UX migliorata nell'area clienti dell'investitore.
  • Riduzione del numero di richieste al supporto legate alla navigazione.

02

Gli investitori o gli amministratori dovevano poter chiudere anticipatamente un piano di i...

La sfida

Gli investitori o gli amministratori dovevano poter chiudere anticipatamente un piano di investimento, con un ricalcolo corretto di rendimento, commissioni e rimborso. Bisognava evitare la desincronizzazione dei dati durante operazioni parallele.

Soluzione

  • Progettazione di un modello di dominio per la chiusura del piano che copre tutti gli stati (attivo, congelato, in coda).
  • Implementazione di un servizio per il calcolo del rendimento finale e delle commissioni.
  • Spostamento delle operazioni pesanti in task asincroni tramite RabbitMQ.
  • Aggiunta di idempotenza delle operazioni e lock tramite Redis.

Risultati

  • Chiusura corretta e prevedibile dei piani in qualsiasi stato.
  • Nessun doppio addebito e nessuna desincronizzazione dei dati.
  • Storico delle operazioni trasparente per l'investitore.

03

La semplice cancellazione di un utente rompeva le entità collegate (piani di investimento,...

La sfida

La semplice cancellazione di un utente rompeva le entità collegate (piani di investimento, transazioni, referral). Era necessario implementare una cancellazione sicura che preservasse lo storico finanziario e i requisiti normativi.

Soluzione

  • Introduzione di un meccanismo di soft-delete per gli utenti preservando le relazioni.
  • Progettazione di un'elaborazione a cascata: anonimizzazione dei dati personali, preservazione dello storico delle transazioni.
  • Implementazione di un task in background per la pulizia delle entità collegate tramite RabbitMQ.
  • Aggiunta di logging e audit delle operazioni di cancellazione.

Risultati

  • Cancellazione sicura senza violare l'integrità dei dati.
  • Conformità ai requisiti normativi per la conservazione dello storico finanziario.
  • Riduzione del rischio di errori durante interventi manuali.

04

Gli investitori avevano bisogno di poter sospendere temporaneamente l'accumulo di rendimen...

La sfida

Gli investitori avevano bisogno di poter sospendere temporaneamente l'accumulo di rendimento di un piano senza chiuderlo — ad esempio in caso di instabilità del mercato. Tali periodi dovevano essere correttamente considerati nei calcoli.

Soluzione

  • Aggiunta dello stato «congelato» nel ciclo di vita del piano di investimento.
  • Implementazione della logica di pausa degli accumuli e ripresa corretta.
  • Aggiornamento del calcolo del rendimento per tenere conto dei periodi di congelamento.
  • Aggiunta di notifiche all'investitore sullo stato del piano.

Risultati

  • Gestione flessibile dei piani senza perdita dello storico.
  • Calcoli di rendimento accurati che tengono conto dei periodi di congelamento.
  • Maggiore fiducia degli investitori nello strumento.

05

Gli investitori volevano creare un piano in anticipo con avvio automatico a una data speci...

La sfida

Gli investitori volevano creare un piano in anticipo con avvio automatico a una data specificata. Era necessaria una pianificazione affidabile dei task, robusta a guasti e riavvii dei servizi.

Soluzione

  • Implementazione dell'avvio differito tramite lo scheduler Symfony + RabbitMQ delayed messages.
  • Aggiunta di un'elaborazione idempotente dell'avvio (protezione dal doppio avvio).
  • Monitoraggio dei task differiti e logging.
  • Implementazione di notifiche all'investitore sull'avvio.

Risultati

  • Avvio differito affidabile senza intervento manuale.
  • Nessun duplicato e nessun avvio mancato.
  • Strumento di pianificazione pratico per gli investitori.

06

Il sistema di referral richiedeva flessibilità: gli amministratori dovevano poter modifica...

La sfida

Il sistema di referral richiedeva flessibilità: gli amministratori dovevano poter modificare l'assegnazione dei referral e gli investitori vedere la struttura attuale. L'implementazione esistente non permetteva di modificare le assegnazioni senza perdere lo storico degli accumuli.

Soluzione

  • Progettazione di un modello di relazioni referral con versioning.
  • Implementazione di un'interfaccia di modifica dei referral per gli amministratori.
  • Preservazione dello storico degli accumuli al cambio di assegnazione.
  • Aggiunta di validazione contro dipendenze cicliche.

Risultati

  • Gestione flessibile della struttura referral.
  • Preservazione dello storico e correttezza degli accumuli.
  • Riduzione del lavoro manuale del supporto.

07

La crescita del carico e del numero di operazioni (accumuli, avvio/stop di piani, notifich...

La sfida

La crescita del carico e del numero di operazioni (accumuli, avvio/stop di piani, notifiche) richiedeva di spostare le operazioni pesanti fuori dal ciclo HTTP sincrono per non bloccare le richieste degli utenti.

Soluzione

  • Progettazione di una coda di eventi per le operazioni di dominio chiave.
  • Implementazione di worker con Symfony Messenger + RabbitMQ.
  • Aggiunta di policy di retry, dead-letter queue e monitoring.
  • Garanzia dell'idempotenza degli handler.

Risultati

  • Risposta rapida dell'interfaccia indipendentemente dalle operazioni in background.
  • Tolleranza ai guasti grazie a retry e DLQ.
  • Elaborazione scalabile sotto carico.

08

La ricerca rapida su grandi volumi di dati (transazioni, piani, utenti) e la costruzione d...

La sfida

La ricerca rapida su grandi volumi di dati (transazioni, piani, utenti) e la costruzione di analytics richiedevano un motore di ricerca specializzato invece di query SQL pesanti.

Soluzione

  • Configurazione degli indici ElasticSearch per le entità chiave.
  • Implementazione della sincronizzazione dei dati tramite eventi RabbitMQ.
  • Aggiunta di query di ricerca con filtri e aggregazioni per l'analytics.
  • Ottimizzazione di mapping e reindicizzazione.

Risultati

  • Ricerca rapida su grandi volumi di dati.
  • Analytics flessibile per amministratori e investitori.
  • Riduzione del carico sul database principale.

09

L'elevata frequenza di accesso ai dati di uso frequente e la necessità di proteggersi da r...

La sfida

L'elevata frequenza di accesso ai dati di uso frequente e la necessità di proteggersi da race condition durante operazioni parallele richiedevano una cache affidabile e un meccanismo di lock.

Soluzione

  • Introduzione del caching dei dati caldi e degli aggregati in Redis.
  • Implementazione di lock distribuiti per le operazioni critiche (avvio/chiusura dei piani).
  • Configurazione dell'invalidazione della cache tramite eventi.
  • Aggiunta di monitoring hit/miss e tempi di risposta.

Risultati

  • Riduzione del tempo di risposta delle pagine chiave.
  • Protezione da race condition e doppie operazioni.
  • Carico ridotto sul database.

10

Un fondo regolamentato richiede un audit completo di tutte le operazioni finanziarie: chi,...

La sfida

Un fondo regolamentato richiede un audit completo di tutte le operazioni finanziarie: chi, quando, cosa e su quale base. Era necessario costruire un sistema di audit che non rallentasse i processi principali.

Soluzione

  • Progettazione di uno schema di audit log collegato a utente, piano e transazione.
  • Implementazione della scrittura asincrona dell'audit tramite RabbitMQ.
  • Aggiunta di strumenti di ricerca ed export degli audit log per gli amministratori (ElasticSearch).
  • Garanzia dell'immutabilità dei record.

Risultati

  • Audit completo delle operazioni finanziarie.
  • Conformità ai requisiti normativi.
  • Accesso rapido allo storico tramite la ricerca.

11

La piattaforma di investimento opera 24/7 e qualsiasi ritardo nell'elaborazione degli even...

La sfida

La piattaforma di investimento opera 24/7 e qualsiasi ritardo nell'elaborazione degli eventi o guasto di un worker è critico. Era necessario un sistema di monitoring delle metriche chiave e di alert.

Soluzione

  • Configurazione della raccolta di metriche su code (RabbitMQ), Redis, ElasticSearch ed eventi di business chiave.
  • Implementazione di alert su anomalie (crescita della DLQ, ritardi, errori dei worker).
  • Aggiunta di dashboard per il team.
  • Integrazione del logging delle operazioni critiche.

Risultati

  • Rilevamento e reazione rapidi agli incidenti.
  • Riduzione dei tempi di inattività.
  • Trasparenza dello stato della piattaforma per il team.

Tecnologie e argomenti

Tag del progetto

#Symfony #PHP #Twig #ElasticSearch #RabbitMQ #Redis #Fintech #Piattaforma di investimento #Crypto #REST API #Symfony Messenger #High Load #Elaborazione asincrona #Restyling #Sistema referral #Audit Logging
04
Avvia un progetto

Hai bisogno di un approccio tecnico simile?

Parliamo del tuo progetto, dell'architettura e del miglior stack tecnologico per esso.

Parliamone ↗