← Selected work

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

User lands from ad → Server Component renders shell → UTM params captured
Client hydrates → API client acquires JWT, starts silent-refresh timer
User progresses → each step validates → GA4 / GTM events fire on transitions
Submit → encrypted request body + headers → enterprise API
On success → redirect to quote comparison

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