All work

UnitPulse · 2026 · Product Design Lead

Built to Be Found — by Humans and AI

Rebuilding UnitPulse's renter site around conversational search on real inventory — with content built to be cited by AI answer engines, not just Google. Shipped in ~6 weeks.

The renter site's conversational welcome — "Hi, welcome to UnitPulse" with three ways to start (know my city, match my lifestyle, just exploring) and an ask-anything box, beside a live map of Los Angeles with priced listing markers
Team
Product Design Lead
Solo design · engineering on the backend
Span
~6 weeks
Type
Web app
Outcome
Live in production · 245 pages indexed, 96 leads
Context

What we shipped

  • The conversational welcome — "Elite long-term rentals, found by conversation" with a chat box, structured filter chips, and example prompts

    Conversational home search

    An integrated LLM assistant that turns a vague need — "walkable to USC, dog-friendly, under $2,500" — into real listings on the map. Grounded on live inventory, so it never invents a home.

  • The in-conversation guided intake card — "How many bedrooms?" with checkbox options

    Guided intake

    Inline stepped cards capture must-haves.

  • A live map with price pins beside a listing card

    Map split-view

    A live map with price pins beside the result grid.

  • A planned tour day with multiple stops — two showings scheduled at 9:00 and 10:30

    Tour shortlist

    Shortlist homes and plan several tours in one pass.

  • Suggested follow-up questions tailored to the renter's past searches

    Personalized search

    Adapts to past searches and stated context.

What I owned

Engineering owned the server-rendered scaffold and data layer; I built the renter surface on top of it — and never claim it.

Mine
  • Renter front-end & UX
  • Conversational-search UX + tuning
  • SEO / GEO architecture
  • Lead capture + Twilio compliance
  • Refreshed visual system
  • AI test suite + evaluation
Shared
  • Gemini → Dify chat-backend migration
Engineering
  • SSR scaffolding
  • Astra / Dify data layer
Part 01

The problem

A renter’s search no longer starts in Google — it starts in a chat, often answered before anyone clicks. The old site couldn’t be found in either place: a client-only SPA, invisible to search engines and answer engines alike. The fix was a harder design problem than a redesign.

The problem in three

  • Invisible to search & AI

    A client-only SPA — nothing server-rendered for Google or an answer engine to read.

  • Renters start in a chat

    Search now begins in answer engines, not only Google — and a site that can't be cited there is invisible to a growing slice of demand.

  • The tension to design around

    Keep the experience rich and app-like, yet fully indexable and citable — without the ephemeral chat polluting the index.

Part 02

Talking to renters

Before designing the search, I talked to renters about how they actually look for a home. Three profiles surfaced — and they want different things.

Three kinds of renters

  • The decisive renter

    Relocating on a timeline; knows the essentials.

    • Set budget
    • Target neighborhood
    • Move-in date

    NeedsFilters and a map — fast, precise, no conversation.

  • The open explorer

    First place in a new city; knows the vibe, not the specifics.

    • Fuzzy criteria
    • Lifestyle-led
    • Open on area

    NeedsConversation that turns "walkable and lively" into real listings.

  • The shortlister

    Down to a few homes, comparing the details.

    • Specific questions
    • Comparing
    • Close to deciding

    NeedsAnswers about one place — commute, schools, walkability.

How rental search works today

By the time I shipped, conversational search had become table stakes — Zillow, Apartments.com, and Redfin all launched it in 2025–26. So I evaluated each on the three axes this rebuild competes on.

  • Zillow search with bedroom / bathroom filters and AI natural-language search
    Zillow NL search + AI mode
    • AI chat
    • Unified control
    • AI-citable

    Natural-language search, an "AI mode" beta, and a ChatGPT integration — the deepest AI stack. But filters and chat stay separate modes, and pages aren't built for organic citation.

  • Apartments.com Ai conversational and voice search refining results
    Apartments.com Voice + chat
    • AI chat
    • Unified control
    • AI-citable

    Voice + chat "Smart Search" (sitewide Jan 2026) drives big engagement lifts — but it's a guided refine layered on the portal, not unified with the filters.

  • Redfin AI Search — a step-by-step conversational Q&A
    Redfin AI search · beta
    • AI chat
    • Unified control
    • AI-citable

    Sierra-built AI Search replaces filters with pure chat — a linear Q&A. Fluid, but you lose the at-a-glance control precise renters rely on.

