The brief
The old site could only be changed through a developer, and it had no online booking. Clients therefore called or wrote on messengers, and some enquiries got lost on the way. The brief was: a site the owner can run herself, and booking she hears about immediately.
- Change copy, prices and photos without a developer
- Show past work so it can be searched through
- Let a client book from the site, not through a messenger
- Load fast even on a phone with a weak signal
What we built
A site that looks like a clinic, not a salon
Home page, service catalogue, price list, gallery of past work, a section on courses and the legal pages. The design is restrained and clinical.
Why this way. The studio builds on the physiology of healing, not on decoration. The look should confirm that, not argue with it.

Every treatment has its own page
Brows, lips, eyeliner, special techniques and courses. Each treatment has a description, a price and a duration at its own address.
Why this way. Someone searching for powder brows should land on the powder brows page, not on a general price list.

A gallery with filters by treatment type
Sixty-six pieces of work sorted into categories. A visitor filters for brows, lips or eyeliner and does not have to scroll through the rest. Photos are uploaded straight from the admin.
Why this way. A client wants to see her own treatment, not sixty-six other people’s. A filter cuts that to a couple of clicks.

A price list changed in the admin, not by email
Sixteen treatments with price and duration. Prices also flow into structured data for search engines.
Why this way. An out-of-date price on the site costs the studio trust and pointless phone calls.

Booking that reaches Telegram
A form with a choice of service and a preferred time. The enquiry is stored in the admin and goes to Telegram at the same time. It works with JavaScript switched off.
Why this way. An enquiry the owner hears about the next day has usually been booked somewhere else.
An admin nobody sees from outside
Enquiries with statuses, services, a gallery with photo uploads, reviews, questions and answers, around sixty editable texts and free-form pages. Everything visible on the site can be edited without a line of code.
Why this way. A site you can only reach through us is a trap for the client. We would rather do the extra work and hand over the keys.
Our work in the client’s words
„I did not expect it to be possible to have a website ready by the next day at a very pleasant price, and still have my new ideas added to it along the way. Ilja, you are a treasure.“
The outcome
The owner runs the content herself, enquiries do not get lost, and pages open in tenths of a second. From the old site we carried over a portfolio of sixty-six pieces of work and the complete price list.
- Around sixty texts on the site change without a developer
- Sixty-six pieces of work in a gallery with category filters
- Sixteen treatments in the price list, each on its own page
- An enquiry reaches Telegram within seconds
- Frontend
- Next.js 16 (App Router), React 19, TypeScript
- Styling
- Tailwind CSS 4, responsive layout
- Data
- Prisma 7, SQLite
- Forms
- Server Actions with progressive enhancement
- Images
- next/image, automatic compression through sharp
- Infrastructure
- Ubuntu VPS, nginx, systemd, Let's Encrypt
- Integrations
- Telegram Bot API, Resend
When this makes sense for you too
The industry does not matter. The same approach fits anywhere at least two of these three sentences are true:
- The site’s content changes more often than you feel like emailing a developer
- Customers decide on results, and those results have to be visible
- You need to know about an enquiry straight away, not when you next open your email
Want something similar?
Tell us what the site has to do. In half an hour we settle the scope and the timing, and only then you get a price that does not change afterwards.
Arrange a consultation

