Insights
Building a real estate site for a realtor in The Dalles
Grace Tarnasky sells houses in The Dalles, an hour and a half up the Columbia from Portland, where the trees give out and the hills turn the colour of wheat. She messaged me on Instagram on a Thursday. The site in the walkthrough above was standing by Saturday, on a staging domain, with her real listings in it.
She asked for four things, in her own order. Show up on Google for the searches that matter locally. Show up when somebody asks ChatGPT or Gemini about moving to The Dalles. Give her somewhere to write that she would actually use. And capture leads in a way that does not lose them.
Not a template, and not from scratch either
The reason two days is possible is that I did not start at zero. Grace's site is a fork of the engine I built for another agent, which is itself a fork of the CMS running the page you are reading. Forking means she starts the first morning with listings, a photo pipeline, an admin she can log into, structured data on every page type, sitemaps, and a contact system that has already survived a year of real spam. What is left is the part that should take the time: her voice, her market, her design.
Forks are not free, and I want to be honest about the bill. Every engine fix I make now has to be carried by hand into each fork, and each fork records the exact commit it was cut from so I know what it is missing. I pay that tax on purpose. It buys clients a site that has already been debugged in production somewhere else, which is worth more than the tidiness of one shared codebase.
Her listings, not an embedded search box
Most agent sites solve listings by dropping in an IDX widget: a search box in an iframe, someone else's HTML, invisible to Google, styled like nothing else on the page. Grace has seven properties on the site instead, one active and six closed, seeded from her brokerage's records with the photography that came with them. Each one is a real page on her domain with its own address, its own price, its own square footage in the markup, so a search engine and an answer engine can both read it.
Seven is a small number and it is supposed to be. She has closed twelve homes, and the ones with confirmed specifics are the ones on the site. I would rather a buyer find six houses that are genuinely hers than a thousand from a regional feed with her face stapled to the corner.
Six guides to towns that have never had one
The searches that actually convert in a market like this are not "homes for sale". They are "what is it like to live in Mosier", "is Dufur too far to commute", "which side of The Dalles gets the wind". So the site carries a guide to each of six places: Cascade Locks, Dufur, Hood River, Mosier, Parkdale, and The Dalles, each with a typical home price and how long things sit before they sell, and underneath that, a few paragraphs only somebody from here could write. Grace has family roots in Dufur. She went to school in The Dalles. That is the whole advantage, and it is not something a national portal can copy.
This is also the part that answers her second request. When somebody asks an assistant about relocating to the Gorge, the model needs a source that states plainly where these towns are, what they cost, and who to call. Pages like these are that source, and they carry machine-readable markup saying so.
The lead capture is deliberately boring
The valuation page does not pretend to be an algorithm. Plenty of agent sites will hand a visitor an instant number generated from county averages, which is a good way to be wrong by sixty thousand dollars in a town of twelve neighbourhoods. Grace's form asks for the address and the timeline, runs a quiet bot check, and hands her a real enquiry to answer with a real number. Fewer submissions, all of them worth reading. Wiring those into the CRM she already runs is the next phase of the work.
Built for the phone first, because that is where it will be read
Every layout here was designed at 390 pixels wide and then allowed to grow. Her hero is a clip she filmed herself. The whole site sits on a warm linen background pulled from her own Instagram grid rather than from whatever the current agent-site fashion is, with a heavy display face doing the shouting and a handwritten line doing the talking. It looks like her, which is the only test that matters for a site with one person's name on it.
What is not finished
The site in this walkthrough is on staging, not launched: you can walk through it yourself at staging.gracetarnasky.com. The domain still shows a holding page while Grace reads every word and decides what she wants changed. Her assistant, Gracie, is trained and answering questions behind the login, built on just over a hundred passages taken from her own writing, her reviews, and the first-time buyer handbook she gives clients, but whether that goes out to the public is a decision for later and a phase of its own. The market reports are stubbed until I have data for Wasco County I trust as much as the guides.
None of that is unusual. A site is not a delivery, it is the beginning of a maintenance relationship, and the version that goes live in a week will be worse than the version six months from now. What matters on day one is that everything on the page is true, that the pages a search engine wants exist, and that the person whose name is on it recognises herself in it.
Grace's build is one version of a system I now run for several agents: real estate websites with a CRM underneath, built to be owned rather than rented.
Common questions
How long does a custom real estate site take to build?
Grace Tarnasky's site was standing on staging two days after she first messaged me, because it forks an engine that already had listings, an admin, structured data and a contact system in it. Building the same thing from an empty folder is weeks of work, most of it invisible plumbing.
Why not use an IDX widget for listings?
An IDX search box lives in an iframe on somebody else's domain, so search engines credit none of it to you and you cannot control how it looks. Individual listing pages on your own domain, with the address, price and specifications in machine-readable markup, are what actually earn search visibility.
What makes an agent site show up in AI answers?
Pages that state plain, checkable facts about specific places, prices and people, marked up so a machine can read them without guessing. Neighbourhood guides written by somebody who lives there outperform generic market pages, because an answer engine needs a source it can quote.
Should a small brokerage site offer instant home valuations?
Usually not. An instant estimate from county averages is frequently wrong by tens of thousands of dollars in a town with varied neighbourhoods, and it trains sellers to trust the number instead of the agent. A short form and a real answer from a person converts fewer visitors, better.
Related