OncoSurg
Private oncological surgery clinic, Cluj-Napoca.







OncoSurg is the clearest example in the portfolio of the difference between a presentation site and an internal application, because the same clinic uses both and they have almost nothing in common. The public site exists to be found: it loads fast, explains the services in the words a frightened patient uses, carries the team, the FAQ, articles and video, and one button that matters — book an appointment. It is translated into seven languages (Romanian, English, German, French, Italian, Spanish and Hungarian), because an oncology clinic in Cluj receives patients from across the region and from the diaspora, and somebody seeking a second opinion has no patience for a site they cannot read.
The internal application has none of that. It does not need to be found, it needs to be used eight hours a day: a panel showing what is coming today, a calendar in month, week and day views, a filter across every appointment, and a patient file split into personal data, clinical data and documents. The clinical side is structured rather than a free-text box: disease history, scheduled follow-ups, clinical examinations, laboratory results, diagnoses and recommendations, each dated and editable in place. The interface carries the clinic’s colour, not mine — the red from their mark is the colour of the application.
Documents are generated from templates: medical letter, certificate, clinical observation sheet, informed consent. Templates are filtered per doctor, so each one sees their own set without hunting through everyone else’s, and those requiring a signature are marked apart from those that do not. There is also an import of the identifiers from the clinic’s previous system, because a migration that loses the thread back to the history is not a migration.
Internal communication is a per-case chat rather than a general one: every conversation is attached to a patient or an operation, so the discussion about the anaesthetist’s sign-off stays beside the patient it concerns instead of scrolling away in a shared channel. It is reachable from any screen, with an unread count, because nobody in a clinic sits with a chat window open.
Underneath: React 19 with TanStack Router in the browser, an intermediate layer holding the session and the access token that is the only thing allowed to talk to the API, and a Go API over PostgreSQL 16. Every change passes nine automated stages — linting, type checking, unit and integration tests with a minimum of 85% coverage against a real PostgreSQL database, functional tests across every endpoint, and an end-to-end suite. It runs on Kubernetes, with secrets in a dedicated manager and encrypted backups on the usual schedule.
Visit the site