Next.js 16 and React 19 in production: 7 things that actually changed how we build sites
We rebuilt the Smart Lead Tech website itself, the Pioneers editorial platform, and the KSA Leaders platform on Next.js 16 and React 19. This is not a “what’s new” article; it is a list of what actually changed our decis…

We rebuilt the Smart Lead Tech website itself, the Pioneers editorial platform, and the KSA Leaders platform on Next.js 16 and React 19. This is not a “what’s new” article; it is a list of what actually changed our decisions, and what did not deserve the hype.
1. Server-first became the real default
Most page sections are server components reading from the CMS at build time. Client components are small and clearly named (*Reveal, *Slider). The result on our site: full Arabic HTML in the first byte, and search engines reading content rather than an empty shell.
2. Lists render in HTML even with state in the URL
On the “Our work” page, URL filters used to bail the whole page out to the client. The fix: useSyncExternalStore for URL state instead of useSearchParams, so the first list stays in the HTML and filtering stays interactive.
3. Static export did not die — it got cleaner
The site builds with output: "export" and deploys to shared hosting with an atomic folder swap. No Node server in production, no compute bill. The price: no automatic image optimisation — so we optimise at commit time (exact sizes, WebP, manual srcset).
4. Actions for forms without an intermediate API
In KSA Leaders, the nomination form submits through a Server Action straight to the Laravel API, with double validation. Fewer files, and loading/success/failure state built into React 19 (useActionState) instead of an external library.
5. Bilingual is not a feature, it is structure
- Every route under
[locale], Arabic as the default. - Logical properties (
ps-,text-start) instead of left/right. - Numbers and phones inside
dir="ltr", bidi-isolated.
6. Motion must start before hydration
The header used to appear seconds late on slow phones because its animation waited for JavaScript. We moved entrance animations to CSS keyframes and kept Motion for interactions only. First paint became instant, and the LCP element is never hidden by an animation.
7. What did not deserve the hype
Partial Prerendering is great in theory, but irrelevant with a static export. Turbopack really is faster, but changed not one architectural decision. The real speed came from boring decisions: image sizes, font loading order, and fewer client components.
A new framework gives your team better tools to be wrong faster — or right faster. The difference is the rules written in the repo.


