7 years experience
Senior Frontend Engineer
Think in systems. Build with intent. Ship with impact.
Prajwal Bhatia
I like taking complex problems, breaking them down, and turning them into simple frontend solutions.
- React
- TypeScript
- JavaScript
- Next.js
- Redux · RTK Query
- Node · Express
- BullMQ · Redis
- Puppeteer · GCS
- Jest · RTL
- Core Web Vitals
- Datadog RUM · Sentry
- Material UI
- Accessibility
- React
- TypeScript
- JavaScript
- Next.js
- Redux · RTK Query
- Node · Express
- BullMQ · Redis
- Puppeteer · GCS
- Jest · RTL
- Core Web Vitals
- Datadog RUM · Sentry
- Material UI
- Accessibility
React, TypeScript, JavaScript, Next.js, Redux · RTK Query, Node · Express, BullMQ · Redis, Puppeteer · GCS, Jest · RTL, Core Web Vitals, Datadog RUM · Sentry, Material UI, Accessibility
PerformanceCore Web VitalsDatadog RUM
5.45s→3.17s
LCP p75
batch selection · 42% faster
0.229→0.006
CLS p75
intern profile
9.9s→8.6s
LCP p75
onboarding
0.44→0.24
CLS p75
dashboard
Read the case study→Batch selection · highest-traffic flow · field data at p75Drag the timeline. Same page, before and after my work.
Before
LCP 5.45s · CLS 0.229A late banner arrives and shoves everything down. That jump is the 0.229 CLS.
After
LCP 3.17s · CLS 0.006Done at 3.17s, and not a single pixel shifted on the way.
0s6s
3.17s — after LCP5.45s — before LCP
ArchitectureBackendNodeBullMQ
~55%
of URLs via og:image
in about a second
8×
lower latency
vs the Puppeteer fallback
2 tiers
og:image, then Puppeteer
Read the case study→Candidate name, institution and previous employer redacted ProductReliabilityReactRTK Query
28 min→12 min
Time to apply
57% faster
Read the case study→ArchitectureProductReactTypeScript
3+→1
Sequential API calls
one transactional endpoint
3→1
Signup screens
registration page deleted
Read the case study→“3+” is a floor, not a count — the old frontend made three or more sequential calls depending on the path taken. Sixty-second breakdowns of the browser behaviour behind the work.
04/2025 — now
Activation & onboarding
Redesigned intern activation & application flow
- +24%
- completion rate
- ↓31%
- drop-off
- 3 mo
- to ship
One of nine engineers on it. The auto-save and draft-recovery layer is mine end to end.
Batch Selection
A 500-line component split into focused hooks
Redux thunks migrated to RTK Query with caching and deduplication; business rules moved server-side.
Fast path
8×
lower latency than the Puppeteer fallback
Virtualised filter
10+
autocomplete and filter surfaces
Shared frontend repo
Résumé Builder
plus accessibility, testing, CI and dependency hygiene
01/2023 — 04/2025
Core Web Vitals
5.45s → 3.17s
Batch Selection LCP p75 — 42% faster, through image preloading, third-party preconnects and deferred analytics.
Layout shift
0.229 → 0.006
Intern Profile CLS p75
Migration
EUI + Ant Design → Material UI
drawers, modals, navigation, file pickers, timelines and forms
08/2019 — 07/2021
API efficiency
50%
fewer calls — client-side caching, request deduplication and TTL-based invalidation
Interfaces
Responsive React
and REST API workflows