Skip to main content

You are here

Adding a map to a property platform without losing the simplicity that defined it.

Overview

Ostrich is a private London property marketplace where homeowners explore selling on their own terms, without agents or public listings. The product had always presented listings in a clean, card-based list view. But as the catalogue grew and buyers started comparing properties across neighbourhoods, a gap kept surfacing in user feedback: there was no way to understand where anything actually was. People were evaluating homes with no spatial context. I was asked to explore adding a map-based browsing option that would give buyers spatial context without compromising the clarity the product was known for. It turned into more decisions than I expected, but the same principle held throughout: the map should focus the experience, not clutter it.

Note: Personal data in the visuals is illustrative. No real users, properties, or prices are shown.

The starting point

The brief was simple: let buyers toggle between list and map views. The hard part was everything around it. On desktop, the question was how to introduce a map that supported browsing without competing with listings for attention. Most property platforms default to map-heavy interfaces that bury the homes themselves behind pins and tooltips. I wanted to avoid that.

On mobile, the challenge was more structural. Screen space is limited, browser chrome eats into the viewport, and trying to show a list and a map simultaneously results in a cramped, unfocused experience. The mobile solution could not be a scaled-down desktop. It needed its own interaction model entirely.

There was also a quieter problem. The map needed to feel like part of Ostrich, not a bolted-on feature. The product’s identity is built on restraint and simplicity. Introducing a map risked breaking that tone if it brought with it the visual noise and interaction complexity that maps typically carry.

Finding the desktop layout

I started with desktop because the layout constraints were more forgiving, and it let me establish the interaction model before tackling mobile. My first instinct was a split view with listings on the left and controls moved into the side panel, giving the map the full available height. But before committing, I explored an alternative: keeping the filter and sort controls full-width across the page with the map sitting below them. The idea was to give the controls more horizontal space and show full button labels on desktop. The problem became obvious in the prototype: the map scrolled with the page. Fixing the controls under the header would have solved that, but it ate into the viewport height and left the map feeling cramped. I came back to the side-panel approach with more conviction. It gave the map a stable, full-height canvas and kept the controls contextual rather than global.

Option A with full-width controls and the cropped map below
Option A: full-width controls with the map below, where the map scrolled with the page.
Ostrich MapView Desktop layout exploration B
Option B: side-panel controls with a full-height map. The side panel won because it gave the map a stable canvas.

With the layout settled, I introduced an expand control: a single button that widens the map to the full viewport, hiding the list entirely. In full-width mode, buyers can scan a neighbourhood and immediately see how many properties are available, compare positions relative to each other, and get a feel for density and spread. Clicking a price pin surfaces a compact property card with enough detail to decide whether to explore further, and a tap takes them into the full listing page. The same button collapses back to the split view, which avoids the dead-end problem of full-screen maps where users lose access to listings and have to navigate back.

Ostrich Map View Full Screen Desktop
The same expand button that opens the full-width map collapses it. That avoided the dead-end of full-screen maps where users lose access to listings and have to navigate back.

Making list and map talk to each other

Once both views existed, the challenge shifted to making them feel like one surface rather than two disconnected panels. Price pills on map pins mirrored the pricing hierarchy in the list. Hovering a card highlighted its location on the map, and clicking a pin scrolled the list to the matching card. That two-way relationship was essential. It meant the list and the map supported each other instead of competing.

Hovering a property card highlights its location on the map. Clicking a pin scrolls the list to the matching card. The two views had to support each other, not compete.

A related question was what to do with secondary content. On the list view, the product shows additional properties below the search results: homes the buyer might be interested in that don’t match their current filters. On the map, that creates a problem: how do you distinguish between search results and recommendations when everything is a pin? We explored colour-coding the price pills, but it added visual complexity to a view that was supposed to be focused. In the end, we simplified: the map only shows search results. If a buyer’s filters return no results, the map toggle is disabled entirely, which avoids sending them to an empty map.

Ostrich Map View No Results Mobile and Desktop

Rethinking browsing for mobile

Mobile required a fundamentally different approach. Rather than trying to squeeze the map into the existing layout, I treated it as a separate mode: a distinct state the user switches into, with its own focused experience. Users land in the familiar list view and can intentionally switch into a full-screen map. Once there, the filter and sort controls are hidden, partly because mobile viewport space is too precious, but more importantly because the map mode serves a specific intent: understanding where properties are. If buyers want to change their preferences, they return to the list. This mirrors the logic of the desktop full-width mode: when the map takes over the screen, the interface narrows its focus to location.

When buyers tap a price pin on the map, a bottom sheet surfaces a compact property card. Swiping the sheet left or right moves to the next or previous property in the list, so browsing on the map still feels sequential and connected to the underlying catalogue. A visible close button ensures users always know how to return. Filters and sorting persist when switching between views, so the map always reflects the buyer’s current preferences, even on mobile where the controls themselves are hidden.

Ostrich MapView Browsing Mobile
On mobile the map is a mode, not a layout. Filters and sort controls disappear so the screen serves a single intent: understanding where properties are.

Pressure-testing in the browser

At a certain point, Figma was not giving me enough signal on the interactions that mattered most. Static mockups and even Figma prototypes could not tell me how the map would feel in a real browser: how scrolling would interact with the viewport, whether hover states felt responsive or jittery, how the bottom sheet would behave under a thumb. So I built a coded prototype in Cursor to experience the design in its actual medium.

That prototype surfaced several things I would not have caught otherwise. The biggest was hover intent: on desktop, scrolling through the property list caused the map to highlight each card the cursor passed over, reacting to exposure rather than deliberate interest. Moving the cursor toward the map briefly passed over other cards, switching the highlight unexpectedly. I worked with the engineer to introduce a hover intent delay of around 120 to 180 milliseconds, so the highlight only activated when the cursor settled on a card. Click behaviour stayed immediate. It was a small detail, but it made the interaction feel deliberate rather than jittery. The prototype also helped me refine the bottom sheet transitions on mobile, how properties loaded when panning the map, and the animation easing across the board. Each of these findings went back into Figma as updated specs before handoff.

Ostrich MapView Components

Engineering feedback and animation standards

I ran two rounds of structured design feedback with the engineering team via Linear, covering both mobile and desktop. We refined card transition speed, zoom control placement, font sizing consistency, and animation timing. We settled on a shared set of CSS timing values (a 0.4s base duration and cubic-bezier curve) that could be reused across the product for visual consistency. The engineer noted that the interaction spec reduced back-and-forth during implementation, and the structured feedback rounds caught edge cases early, from animation timing to hover intent logic, which meant the shipped version needed minimal post-launch fixes.

Outcome & reflection

The feature went from first sketches to shipped in roughly four weeks, launching on 3 March 2026. At the time of writing, 549 out of 4,367 property page visitors have used the map view, roughly 12.6%. For a feature that is optional, unpromoted, and sits next to a list view that already works, that is a real number. Buyers who care about location are finding the map on their own.

The decision that mattered most was framing the map as a mode rather than a layout. That shaped everything downstream: the toggle pattern, the mobile strategy, the bottom sheet, the way filters persist, the choice to hide controls when the map takes over. Starting from “how do we fit a map on screen?” would have produced a weaker design than starting from “what mental model should this support?”

The other thing I would take forward is the value of building a coded prototype mid-process. Going from Figma to a real browser, even a rough one, changed specific decisions for the better. The hover intent delay, the bottom sheet transitions, the loading behaviour: none of these surfaced in static design. It is something I want to do more of, using the actual medium to pressure-test interactions before handing off, not after.

Ostrich MapView lifestyle