La Mia Risposta al Rifare

Se hai letto la mia introduzione, conosci il mio mantra: odio rifare. Ogni volta che iniziavo un nuovo progetto da zero — configurare autenticazione, JWT, Docker, gestione utenti, role guard — non stavo costruendo il prodotto. Stavo ricostruendo l'impalcatura che avevo già costruito una dozzina di volte prima.

RAD-System è la mia risposta a questo problema. È un framework full-stack che ho costruito per me stesso, open source su GitHub, che elimina tutto ciò che chiamo "rumore di fondo dello sviluppo" — in modo che dal minuto zero, possa concentrarmi esclusivamente sulla logica di business.

Non è destinato a essere il framework per tutti. È costruito attorno al modo in cui penso e ai pattern che mi fido dopo 40 anni di costruzione di sistemi. Se condividi questo approccio, potrebbe funzionare anche per te.

Cos'è

RAD-System è uno stack completo NestJS + Angular, containerizzato con Docker. Non è un boilerplate che configuri una volta e dimentichi. È un'architettura viva con due astrazioni fondamentali che fanno la maggior parte del lavoro pesante.

1. Backend: Due Astrazioni Che Fanno il 90% del Lavoro

L'intera filosofia del backend si basa su due classi astratte.

BaseEntity — ogni entità di database estende questa. Gestisce automaticamente le colonne di audit (createdAt, updatedAt, deletedAt) tramite TypeORM, inclusa la soft-delete nativa. La chiave primaria è lasciata all'entità concreta in modo da poter scegliere UUID o integer a seconda del contesto.

BaseService — una classe generica che implementa tutte le operazioni CRUD standard. La decisione di progettazione chiave qui è il metodo astratto checkOwnership(): ogni servizio che lo estende deve implementare la validazione della proprietà. Non puoi dimenticartene accidentalmente. La sicurezza non è un livello che aggiungi dopo — è costruita nella fondazione.

2. Frontend: Angular

Il frontend utilizza componenti Angular standalone — nessun NgModules, nessuna dichiarazione di moduli boilerplate. La gestione dello stato è gestita da un leggero StoreService che ho scritto io stesso, supportato da BehaviorSubject e browser storage. Sostituisce NgRx per la stragrande maggioranza delle applicazioni senza l'overhead e la curva di apprendimento.

Un pattern di interceptor funzionale gestisce l'iniezione JWT, lo spinner di caricamento globale e il refresh del token 401 in un unico posto. Ogni chiamata HTTP passa attraverso un ApiService centralizzato che aggiunge automaticamente l'URL API runtime e la gestione degli errori.

3. Infrastruttura: Docker-Native Fin Dal Primo Giorno

L'intero stack viene eseguito in Docker:

  • PostgreSQL 16 — con postgresql.conf personalizzato, script di auto-inizializzazione e persistenza dei dati tramite volumi denominati
  • Backend NestJS — immagine Node 22 compilata, in esecuzione come utente non-root
  • Frontend Angular — servito tramite Nginx con compressione Gzip e intestazioni di sicurezza

La strategia di deployment è basata su artifact: tarball versionato localmente, lo estraggo nel volume sul server e riavvio il container. Nessun Node.js sul server di produzione. Rollback istantaneo estraendo il tarball precedente.

I vari articoli approfondiscono ogni livello. Inizia dal backend se vuoi comprendere il modello di astrazione, o vai direttamente a Docker se vuoi vedere come funziona il deployment in produzione.