What they had
A single-file React prototype, generated through AI chat and iterated across roughly twenty-six versions before we were brought in. It worked, and the office ran on it. It also stored everything in the browser's localStorage, which meant one person per machine, no shared state, and a cleared cache was a lost project.
That prototype was also the specification. Years of pricing logic, an eighty-two-package catalogue, the supplier list, and the Dutch construction vocabulary all lived in it and nowhere else. Nothing could be redesigned on the way to production without breaking the thing the team already trusted.
What we built
A React and TanStack front end on a NestJS and Postgres backend, with role-based authentication, deployed on Railway. The calculator reproduces their model exactly, including the order the margins stack in: overhead at five percent, then risk at three, then VAT at nine or twenty-one depending on the work. On a seventy-two thousand euro subtotal that chain has to land on the same gross figure their own spreadsheet produced, every time.
Address lookups pull from BAG, PDOK, and Kadaster, the Dutch government building registries, cross-referenced with EP-Online for energy labels. Mapbox renders a 3D view of the building directly in the calculator. Quotes sync live to TeamLeader in the shape their office already expected to see.
The engineering constraint
Exact fidelity was the whole job. A quoting tool that is approximately right is worse than no tool, because every number it produces has to be checked by hand. Our task was to implement their method, not improve it: identical inputs, identical outputs, on a system that several people could now use at once.
Splitsing work, the Amsterdam practice of converting one residence into several legal apartments, carries its own permit flow. That coordination is part of the domain the platform had to speak fluently, not an edge case bolted on afterwards.
Where it stands
The calculator, authentication, registry lookups, and CRM sync run in production at ibgroups.ai. The second phase has been handed over and development continues under a retainer.
Stack · React · TanStack · NestJS · Postgres · TeamLeader · Railway
