All projects

Smart Overlay

Sargent & Lundy · primary developer

Smart Overlay overlays two revisions of an engineering drawing set and produces color-coded diff images showing additions, removals, and unchanged content. It replaces a manual process engineers previously ran one page at a time in Bluebeam.

I am the primary developer, and I took it from prototype through a structured pilot to production.

What I built

  • Built a FastAPI backend and a React/Next.js frontend, containerized with Docker and deployed to Azure Container Apps behind Entra ID authentication.
  • Designed the drawing comparison pipeline using PyMuPDF for PDF rasterization and OpenCV phase correlation with Fourier-Mellin registration for automatic alignment, so users do not have to manually register pages.
  • Split the monolithic backend into a lightweight consumption API plus queue-triggered worker jobs, so long-running overlay generation runs asynchronously and compute scales to zero when idle. Used Azure Queue Storage for job dispatch, Blob Storage for artifact persistence, and Table Storage for job state.
  • Fixed a production performance defect where a cache-key mismatch caused the download endpoint to re-merge every per-pair PDF on each request, producing 10 to 20 minute responses that exceeded the ingress timeout. Replaced it with direct SAS-URL access to the cached combined PDF blob.
  • Cut storage and processing cost by building the combined PDF binder directly from overlay PNGs instead of writing intermediate per-pair PDFs to disk and blob storage.
  • Made job state a single source of truth across API, worker, and storage so progress, phase labels, and unit counts render correctly in the frontend instead of stalling.
  • Migrated the environment from imperative Azure CLI deploy scripts to Terraform, establishing separate dev and production environments with approval-gated apply steps, and a dev-to-production image promotion flow through Azure Container Registry.
  • Built the CI/CD pipeline in GitHub Actions covering unit tests, smoke tests, stress tests, and environment-scoped deploys.
  • Added a colorblind-accessible diff palette using the Okabe-Ito color scheme, threaded through the overlay generation config.
  • Bounded frontend memory on very large drawing sets with a deterministic sliding-window thumbnail cache and immediate blob URL revocation outside the window.
  • Built a Jupyter telemetry notebook against Azure Log Analytics using azure-identity, azure-monitor-query, and pandas, with browser-based auth so non-developer teammates can query production logs without CLI setup.

Stack

PythonFastAPIPyMuPDFOpenCVpytestTypeScriptReactNext.jsDockerAzure Container AppsAzure Blob/Queue/Table StorageAzure Container RegistryMicrosoft Entra IDAzure Log AnalyticsTerraformGitHub Actions