Case study
Travel Insurance Campaign Landing Platform
Overview
A mobile-first web application built at ICICI Lombard that serves as the landing destination for YouTube and Instagram travel-insurance campaigns. Users arrive from an ad and move through a 6-step quote flow — destination, travel dates, travellers, health information, DOB and mobile number — before being handed to a quote comparison page.
This was my primary internship project. I owned requirement-gathering and the implementation of the quote flow, with frontend performance and Lighthouse as the explicit objective.
Problem / Context
The existing journey was desktop-first and form-heavy, and most users arriving from paid social campaigns dropped off before generating a quote. For a campaign-driven product, load time and every extra field are a direct cost, so the brief was a fast, single-page guided experience built for mobile.
My Contribution
- Gathered requirements and built the 6-step progressive quote flow end to end
- Focused on frontend performance and Lighthouse — the main objective set for the project
- Implemented conditional step logic so steps render based on earlier answers, with a progress bar that recalculates
- Wired the client to the encrypted enterprise API contract (encrypted payloads, JWT with silent refresh)
- Added GA4 / GTM events across key interactions to track progression and drop-offs
- Set up deployment on AWS EC2 through Jenkins
Technical Architecture
Rendering: Server Components for SEO-friendly initial HTML, Client Components for the interactive form. CSS Modules instead of a utility framework to keep the client bundle small and mobile load fast.
Key Engineering Challenges
Dynamic step count
Some steps only render based on earlier answers, so the progress bar could not assume a fixed total.
Solution: a pure getTotalSteps(formData) function computes the visible step count on every render; the multi-step hook and progress bar derive from it.
Token expiry mid-form
Users spending several minutes on the form would hit JWT expiry at submission.
Solution: the token service stores the expiry timestamp and silently refreshes before any call within the expiry window, so submission never fails on auth.
Undocumented encryption contract
The backend required an encrypted request body and a specific header format, with no documentation for a Next.js client.
Solution: worked from the existing Angular implementation to reproduce the contract behind a single API-client abstraction, so components never touch crypto directly.
Impact
5 min → 2.5 min
Time-to-quote
10K+
Daily API requests handled
AWS EC2 · Jenkins
Deployment pipeline
Tech Stack
Next.js 14 (App Router) · React · TypeScript · CSS Modules · JWT auth · encrypted API integration · GA4 / GTM · AWS EC2 · Jenkins