Skip to main content
← Field notes Engineering · 2 min read

Why salon websites need to load in under one second

A 100ms delay on a salon homepage can drop bookings by 7%. Here is how we engineer LeoUp sites to load instantly on a mobile network.

LN

Leo Nguyen

Co-founder & Engineer

Most salon websites fail two tests at once: they look outdated, and they load slowly. The second is the silent killer. Google’s research keeps confirming it — every 100ms of additional latency on the booking path costs measurable revenue.

The math behind one second

A salon doing 30 online bookings a day with an average ticket of €60 generates ~€1,800/day in direct revenue. If a 1s delay drops conversion by even 7%, that’s €126/day, or roughly €46,000/year, walking out the door.

That is one full-time stylist’s salary. Disappearing into latency.

How LeoUp ships fast salon sites

Three architectural decisions, in order of impact:

  1. Static-first by default. Every salon site is pre-rendered to HTML at deploy time and served from a CDN edge. No origin round-trip for the homepage.
  2. Islands of interactivity. Booking widgets and menus hydrate independently. The hero never waits on JS.
  3. AVIF + responsive images. Astro’s <Image /> pipeline outputs AVIF and WebP at multiple widths, and we lazy-load anything below the fold.
import { Image } from "astro:assets";
import hero from "./hero.jpg";

<Image
  src={hero}
  alt="Lylynails atelier in Vienna"
  widths={[480, 800, 1200, 1600]}
  formats={["avif", "webp"]}
  loading="eager"
  fetchpriority="high"
/>

That single component is responsible for ~60% of our LCP wins.

What we measure

We treat Core Web Vitals as product KPIs, not engineering vanity:

  • LCP under 1.8s on a slow 4G phone in Vienna.
  • INP under 150ms on every interactive element.
  • CLS at zero, always — a salon site shifting layout while a client books is a sin.

When a metric regresses on any tenant site, we get paged. The salon owner shouldn’t be the one to notice.

#performance #astro #seo #core-web-vitals