The problem
A Realtor association ran an annual award program recognizing exceptional client service, using an off-the-shelf third-party platform. It worked, but it wasn't built around how the organization's MLS and membership data actually flowed, which meant staff still handled a fair amount of manual lookup and cleanup during the nomination period - on top of a recurring cost that had grown substantially over the years.
The approach
I built a Django app that pulls listing data through the RESO Web API standard and member data from the association's records, so clients can look up their Realtor and the specific transaction directly instead of typing it all in by hand.
- Clients search for their Realtor by last name using an HTMX-powered lookup - type two letters, get a matching list, no page reload.
- After picking a transaction, they answer a few structured questions and write a short paragraph on what their Realtor did to go above and beyond.
- Submission triggers three emails: a thank-you to the client, a notification to the nominated Realtor, and an alert to the nominations admin.
- Not every transaction lives in the MLS - a "Don't see your transaction?" link lets clients manually enter property address and close date for off-MLS deals.
- For clients who aren't comfortable using the site themselves, the Realtor can submit on their behalf and upload a scanned handwritten nomination form instead.
- Admins review each nomination and can flag it as disqualified, duplicated, etc. A separate report flags likely duplicate nominations automatically.
- When the nomination period closes, admins bulk-print the nominations with the Realtor's name and company redacted for blind judging.
- Backend data processing runs on Python, Pandas, and SQLAlchemy against the MLS feed, on top of a PostgreSQL database.
What I'd do differently
Right now, day-to-day admin work and the dashboard live on the front end, which means I'm maintaining custom admin UI for tasks a framework's built-in admin could largely handle. I'm planning a redesign that moves administrative tasks into a more standard admin interface - that would cut a meaningful amount of custom front-end code I currently have to maintain. I'm also planning improvements to name-matching logic ahead of the next program cycle, to close a gap the first year surfaced.
Result
The platform replaced a costly third-party service with a system built around how the organization's own data actually works. In its first year, it collected over one thousand nominations, with the duplicate-detection report and redacted bulk-printing removing steps that used to be manual.