Alyona Moskalets

Local time — Tbilisi, GE

Removing the middleman from renting in London

MovinReady is a Build-to-Rent platform that connects renters directly with developers. I rebranded it, redesigned the product and built the design system behind it — working alone, and shipping in part.

Role
Sole designer — research, product, design system, brand
Team
Founder, marketer, developer
Started
October 2024, via an open logo contest (~100 entries)
Status
Live in a reduced version
  1. The problem. MovinReady’s whole promise is that there is no agent and no hidden fee between a renter and a developer. The homepage said none of that above the fold, and the one tool renters actually use — search — was unusable.
  2. No research budget. I worked from what was free and checkable: the conventions of the UK portals renters already use (Rightmove, Zoopla, OnTheMarket), published usability findings, and an audit of the existing file.
  3. Brand. I came in through an open logo contest, ~100 entries, and won it. That became a wordmark, an accent colour and an illustrative icon set.
  4. Two fixes worth naming. The price filter was a 183 px dual-handle slider — £16.60 of rent per pixel, handles 33×28 below the 44 px touch minimum, no way to type a number. It became a field opening a panel: min/max inputs first, a distribution histogram, slider kept for exploration. And the hero caption measured 1.2:1 where the standard is 4.5:1 — after, 6.3:1.
  5. The missing half, and the system under it. The brief said traffic was mostly mobile; the file had five desktop screens and nothing else, so I audited what breaks from 1440 to 390 and built the mobile set. Underneath: four token layers so one edit travels, and components defined by their states.
  6. What shipped. Live in a reduced version — logo, accent colour, icon set, hero proposition, curated collections. Not shipped: typography, the price panel, the neutral ramp, the mobile screens, component states and the token architecture. Technical limits, then the company’s finances, ended the work. No conversion numbers are claimed — the full product never ran, so there is nothing honest to measure.

The system outlived the build. Tokens, components and the rules behind them are the part of this project that would still be correct on the day the company can afford to finish it.

01 — The problem

The promise was invisible, and the search did not work

MovinReady exists because there is no agent and no hidden fee between a renter and a developer. The site said none of that above the fold — and the one tool renters actually use was unusable.

  1. Nothing on the first screen distinguished the platform from a letting agency.
  2. Price could not be set accurately. The range slider gave £16.60 per pixel — hitting £2,000 was physically impossible.
  3. The value read £803–3,228: raw min/max from the data, unrounded, so it looked like a bug.
  4. No mobile layout at all, on a product whose traffic is mostly mobile.
  5. Property cards were not comparable — price sat inside a row of attributes rather than leading.
  6. Addresses came straight from the geocoder, up to 128 characters, cut mid-word.
  7. No pressed state on any control, so on touch the interface never acknowledged a tap.

Six of the seven were measurable. That mattered more than taste: it made the fixes arguable with a developer and a founder, not just with a designer.

The pre-redesign homepage, annotated with the seven findings.
02 — Grounding

No research budget. Here is what I used instead.

There was no money for user research, so I said so and built the next best evidence base — three sources, each with a stated rule for what I would take from it.

  • Direct competitors — UK Build-to-Rent operators. Taken: positioning and tone. Not taken: search UX, since their sites carry 10–50 units.
  • Aggregators — Rightmove, Zoopla, OnTheMarket, OpenRent. Taken: conventions this audience already has muscle memory for.
  • Adjacent product craft — Blueground, for mobile section rhythm.

A technique counted as a convention only if it appeared independently in two or more products. A single sighting is an idea, not a convention — usable, but I have to defend it myself.

03 — Brand, as one workstream

The mark, and the decision behind the icons

The logo abstracts the city into coloured patches forming an M. The three blocks carry the three stages of moving: preparation, search, future. Built for light and dark, horizontal and stacked, and single-colour for print.

Three icon directions, one chosen

I drew three complete sets rather than one: one-line, flat bold and illustrative. The founder chose illustrative — and the reasoning holds up: one-line read as the most current, but at 24 px the thin strokes disappeared against photography, and this product puts icons next to interior photos constantly.

Showing the rejected directions is the point. One option is a preference; three with a stated reason is a decision.

04 — Design system

Four layers, so one edit travels

Colour is never written on a layer. It resolves through four collections: 24 raw primitives, 34 semantic roles, a spacing and radius scale, and a type scale with Desktop and Mobile modes. Every one of the 15 paint styles is bound to a primitive, so the chain is unbroken.

94%fills bound to tokens
100%radii on the scale
95%spacing on the scale
42components

The type scale has two modes rather than a second set of “mobile” styles. Two parallel sets drift; one scale with a mode cannot.

