(Case study 02 / 07 — Web · PWA)
Credit Card Onboarding PWA
12 → 6
CKYC states → clear screens
(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.
(Hiring? Let's talk)