Cleaning · Poznań, Poland

Pricing the job before the call

A cleaning firm whose customers decide under pressure. The site had to answer “how much” without a manager, in two languages, and stay inside GDPR.

Solo, end to endUX · UI · Front-endSEO · Copy UA/PL2024
The Mopiko homepage: what the company does and the price, with an online calculator
At a glance

What this was
and what I did on it

Client
Mopiko — a cleaning company in Poznań, Poland
Audience
Ukrainians and Poles who need cleaning quickly, often under stress
My role
Research, UX, interface, front-end, copy (UA/PL), SEO, GDPR, accessibility, deploy — one person
Scope
Homepage, a dedicated order flow with a live calculator, service pages, two language versions
Built with
Plain HTML, CSS and JavaScript — no builder, no framework, no build step
Live
mopiko.pl ↗
The problem

Nobody books cleaning calmly
they book it with guests at the door

People look for cleaning under pressure: guests arriving, a move, the end of a renovation. They will not read a long page or wait for a manager to call back — they need a price and a way to order, now.

So the site had one job: shorten the path from “arrived” to “messaged”, and on the way remove the three fears that stop the click — how much, what is included, can I trust them.

Decisions

Five calls that shaped it
and what each one cost

  1. 01

    Put the price before the contact form

    The calculator prices the job on the spot — property type, rooms, bathrooms, area, add-ons — and a running “Your order” panel recalculates the total as you go. No manager in the loop, no “we'll get back to you with a quote”.

    Trade-off. A calculator is a promise. Every rule in it has to match the real price list, so the pricing model had to be pinned down with the client before a single screen was drawn — and it has to be kept in step when prices change.
  2. 02

    Send the order in one tap, and keep a second door

    The completed order opens Telegram with the whole thing already written out: rooms, add-ons, date, total. Three fields — name, phone, date — because each extra field costs conversion.

    Trade-off. A messenger-first flow excludes people who don't use one, so a plain “leave a request, we'll call back” runs alongside it. Two paths to build and maintain instead of one.
  3. 03

    Two languages as two sets of pages, not a switcher

    Ukrainian and Polish live as separate indexable pages tied together with hreflang, so Google can show the right one to the right person.

    Trade-off. A runtime switcher would have been a fraction of the work and invisible to search. Separate pages doubled the copy to write and the surface to keep in sync — that is the price of being findable in both languages.
  4. 04

    Ask for consent before anything measures

    An opt-in cookie banner and a privacy policy: no analytics fires until the visitor agrees.

    Trade-off. It loses data at the very top of the funnel — the part every marketer wants. The alternative is exposure to fines up to €20M or 4% of turnover under GDPR/RODO, which is not a trade worth making.
  5. 05

    Build on tokens, ship on a pipeline

    Colour, type and components sit on switches in one place, so a brand shade changes across the whole site in minutes. Every change deploys itself within a minute of being pushed.

    Trade-off. More setup before anything visible exists. It pays back from the first change request onward — and the client can be handed the keys without a maintenance contract.
Evidence

What the decisions look like
in the working product

The order flow prices step by step — what to clean, how often, add-ons — while the “Your order” panel keeps the running total in view.
The order flow prices step by step — what to clean, how often, add-ons — while the “Your order” panel keeps the running total in view.
Three fields at the end: name, phone, date. The order leaves as a fully written Telegram message.
Three fields at the end: name, phone, date. The order leaves as a fully written Telegram message.
An interactive apartment: hovering a room shows exactly what gets cleaned there — the answer to “what's included” without a paragraph of text.
An interactive apartment: hovering a room shows exactly what gets cleaned there — the answer to “what's included” without a paragraph of text.
Pricing discounted for regularity, with add-ons priced separately — a proposition, not a price list.
Pricing discounted for regularity, with add-ons priced separately — a proposition, not a price list.
A before-and-after gallery. Nothing sells cleaning like a visible result.
A before-and-after gallery. Nothing sells cleaning like a visible result.
Opt-in consent. Analytics stay off until the visitor says yes.
Opt-in consent. Analytics stay off until the visitor says yes.
One design system: colour, type and component tokens in a single place.
One design system: colour, type and component tokens in a single place.
Measured

Numbers I can stand behind

64Performance
100Accessibility
100Best practices
100SEO

Lighthouse 12, mobile profile, measured on the live site on 2 August 2026 — not copied from launch day. Accessibility, best practices and SEO are the build and hold at the top. Performance is lower than it shipped: the page now loads 281 kB of Google Tag Manager added by the owner after handover, which is the single heaviest thing on it. I would rather publish that than a flattering number from a year ago.

Next

See it working, or ask how it was built