Skip to content
Jay Moore

Case study

Listing Launch.

A tool that takes a real-estate listing from the moment an agent wins it to the moment it’s live online, without the agent losing control of what goes public. The AI does the grunt work: copy, hero photo, compliance check. The agent approves every word before anything publishes. Show the human. Don’t auto-send.


Problem

The gap between won and live is where deals die.

I shoot real estate on the side, so I live in the gap between an agent winning a listing and that listing going live: writing the copy, picking the hero photo, getting it into the MLS, the shared database every listing site pulls from. Days go by. On a fast market, days are deals.

The obvious fix is a chatbot that writes the listing and posts it. That fix is a liability. Real-estate copy is legally regulated, and the agent’s license is on every word. So I designed a tool that does the grunt work and keeps the agent in control of the one thing they can’t outsource.


The flow, and the calls behind it

Four stages. Every consequential call stays human.

The flow has four stages: capture the property facts, shoot the photos, draft the listing, then push it out to the listing sites. I designed the whole flow and went deepest where the risk lives: the draft. Each screen below carries the design decision it embodies.

Intake form: property address, beds and baths, size, year built, shoot date, and shoot notes, ending in a Submit & request shoot button

Stage 1 · Intake

Capture the facts once.

The agent enters the property facts and books the photo shoot in one step. Beds, baths, square footage, year built, shoot notes. These are not just form fields. They become the exact sources the AI drafts from, and cites, later.

Stage 2 · Shoot

The agent picks the set.

Twelve photos come back and the agent picks the eight that sell the home. Later, the AI suggests a hero shot from this set. Here it picked the renovated kitchen over the front of the house, because the kitchen is what sells this home. It is marked as a suggestion the agent can override in one tap. The machine has an opinion. The agent has the final say.

Photo selection grid: 12 listing photos with 8 selected, an AI pick · Hero badge on the kitchen, and a Use these 8 → Draft listing button
The real draft-review card running in the browser: Not published status, 91% confidence bar, the property facts the AI drafted from, and the hero photo strip with the AI pick on the kitchen

Stage 3 · DraftBuilt in React

The AI drafts. It never publishes.

The easy version auto-posts the listing. That is a lawsuit waiting to happen, with the agent's license on every word. So the AI drafts the copy, leads with a confidence score and the exact inputs it drafted from, and hands every decision back. The status reads “Not published” the entire time, on purpose. Trust comes from visible evidence, not a confident tone.

Try the working version below

Stage 4 · Syndicate

One approval pushes everywhere.

After the agent approves, one action pushes the listing to the MLS and the portal sites, with per-channel status they can watch land. Nothing goes out until a human made the call. That is the whole point.

Syndication status: live on 3 of 5 channels. MLS, Realtor.com and Facebook live, Zillow publishing, Redfin queued

The key interaction, live

The publish gate unlocks.

This is the working prototype, not a mockup. Publish stays disabled until the fair-housing flag is handled. Resolve it, approve the listing, and watch it go live on every channel. Try the whole loop.

Draft · Stage 3Not published
91% confidencethis draft matches your inputs

Hero photo · AI suggested the kitchen

Listing description

Bright, family-friendly home close to parks and schools. The 2019 build lives like new.

Fair-housing review needed

family-friendly” can read as describing the buyer, not the home.

1 check pending
Publish is disabled until the flag is handled.

TL;DR

At a glance

A self-directed concept, fully anonymized. No real listing, agent, or property. The point of the project is how the interaction behaves, so I built that stage in working code instead of mocking it.

Flow designed
4 stages
won to live, end to end
Stage built live
Draft review
React, runs in the browser
Compliance model
Human-decided
flag the risk, don't auto-fix

The hardest call, in depth

Show the risk where the words live.

The fair-housing flag was the hardest call. Language that describes the buyer instead of the home, like “family-friendly” or “perfect for a young couple,” can read as steering under the Fair Housing Act. That is real legal exposure, and it is legally the agent’s call to make. There were three ways to surface a risky phrase. Only one keeps the decision with the agent.

Auto-strip it silently
Rejected

Hides a decision that is legally the agent's to make. The agent learns nothing and can't defend a word they never knew changed.

List flags in a side panel
Weak

Correct, but disconnected. The agent reads the warning far from the phrase it's actually about.

Flag it inline, agent decides
Chosen

Underline the phrase in place. The risk lives where the words live. Apply the rewrite, or keep it and own the call.

Before · disconnected

Listing description

Bright, family-friendly home close to parks and schools.

Fair-housing review needed

Flagged phrase: “family-friendly”

After · inline

Listing description

Bright, family-friendly home close to parks and schools.

Fair-housing review needed

Flagged phrase is underlined above ↑


Design system

The system behind the card.

Trust-blue for the accent, deliberately not Realtor.com red. Green for confidence, amber for compliance risk, and a tight neutral ramp. Every component in the flow is built from these tokens.

Color tokens

Trust · accent

  • trust-50#eef4fb
  • trust-100#d9e6f6
  • trust-500#2f6fb0
  • trust-600#235a93
  • trust-700#1c4874

Confidence

  • good-50#eaf6ef
  • good-500#2e9e5b
  • good-700#1f6f40

Compliance flag

  • flag-50#fdf4e7
  • flag-100#fbe8cd
  • flag-500#d68a1e
  • flag-700#9a6212

Neutral

  • ink#16202b
  • muted#5b6976
  • line#e3e8ee
  • surface#ffffff
  • canvas#f4f6f9

Components

Primary · default
Primary · hover
Primary · disabled
Secondary
Status pillNot published
Hero "AI pick"AI pick
Checks · pending1 check pending
Checks · passed1 of 1 checks passed
Confidence bar
91% confidencematches your inputs
Compliance flag card

Fair-housing review needed

Apply suggestionKeep as written

Validation

How I'd prove it works.

This is a concept, so I have no shipped metrics, and I won’t invent any. But I don’t ship trust patterns on faith. Here’s how I’d validate it.

Instrument the gate.

Track how often agents override the AI's copy, its hero pick, and its compliance flag. High override on the flag means the detector is too noisy. Near-zero override on copy means agents are rubber-stamping, which is its own kind of risk.

Build a labeled set for the detector.

Hand-label real listings for fair-housing risk, run the detector against them, measure precision and recall. That's exactly how I validated the qualifier in Lead Response Loop to 96% on a labeled set. A flag that cries wolf gets ignored, and an ignored safety feature is worse than none.

Measure the real outcome.

Time from won to live, before and after. That's the number an agent actually feels.