← all work.

multi tenant SaaS / in production

Resi Audit

A multi tenant platform that catches carriers charging residential, liftgate and inside delivery fees on shipments that actually went to businesses and turns each one into a claim.

role.

built and own it

status.

in production

type.

multi tenant SaaS

stack.

python, fastapi, celery, redis, azure sql, react, typescript, aks, azure openai

Resi Audit dashboard: total addresses, processing activity, residential vs commercial split and confidence distribution
screenshot of the app. client names and dollar amounts blurred.
440K+addresses classified
3accessorial fees checked: residential, liftgate, inside delivery
70%confidence line: anything below goes to a person
104clients syncing claims, up from 24

the problem.

Carriers add a fee when they deliver to a home, plus liftgate and inside delivery fees that come with it. When the address is really a business, those fees shouldn't be there. Checking addresses one shipment at a time doesn't scale, so most of it never gets caught.

what I built.

Shipment batches come in per client, from a nightly sync with the source systems or from file uploads. Every pickup and delivery address is classified as commercial or residential using Street View, aerial imagery and an AI vision model, with a confidence score and a tier.

Anything under 70% confidence goes to a review queue, so a person makes the close calls. When a carrier billed a residential fee on what is really a business, it becomes a claim, gets scored and is sent to the verifier team. Claims too small to be worth filing are left out.

Fees are split by direction, so a pickup charge is checked against the origin address and a delivery charge against the destination.

how it runs.

FastAPI and Celery workers with Redis on Azure Kubernetes Service, Azure SQL for data, Azure Blob for files and a React and TypeScript front end. Bitbucket pipelines deploy to separate dev and prod environments.

Recent work: stopped a flood of error emails by making slow queries use their indexes, caching which clients live in which source and collapsing duplicate alerts into one per condition per hour. Claims sync now matches every client, not just 24 of 104.

how it works.

  1. pull shipment batches per client
  2. classify every pickup and delivery address
  3. send low confidence addresses to a person
  4. match the fees billed against the real address type
  5. score the claim and send it to the verifier