Levitskaia.
- Client
- Levitskaia, permanent make-up studio — Prague, Žižkov
- Role
- Design & Development
- Stack
- Next.js 16 · React 19 · Tailwind v4 · Framer Motion · Google Calendar API
- Year
- 2026
- Status
- Launching 2026
A warm-nude editorial site for a permanent make-up studio in Prague — luxury through restraint, with a booking engine the owner runs entirely from her Google Calendar.

Overview
Permanent make-up is a trust purchase — the work stays on a face for a year. So the site reads like an editorial: warm nude paper, photographs at full bleed, restraint instead of gold and glitter.
There is no admin panel and no CMS. The owner's Google Calendar is the database: working blocks minus busy events become 30-minute slots with a 15-minute buffer, 60 days ahead, in Prague time. The wizard walks service → day → time → contacts, validates with zod, and confirms with a Resend email carrying an .ics file.
Both languages are first class — CZ and RU dictionaries, hreflang, localised OG — and every photograph goes through an in-house pipeline of presets from 800 to 2400 px, so a 4K editorial frame does not cost six megabytes on a phone.
The complete site runs inside this portfolio — click through every page.
How it works.
Every service owns 150vh of scroll. The photograph is sticky and full-screen; the headline drifts over it and flares only in the middle of the block — reading it feels like turning a page in a magazine.
- 01
150vh per service
Each service gets its own block. The photo is pinned full-screen and the scroll inside the block is the timeline.
- 02
The photo steps back
Scale runs 1 → 0.88 while opacity fades: the image recedes instead of sliding away.
- 03
The title drifts
A clamp(52px, 10vw, 128px) headline moves y 220 → −220 across the frame, opening to full opacity only at the centre ([0.2, 0.45, 0.72]).
- 04
Cinematic hero
Above it all the hero headline rises line by line from under a mask — y 110% → 0, 0.9 s, stagger 0.12, on the house ease.


- 01
Google Calendar as the CMS
Working blocks minus busy events become bookable slots: 30-minute step, 15-minute buffer, 60-day horizon, Europe/Prague.
- 02
Booking wizard
Service → day → time → contacts, validated with zod and confirmed by email with an .ics attachment.
- 03
No admin panel
The owner runs the studio from the calendar app she already uses. Nothing new to learn, nothing extra to log into.
- 04
CZ + RU
A full dictionary, hreflang and localised OG images — not a translation bolted on at the end.
- 05
DockNav on mobile
Navigation is a pill dock with a layoutId indicator that slides between sections instead of jumping.
- 06
Photo pipeline
Every shot is rendered to presets from 800 to 2400 px and served by width, not by hope.
Palette
- Cream#F1E7D7
- Cream 2#EFE6D5
- Panel#1B1614
- Ink#100D0B
- Stone#8C837A
- Stone 2#6F675E
Typefaces
- GeistDisplay · Text
- Geist MonoLabels

Why me — three numbers instead of a manifesto 
Lips and lash line — the service row alternates sides, price on the frame 
Brows — the third procedure, and the questions asked before booking 
Choose your time — the closing screen and the way into booking
Magic Xtal
[Industrial B2B] — [3D point cloud]