The key finding: AI chat is everywhere now, but it’s mostly bolted on as a chat-only Q&A — renters lose the fast, structured control they rely on. No one fuses conversation and filters on one shared state, and no one structures their pages to be cited by answer engines. That’s the opening this rebuild is built for.

Two kinds of renters, one missing interface: nobody lets you start vague, get precise, and keep asking — all on the same canvas.

Part 03

One search, two modes

So I designed the two models as one. Conversational handles intent; faceted handles precision; both write to a single shared state, so they can never drift apart or contradict each other.

The renter journey I designed for

  1. 01 Search A place or a need — typed or spoken
  2. 02 Browse Map split-view + a live listing grid
  3. 03 Detail Floor plans, amenities, neighborhood Q&A
  4. 04 Act Inquire or schedule a tour

The principles I designed the conversation against

  • An editable search summary — AI-proposed criteria shown as removable chips, one being edited, with the results updating below

    Keep the user in control

    Every AI guess is visible and editable, and intake steps skip. The assistant proposes; the renter disposes.

  • A result summary stating how many homes were found, with a listing and a clear next-step prompt

    Set honest expectations

    It says what it found, and what it can do next.

  • A chat echoing the renter's intent back, with a live in-progress indicator instead of a dead UI

    Make latency feel handled

    An instant echo of intent — never a dead UI.

  • Real listings from live inventory beside an honest empty state shown when nothing matches

    Ground every answer in real data

    Real inventory only. No match? It says so — it never invents one.

  • A guided intake card on step one of three, offering selectable options instead of an empty text box

    Reduce the blank-page burden

    Guided intake and suggested follow-ups.

  • A listing with two calls to action — an inquire button and a primary schedule-a-tour button

    Bridge to action

    Every result links to inquire and tour — not a walled garden.

  • An out-of-scope request receiving a polite, compliant decline and a redirect to a safe next step

    Refuse gracefully

    Out-of-scope or non-compliant asks get a polite decline and a compliant next step — designed and tested.

Five decisions, one interface

01

Guided intake, inside the conversation

When the assistant is missing a structured preference, it renders an inline stepped card — checkboxes, Skip, Next — collecting structured data without forcing free-typing, and letting renters skip what they don't care about.

02

Embedded, editable filters in the chat

The assistant's understanding shows as an editable summary ("Where / Budget / Must-have … Edit") and as removable chips in the composer — one tap to drop "pet friendly." Changing a constraint is instant; no re-typed sentence.

03

Traditional controls, kept

Price, Beds, Filters, and Sort still sit above the results for power users — and they write back into the same shared state the conversation uses.

04

Relevant follow-ups

After a result set, the assistant suggests the next useful narrowing — narrow by budget, bedrooms, amenities, or move-in date — guiding, never dead-ending.

05

One shared state, two ways in

Typing, tapping a chip, or moving a filter all update one source of truth that drives both the result list and the live map ("homes appear as we talk," price pins on the map) — so the two modes can never drift apart.

Part 04

Designed to be found

Designing for the answer engine — not just the search engine — is a bet most rental sites haven’t made.

The GEO architecture

  • Canonical, server-rendered

    A `/state/city/slug` hierarchy with FAQPage + BreadcrumbList JSON-LD — Google-indexable and structured for an LLM to quote.

  • Citable neighborhood Q&A

    Each property page carries real questions — “Is it walkable to USC?” — exactly what a renter asks an engine, structured so it can lift them.

  • The chat stays out of the index

    Ephemeral chat lives in a noindex /search space; legacy /property/[id] URLs 301-redirect to their canonical homes.

A property detail page: a photo gallery, the home's name and address, studio-to-4-bed floor plans, pricing, a schedule-a-tour panel, and a neighborhood Q&A wall
GEO content architecture — built to be cited
Canonical · server-rendered
  • unitpulse.ai/
  • /{state} hub
  • /{state}/{city} hub
  • /{state}/{city}/{slug} PDP
FAQPage + BreadcrumbList JSON-LD
  • /search · noindex (ephemeral chat)
  • /property/[id] → 301 → canonical
A structured, quotable answer
{ }

"Is it walkable to USC?"

Yes — the building is a 12-minute walk to campus, with two bus lines at the corner.

Google · indexed

Apartments near USC — walkable studios

unitpulse.ai › ca › los-angeles › …

