← All work

(Case study 02 / 07 — Web · PWA)

Credit Card Onboarding PWA

12 → 6

CKYC states → clear screens

Role
Led it from an empty repo to production, working with one other frontend engineer. I owned the PAN, Video KYC, CKYC, consent and downtime screens.
Status
Live in production.
Stack
  • React
  • TypeScript
  • Workbox
  • Strapi

(01) The problem

People applying for the card had to get through PAN, KYC and consent steps inside a WebView, on whatever phone and network they had, with a backend that reported 12 different KYC statuses.

(02) What I built

  • A Vite, React and TypeScript PWA with lazy-loaded routes, Zustand stores and Workbox precaching.
  • One CKYC router that maps 12 backend statuses to 6 screens users understand, and re-checks status when they come back from the bank's KYC page.
  • CMS-driven config (Strapi) for downtime notices and Video KYC agent hours. It fails open, so a CMS outage can't block onboarding.
  • A secured-card offer on the rejection screen, so a rejected applicant gets a next step instead of a dead end.
  • Sentry error monitoring with no session replay, because replay would record PAN and Aadhaar details.

(03) The hard part

Four onboarding screens suddenly failed to load for every user. I ruled out a Safari gap and a stale deploy, then probed the CDN directly and found a firewall rule blocking some of the JS chunk names the build generated. Switching the build's content hashes to hex removed the whole class of problem, instead of asking for a firewall exception.

(04) Result

The hotfix restored every precached file. The new CMS rule engine was checked against a full year of 15-minute timestamps with no change in behaviour from the old one.

Next case studyShared Design System

(Hiring? Let's talk)

Let's buildsomething that ships.