Skip to content
Prajwal Bhatia

Prajwal BhatiaSenior Software Engineer (Frontend Heavy) · SDE-3

I own what I ship, including the part that breaks.

7 years of building React and TypeScript products, currently SDE-3 at Virtual Internships. I take features from an ambiguous brief to production and stay on them afterwards — the P0 at 9pm, the review standard that catches it next time, the state nobody handled. Performance is part of that, not the whole of it.

Open to senior roles

Interactive before-and-after demonstrations

Batch selection · highest-traffic flow · field data at p75

Drag the timeline. Same page, before and after my work.

6.00s

Before

LCP 5.45s · CLS 0.229

A late banner arrives and shoves everything down. That jump is the 0.229 CLS.

After

LCP 3.17s · CLS 0.006

Done at 3.17s, and not a single pixel shifted on the way.

0s6s
3.17s — after LCP5.45s — before LCP

Selected work — hover to read

All work →

3.17sfrom 5.45s · LCP p75

The problem

The highest-traffic flow in the product — batch selection — took 5.45s to paint at p75. Layout shifted under people as late assets landed.

What I did

Preloaded the LCP image, preconnected the third-party origins, deferred analytics past interactive, and reserved layout space so nothing arrives late and pushes content down.

  • Core Web Vitals
  • Datadog RUM
  • React
Full case study →

Hiring for a senior role?

I’m open to conversations. Email is fastest — I answer everything.