ApexFlow

Una dashboard CRM e di analytics: Angular 19 con Signals e RxJS nel frontend, Spring Boot 3 e PostgreSQL nel backend.

La mia tesi in Ingegneria Informatica, costruita durante il tirocinio in IPS S.p.A. nel 2026.

  • Angular
  • Signals
  • RxJS
  • PrimeNG
  • Spring Boot
  • PostgreSQL
La dashboard di ApexFlow con fatturato totale, ordini in attesa, clienti attivi e totali, il grafico annuale del fatturato e la barra di navigazione

Contesto

Per la tesi in Ingegneria Informatica volevo un progetto con problemi reali da risolvere. ApexFlow simula una piattaforma SaaS con cui un'azienda tecnologica gestisce clienti, abbonamenti, prodotti e ordini, con i vincoli di un sistema in produzione.

Com'è costruito

  • Single-page app in Angular 19 con componenti standalone e Signals per lo stato.
  • PrimeNG per i componenti che mostrano molti dati: tabelle, form, dialog e notifiche.
  • Accesso basato sui ruoli con route guard (impostazioni solo per gli admin, pagine profilo visibili al proprietario o a un admin).
  • Interceptor HTTP che aggiungono il token e trasformano gli errori delle API in notifiche, in un unico punto.
  • API REST in Spring Boot 3 su Java 21 con Spring Data JPA, PostgreSQL e Docker; frontend su Vercel, backend su Render.

Scelte chiave

Signals per lo stato, RxJS dove conta il tempo

Lo stato dell'autenticazione vive nei signal, così i componenti non si iscrivono né si disiscrivono a mano. RxJS resta dove è lo strumento giusto: il debounce dei filtri e l'annullamento delle richieste non più attuali.

Tabelle lato server con una sola classe di stato riutilizzabile

Una classe TablePaginationState tiene pagina, ordinamento e filtri nell'URL e collega signal e observable con toSignal e toObservable. Cambiare un filtro o una pagina fa partire una sola chiamata, e ogni tabella dell'app riusa la stessa logica.

Spring Boot invece di un backend JavaScript

Con NestJS avrei scritto tutto in TypeScript, ma Spring Boot era lo stack che la maggior parte degli annunci che leggevo chiedeva accanto ad Angular. Con due linguaggi il contratto tra client e server deve essere esplicito: ogni campo su cui conta il frontend è una scelta.

Risultato

Mi sono laureato ad aprile 2026 con ApexFlow come tesi. La demo online ha account di prova con un clic, per un admin e per un utente normale.

Ne ho scritto