Stack e metodo
Come costruiamo.
Lo stack cambia. Gli standard no.
Architettura di questo sito
Non è un elenco di tecnologie messo lì per fare volume: è lo stack con cui è costruita la pagina che stai leggendo, con il ruolo effettivo di ogni pezzo.
-
Presentazione
Quello che arriva al browser.
- Tailwind CSS
- Vite
- GSAP
- JavaScript
-
Template
Dove i dati diventano markup, senza logica.
- Twig
- Timber
-
Contenuti
Il backoffice e la struttura editoriale.
- WordPress
- ACF Pro
- Rank Math
-
Runtime
Cosa gira sul server.
- PHP 8.2
- MySQL
- Composer
-
Consegna
Come il codice arriva in produzione.
- Git
- GitHub
- WP-CLI
- Staging
- CI/CD
- WordPress
-
CMS e backend editoriale.
Il team dell’agenzia lo conosce già. Usato come sistema di contenuti, non come generatore di markup.
- Timber
-
Layer fra la logica WordPress e i template.
Separa la preparazione dei dati dalla presentazione: il PHP non stampa HTML e i template non fanno query.
- Twig
-
Template puliti e componentizzati.
Escaping automatico, sintassi leggibile anche da chi non scrive PHP, componenti riusabili senza astrazioni inutili.
- ACF Pro
-
Contenuti strutturati e backoffice.
Ogni contenuto è modificabile dalla dashboard, ma la struttura del layout resta controllata dal tema. Field group versionati in Local JSON.
- Tailwind CSS
-
Sistema CSS con design token espliciti.
Configurazione CSS-first: i token stanno nel CSS, accanto alle regole che li usano. Nessun file di configurazione separato.
- Vite
-
Build e asset pipeline.
Cache busting dal manifest, HMR in sviluppo, configurazione breve e leggibile.
- GSAP
-
Animazioni di ingresso e microinterazioni.
Caricato in un chunk separato dopo il first paint, e solo se in pagina c’è qualcosa da animare. Mai sull’elemento LCP.
Come scriviamo il codice
-
01
Componentizzazione
Un componente si estrae quando la ripetizione è reale, non in previsione. I template restano piccoli e leggibili: oltre le ottanta righe si divide.
La regola operativa è una sola: i template non contengono logica, il PHP non contiene HTML. -
02
Semantic HTML
header, nav, main, section, footer, liste vere, button per le azioni e link per la navigazione. Un h1 per pagina e gerarchia dei titoli senza salti.
Chi apre DevTools deve trovare markup che si legge senza sforzo. -
03
Accessibilità
Non è una fase finale. Skip link, focus sempre visibile, contrasto AA, touch target adeguati, reduced motion rispettato, form con label reali ed errori annunciati.
Il sito resta navigabile da tastiera e leggibile con JavaScript disattivato. -
04
Performance
Il primo elemento visibile è testo: nessuna immagine e nessuna libreria fra l’utente e la prima parola letta.
Il JavaScript iniziale ha un budget dichiarato ed è verificato in CI: se una modifica lo supera, la build fallisce. -
05
Sicurezza
Sanitizzazione in ingresso, escaping in uscita, nonce su ogni azione, capability check su ogni operazione privilegiata.
Nessuna credenziale nel repository, nessuna modifica al core, nessun editor di file attivo in produzione. -
06
Git e ambienti
Tre ambienti separati, con database distinti. Il codice sale da locale a staging a produzione; il database scende solo nella direzione opposta.
In produzione arriva solo ciò che è stato approvato in review, con un deploy deliberato.
No unnecessary dependencies.
Il principio non è zero dipendenze: è nessuna dipendenza senza una ragione. Sotto trovi l’elenco completo di ciò che questo sito carica, con il peso reale, e di ciò che abbiamo valutato e deciso di non usare.
| Dipendenza | Peso | Perché |
|---|---|---|
| Timber + Twig | lato server | Separazione fra logica e presentazione. Nessun impatto sul peso della pagina. |
| ACF Pro | lato server | Contenuti strutturati e backoffice. Nessun asset caricato sul frontend. |
| Rank Math | lato server | Metadati, sitemap e schema. I moduli non usati sono disattivati da codice, non dalla dashboard. |
| Tailwind CSS | 8,8 KB gzip | Solo le classi effettivamente usate finiscono nel CSS compilato. Un unico file, con l’hash nel nome: cache lunga e nessuna invalidazione accidentale. |
| JavaScript del tema | 1,7 KB gzip | Menu mobile con focus trap e stato dell’header. Nient’altro nel bundle iniziale. |
| GSAP | 28,7 KB gzip, differito | Caricato in un chunk separato dopo il first paint, solo se in pagina esiste qualcosa da animare e solo se l’utente non ha chiesto reduced motion. Non entra nel percorso critico. Fa le transizioni; a decidere quando farle partire è IntersectionObserver, che è nativo. |
| Geist + Geist Mono | 52 KB | Sans e monospazio disegnate insieme: stesse proporzioni, stesso disegno delle terminazioni. Il monospazio non e’ un carattere estraneo usato per fare “tecnico”, e’ la stessa voce in un altro registro. |
Valutate e non usate
-
GSAP ScrollTrigger
Adottato per legare l’animazione delle schede di codice al progresso dello scorrimento, e poi rimosso. Quel legame produceva stati a metà: fermandosi a mezza corsa si restava con due frammenti sovrapposti, nessuno dei due leggibile. Con transizioni discrete — si attraversa una soglia, parte un’animazione che arriva sempre a destinazione — il requisito è sparito, e con lui undici KB gzip. Lo scorrimento riposa su una tappa grazie allo scroll-snap nativo del CSS, che è del browser e non costa niente.
-
Alpine.js
Serviva per menu mobile e FAQ. Le FAQ usano details e summary nativi, il menu sessanta righe di JavaScript. Quindici KB per due componenti non si giustificano.
-
Plugin multilingua
WPML, Polylang e simili aggiungono tabelle, query e un layer di routing. Qui le pagine inglesi sono figlie di una pagina en: i permalink sono nativi, senza una sola rewrite rule scritta da noi.
-
Page builder
Su questo sito il layout è responsabilità del tema. Il redattore modifica contenuti, non ricompone le pagine.
-
Plugin per i form
Contatti e candidature sono gestiti nel tema con nonce, honeypot, rate limit e validazione dei file. Meno codice caricato e più controllo su cosa succede ai dati.
-
jQuery
Rimosso dal frontend. Nessuna riga di codice di questo sito ne ha bisogno.
-
Global styles di theme.json
Circa sette KB di CSS inline generati per il block editor, mai applicati da un frontend in Twig. Disattivati.
Costruito come costruiamo per i nostri partner.
Questo sito è costruito con lo stesso metodo che usiamo sui progetti dei nostri partner. Le misure sotto sono quelle reali, prese sulla build di produzione.
-
HTML della homepage
5,9 KB gzip
-
CSS totale
8,8 KB gzip
-
JavaScript iniziale
1,7 KB gzip
-
Richieste bloccanti
2
-
Plugin attivi
2
-
Page builder
0