2025

Lead front-end

Angular 17, Docker Swarm, OpenAPI, IndexedDB

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.

Docker Swarm secret
config.json at start
APP_INITIALIZER
one build, every environment
Runtime configuration path. Before: one environment.*.ts per deployment, one build each.

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.