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.confpersonalizzato, 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.