Portfolio Personale (Decoupled Frontend)
Un frontend SSR bilingue ad alte prestazioni
Di cosa si tratta?
L'evoluzione del mio portfolio in un'architettura completamente disaccoppiata (Headless). Inizialmente nato come monolito, ora è un frontend puro (Backend-for-Frontend) estremamente leggero. Ottiene i dati in modo dinamico e sicuro tramite API REST dal mio ERP centralizzato (CustomBlock), renderizzando i contenuti in SSR per massimizzare le performance SEO.
La Sfida (Refactoring Architetturale)
L'obiettivo era separare la logica di presentazione (UI) dalla gestione dei dati (CMS/Database). La sfida principale è stata migrare da un sistema ibrido a un'architettura API-first senza interrompere il servizio, risolvendo problemi di CORS, risoluzione dinamica degli URL (asset statici cross-origin) e sicurezza CSP.
Stack Tecnologico
- Backend-for-Frontend: Python 3.14, FastAPI, Httpx (Async HTTP Client).
- Frontend: Vanilla JS, template Jinja2 SSR, CSS variables per il theming.
- DevOps: Docker, Nginx, GitHub Actions CI/CD, Cloudflare CDN.
- Sicurezza: Strict Content-Security-Policy (CSP) dinamica, nonce per script, validazione payload Pydantic.
Funzionalità Principali
- API-Driven: Nessun database locale; tutti i dati e i media vengono consumati dinamicamente via JSON.
- Bilingue (IT/EN): Risoluzione lato server della lingua (Language Flattening) per alleggerire il client.
- Tema Dinamico: Supporto dark/light mode nativo con applicazione pre-render per evitare il FOUC.
- Ottimizzazione Asset: Gestione intelligente dei link interni vs esterni e download sicuri cross-origin dei CV.
- Zero-Downtime CI/CD: Pipeline automatizzate per build e deploy su server remoto ad ogni commit.