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