Projects
2023·Full-stack engineer

Back-end upgrade of the Estate portal

Brand-new Kotlin backend, replaced mail system, migration to Keycloak and MariaDB.

KotlinVert.xKeycloakMariaDBDevOpsJUnit
Geometric flat illustration with two database disks and a transition arrow in muted tones

Alongside modernising the front-end we also tackled the back-end of the estate portal. Where the front-end benefited from a gradual micro-frontend strategy, the back-end called for a more fundamental intervention. The existing stack — an older Java back-end, MySQL, a custom mail implementation, and manually managed user accounts — had become more ballast than foundation.

We built a completely new Kotlin back-end on Vert.x. There was a good reason: the portal is event-driven and does a lot of I/O — querying external registers, sending email, generating documents, synchronizing statuses. Vert.x fits that profile beautifully. Kotlin let the team write safer code with less boilerplate than Java, while staying in the same JVM ecosystem.

We replaced the mail system with an online campaign mailer. That sounds like a detail, but email plays a major role in this portal: confirmations, reminders, requests for additional information. With the new solution we get per-message insight into delivery status, opens, and bounces, and we can manage templates without shipping a release. That relieves both engineering and operational teams.

Authorization was migrated to Keycloak. With it, a large category of bespoke code disappeared: password policy, brute-force protection, session management, federation, and role model now sit in a proven, standardized layer. This is exactly the kind of work you don't want to build yourself: the security implications of mistakes are large, and it has nothing to do with the portal's core domain.

The database migration from MySQL to MariaDB might look small, but it gave us the opportunity to clean up years-old table structures and stored procedures. We made transaction boundaries explicit, re-evaluated indexes, and added data-integrity checks that were missing before. The result: more predictable performance, cleaner queries, and fewer surprises under load.

Two things were paramount for me: that the portal could never go offline, and that we would not keep the old system alive longer than strictly necessary. We carried out the migration in phases with dual writes and targeted shadow reads, so we could compare old and new behavior before flipping the switch.

What remains is a back-end that is more robust, faster, and more secure, and that fits the pace at which the organisation wants to add new functionality. The combination of Kotlin/Vert.x for logic, Keycloak for identity, and an external campaign mailer for communication has proven itself extremely well in practice.

Outcomes

  • Complete back-end replacement without a single moment offline
  • Four parts replaced: back end to Kotlin on Vert.x, mail to a campaign mailer, authorisation to Keycloak and MySQL to MariaDB
  • Phased migration with dual writes and targeted shadow reads

Sectors & expertise

More work

Other projects

Contact

Working in this domain?

Facing a similar challenge? Let's have a no-obligation conversation.

Get in touch