Il Parco Corolla è un centro commerciale siciliano con decine di negozi, servizi, eventi e un magazine editoriale. Il suo portale storico, parcocorolla.it, era stato realizzato e ampliato nel corso degli anni in PHP. Aveva servito bene il suo scopo, ma rendeva ormai difficile evolvere contenuti, design e performance.
Abbiamo progettato e sviluppato la nuova piattaforma con un approccio headless: i contenuti vivono in Directus, il frontend è un'applicazione Next.js che li compone in pagine attraverso un page builder a blocchi. La redazione del centro commerciale pubblica in autonomia, il sito si aggiorna da solo e in tempo reale.
La sfida: quattro vincoli, nessun compromesso
Riscrivere il portale di un centro commerciale attivo non significa solo "rifare il sito". Il progetto doveva muoversi dentro una serie di vincoli stretti, tutti da rispettare contemporaneamente:
Non perdere nulla
Anni di contenuti (news, eventi, schede negozio, volantini) e soprattutto anni di posizionamento sui motori di ricerca, con URL indicizzati da preservare uno a uno.
Autonomia editoriale
La redazione doveva poter costruire pagine e sezioni senza passare dagli sviluppatori, con aggiornamenti visibili online immediatamente.
Convivenza con il legacy
L'app mobile storica del parco continuava a leggere feed JSON esposti dal vecchio sito PHP, che dovevano restare funzionanti.
Sostenibilità dei costi
Un sito ricco di immagini e contenuti, su infrastruttura cloud a consumo, richiede una strategia di caching precisa per non far esplodere i costi di esercizio.

La soluzione
Abbiamo affrontato il progetto con un approccio integrato, dalla migrazione dei contenuti fino all'ottimizzazione delle performance in produzione.
Migrazione dei contenuti: una pipeline dedicata
Il vecchio CMS PHP poggiava su un database MySQL raggiungibile solo tramite export manuali. Abbiamo costruito una pipeline di migrazione dedicata: export dei dati, inventario e caricamento delle immagini, mappatura delle entità legacy sulle nuove collection Directus, importazione dei record e delle relazioni, validazione finale. La pipeline supporta anche la sincronizzazione incrementale: durante lo sviluppo il vecchio sito è rimasto online e i nuovi contenuti pubblicati nel frattempo sono stati riallineati automaticamente prima del go-live. In pratica, la redazione ha potuto continuare a pubblicare come sempre fino al giorno del lancio, senza fermare l'attività in attesa della migrazione: i contenuti pubblicati nel frattempo sono confluiti automaticamente nella nuova piattaforma.

Continuità SEO by design
Ogni URL storico è stato trattato come un asset. Gli slug dei contenuti replicano la forma degli URL indicizzati dal vecchio sito, gli identificativi legacy sono mantenuti nei nuovi percorsi di dettaglio e una collection dedicata in Directus permette alla redazione di gestire redirect 301 senza toccare il codice. Sitemap unificata, metadati SEO gestiti da CMS e URL canonici completano il quadro.
Un problema inatteso è emerso subito dopo il go-live: i crawler continuavano a richiedere migliaia di varianti degli URL .php del vecchio sito, generando di fatto una "crawler trap" che costituiva la maggior parte del traffico e costringeva il server a un render completo per ogni 404. Lo abbiamo neutralizzato rispondendo direttamente all'edge, nel middleware, prima che la richiesta tocchi l'applicazione.
Il risultato per il Parco Corolla è che chi trovava una pagina del parco su Google prima del lancio la trova ancora oggi, senza dover ricostruire da zero anni di posizionamento.
Page builder: la redazione compone, il sito si aggiorna da solo
Le pagine del portale sono costruite dalla redazione con un page builder a blocchi: circa 24 tipologie di blocco componibili (hero, griglie negozi e servizi, anteprime news ed eventi, orari di apertura, mappe, gallery, form) ognuna con il suo componente Frontend tipizzato e validato.
Il requisito "quando pubblico, il sito si aggiorna subito" è stato risolto senza rinunciare alla cache: le pagine sono statiche (ISR) e vengono invalidate chirurgicamente via webhook. Quando un redattore salva un contenuto, Directus notifica il frontend, che rigenera solo le pagine interessate grazie a un sistema di cache tag granulari per collection e per singolo record. Il meglio dei due mondi: performance da sito statico, freschezza da sito dinamico.
Per la redazione questo significa poter lanciare una nuova sezione o aggiornare una pagina eventi in autonomia e vederla online subito, senza aprire un ticket agli sviluppatori.

