DEV Community

Cover image for A Live Call Landed: Rebuilding India's 104 Health Helpline from Angular 4 to Angular 20
Aarti Panchal
Aarti Panchal

Posted on

A Live Call Landed: Rebuilding India's 104 Health Helpline from Angular 4 to Angular 20

What I built

Helpline104-UI-NEXT is the new frontend for India's 104 health helpline, part of the AMRIT platform maintained by Piramal Swasthya Management and Research Institute (PSMRI). When a citizen dials 104, a health advisory officer picks up, and everything that happens next! caller identification, beneficiary lookup, symptom capture, clinical decision support, grievance filing, case closur. happens inside this application.

The version in production was built on Angular 4. That framework reached end of life years ago. npm audit on the legacy app reports 183 vulnerabilities. That's not a code-quality nitpick on a side project — it's the software layer sitting between a citizen's health question and the record of what they were told.

The rebuild targets Angular 20 with the current architecture end to end:

  • Standalone components — no NgModules anywhere in the new tree
  • Zoneless change detection — Zone.js removed entirely
  • Signals for state, replacing the legacy service-plus-subject patterns
  • ZardUI + Tailwind v4 for the component and design layer
  • SNOMED CT integration for clinically coded symptom and diagnosis capture
  • CDSS hooks so agents get decision support inline
  • CTI integration — the softphone lives in an iframe and communicates over postMessage


The rebuilt RO Dashboard — live agent ID, real UAT data


The numbers

Metric Value
Pull requests merged 30
Commits 131
E2E scenarios passing 52 / 60
App-level bugs in latest full run 0
Vulnerable runtime dependencies in the rebuild 0 (npm audit --omit=dev)
Angular versions jumped 4 → 20

Dev tooling has 20 vulnerabilities (vite, ws, socket.io-adapter) — none shipped to production.


The hardest problem I solved

Getting a real inbound call to land in the new app.

The telephony side is a CZentrix CTI system. The softphone is an embedded iframe that pushes call events over postMessage. Nothing about that was written down. Figuring it out meant instrumenting the legacy app, watching what actually crossed the boundary, and reconstructing the contract from observed traffic.

Then came the ordering problems. A postMessage can arrive before authentication resolves, so the handler had to be gated on CTI-eligible auth state or it would process a call for a user who wasn't logged in yet. Agent ID parsing had an off-by-one in how the payload was split. Call state didn't survive a page reload so an agent refreshing mid-call lost the panel.

Then it worked.

A real inbound call came through on UAT. The caller's number auto-populated in the header. The call timer started counting. The agent workspace loaded with the right context. I watched a live phone call from somewhere in India render itself into a UI I had written, and there is no unit test that feels like that.


Live call, SNOMED CT returning real clinical concepts from UAT


What I learned with AI-assisted coding

I used Claude Code for implementation and CodeRabbit for automated PR review across the whole fellowship.

What it genuinely changed: reading a large unfamiliar codebase went from the slowest part of the job to a tractable one. CodeRabbit caught real defects — null-safety gaps, error banners that dismissed themselves too early, response shapes I'd assumed instead of verified.

What it did not change: the CTI integration was not solvable by asking. No model knew what CZentrix actually sent over postMessage because it wasn't documented anywhere. That required instrumenting the old app and reading actual traffic.

The pattern that held: AI is fast at what the code does and unreliable at why it does it. Every time I deleted something that looked wrong, it was compensating for a backend quirk nobody wrote down. Verify everything against the running system.


What's next

  • Close remaining E2E gaps — mostly waiting on backend fixes and reference data
  • Finish remaining supervisor configuration screens
  • Accessibility pass — keyboard navigation and screen reader support
  • Unit test coverage — zero specs today on signal stores and guards
  • Production deployment and handover documentation


30 PRs merged, every one reviewed by CodeRabbit + Mentor


Links

Thinking about applying to C4GT DMP 2027? The C4GT Discord is where it starts, and the C4GT community platform lists the projects. I applied assuming I wasn't ready. Second year, no industry experience, no idea if my proposal was any good. What's stopping you? Ask me anything in the comments.

Top comments (0)