Torna ai progetti

andreiburbulia.com — portfolio bilingue con CMS su misura

Questo sito: Laravel 12 e React 18 via Inertia.js con server-side rendering, contenuti bilingui IT/EN gestiti da un pannello su misura, immagini su Cloudflare R2, deploy su VPS con nginx e systemd.

Tailwind CSSInertia.jsReact.jsJavaScriptPHP 8Laravel+5
andreiburbulia.com — portfolio bilingue con CMS su misura

Descrizione

Il sito che stai leggendo. Portfolio, blog tecnico e pannello di amministrazione costruiti come una sola applicazione Laravel 12 con front end React 18 servito da Inertia.js. Ogni contenuto — progetti, esperienze, formazione, competenze, articoli, messaggi dal form contatti — vive in PostgreSQL ed è modificabile dall'area admin in entrambe le lingue, senza toccare il codice né rifare un deploy. Dieci entità gestite, 52 pagine React, 23 migration, 69 test PHPUnit verdi su GitHub Actions.

Il problema

Lavoro su SAP BTP per clienti che stanno sotto accordo di riservatezza: il codice non è pubblico, gli screenshot non sono condivisibili, il nome del cliente non si può scrivere. Il portfolio fatto di link a repository, che per molti sviluppatori è la soluzione ovvia, per me non era un'opzione. Il problema non era quindi costruire un sito, ma decidere cosa può stare in un portfolio quando la cosa che so fare meglio non si può mostrare. A questo si aggiunge che i recruiter a cui mi rivolgo sono in buona parte in Germania, Svizzera e Paesi Bassi: leggono in inglese e filtrano per nomi di tecnologia esatti.

Vincoli

L'accordo di riservatezza vale anche qui: ogni progetto va descritto per scala e settore, mai per nome. Il bilinguismo doveva essere reale e non un interruttore sulla lingua dell'interfaccia — URL, slug, meta description, feed e sitemap esistono in entrambe le lingue. L'infrastruttura è un singolo VPS senza pipeline gestita né CDN a pagamento. E siccome un portfolio che richiede un deploy per correggere una frase smette di essere aggiornato dopo un mese, tutto ciò che è contenuto doveva stare nel database, non nel codice.

Architettura

Prima di scrivere il layout definitivo ho esplorato tre direzioni come pagine HTML statiche, tuttora nel repository: rivista tecnica (serif e monospace, densità editoriale), officina dark, terminale (tutto monospace, prompt di shell al posto del titolo). Ho scelto la terza via scura con accenti magenta e viola: il terminale parlava solo a chi già mi somiglia, la rivista chiedeva una quantità di testo che non avevo ancora.

nginx → PHP-FPM → Laravel 12 → Inertia 2 → React 18 (Vite 7, Tailwind)
                      │              └── SSR: Node come unit systemd
                      ├── PostgreSQL (contenuti tradotti in colonne json)
                      └── Cloudflare R2 (copertine e immagini inline)
  • traduzioni con spatie/laravel-translatable: un campo, una colonna json, slug diverso per lingua e risoluzione con fallback, così un contenuto senza traduzione resta raggiungibile;
  • upload che ridimensiona a 1600px e converte in WebP prima di scrivere sul disco remoto;
  • blog in Markdown con evidenziazione del codice, dove la pagina pubblica e l'anteprima nell'admin condividono lo stesso componente di rendering;
  • RSS e sitemap generati dalle stesse route;
  • 69 test PHPUnit su SQLite in memoria, Pint e build degli asset su GitHub Actions.

Risultato

Il sito è online su andreiburbulia.com dalla primavera 2026 e continua a ricevere modifiche: aggiungo un progetto o un articolo dall'admin in pochi minuti, in due lingue, senza aprire l'editor. Il server-side rendering fa sì che crawler e anteprime social vedano le pagine già composte, non un contenitore vuoto. Non pubblico numeri di traffico: il sito è giovane e sarebbe rumore. Quello che posso dire è che il portfolio è diventato l'unico artefatto del mio lavoro che un selezionatore può aprire e ispezionare davvero.

Tecnologie

Tailwind CSSInertia.jsReact.jsJavaScriptPHP 8LaravelLinuxAmministrazione VPSGitGitHubPostgreSQL