Immagini: da 10 MB a 133 KB
Il patrimonio fotografico migrato includeva immagini fino a 10 MB. Abbiamo implementato un image loader personalizzato che delega le trasformazioni a Directus (ridimensionamento - conversione WebP - compressione) e serve gli asset attraverso una CDN edge con cache hit ratio intorno al 95%.
Su un sito così ricco di immagini, questa ottimizzazione incide direttamente sulla velocità di caricamento e sulla banda consumata e quindi sui costi di esercizio dell'infrastruttura cloud, uno dei vincoli di partenza del progetto.

Mappa interattiva, area riservata e servizi
Il portale include una mappa interattiva multi-livello dei negozi (galleria, primo piano, aree esterne) con parità di funzionalità rispetto al vecchio sito, un'area account basata su Firebase Authentication (email, Apple, Facebook) condivisa con l'ecosistema dell'app mobile MyCorolla, la registrazione agli eventi con biglietto QR code, l'iscrizione alla newsletter integrata con Brevo e i form di contatto e richiesta spazi espositivi gestiti da CMS.
Convivenza con l'app legacy
L'app mobile storica del parco leggeva feed JSON esposti dal vecchio sito. Invece di forzare un big bang, il nuovo frontend riproduce quegli stessi endpoint (stessi percorsi .php, stesso schema dati) alimentandoli però da Directus.
In pratica, per chi visita il sito il passaggio è stato trasparente, stesso accesso, stessa mappa, stesse funzionalità di sempre. E lo stesso vale per gli utenti dell'app, che hanno continuato a usarla come sempre, ignari del completo cambio di piattaforma.

Architetture e tecnologie
Per garantire performance, sicurezza e manutenibilità, abbiamo utilizzato uno stack tecnologico moderno e affidabile.
- Frontend: Next.js (App Router) con React e TypeScript, styling con Tailwind CSS, animazioni GSAP, data-fetching con TanStack Query e validazione dei contenuti con Zod.
- CMS: Directus su PostgreSQL, dockerizzato, esteso con plugin per SEO, slug e interfacce editoriali avanzate.
- Monorepo: workspace Nx con frontend, CMS, libreria condivisa di tipi (generati dallo schema Directus e validati con Zod) e tooling di migrazione.
- Infrastruttura: frontend su Vercel, Directus su DigitalOcean App Platform, asset su object storage con CDN edge.
- Internazionalizzazione: next-intl con dizionari gestiti direttamente in Directus, predisposto per il multilingua.
- Qualità e delivery: CI/CD su GitLab, conventional commit, versionamento automatico con semantic-release, monitoraggio errori con Sentry, Storybook per la libreria di componenti UI.
Sviluppo AI-augmented
L'architettura CMS→UI è codificata in regole e documentazione machine-readable che guidano gli agenti di sviluppo AI direttamente nel repository. Ogni merge request riceve una code review automatica AI in italiano, che affianca (non sostituisce) la review dei colleghi. La documentazione tecnica è trattata come source of truth e mantenuta allineata al codice.
Questo approccio ha permesso al team di muoversi più velocemente mantenendo coerenza architetturale su tutto il progetto.
Risultati e impatto
Cosa vede chi visita il sito
- Continuità totale: contenuti, URL e posizionamento SEO preservati; l'app mobile legacy ha continuato a funzionare durante tutta la transizione.
- Redazione autonoma: pagine componibili a blocchi e pubblicazione in tempo reale, senza interventi degli sviluppatori.
- Performance: pagine statiche servite da CDN, immagini ottimizzate con riduzioni di peso fino al 98,7%.
- Costi sotto controllo: la strategia di caching e l'ottimizzazione degli asset hanno ridotto in modo significativo i costi di esercizio dell'infrastruttura cloud.
- Base per il futuro: architettura tipizzata e componibile, pronta per nuove sezioni, nuove lingue e l'integrazione sempre più stretta con l'ecosistema MyCorolla.