12-minute walk to campus, two bus lines…

AI answer · cited

"…a 12-minute walk to USC, with two bus lines nearby."

unitpulse.ai
Designed for the answer engine: structure + intent. Classic indexing is the measured part (GSC); AI citation is the forward bet.

To be precise: this is architecture and intent designed for citation, not a measured count of AI citations. Classic indexing is the part I can measure today.

Part 05

Built & tested

Shipped in ~6 weeks

  • Scoped to the minimum

    The redesign was a prioritization decision, not a coat of paint — knowing what to leave out so the AI bet could ship.

  • A refreshed visual system

    A named brand-token palette, a serif display + grotesque body, a bento home — so the AI features read as premium, not experimental.

  • Accessibility, baked in

    44pt touch targets on mobile, 36–40px on desktop, aria-labels on icon buttons — defaults, not retrofits.

The lean journey still has to convert

  • Send a message

    An inquire modal — name plus email-or-phone, either is fine.

  • Schedule a tour

    A date and time-slot grid, with SMS consent.

  • Compliant, and honest

    Twilio A2P 10DLC consent + disclosure; GA4 fires only after a real 2xx — so the count tracks real leads, not optimistic clicks.

The Send-a-Message inquire modal — full name and a single email-or-phone field (either is fine), plus a message boxThe Schedule-a-Tour modal — contact fields, a preferred-date picker, and a grid of bookable time slots

Tested like a system — quality and Fair Housing

  • 47 cases · 9 families · EN + ZH

    Each runs in a fresh session, in both languages, judged on the routed `route_code` and node logs — not just the visible reply.

  • 34 Pass / 9 Fail / 4 Blocked

    A real signal, not a green-washed “all passed.” Mapped back to 7 known prior bugs as a regression guard.

  • Fair Housing, tested

    Adversarial cases proved the router must refuse protected-class filters, never extract them, and redirect to a lawful search.

Conversational search — bilingual regression suite

47 cases · 9 intent families · English + Chinese · each run in a fresh session and judged on the routed route_code and node-level logs, not just the visible reply.

  • 34 Pass
  • 9 Fail
  • 4 Blocked
9 intent families
  • Direct search
  • Location-only
  • Need-location
  • Non-search
  • With-context
  • Compare
  • Relocate
  • Fallback
  • Compliance
Fair-Housing compliance — designed and tested
  1. Protected-class filter request
  2. Refuse — never extract it
  3. Cite fair-housing law
  4. Redirect to a lawful search

The suite caught a real Blocker: one path extracted a protected-class attribute as a filter and affirmed it; another path handled it as the gold standard. Compliance must be tested, not assumed.

34 Pass / 9 Fail / 4 Blocked — a real signal, mapped back to 7 prior bugs as a regression guard.
Part 06

Early traction — honest, not inflated

A ~6-week-old production rebuild, live and ramping. All figures measured in GSC / GA4 over the window 2026-05-05 → 06-23.

245
Pages indexed
from ~0 in ~6 weeksmeasured in GSC
2.34K
Impressions · 134 clicks
5.7% CTR · avg position ~10.8GSC · last 3 months
96
Live leads captured
54 inquiry · 42 tour0 applications yet — named honestly
+55.6%
Users · trailing 30 days
1,045 users · 11,864 events+65.6% events · GA4

The honest framing: these are early numbers for a six-week rebuild. The point isn’t the magnitudes — it’s that the architecture is live, indexing is climbing from zero, the funnel is converting real leads, and the GEO bet is designed to compound. Applications aren’t flowing yet (0 in the window), and I’d rather say that than dress it up.

On the bet

Design for the answer engine, not just the search engine

The forward move was to build content an AI can cite, and to prove an AI-native rebuild can ship in weeks, in production, without sacrificing craft, an honest index, or compliance.

On the discipline

Make safety a tested requirement

The testing is the part I’d carry anywhere: define the intent space, automate the evaluation, read the logs, and treat Fair-Housing compliance as a first-class thing you verify — not assume.

This renter site is the acquisition surface of the broader UnitPulse platform above. (Separately, the earlier tripalink.com growth story is a different, legacy marketing site — not this rebuild.)

Next case

Cutting Tour No-Shows

Redesigning the tour confirmation and reminder system — SMS, email, and a language-agnostic 'reply to confirm' flow — cut no-shows from 17% to 10% in the first month.