← Back to blog

Technology

Why we upgraded ADSA Labs to Next.js 16 and React 19

· 6 min read

ADSA Labs runs this website and several internal tools on Next.js 16 with React 19 — the same direction we recommend for greenfield SaaS and admin dashboards. The win is not the version number; it is predictable server/client boundaries, faster builds on Vercel, and a component model that matches how we already write TypeScript UI.

We migrated incrementally: static marketing routes stay force-static where possible so Supabase timeouts never block `next build`. Admin and finance routes stay dynamic with explicit auth checks. That pattern saved us when the database was unhealthy — the public site still deployed.

React 19's handling of refs, document metadata, and concurrent features reduces hacky workarounds in forms and modals — common in finance and task-entry flows we ship. We still audit client bundles for heavy client-only pages; not everything belongs in a Server Component, but defaulting to server-first cuts JS shipped to phones in Colombo and London alike.

If you are on Next.js 13 or 14, plan dependency upgrades before Node and ESLint break. We pair framework bumps with a short regression pass on auth, webhooks, and PDF exports — the unglamorous paths that break silently.

Takeaways

  • Keep public marketing static; isolate flaky data dependencies from build time.
  • Re-test auth middleware and API routes after every major Next upgrade.
  • Measure client JS after migrating pages to Server Components.