Back to Portfolio 2026

Frontend engineering case study

How Next.js, React, and TypeScript help optimize web performance, accessibility, and SEO

Frameworks do not make a site fast, accessible, or discoverable by themselves. They provide architectural tools. The engineering work is choosing the right rendering boundary, shipping less code, preserving semantic HTML, and measuring what users actually experience.

By Alexandra Lukinicheva10 minute read

Optimization is a system, not a Lighthouse score

Performance, accessibility, and SEO are often reviewed as separate checklists. In production they reinforce one another. A page with clear document structure is easier for assistive technology and search engines to understand. Correctly sized images reduce download cost and layout movement. Less client-side JavaScript improves responsiveness and reduces the number of states that can break keyboard or screen-reader behavior.

Core Web Vitals make part of that experience measurable. Google describes LCP, INP, and CLS as signals for loading, interactivity, and visual stability, while emphasizing field data at the 75th percentile rather than a single perfect lab run. See the official Web Vitals guidance.

What Next.js contributes

Next.js provides useful defaults: Server Components, route-level code splitting, prefetching, static rendering, image optimization, and a metadata API. The production advantage is not the framework label; it is using these features to reduce browser work and send meaningful HTML early.

  • Render intentionally. Keep content and data-fetching on the server when they do not need browser APIs. Add Client Components only around genuine interaction. This can reduce client bundle size and hydration work.
  • Control image cost. Provide intrinsic dimensions, responsive sizes, useful alt text, and preload only the true LCP image. Reserved dimensions also help prevent layout shift.
  • Ship crawlable context. Page-specific titles, descriptions, canonical URLs, Open Graph data, sitemaps, and structured content make the page easier to understand and share.

These practices align with the official Next.js production checklist, Image component documentation, and Metadata API guidance.

What React contributes

React makes interfaces composable, but component boundaries also become performance boundaries. The highest-value work is usually keeping state local, keeping rendering pure, avoiding effect chains, and ensuring that a small interaction does not invalidate an entire page.

Memoization is useful only after measurement. React explicitly describes memo as a performance optimization rather than a guarantee. Profile first, then memoize expensive components with stable inputs. For work that can load progressively, Suspense boundaries provide useful fallbacks without blocking the entire interface. Review the official React references for memo and Suspense.

What TypeScript contributes—and what it does not

TypeScript does not make the browser execute JavaScript faster; its types are erased during compilation. Its optimization value is engineering confidence. Typed component props, API responses, metadata objects, and image models make large refactors safer and expose invalid states before they reach production.

That matters when splitting components, moving work between the server and client, replacing image pipelines, or making reusable accessible primitives. The official TypeScript handbook describes TypeScript as a static type checker that catches errors before execution.

Accessibility and SEO share a foundation

Semantic HTML is the common layer. A logical heading hierarchy, descriptive links, labeled controls, landmarks, useful image alternatives, and keyboard-operable interactions help people use the page while also giving crawlers clearer structure. JavaScript should enhance these foundations, not replace them with anonymous clickable containers.

Automated checks are a useful baseline, not proof of full accessibility. Keyboard testing, screen-reader evaluation, zoom, contrast review, and real-user feedback remain essential. The W3C Web Accessibility Initiative provides the standards-based foundation.

Results from production work

At Upstart, captured Lighthouse reports for two production landing pages showed performance moving from 60 to 100 for Home Improvement Loans and from 63 to 99 for Personal Loans. On this portfolio, captured local tests showed CLS moving from 0.10 to 0 and INP from 56 ms to 16 ms.

These are point-in-time lab measurements, not universal promises. Their value is the before-and-after signal: measure, identify the bottleneck, make a focused change, and test again.

A repeatable optimization workflow

  1. 1Measure production and local behavior with Lighthouse, browser performance tools, and field data when available.
  2. 2Find the user-visible bottleneck: slow content, layout movement, delayed interaction, inaccessible navigation, or missing search context.
  3. 3Change one layer deliberately—rendering, JavaScript, images, component state, markup, or metadata.
  4. 4Verify with automated tools and manual keyboard, screen-reader, responsive, and content checks.
  5. 5Repeat after deployment, because real products and dependencies continue evolving.
The best frontend optimization is not a one-time score. It is a development habit that keeps the experience fast, understandable, inclusive, and resilient as the product changes.

Connect

Let's Build Something Great Together

I'm always happy to chat about frontend engineering, accessibility, React, or interesting opportunities.