Primitive → variable → style → layer. The remaining 5–6% is deliberate: page-level section gaps and decorative artwork that was never meant to be on the palette.
05 — States

A component exists only when its states do

Auditing the library I found the same hole in every interactive component: no pressed state anywhere. On desktop nobody notices. On touch, hover does not exist at all — so tapping a control produced no acknowledgement whatsoever.

Pressed was added to five component sets, each with its own verified colour step rather than sharing hover’s. Three rules went into the component descriptions:

  • Hover is gated behind @media (hover: hover) and (pointer: fine). Ungated, it sticks after a tap.
  • Press is scale(0.97) at 160 ms ease-out; release is faster than press.
  • Cards get no pressed colour. Their feedback is scale — darkening the photo would eat the caption’s contrast.
The rules live in the component descriptions in Figma, not in a separate document. Documentation nobody opens is not documentation.
06 — The price filter

The control that could not be used

The original was a bare dual-handle slider, 183 px wide, in a row of 48 px fields. 146 px of travel across £803–3,228 is £16.60 per pixel. There was no way to type a number, and the handles were 33×28 — below the 44 px touch minimum, close enough to collide.

Research is blunt about this: sliders alone are the weakest price filter, especially on touch, and work best paired with editable min/max fields. In the UK specifically, Rightmove, Zoopla and OnTheMarket all use min/max steppers — that is the muscle memory this audience has.

So Price stopped being a slider in the row and became a field like its four neighbours, opening a panel: min/max inputs first for precision, a distribution histogram so the renter can see where the inventory sits before dragging, the slider kept for exploration, and quick presets.

Before and after. The change also fixed a consistency problem: Price was the only control in the row that was not a field.
07 — Mobile

Not an adaptation. The missing half.

The brief said traffic was mostly mobile; the file had five desktop screens and nothing else. I audited what would break from 1440 to 390 before drawing anything, then built five mobile screens.

  • Collections went from a carousel to a mosaic. Collections are navigation — five destinations, and navigation has to be seen whole.
  • Active filters wrap instead of scrolling. A row running off the edge hides filters; NN/g reports a 21% drop in task completion for items hidden behind interaction.
  • The enquiry form left the page and became a sticky bar. A six-field form mid-page is a wall people scroll past.
  • The Grid / List / Map toggle was dropped. At 390 Grid and List render identically; only Map is a real choice, so it became a floating pill.
08 — A bug found by measuring

1.2:1 where the standard is 4.5:1

Collection tile captions looked fine and were not. The scrim was tuned for a 224×280 desktop tile, where the caption occupies the bottom quarter. But the caption block is a fixed 57 px — so on a 173×140 mobile tile it climbs to 51% of the height, into the transparent part of the gradient.

Compositing the overlay over a blown-out photo clears 4.5:1 at alpha 0.758. The compact tile got its own ramp reaching 0.80 by the halfway point, and the card became a two-size component.

1.2 : 1measured before
6.3 : 1measured after
I got this wrong twice before I got it right — first by reading the paint’s opacity instead of the layer’s, then by sampling the lightest pixel in the caption band, which turned out to be the anti-aliased edge of a letter. Measuring badly looks exactly like measuring.
09 — What shipped

A reduced version, and an honest account of it

The site is live. It runs on a commercial WordPress theme, and the redesign shipped in part: technical limits on the developer side and, later, the company’s financial situation ended the work before the full build.

Made it to production

  • The logo, in the horizontal wordmark version
  • The accent colour, used throughout
  • The illustrative icon set
  • The hero proposition and the curated-collections section

Did not

  • The typography — production runs the theme’s own faces
  • The price panel — production uses two From / To dropdowns, which is the Rightmove convention and a defensible fallback
  • The neutral ramp, the mobile screens, the component states and the token architecture

The theme still ships stock agent photos on a platform whose entire promise is that there is no agent. That single leftover is the clearest argument for why the rest of the system was worth building.

On metrics: no conversion figures are claimed here. The full product never ran, so there is nothing honest to measure against. What I would instrument first: share of sessions reaching Enquire, share of mobile sessions that reach results rather than bounce, and properties viewed before a first enquiry.
Production beside the design.
10 — Takeaways

What I would do differently

  • Start mobile. I adapted a desktop layout instead of designing at 390 first, and every hard problem here — the price filter, the caption contrast, the filter row — was a mobile problem discovered late.
  • Get the constraints from the developer on day one. The theme’s limits decided what could ship. I learned them after the designs were finished.
  • Separate the brand deliverable from the product deliverable. They were quoted and run as one project, which is why the identity finished and the product did not.

The system outlived the build. Tokens, components and the rules behind them are the part of this project that would still be correct on the day the company can afford to finish it.

← All work