← All work  ·  Case 03 of 08 · POC / Prototype

A 20-year-old, 366-screen legacy monster, rebuilt as a modern application.

A solo rebuild of a 20-year-old desktop platform as a modern, AI-first web application. Roughly 60–70% of the legacy system is rebuilt completely; the rest is documented as a prioritized migration roadmap instead of pretended parity.

Context
Enterprise Healthcare GRC SaaSLegacy Modernization PrototypeSolo · Product + Eng2026 · 1–2 months
Impact · Phoenix: Legacy Modernization Prototype
29 / 21
Pages / API routers
Core daily workflow
100%
Recall, precision, row-perfect
55 items, 2 real quotes
60–70%
Of the legacy app
Rebuilt completely
.NET 8
Backend
Rebuilt from Python
Chapter 01Problem space

A 366-window system. One expensive, unglamorous step.

For roughly 20 years, a spend-analysis team ran their entire quote-benchmarking business on a PowerBuilder desktop app over a VDI session. The core daily job was manual: a vendor quote arrives as a PDF or scan, an analyst reads it and types every line item into a form by hand, then compares prices against market benchmarks. That transcription step was pure data entry, and it came before any of the analyst's actual judgment.

Chapter 02Discovery

A correct decision that quietly expired.

I reverse-engineered the legacy system's scope directly from its codebase: 21 major modules, 366+ screens, a genuinely enormous surface area. But the single biggest pain point was narrow: manual line-item transcription, the one step that was pure mechanical cost with zero judgment value. Five-whys on "why is this still manual?" landed on the real answer: the assumption that a human must transcribe quotes was correct for 20 years, right up until vision-capable LLMs made it tractable, and nobody had re-checked it since.

✦ The operating principle
"Parity is not the goal. Rebuild what people actually use, ship the AI capability legacy never had, and roadmap the rest."
Chapter 03Approach

Rebuild the application. Prove the AI. Keep a fallback.

Rather than porting the legacy app screen-for-screen, a multi-year program that would have faithfully reproduced the same manual bottleneck, I rebuilt it as a modern web application: roughly 60–70% of the legacy system rebuilt completely, prioritized by what analysts actually use daily, plus the AI extraction capability the legacy app never had.

The technical decision: AI extraction is an optional, pluggable mode with manual entry as a permanent fallback. The product degrades gracefully and is never hostage to a model endpoint being available.

The backend started on Python (FastAPI). Partway through the build I learned the rest of the company's applications run on .NET, so I rebuilt the backend on .NET 8 to match the enterprise stack. That is the backend in use today; the Python version is retired.

Benchmarking works differently depending on what's being priced: capital equipment is compared by discount from list price, consumables by price percentile across other hospitals. A tornado chart shows which lines drive the gap, and reports export in two formats.

The extraction capability proven inside this prototype shipped separately as a standalone production tool, AI Quote Automation, now in daily analyst use.

Chapter 04AI design

This is where I fixed Quote Parser's biggest gap.

Quote Parser, the production tool, shipped without a labeled accuracy number. Phoenix built that harness: every extraction scored against hand-labeled ground truth for recall, precision, and whether each row is perfect. The prompt grew from about 25 lines to about 180 as the harness exposed failure cases.

The hardest case was a hospital bed quote with subtotal rows that look exactly like products. The model has to find the 10 real line items and ignore the 3 subtotals. It does.

Chapter 05Outcome

Validated on real quotes, including the hard cases.

Extraction accuracy

100% recall, precision, row-perfect on 55 line items across 2 real quotes. Small sample: proves the harness works, not that the model is perfect.

Scope built

29 pages, 21 API routers covering the core daily workflow. Roughly 60–70% of the legacy system, rebuilt completely.

Potential time saved

About 1,250 analyst hours per month. Projected estimate, not measured.

Chapter 06My role

What I owned, solo.

Discovery

Reverse-engineered the legacy system's scope; wrote a formal gap analysis to scope the rebuild.

Prompt engineering

Built the extraction prompt handling sub-line items, prose-embedded quantities, single-price-column inference. 25 → 180 lines.

Full-stack build

React/TypeScript frontend; backend on FastAPI, then rebuilt on .NET 8 to match the enterprise stack.

Evaluation

Built a labeled accuracy harness scoring extraction against hand-labeled ground truth.

Chapter 07Lessons

Scope discipline is what makes AI claims credible.

A prioritized gap analysis is the real scoping weapon. It turns "the legacy app is huge and scary" into a rational, defensible plan instead of an excuse to sprawl.

Re-examine old assumptions when the underlying technology shifts. The 20-year manual step wasn't a bad decision. It was correct until it wasn't, and nobody had re-checked.

Grow the evaluation set before quoting an accuracy number. 100% on 55 line items across 2 quotes proves the harness works, not that the model is perfect.

Next case

Clinical Evidence Extraction

Extracting buried medical data with strict human oversight.

→

Let's build what actually ships.