Case study · Bazaar Technologies

Web performance for the rest of the world.

How we took Bazaar's flagship app from failing Core Web Vitals to Passed — INP 169 ms, LCP down 40% — and grew organic search from zero to 156K total clicks, under Pakistani 3G/4G network conditions.

Senior Software Engineer II · Bazaar Technologies

Core Web Vitals — field / CrUXPassed
INP, mobile (CrUX)169 ms
LCP cut40%
Lighthouse Performance92
Organic clicks (GSC, 12-mo)156K
Search impressions (GSC)11.2M
CDN cost reduction$5,400/yr

Context

Bazaar is Pakistan's largest B2C grocery platform — 100k+ active web users, 1M+ Android downloads. Most of those users are not on US-fiber. They're on Pakistani 3G and entry-level 4G, on mid-range Android phones. The benchmark that mattered wasn't a synthetic Lighthouse run — it was field-measured Core Web Vitals from CrUX.

When we started, CWV was failing. Imagery was unoptimized, CDN caching ran on defaults, organic search was effectively zero. Two of us on the web side took ownership of fixing it.

The work

Image pipeline

The biggest LCP win. We moved customer-facing imagery through a Next.js Image pipeline backed by S3 + CloudFront — format-appropriate variants (WebP / JPEG) and width-appropriate sizes for the actual breakpoints we serve. Same CDN ended up serving the optimized variants to the Android app too.

Viewport-aware lazy loading

Below-the-fold imagery — category tiles, recommendation shelves — moved to lazy loading. On slow connections this isn't about eventual bytes; it's about not blocking LCP behind content the user won't see for another two seconds anyway.

CDN tuning

Default CloudFront caching wasn't cutting it. TTLs + cache-control per asset type, aggressive caching for hot imagery and shared bundles, origin shielding so an uncached request didn't cascade. CDN bill came down ~$450/month — close to $5,400/year.

Interactivity held its line

Because the fix leaned on the image pipeline and cache rather than shipping more JavaScript, the main thread stayed light. Field INP came in at 169 ms on mobile (76 ms desktop) — comfortably inside the good range, which matters more than ever now that INP is the most-failed Core Web Vital.

SEO foundations

Once the site was actually fast, the SEO basics had something to work with: structured product data, metadata hygiene, canonical URLs, sitemap reflecting the real category tree. Google rewards this slowly — but the curve was unmistakable once it kicked in.

What we rejected

An SSR-everywhere rewrite would have been the flashy fix, but the field data pointed at image bytes and cache, not render strategy — so we spent the budget where the LCP actually was and shipped incrementally, rather than blocking real wins behind a long rewrite.

Aggressive JS code-splitting came later, not first: on mid-tier Android the dominant cost was image weight over slow radios, so trimming bundles would have moved the needle far less than the image pipeline for the same effort.

We deliberately deferred a full design-system and font migration until CWV was green — perf first, polish second — so we never regressed the numbers we were there to fix.

The receipts

Screenshots from the actual tools (captured May 2026) — Lighthouse, Search Console, and PageSpeed Insights' CrUX report — for bazaarapp.com.

One thing to be straight about: Bazaar decommissioned this platform in 2026 when the company pivoted to Keenu, so you can no longer re-run PageSpeed Insights against it and see these numbers for yourself. That was true while it was live, and it's the reason the receipts below are dated screenshots rather than a link. If you want performance work you can verify today, the Keenu One storefront is live on three merchant domains and carries the web-vitals RUM and Prometheus instrumentation I built for it.

Lighthouse report for bazaarapp.com — Performance 92, Accessibility 92, Best Practices 96, SEO 92
Lighthouse — Performance 92, Accessibility 92, Best Practices 96, SEO 92.
PageSpeed Insights / CrUX report for bazaarapp.com on mobile — Core Web Vitals: Passed
CrUX, mobile — Core Web Vitals: Passed. LCP 2.2s, INP 169ms, CLS 0.01. Field-measured on real users, not a synthetic test.
PageSpeed Insights / CrUX report for bazaarapp.com on desktop — Core Web Vitals: Passed
CrUX, desktop — same story. LCP 2.0s, INP 76ms, CLS 0.01.
Google Search Console for bazaarapp.com — 156K total clicks, 11.2M total impressions, 1.4% CTR, average position 7
Google Search Console — from ~0 clicks/day in early 2025 to ~1K clicks/day by Q1 2026. 156K total clicks, 11.2M impressions, average position 7.

Honest scope

I co-led this with one other engineer on the web side — the image-pipeline and CDN strategy were a shared call. I owned the Next.js Image integration end-to-end and drove the rollout to Android. I'm claiming the perf and CDN + SEO foundation work, not the whole product.

Stack

Next.js (App Router), TypeScript, NestJS BFF, AWS (S3, CloudFront, Lambda), Vercel. Web Vitals via CrUX + Lighthouse. Image pipeline: Next.js Image + sharp through CloudFront with custom cache behaviours.

Want to talk about performance work for emerging markets?

I'm open to senior frontend roles — remote, or Islamabad/Rawalpindi-based.