The problem
A regional real estate organization launched a lockbox lending program for MLS subscribers, letting agents borrow a lockbox for listings they wanted to secure. The problem was operational, not technical: every request was tracked in a spreadsheet, with administrators manually copying listing and agent data in by hand.
That meant no reliable way to know which listings had gone off-market while their lockbox was still checked out, no easy way to see which agents had used the program, and no visibility into which satellite pickup locations had lockboxes on hand. I was asked to evaluate off-the-shelf options, but nothing fit how the program actually worked, so I proposed and built one instead.
The approach
I built the tool in Django with PostgreSQL, structured around a relational data model connecting requests, listings, agents, lockboxes, and pickup locations.
- A backend process runs on a regular interval, pulling new and updated listing and agent data from the MLS data feed using Python and Pandas, then upserting it into Postgres via SQLAlchemy.
- Every listing that opts into the lockbox program automatically becomes a request, with agent and listing data attached - no one types it in by hand.
- When a listing's status flips to off-market, the tool flags the associated request as overdue if the lockbox hasn't been marked returned, so admins know exactly what to chase down.
- Day-to-day work - reviewing new requests, marking returns, checking the overdue list — happens on the front end. More structural admin tasks route through Django's built-in admin, since only a couple of administrators use the tool and are comfortable there.
The dashboard surfaces overdue requests, an index of agents who've used the program, lockbox counts by pickup location, and basic utilization numbers.
What I'd do differently
Two things I'd tackle first: the codebase needs a cleanup pass - it grew quickly to solve an urgent operational problem, and structure took a back seat to shipping. I'd also build out more self-service tooling on the front end so fewer edge cases require a trip into the admin panel.
Result
Since launch, the tool has processed lockbox requests for more than a thousand agents and thousands of loaned lockboxes, with several hundred requests active at any given time. It's a clear upgrade over the spreadsheet it replaced, and the administrators who run the program use it daily.