Case  —

Policies, invoices,
one calm desk.

A Danish insurance mutual needed day-to-day policy and billing work off ageing host infrastructure-without losing correctness, history, or the audit trail finance relied on. I worked across the PHP services and the Nuxt staff app that replaced it.

Maritime worker on a quay with a container ship in the background - case imagery for a policy and billing platform by Emil Rosenius

The client

A mutual-style insurer in Denmark-underwriting, renewals, and member administration with the regulation and audit expectations that come with the category. Staff lived in spreadsheets, printouts, and a legacy host system that was expensive to change and risky to extend.

The problem

Day-to-day work spanned memberships, policy lifecycles, tariff maintenance, invoice generation, settlement runs, notices, and reporting-with finance integrations and outbound documents that had to match legal wording.

Correctness and history mattered. A replacement could not mean re-entering years of policy data or breaking the audit trail between underwriters and finance.

Staff needed one platform, not a patchwork of host screens, Excel bridges, and manual hand-offs every time a renewal or settlement run moved through the building.

What I did


Backend

Slim PHP HTTP services with relational data under migrations. Queue-style jobs for slow work-settlement runs, batch invoicing, reporting exports. Twig-backed documents where PDFs and letters had to track the legal text.


Frontend

A static-generated Nuxt 2 SPA with Vuetify, Vuex, charts, rich text, validation, and Danish i18n. Dozens of operational screens for the workflows above-not a marketing surface.


Across both

I worked in both codebases-domain logic, reporting exports, and integrations on the API side; billing and policy lifecycle features, renewal edge cases, and UI that stayed honest as the API surface grew on the frontend side.

Where it helped the team, I stayed close to how underwriters and finance actually used the screens-so we shipped work that reduced double entry and spreadsheet bridges, not another isolated CRUD form.

Results

Policy and billing work moved into one staff-facing platform instead of bouncing between host screens and offline spreadsheets.

Underwriters and finance shared the same data through settlement and invoicing-fewer manual hand-offs and fewer places for numbers to diverge.

The Slim and Nuxt stack stayed in production through the engagement, with room to extend tariffs, settlement, and reporting without reopening the mainframe-style risk profile the legacy system carried.

Looking for
the right developer?

Whether you're ready to start or just exploring your options, feel free to reach out. No commitment, no pressure.

I usually respond within 2 hours.

11+ years of experienceBased in Copenhagen