Case studies/Health, real estate & civic
Real estate · luxury listings

Tampa MLS

2020 - 2021

The luxury end of the same brokerage: Hillsborough, Pinellas and Pasco inventory with a $400,000 floor written into the search layer itself.

Overview

Tampa MLS is the luxury end of a Tampa Bay brokerage's property search: Hillsborough, Pinellas and Pasco inventory, filtered search, listing pages with photos, maps and school data, and a member area where buyers save homes and searches and send questions straight to the agent team. The luxury focus is enforced in the search layer itself - unless a visitor sets a minimum price, results start at $400,000, and the homepage leads with price bands from $600,000 up.

It runs as a custom PHP application on Slim 3 with Smarty templates. Listings live in MongoDB as documents keyed by MLS number; members, favorites, saved searches, contact requests and editable page metadata live in MySQL; sessions sit in Redis; outgoing email goes through a Beanstalkd job queue. The site is served through Cloudflare and still answers on its original PHP runtime.

Around the search sit the pages a brokerage needs: area information, selling, FAQ, about and contact - the same application rendering content pages from the same templates.

What was built

Stack

Frontend

Smarty 3
Server-rendered templates for search, listing, member and content pages
Semantic UI
Cards, modals, dropdown filters and forms
jQuery + JsRender
Search form logic, favorites, saved-search editing and client-side modal templates
Fotorama
Swipeable photo gallery, loaded only on listing pages to keep search pages light

Backend

PHP / Slim 3
Routing, middleware and dependency container for pages, search, member area and AJAX endpoints
Beanstalkd (Pheanstalk)
Email jobs: the message is stored first, then its id goes on a delivery queue

Data

MongoDB
Listing documents keyed by MLS number; filters, sorting and pagination run as queries
MySQL
Members, favorites, saved searches, contact requests and per-page SEO metadata
Redis
Session storage for signed-in members, including remember-me logins across visits

Infrastructure & DevOps

Cloudflare
The site is served through Cloudflare

Integrations

MLS listing data
Property facts, photos, schools and listing office behind every search card and listing page
Google Maps + Street View
Hybrid map and street-level panorama for each listing address
Google reCAPTCHA
Spam protection on the contact form, verified on the server

Engineering highlights

Default business rules sit in one place in the search layer: only active listings, the three core counties unless others are chosen, and a $400,000 floor unless the visitor sets a minimum price.

All search state lives in the URL path, which is what lets a member save any result page as a saved search and lets the homepage link straight to curated searches.

Member data is partitioned by a site identifier, so one member database can back more than one property site - which is what made the second site possible.

The document store fits the domain: a listing is one MLS-keyed document with its photos, features and schools, so a search is a query rather than a join across a dozen tables.