Legal Drafting Product, Taken Over After a Vendor Handover
A US legal-tech SaaS taken over across four codebases, Word add-in, web app, .NET 9 platform and AI services layer, and put back on one release path.

Problem
A lawyer drafting in Word and a lawyer reviewing on the web got materially different AI behavior on the same clause. The product, a contract drafting and review tool sold to US law firms and in-house legal teams, had been left by the previous vendor with releases that carried risk nobody could size, and the difference between the two surfaces was the residue of code built at different times against an AI layer with no single source of truth for prompts or retrieval.
Four codebases had drifted apart: the Word add-in on Office.js, the React web application, the .NET subscription and identity platform, and a TypeScript AI services layer on AWS Lambda. Behavior that looked like a backend question was sometimes a Word client question. The brief was not to add features; it was to take the product over and put it back on a footing the company could plan a roadmap against.
Solution
Before any code changed, the engagement produced a written map of the four codebases, which calls crossed which boundary, which prompts lived where, which AI behaviors the client was responsible for; the client signed it off before the first change landed. Work was sequenced so the customer base never saw the recovery: ship without surprises first, align the surfaces second, add behavior last. Prompts, retrieval configuration and provider selection moved into one AI services layer that both the Word add-in and the web application read from, so drift between them stopped being possible. The .NET platform, ASP.NET Core on .NET 9 with EF Core, ASP.NET Identity and Stripe, kept handling identity, subscription and billing, and the bring-your-own-key and provider-switching features were preserved and hardened through the takeover. CQUELLE's AI policy on what client data may pass through AI tools applied from day one, since the product itself processes customer contract text.


