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.
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:
- 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.
- Islands of interactivity. Booking widgets and menus hydrate independently. The hero never waits on JS.
- 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.