Skip to content
Real EstateMLS feedInstant searchImage pipeline

Castellan Realty

Castellan were sending their own buyers to a portal because their site couldn't hold a browse session. Listing pages took nine seconds on mobile.

Client
Castellan Realty
Sector
Real Estate
Year
2025
Build time
11 weeks
Location
Valencia, Spain
Castellan Realty
real estate website case study
The numbers

0.0s

Listing page LCP

Mobile 4G, down from 9.2s.

0.0×

Organic enquiries

Over five months.

0.0

Pages per session

Up from 2.1.

0

Sold listings recovered

Previously returning 404.

Where it started

Where they started

Castellan's problem was measurable in a single number: 9.2 seconds to largest contentful paint on a listing page over 4G. Property photography is the point of a property site and it was also the payload — eight to fourteen full-resolution JPEGs per listing, served at original size and scaled down in the browser.

Search made it worse. Every filter change — price, beds, type — triggered a full page reload, so refining a search meant waiting nine seconds again. Their analytics showed 2.1 pages per session, which for a property site means people were looking at one listing and leaving.

Then the URL problem. Their previous developer had configured delisted properties to return 404. Around 300 sold listings had accumulated links and search authority over four years, and all of it was being discarded on the day of sale.

Their agents had quietly adapted by sending buyers links to the portal instead of their own site. Every one of those visits was a lead they paid a fee on.

What we did

What we built

The image pipeline was the first fix and the biggest. AVIF with WebP fallback, generated at five widths, the hero preloaded and everything below the fold lazy-loaded, with blurred placeholders so the layout never shifts as photos arrive. Same photography, roughly an eighth of the bytes.

Search became client-side over a pre-built index. Filters apply instantly, map and list views share state, and the URL updates so a filtered search can be bookmarked or sent to a client — which is what the agents were using the portal for.

The feed was the unglamorous half of the project. Their RESO Web API source sends duplicate records and occasionally omits required fields, so ingestion runs every fifteen minutes with validation and a reconciliation report. Bad records raise an alert instead of quietly publishing a listing with no price.

For sold stock we wrote an actual policy rather than picking a default. Sold listings stay live with clear status and links to similar available properties; the handful that were genuinely worthless get a 301 to their area page. Nothing that had earned links gets thrown away.

The work, in pieces

Everything that shipped

01

An image pipeline built for galleries

AVIF with WebP fallback at five widths, hero preloaded, blur placeholders below the fold. Same photos, roughly an eighth of the bytes.

02

Instant client-side filtering

Pre-built search index, map and list sharing state, and shareable filtered URLs — the thing agents had been using the portal for.

03

Feed sync that fails loudly

RESO Web API ingestion every fifteen minutes with validation, deduplication, and a reconciliation report. Bad records alert rather than publish.

04

A written policy for sold listings

Sold stock kept with clear status and links to comparable properties. Only genuinely worthless URLs redirect. Nothing with links is discarded.

Before and after

What changed on the page

Drag the handle. Same content, different hierarchy — that's usually where the conversion lift comes from.

BeforeAfter
Castellan Realty — the old layout against the rebuilt one.
Stack

What it's built on

Next.js 14
ISR for listings, static for area pages.
RESO Web API
Scheduled ingestion with validation and reconciliation.
Sharp
AVIF and WebP generation at build and on ingest.
MapLibre
Self-hosted tiles — no per-view mapping bill.
Where it landed

What happened

Listing LCP came down from 9.2 seconds to 1.5. Pages per session went from 2.1 to 6.8 — people browse now, which was the whole objective. Organic enquiries were up 2.4× over five months.

The sold archive turned out to be a genuine asset. Those 300 pages are evidence Castellan actually sell in each neighbourhood, and they now bring in a steady trickle of "how much did X sell for" searches that convert into valuation requests.

Eleven weeks is longer than the site itself needed. Four of them were feed work, and we'd budget the same again.

Our agents had started sending buyers to a portal because our own listings took nine seconds to load. That's a humiliating sentence to say out loud. It's a second and a half now, and people actually browse — we went from two pages a visit to nearly seven.
Elena VidalManaging Partner, Castellan Realty
Services on this project

What we were hired to do

More on how we work in this sector: Real Estate.

Your turn

Got a project that looks like this one?

Tell us the goal and the constraints. You'll get a straight answer on scope, timeline and cost — usually inside one working day.

Rather write first?hello@quesiono.com— we reply within one business day.