
- Sector
- Healthcare insurance
- Year
- 2023 – now
- Role
- Lead engineer · architect
- Outcome
- ~30% of a team's week automated · now a white-label product · zero-dev pricing updates
What needed fixing.
Quoting a policy meant juggling age bands, country of nationality, country of expatriation, plan level, deductible, coinsurance and optional modules — by hand, per applicant, several applicants per proposal. Then the numbers were retyped into a client-ready document. Every change to the rate tables meant a developer ticket and a wait. It was slow, error-prone, and nobody's idea of a good week.
How I built it.
Drupal's Plugin API let me build the calculator as modular, testable pieces rather than one heroic function. The pricing lives in data, not code, so staff upload new rates from a validated CSV and the engine simply uses them — no deployment, no developer. Quotes compose in real time across all the dimensions, then Entity Print and mPDF render a branded proposal translated into the client's language. The result automated roughly a third of the insurance managers' daily work, which is the sort of number that gets a project a sequel.
A pricing matrix with seven dimensions, a multilingual PDF at the end of it, and insurance managers who no longer file a developer ticket to change a number.
- 01Replace the manual, spreadsheet-driven quoting process with software
- 02Let non-technical staff update pricing themselves, without a deployment
- 03Compute multi-applicant quotes across every pricing dimension in real time
- 04Produce branded, multilingual PDF proposals ready to send
- 05Keep a tracked history of every quote for management
- Multi-dimensional pricing engine (age × nationality × expatriation × plan × deductible × coinsurance × module)
- Multi-applicant quote composition with side-by-side option comparison
- CSV-driven rate import with validation — staff update pricing, not developers
- Branded multilingual PDF proposals via Entity Print + mPDF
- Self-service admin: data import, base prices, currencies, companies, countries
- Quote-history tracking and reporting for management
The premium nobody could calculate by hand
A health-insurance premium isn't one number — it's the product of an applicant's age band, country of nationality, country of expatriation, plan level, deductible, coinsurance, optional modules, currency and payment frequency, multiplied across every person on the proposal and then run through a discount engine. For years an insurance team did that by spreadsheet and a steady nerve: a couple of hours per quote, the constant risk of a fat-fingered rate, and a manager who couldn't update a price without a developer. GHI is the system that took that whole job off their desk.
Built from scratch on Drupal, Dockerised with CI/CD from day one, it now automates roughly 30% of the insurance team's week — and it works so well that it's been turned into a white-label product other brokers run under their own name.

- CMS
- Drupal 11
- Search
- By quote #, applicant, cover, currency, status
- Delivery
- Dockerised, CI/CD
- Outcome
- ~30% of a team's week, automated
The spreadsheet era, replaced by one portal a manager can actually run.
Nine dimensions, several applicants, one quote
The heart of it is the calculator. A manager adds each insured person — name, date of birth, nationality, country of expatriation — then sets the shared terms: payment frequency, currency, area of cover, start date. From there they build option columns side by side, each its own combination of plan level, deductible, coinsurance, dental and vision and discount, with the annual premium recomputing live as they go. Six options on one screen, compared at a glance, where there used to be six spreadsheets and a prayer.

- Applicants
- Multiple per proposal
- Dimensions
- Age × nationality × country × plan × deductible × coinsurance × module × currency × frequency
- Pricing
- CSV-driven, staff-editable
- Engine
- Live recompute + discount engine
Pricing lives in data, not code — no deployment to change a rate.
A proposal the client can actually read
A quote is only useful once it's a document someone can put in front of a client. So the end of the flow is a branded proposal — translated into the client's language, generated by Entity Print and mPDF, tracked by quote ID. It opens with a clean quote summary (applicant, area of cover, underwriting terms, applicable law) and lays out the indicative premium with the full breakdown: plan level, dental and vision, deductible, coinsurance, and the discount engine showing the saving applied. Pick a language, download, present.
The quote view: summary, breakdown, discount, and a one-click multilingual PDF.
The generated proposal: quote summary, area of cover, underwriting terms, applicable law.
Indicative premium: plan, cover, deductible, coinsurance — and the discount applied.Handed back to the people who run it
The part that makes it a product rather than a tool is that the managers own it. Rate tables, base prices, currencies, companies, countries, email notifications — all of it is maintained through a self-service admin, by data import and on-screen editing, no developer in the loop. That's the whole point: a pricing change that used to be a support ticket and a deployment is now a CSV upload over lunch. It's why GHI stopped being one broker's internal calculator and became a white-label platform others run as their own.