Skip to content
levitskiy.dev
Back to work
Case 01 / 03[Barbershop] — [2026]

Polyakov Barber.

Client
Fedya Polyakov, private barber — Prague, Karlín
Role
Design & Development
Stack
Vite · React 19 · TypeScript · Tailwind v4 · Framer Motion
Year
2026

A premium one-man barbershop site in Prague. Craft, not conveyor: one client at a time, film-grain black-and-white photography, and a haircut that happens as you scroll.

Polyakov Barber — Scroll morph — nine film frames cross-faded by scroll position
Scroll morph — nine film frames cross-faded by scroll position
Open fullscreen

Overview

Fedya works alone — one chair, one client, no queue. The site has to say that before a single word is read, so the layout is built around one photograph at a time and a lot of empty black.

Booking runs through Altegio: the widget opens in a modal iframe, so client data never touches my code and the page keeps a strict CSP. Services, durations and prices from 400 to 3500 Kč live in one file that feeds the price list, the booking labels and the structured data.

Three languages (CZ / RU / EN), HairSalon JSON-LD, a sitemap and production-grade security headers. Nothing here is a template: the type, the grain and the scroll choreography belong to this one barber.

Explore the real thing/demos/polyakov/

The complete site runs inside this portfolio — click through every page.

Signature animation

How it works.

The haircut is the transition. Inside a sticky 200vh section nine photographs cross-fade into one another: long hair shortens into a clean fade while the slogan rolls in a masked window beside it.

  1. 01

    Stacked frames

    Nine JPEGs sit on top of each other. Each frame's opacity is clamp(pos − i + 1, 0, 1), so exactly one cross-fade is ever in flight.

  2. 02

    Scroll is the timeline

    Scroll progress drives pos — no autoplay, no video file. Scrub back up and the haircut grows out again.

  3. 03

    Slogan roll

    A masked window rolls «Sharp Cuts → Clean Fade» in sync with the frames, so the line lands exactly on the finished shape.

  4. 04

    Film grain

    An SVG feTurbulence layer in overlay blend mode, jittered on steps(3), plus a vignette and a yellow circle behind the head — digital photos get their analogue back.

Polyakov Barber — Portfolio — a hover accordion of panels on desktop, a 3D drag-stack on mobile
Polyakov Barber — mobile
Portfolio — a hover accordion of panels on desktop, a 3D drag-stack on mobile
Explore the real thing/demos/polyakov/
Features05
  • 01

    Altegio booking

    The salon's real calendar opens in a modal iframe. Client data never passes through the site, and the page keeps a strict CSP.

  • 02

    Three languages

    CZ, RU and EN from one dictionary, with hreflang and localised metadata on every route.

  • 03

    Portfolio, two ways

    A hover accordion of panels on desktop; on mobile the same works become a stack of cards you drag through in 3D.

  • 04

    One source of truth

    Services, durations and prices (400–3500 Kč) come from a single file — the price list and the booking labels can never disagree.

  • 05

    Production hygiene

    HairSalon JSON-LD, sitemap, security headers, image budgets. The boring parts, done properly.

Design system

Palette

  • Ink#0a0a0a
  • Ink soft#141414
  • Paper#ededea
  • Mute#8a8a86
  • Line#262624
  • Accent#ffd400

Typefaces

  • Druk Wide Cyr BoldDisplay
  • InterText
Gallery04
  • Frame 01 — before the cut
    Frame 01 — before the cut
  • Frame 09 — clean fade
    Frame 09 — clean fade
  • Portfolio accordion, panel by panel
    Portfolio accordion, panel by panel
  • Works open on hover
    Works open on hover
Next project

Levitskaia

[Beauty studio] — [Text parallax]