Variant Systems

Elixir & Phoenix for Real Estate

Real estate platforms juggle live listings, concurrent offers, and multi-party transactions. Elixir handles all three without breaking a sweat.

Variant Systems builds industry-specific software with the tools that fit the problem.

Why this combination

  • GenServer processes manage per-listing state for real-time availability, pricing, and offer tracking
  • LiveView delivers interactive property search and filtering without client-side JavaScript frameworks
  • BEAM concurrency handles thousands of simultaneous MLS feed ingestion and listing sync operations
  • Ecto changesets enforce complex listing data validation rules across dozens of required fields

MLS Feed Ingestion at Scale

Real estate platforms depend on MLS data. Hundreds of MLSs publish listings in different formats - RETS, RESO Web API, flat files. Each feed needs continuous polling, parsing, normalization, and storage. A stale listing showing a sold property as available destroys user trust.

You model each MLS connection as a supervised GenServer. The process manages its own polling schedule, authentication tokens, and error state. When a feed goes down, the supervisor restarts the connection with exponential backoff while every other feed continues normally. Ecto changesets validate and normalize incoming listing data - catching missing required fields, invalid coordinates, and malformed prices before they reach the database. Batch inserts using Ecto’s insert_all process thousands of updates per second. ETS tables cache hot listing data for search queries, reducing database load during peak browsing. The BEAM’s scheduler distributes feed processing across CPU cores automatically.

Live Search and Interactive Filtering

Property search requires immediate feedback. Buyers adjust price ranges, select neighborhoods, toggle property types, and expect the result set to update instantly. Traditional request-response architectures introduce latency on every filter change, making the search experience feel sluggish.

LiveView eliminates the round-trip penalty. The search interface maintains state on the server, and filter changes trigger server-side query execution with LiveView pushing DOM patches to the browser. Ecto’s composable query system builds search queries dynamically - each filter composes onto the base query without string concatenation or manual SQL. PostGIS integration handles geographic search with bounding box and radius queries that execute in milliseconds. When new listings matching a saved search appear in the system, PubSub broadcasts the update to all connected users with matching criteria. A buyer watching a neighborhood sees new listings appear on their map in real time, without refreshing.

Offer Management and Deal Rooms

Real estate transactions involve multiple parties - buyers, sellers, agents on both sides, attorneys, lenders, and title companies. Offers, counteroffers, and contingency removals pass between parties with time-sensitive deadlines. Miscommunication or delays cost deals.

GenServer processes model each transaction as a state machine with explicit phases: pre-offer, submitted, counteroffer, accepted, contingency period, closing. Pattern matching on current state determines which actions are valid and which parties can take them. LiveView deal rooms give each participant a real-time view of status, pending documents, and deadlines. When a buyer’s agent submits a counteroffer, the listing agent’s dashboard updates immediately through Phoenix PubSub. Ecto tracks every state transition with timestamps and document references, creating a complete audit trail. GenServer timers fire notifications as contingency dates approach.

Valuation and Market Analytics

Agents and investors need market analytics - comparable sales, price trends, days-on-market distributions, and neighborhood-level insights. These computations aggregate large datasets and must return results quickly for interactive exploration.

ETS tables cache pre-computed analytics for common queries - median price by neighborhood, average days on market by property type, year-over-year appreciation rates. GenServer processes refresh these caches on configurable schedules, pulling from Ecto queries that aggregate across listing history. LiveView dashboards render charts and tables that respond to filter changes immediately because the data is already in memory. Comparable property analysis runs as a supervised task scoring similarity across dozens of attributes - square footage, lot size, age, condition, proximity - returning ranked results within milliseconds. Agents get instant CMAs during client conversations.

Compliance considerations

Fair Housing Act compliance with listing display rules enforced in shared Phoenix components
RESPA disclosure tracking with Ecto-backed audit trails on all transaction communications
State-specific brokerage regulation compliance with configurable business rule engines
MLS data licensing compliance with attribution, refresh intervals, and display rules in the data pipeline

Common patterns we build

  • Real-time listing updates with MLS feed ingestion via supervised GenServer workers
  • Collaborative offer negotiation with LiveView-powered deal rooms
  • Automated transaction timelines with deadline-driven GenServer state machines
  • Property valuation APIs with cached comparable analysis via ETS tables

Other technologies

Services

Building in Real Estate?

We understand the unique challenges. Let's talk about your project.

Get in touch