Modernising MedData and EDent without stopping the clinics
Context
A large enterprise Angular application behind MedData (hospital information system) and EDent (dental clinic SaaS).
The problem
The codebase was on Angular 14 with growing technical debt; every deployment environment needed its own static config file; clinics on poor connections hit the API for data that rarely changed.
Constraints
Production system in daily clinical use: no big-bang rewrite, no downtime.
What I did
Migrated Angular 14 to 17 incrementally, moving to standalone components. Replaced static environment files with runtime configuration injected by Docker Swarm. Added an OpenAPI/Swagger generator so TypeScript API clients are generated instead of maintained by hand. Built IndexedDB client-side caching for reference data so clinics on low-bandwidth connections stay fast and the server sees fewer requests.
What happened
One build now serves every environment; the per-deployment environment files are gone. API clients are generated from the OpenAPI spec instead of maintained by hand, so a backend change is a regeneration, not an afternoon. Screens backed by the IndexedDB cache stop calling the API for reference data, and clinics on slow connections open them noticeably faster. Clinics kept working through every step.