Migrare CakePHP → Next.js: cum am relansat nova-fit.ro fără să pierdem nimic
Un site de sală de fitness pe un stack din 2015, mutat integral pe Next.js: scor de performanță de la 25 la 97, LCP de la 8s la 2.6s, aceleași URL-uri, mail neîntrerupt și un admin propriu. Povestea completă, cu cifre reale.

NovaFit, sala de fitness din Câmpina pentru care am făcut site-ul de prezentare, rula pe CakePHP 2.6 + Croogo CMS — un stack din era 2015, cu PHP care nu mai primește update-uri de securitate. Site-ul își făcea treaba, dar îmbătrânea urât: scor de performanță mobil 25/100, LCP de 8 secunde, layout care „sare" la încărcare (CLS 0.5) și un CMS în care nu mai îndrăznea nimeni să umble.
L-am mutat integral pe Next.js 16 + Tailwind + MongoDB Atlas, păstrând designul, conținutul și — critic pentru SEO — toate URL-urile. Mai jos, ce am făcut concret și ce a ieșit.
Auditul: ce găsești într-un CakePHP de 10 ani
Înainte să scriem o linie de cod, am făcut recon pe tot proiectul vechi. Am găsit ce găsești de obicei în proiecte moștenite:
- schema de e-commerce nefolosită — magazin construit cândva, dezactivat din UI, dar cărat în fiecare request
- chei private de plăți comise în repo — certificatele mobilPay, cu tot cu cheia privată, în Git
- conținut demo amestecat cu cel real — 12 produse de test lângă paginile legale reale
- zero analytics, zero structured data, meta description lipsă
Auditul ăsta a decis scopul: nu portăm tot, portăm ce e viu — paginile reale, ofertele reale, identitatea vizuală — și tăiem restul.
Fidelitate vizuală, stack nou
Clientul iubea designul existent (pe bună dreptate — hero-ul cu sportivi decupați pe forme roz e memorabil). Așa că nu am „redesenat", am reconstruit fidel în Tailwind + shadcn/ui: slider-ul cu parallax la mouse (fără Slider Revolution și jQuery — doar CSS variables + requestAnimationFrame), calculatorul BMI, secțiunile de servicii și galerie.
Diferența e sub capotă: zero Bootstrap, zero jQuery, zero librării de slider — bundle-ul de JavaScript e o fracțiune din ce era, iar imaginile au scăzut de la 13MB la 2.3MB (resize + recompresie + WebP pentru decupaje).
SEO: aceleași URL-uri sau redirect 301
Regula de aur la migrări: nu pierzi niciun URL indexat. Paginile păstrate au rămas pe aceleași căi, iar tot ce s-a restructurat (inclusiv URL-uri localizate noi, ca /termeni-si-conditii în loc de /page/terms-and-conditions) primește redirect 301 de la calea veche. Am adăugat sitemap generat din baza de date, JSON-LD (HealthClub, cu adresă și program), Open Graph și robots.txt cu Content-Signal — site-ul e pregătit și pentru crawlerele AI.
Decizia de produs: fără plăți online, cu vetting
Partea mea preferată din proiect nu e tehnică. Sala avusese probleme cu înscrieri false, așa că împreună cu proprietarul am înlocuit checkout-ul clasic cu un flux de cereri de înscriere: vizitatorul aplică (nume, telefon, link de profil social), proprietarul validează manual cererea din admin, iar abonamentul se face la sală. Cererile respinse blochează re-înscrierea.
Tehnologia bună nu înseamnă mereu „mai multe feature-uri" — uneori înseamnă exact feature-ul potrivit.
Admin propriu, notificări, infrastructură
- Admin custom (înlocuiește Croogo): cereri de înscriere cu aprobare/refuz, mesaje din formularul de contact, oferte cu perioade custom și prețuri de student, editor pentru paginile legale
- Notificări email prin Resend, cu template HTML pe brand și logo embedded (CID — fără „imagini blocate" în webmail)
- Imagini pe S3, baza de date pe MongoDB Atlas, deploy pe Vercel
- DNS mutat pe Cloudflare cu prezervarea completă a mailului existent (MX, SPF, DKIM) — zero minute de downtime pe email în ziua lansării
Rezultatele, măsurate
Plus ce nu se vede în cifre: update-uri de securitate la zi, deploy în minute în loc de FTP, un admin în care proprietarul chiar poate lucra.
Vezi și proiectul original de design: NovaFit — website de prezentare.
Ai un site pe un stack care îmbătrânește? Cere o ofertă — facem întâi auditul, apoi vorbim de migrare. Vezi și serviciile noastre.